読者です 読者をやめる 読者になる 読者になる

vim-jp や emacs-jp にログインしてみる話

Vim Emacs

( ´_ゝ`)ノシ
yoshitia です。
asciidoctor 試してみたくてこの記事書いています。
markdownでもはてな記法でも多少手直ししてからでないと
駄目っぽいな・・・。

記事の内容自体は vim-jp や emacs-jp に参加する時の話です。


目次

1. 従来のログイン先

どちらも facebook の登録が必要になります。

1.ex facebook を登録したくない人向け

google で ``vim-jp lingr facebook`` の検索結果を探したら見つかります。
(直接方法を書かないのは spam対策のためです。)

技術系の webサービスfacebooktwittergithub のどれかを利用していることを
前提としていることが多いです。
個人的には登録しておくことをおすすめします。

2. 最近?できたログイン先

2.0.1 lingr登録に facebookアカウントが必要な件

実際、新規参加を希望する方の中で2~3人に1人は相談される鉄板の話題です。

2.0.2 vim-jp ・ emacs-jpの取り組み

lingr 以外に利用できるチャットサービスを模索中の様です。

2.1 vim-jp

2016年8月現在、 vim-jp は vimrc読書会(毎週土曜日、23時開催)を
gitterの vim読書会部屋 で行っています。
ここは、 twiter か githubアカウントでログイン可能です。

2.2 emacs-jp

emacs-jpは emacs-jp slack の利用を始めているようです。
こちらはリンク先から登録するメールアドレスを入力、
送られてきたメールから登録を行います。

Vimとサクラエディタでcsvに立ち向かう正規表現

Vim windows

( ´_ゝ`)ノシ

yoshitiaです。

夏になったのでトップの画像変えなきゃと思いつつ秋を迎えそうです。

 

タイトルの話ですが、DBとかでテスト用データ作る時、

csvを軽く編集したい、そういうことありますよね。

 

で、大量データは自動生成するとして

作った後に微妙に修正したい箇所が出来た時、

直接編集したい、そういうのありますよね?

 

でも投入するデータのcsvが1行数百カラムだったり、

複数の項目に入る文字数が均一でなくてレコードごとに

目的のカラムの位置が異なる。

 

(ノ`Д´)ノ彡┻━┻ としたくなりますが

お仕事だとそうはいかないわけで。

 

そこで検索のシンタックスハイライトを利用して

カラムの位置を特定して作業を楽にします。

 

サクラエディタの場合だと

検索で正規表現を使用するチェックを入れてから

 

^[^,]*,([^,]*,){2}

 

を検索窓に入力して実行します。

書いてる例の正規表現の意味は

^[^,]*,が行頭から一つ目のカンマまでの文字列を検索対象にしていて

([^,]*,){2}は()の中の検索対象の{n}回繰り返しを検索対象にしています。

例の場合はカンマ以外の文字列とその後ろに付くカンマのセットの2回繰り返しが検索対象です。

 

この2つを繋げると、

「行頭からcsvの3カラム目までを検索対象にする」正規表現になります。

{}の数字を増減させると検索対象になるカラム数を調節できます。

 

Vimの場合だと

 

\v^[^,]*,([^,]*,){2}

 

これを/の入力後に入力します。

頭に\vが付く以外はサクラエディタの場合と同じです。

 

Excelcsvは色々とつらいので

csvはなるべくテキストエディタで編集したいですよね。

 

Happy Vim Life!

Netezzaのメモ。

Oracle Netezza

( ´_ゝ`)ノシ

最近記事書くのご無沙汰なyoshitiaです。

Netezzaについてちょっとだけメモを書く。

Oracleのlistagg関数、すごく便利ですね。

TEST table

NO | WORD

--------------

1    | Apple

2    | Ball

1    | Cat

1    | Dog

2    | Egg

 

---------------------------------------

SELECT

    No

  , LISTAGG('WORD',', ')    AS RESULT

FROM

    TEST

GROUP BY

    NO;

---------------------------------------

 

NO | RESULT

-------------------

1    | Apple, Cat, Dog

2    | Ball, Egg

 

---------------------------------------------------

netezzaだとgroup_concatという関数があるみたい。

(デフォルト関数ではない。導入方法は下記リンク) 

Netezza: SQL and Admin: Netezza: create UDX concatenating row values into coma delimited string GROUP_CONCAT

 

ただし、マルチバイト文字非対応らしく、扱う値が日本語だと文字化けする。

コードはC++みたいだけどC++力が無いのでどう修正したらいいのかわからないのがつらい。

新しく使うなら日本語を扱わない様にデータ用意するしかないんだろうなぁ・・・。

 

Ubuntuでのfcitx+vim or emacsの日本語インライン入力の話。

( ´_ゝ`)ノシ
yoshitiaです。
使いたいソフトの関係でLinuxPCのOSを
Arch LinuxからUbuntu Server 14.04に変更しました。
vim: version 7.4.1747
emacs: version 24.5.1

Linuxだと毎回日本語周りで面倒が起きるわけで。
今回も色々あったので対処した記録をここに残します。

インライン入力って何よ?

PCで日本語入力を行う時、
EnterやC-mで確定させる前に
下線と一緒に入力した文字が表示されているアレです。

Linuxでは上手く設定されていないと
Enterで確定させるか変換の為にスペース押したりしないと
「何を入力しているのか見えない」
つらい。
この記事はそれについての話。

fcitx+vim or emacs(端末)での日本語インライン入力

システム>fictx設定>アドオンタブ>詳細チェックボックスをチェック。
PC再起動。

fcitx+gvimでの日本語インライン入力

このあたりが原因らしい。
github.com
Ubuntuだと /usr/share/applecations あたりにGVim(gvim.desktop)があるので
プロパティから

gvim -f %F

vim -gf %F

に修正するとインライン入力が表示される。

fcitx+emacs(gui)での日本語インライン入力

この記事のやり方でいけそう。
mochalog.hatenablog.com

最後に

流石に何回もやってると対処法探すまでの時間が短くなってて草。
何故fcitxだけか?親指シフト使いたいからですハイ。

VimやEmacsのコマンド入力とかの話。

Vim Emacs

( ´_ゝ`)ノシ
yoshitiaです。
backspace.fmのVim-side#002を聞いて久しぶりにスパルタンVimを読み返しました。
backspace.fm
www.kaoriya.net


pdfによると、キー配置を変えずにコマンドを増やせ、とありますが
コマンド打つのが面倒だと思うのが普通だと思います。
が、Vimのコマンド補完地味に優秀だったりする・・・。

Vimのコマンド補完

組み込みの関数は大抵省略形があります。(help見よう)

:w[rite] :q[uit] :e[dit] :vim[grep]

AFunctionという名前のコマンドがあった場合、

:AFu

くらいまで打ってタブを押すと残りを補完してくれる。

:AFunction

複数候補がある場合ステータスラインに候補を表示してくれる。

|AFunction1 AFunction2|
:AFunction

試しに:aと打ってからタブを押すといくつか表示されるはずです。
複数ある場合はまたはで候補を選択できます。
(この機能はコマンド名の大文字小文字は気にしません)

もし、何文字か入力して前方一致するコマンドが1つしかない場合は
タブで補完しなくても指定のコマンドを実行してくれます。

yoshitiaはtwit.vimを使っていてホームのタイムラインを見るとき、

:FriendsTwitter

を使いますが、
yoshitiaのVim設定だとFrから始まるコマンドはこれ1つだけなので

:Fr

とタイプしてEnterrまたは<C-m>するだけで実行できます。
(この機能はコマンド名の大文字小文字をきっちり区別して入力しないと
上手く動いてくれません)

この機能を把握していればよく使うコマンドの最低必要タイプ数を
覚えているだけでかなり楽になります。
作業用の即席コマンド名の頭数文字をホームポジションの文字で作ると
すごく便利だと思います
実際プラグインの関数はa,s,d,f,gで始まるコマンドが多いようで
左手で少ないタイプ数からコマンドを実行して
右手でカーソル移動や検索での移動をしようという思想を感じます。
(※個人の感想です。)

Emacsのコマンド補完

この辺の話はるびきちさんの本か記事で見たと思います。
記憶が怪しい・・・。
るびきち「日刊Emacs」
EmacsではM-xからコマンドを入力しますが
コマンド名が

eval-last-sexp

のようになっていて
慣れていないと

M-x eval

と入力してタブを押して
候補を確認する、とやるのが普通ですが
ハイフン区切りごとの頭2文字ずつとハイフンで
入力文字数を省略できます。
yoshitiaのEmacs設定だとeval-last-sexpを

M-x ev-la

と入力した後Enterまたは<C-m>で実行できます。
これは最初の区切りがevで始まって
次の区切りでlaから始まるコマンドが
これしかないからです。
(個々人のEmacs設定では違うこともあると思います)

ただ、なかなか最初の区切りの2文字だけで
入力できるケースが少ない気がするので
Emacsで使用頻度の高いコマンドは素直に
キーバインドに設定しちゃった方がいい気がします。

まとめ

テキストエディタに限らず
ツールの製作者が想定する使い方を理解するのが
うまく使えるようになる早道ですね。

スパゲティコードを見たので書いた。

( ´_ゝ`)ノシ
yoshitiaです。
ニコニコ動画でスパゲティコードなるネタが出てたので
それを書いた。
高画質版 とあるエンジニアのアイドルプロデュースログ 劇場版_3.Log ‐ ニコニコ動画:GINZA

#include<stdio.h>

int main(void)
{
	int month, day;
	char* m;

	printf("What month is it now? Type between 1 and 12.: ");
        scanf("%d", &month); // キーボード入力から10進数を取得

	if      (month == 1) { day = 31; m = "Jan";}
	else if (month == 2) { day = 28; m = "Feb";}
	else if (month == 3) { day = 31; m = "Mar";}
	else if (month == 4) { day = 30; m = "Apr";}
	else if (month == 5) { day = 31; m = "May";}
	else if (month == 6) { day = 30; m = "Jun";}
	else if (month == 7) { day = 31; m = "Jul";}
	else if (month == 8) { day = 31; m = "Aug";}
	else if (month == 9) { day = 30; m = "Sep";}
	else if (month == 10){ day = 31; m = "Oct";}
	else if (month == 11){ day = 30; m = "Nov";}
	else if (month == 12){ day = 31; m = "Dec";}
	else { day  = -1; m = "error";} // 取得した値が1~12以外の数か、数字でない場合

	if (m == "error")     { printf("usage: Type number between 1 and 12\n");} 
							// "使用法: 1から12までの数値を入力してください\n"
	else { printf("%s is %d days.\n", m, day);} // 出力例: Jan is 31 days.

	return 0;
}

細かい所は違う気がするが気にしない。
( ゚Д゚)ウヒョーelseifが目に痛い。
Vimで書きましたまる

2016/3/12追記
プロログPより
else { day = -1; m = "error";}をelse { day = -1:}にして
if (m == "error")をif (day == -1)にするとシンプルになるよと
赤ペン先生してもらった。
( ゚д゚ )
( ゚д゚ )
( ゚д゚ )

weblogicでlog4j.xmlを上手く読み込んでくれない時の話

Java Ant weblogic

( ´_ゝ`)ノシ
yoshitiaです。
今週はずっとAntとweblogic10.3.6使ってました。
javajavaしてます(コーヒーは飲んでいない)。
で、webアプリケーション起動時、
log4j.xmlが読み込まれてくれないorz
その対処のお話です。

2016/3/5 対処法に勘違いがあったので修正。
 

ググると大抵見つかる記事の対処方法

2016/3/4追記
log4jweblogic側で利用する場合と
webアプリケーションが利用する場合で
対処法が違ってたorz
1はwebアプリケーションがlog4jを使っている時の対処、
2がweblogic自身のログ出力でのlog4j設定

1. warファイルのWEB-INF/classesフォルダに
log4j.xmlがあれば解決
(srcフォルダの直下におけばいい?)
2. weblogicの起動時オプションに
-Dlog4j.configuration=file:/// を追加
 
( ´_ゝ`)
1はEclipseでの対処法っぽい。
が対象のプロジェクトはEclipse使わずに
直接Antでビルドを行う。
正直Eclipseに取り込む手順を知らぬ。
つまり、
【却下】
      ∧,,∧  .∧,,∧
  ∧∧(´‐ω‐`)(´‐ω‐`)∧∧
 (´‐ω‐).∧∧) (∧∧ (‐ω‐`) 
 | U (´‐ω‐`)(´‐ω‐`) と ノ
  u-u (l    ) (    ノ u-u
       `u-u' `u-u'
2はtypoしてる所があるのか上手くいかないorz
なのでそれ以外の対処をしてみた。

2はsetDomainEnv.cmdかshあたりに
LOG4J_CONFIG_FILEって変数を設定する部分が有るので
そこにxmlの場所書いておけば動く。
 
1のwarファイルのWEB-INF/classesフォルダに
log4j.xmlがあれば解決、を
srcフォルダに置く以外の方法でやってみた。
 

力技編

webアプリケーション実行時の
WEB-INF/classesフォルダに
直接log4j.xmlを配置する。
webアプリケーション実行時は
weblogicドメインフォルダ
(デフォルトならbase_domain)内の
servers/サーバ名/tmp内を探索すると
warフォルダがあって
その中をさらに探すとWEB-INF
更に中にclassesフォルダがあるので
そこに置く。
力技なのでwebアプリケーションサーバ
起動している間しかもたない。
 

ビルド時に対処編

根本的な対処法。
まずwarファイルの元になるプロジェクトの
WEB-INF/classesフォルダにlog4j.xmlを放り込む。
 次にbuild.xmlを修正する。
(元々classesタグが書いてあれば
WEB-INF/classesフォルダにlog4j.xmlを追加するだけでいける)

<war destfile="hoge.war" webxml="(web.xmlの場所)"><classes dir="(WEB-INF/classesの場所)" />
    <!-- classesタグを追加 -->
</war>

EclipseでもAntでビルドしてるならこの方法が使えるはず。
余分なファイルや格納したくないファイルが
WEB-INF/classes内にある場合は
includes="追加したいファイル"か
excludes="格納したくないファイル"を
上手く使えばいいと思う。

まとめ

AntはJava使ってるならいつかは出会うツールだと思うので
Javaの勉強をしてる人は息抜きに触ってると
幸せになれるかもしれません。
www.amazon.co.jp