よこなのへたのよこずき

noteもよろしくね

IntelliJ IDEAのabbreviationというのを見つけた

IntelliJ IDEAの色々なショートカットキー、活用出来たら色々速くなりそうだよね。
でも覚え辛かったり、組み合わせの数に限りがある中好みのキーがほかで使われていたり…
人生甘くないっぽい。

そこでabbreviationが時々便利なのではと私の中で話題に!(さっきまでこんなん知らなかった)

環境

概要

何かというと、
ある機能に対し、その名の通りabbreviation(略語)を割り当ててらくらく呼び出す
というもの。

使い方

  1. を2回叩いてSearch Everywhereをひらく
  2. abbreviationを入力する

設定の仕方

  1. + ; -> Keymap をひらく
  2. 設定したい機能にAdd abbreviationする

イメージ

GitHubCreate Gist機能にgistというabbreviationを割り当ててみた! f:id:ihcomega:20151124193155g:plain

x 2 -> gist -> return で新しいgistを作れる。

発見の経緯

Diagram機能を呼び出すショートカットキーのデフォルトが覚えづらかったので
設定変えようと思ったら緑色で囲まれたumlの文字を見つけたこと👀
f:id:ihcomega:20151124194439p:plain
なんだこれ→ぐぐるJetBrainsのページで把握( ˘ω˘)

おまけ

abbreviationっていう単語のスペルと意味を二度と間違えなくなるというメリット。

うーん、時々便利っぽい。おわり。

Scala関西Summitの関数プログラミングことはじめを復習した #scala_ks

遅ればせながらScala関西 Summit 2015の復習です。2015年8月1日(土)開催でしたw
関西に来てすぐの頃、Scalaを1文字も書いたことがないのに参加しました。

最近は遂に職場でScalaを書くことに…(震)となっている私ですが、
@kitora_naokiさんの【ハンズオン】関数プログラミングことはじめ
ものすごく分かりやすかったのを思い出し、要点を再度確認しました。

"関数型言語っぽい書き方っぽいことはほとんどやったことなく、
コード見ても何これワカランとなる人(私)"にとてもよいハンズオンだったと思います*1!!
すこーし数学の話も出てきましたが、文系数学(?)の知識だけで全然問題ないレベルで
むしろ数学さんが全力で理解を助けてくれてね、本当に助かりました。
なお、当日はScala Worksheetを使って進めていきました。

10/24追記:@kitora_naokiさんが資料アップしてくださったー!!!


はい。さて行ってみよう。
ポイントは1つで、漸化式と同じ考え方をすること!!!

def f(n: Int): Int =
  if (n == 0) 5
  else f(n - 1) + 3

さてこれ、何をしているか。Javaの頭だとぱっと見「?」となったりする…。

そこで漸化式の考え方を脳みその古い箪笥から引っ張り出してくるのだ。
結論から言うと、上は初項5、公差3の等差数列なんですね*2
高校だか中学だかで習った数学だとこういう書き方をしたはず。

a1 = 5
an+1 - an = 3

はい。どうでしょうか。私は、
はぁぁあああなるほどああうおああぁぁあああって。なりました。

例えば3番目の項を求めたいとします。
分かりやすいよう試しに上の漸化式を地道に辿ってみましょう。

a1 = 5
a2 = a1 + 3 = 8
a3 = a2 + 3 = 11

ここで話を戻してはじめに例示したScalaのコードで同じことを考えると…
さっきまで読み解きづらいと感じていた関数ですが、上の漸化式と同じことしてると考えれば

f(2)

11が返ってくる、というのもかなり納得できます。


「何をそんな初歩的なことを」とか「コードから直接それを読み取ればいいのに」とか
思われるかもしれませんが、

  • Scalaを読み解く:新しくて、チャレンジングなこと
  • 漸化式の考え方を使う:多少なじみある発想で、すんなり理解しやすいこと

なのです、私にとっては(伝わるかなぁこの違い…)。
読めんと思った未知のコードを、脳みそにある既存のフロー(?)につっこんで処理出来た感じがして
はぁぁあああなるほどああうおああぁぁあああって。なりました。
解釈の仕方を掴んだというか…。


1時間のセッションだったので他にも色々な例を出して下さいましたが、
正直さっきの一例で私のアハ体験については語り尽くすことが出来ちゃった…。

おまけに当日のノートが手記はここで途切れている状態なので(どうした)
あとは思い出せる範囲でコードだけメモ書き程度に残しておきます。
私みたいな超初心者の方、この記事が目に止まったら、何が起きているか考えて
頭の体操してみてください!w
@kitora_naokiさん、本当にありがとうございました。


def f(n: Int): Int =
  if (n == 0) 0
  else f(n - 1) + n

0からnまでの和が出せます。f(10)だったら55ですね。
n-1までの和に、nを足しているんだなぁとすんなり理解できます。
༄༅༄༅༄༅༄༅༄༅༄༅

def f(n: Int): Int =
  if (n == 0) 1
  else f(n - 1) * n

こんどは、0からnまでの積です。
༄༅༄༅༄༅༄༅༄༅༄༅

def f(n: Int): Int =
  if (n == 0) 1
  else if (n == 1) 1
  else f(n - 2) + function(n - 1)

フィボナッチ数列
༄༅༄༅༄༅༄༅༄༅༄༅

def sum(list: List[Int]): Int =
  if (list.isEmpty) 0
  else list.head + sum(list.tail)

リストの要素の和!
༄༅༄༅༄༅༄༅༄༅༄༅

def multiple(list: List[Int]): Int =
  if (list.isEmpty) 1
  else list.head * multiple(list.tail)

リストの要素の積!

並べただけですが、おしまいでーす。


✪おまけ
IntelliJ IDEAにたくさんうずまき🌀が出てきて何かと思ったら
recursiveということを教えてくれていました🌀🌀🌀🌀🌀
f:id:ihcomega:20151018173258p:plain

*1:うろ覚えですが…あくまでも関数プログラミングはじめの一歩を踏み出すためのコードですというようなことをおっしゃっていた気がします。違う観点で見ると直したくなるようなコードがあるということかもしれません。確か末尾最適化がどうとかこうとか。まぁ今の私にはその判断もつきませんすみませんすみません…

*2:たしかハンズオンの際は、ここまで簡単な例は出なかった気がします。分かりやすさのため、私が勝手に等差数列を持ち出しています〜

PyCon2015パネルディスカッションに参加した #pyconjp

10月10日(土)はPyCon 2015におじゃましました。

PyLadiesの@a_macbeeさんにお誘いいただき、
パネルディスカッションに参加させていただいたのでした('o')!!

テーマはこちらにあるとおりです。
性コミュニティメンバーで集まってわいわいおはなしするということで
@a_macbeeさんとDjango Girlsの@mamix1116さん、
そしてRails Girlsの@emorimaさんと一緒に登壇しました。


様子です。本名とか社名とか写真とか出すのも初めて…(=o=)

簡単に、ランダムに、振り返ってみようと思います。

内容

togetter.com
Togetterまとめがあります、ありがとうございます!
話したことも大体ツイートしていただけているのでこちらのまとめに入ってますが、
一番言いたいことを出だしで結構語ることが出来たのが有難かったです。
https://twitter.com/M_T_Asagi/status/652751999369244672
ちなみに、しょうもないですが以下自己紹介資料ですw

(〜'-')~10/12(月)追記~('-'〜)
当日の動画ありましたw
t.co
姿勢とか気をつけたと言った割に案の定かなりキョロキョロそわそわしていました…
ぐぬぬ
(〜'-')~追記ここまで~('-'〜)

感想

  • きっとそう感じるだろうと思ったけどやはりあっという間でした。
  • 2階席まである大きな部屋でしたが壇上から聞いている方の顔がよく見えて、
    表情や反応がうかがいやすかったのが嬉しかったです。

他コミュニティの話を聞いて思ったこと

  • みなさん国際的でした…!Java女子部も海外進出出来たら楽しそうだなぁ〜。
  • Django GirlsさんとRails Girlsさんは何度も使える初心者向けカリキュラムを
    用意してあるらしく、すげーーなんて思いました。
    同じ内容を繰り返すのって、改善を重ねていってどんどん勉強会がよくなりそうですね。

気をつけたこと

  • 姿勢をよくすること…w
    いつもとても猫背だったり、前回のJJUG CCCでLT待ちのとき足広げてて叱られたり(アカン)
    そわそわキョロキョロしてたり、声が震えたり、スライドばっか見たり
    思いを伝える上で妨げになるような行動をとりがちなので
    出来るだけそういうのは避けようと意識したつもり…では…あります…(出来てないかも)。

反省したこと

  • 空気の読み方?というんですかね。
    話したいことを伝えきれなかったり、長く喋りすぎたり…
    持ち時間を自分だけで使うわけではないというのがチャレンジングで
    あんまりうまくいかなかったなぁなんて思いますねぇ。


今書き留めておきたいことは以上ですかねー。
聞きに来て下さったみなさま、誠にありがとうございました。

また、こんなに貴重な経験をさせていただき、
誘って下さった@a_macbeeさんには感謝感謝アンド感謝です。
@mamix1116さん、@emorimaさんもありがとうございました。
そして、
PyLadiesとJava女子部を最初に繋げて下さった@maaya8585さんもありがとうございました。

うん、ひたすらありがとうございました。
今後ともJava女子部をどうぞよろしくお願いいたします。
コミュニティの壁がないイベント、また出来ると嬉しいなぁと存じます。

(割と真面目に書いたの久しぶり!とか思ったけどいつも真面目だった。)

転勤した話

退職エントリならぬ転勤エントリですが、
京都所属にしてもらいました。京都市内に住んでます。

色々と理由があって決めました~٩(•౪• ٩)


よくある質問

  • お客さんが京都にいるの? -> NO
    自社開発なのでチガウヨ
  • 京都でのプロジェクトのため? -> NO
    東京に残ったとしてもやる仕事は同じだしチガウヨ
  • とばされたの? -> NO
    一応希望を聞いていただき自分で決めたことなのでチガウヨ

割とよく東京来る(今も東京に居る)し勉強会顔出したりするので
関東のみなさまこれからもどうぞよろしくお願いいたしますー。
関西のみなさまこれからどうぞよろしくお願いいたしますー。

f:id:ihcomega:20150926202258j:plain 区役所と間違えて行った京都市役所(かなしい)

IntelliJ IDEAのContent Rootを設定する

9月27日(日)はJava女子部のGradle勉強会です。
@mike_neckさんがGitHub専用のリポジトリを置いてくださっています。
その内容が充実しているためとても勉強になるだろうと大変楽しみ!!!

で、予習の際、IntelliJ IDEAについて得た知見を書いておきます。
Content Rootという概念('o')

先に私の身に起こった事象を説明するんだけど
上のGitHubリポジトリ行くとこんな風にいっぱいフォルダやファイルがあるのね。
f:id:ihcomega:20150924073703p:plain

こいつを普通にcloneしてIntelliJ IDEAで開くとこうなった。
f:id:ihcomega:20150924073716p:plain
おう、ファイルしかない。明らかな不足・・・!

( ˘•ω•˘ ).。oஇ

何でこうなっているかというと、Content Rootが指定されてないからみたい。

✈ Content Rootとは

  • 軽くぐぐるとどうやらJetBrains用語?
  • IntelliJ IDEAのContent Root説明ページはコチラ

    上記説明ページの Basicsという部分だけ少し読んでみると
    Content Root = 一番上の階層にあるフォルダ のことみたい(イメージ通り…)
    何かひとつのモジュールを構成する全ファイルが入ったフォルダ、のように書いてある。
    なおContent Rootは複数指定できるけど、大概ひとつで十分。
    Content Rootが必要ないケース*1もあるでしょう、とのこと。

✈ Content Rootの設定の仕方

IntelliJ IDEAのバージョンは14.1.4 ULTIMATE

  1. + ;Project Structureというウィンドウをひらく
  2. Project SettingsModules+ Add Content Rootする
  3. 選ぶ f:id:ihcomega:20150924161717p:plain
    ここだよ↑

今回だとjavajo-gradleを選択して・・・
できた!
f:id:ihcomega:20150924073719p:plain

設定画面を閉じると…よい感じですね(左側Project部分のトリミング) f:id:ihcomega:20150924075652p:plain

ハッピー!でも今までこんなことなかったな・・・。

まぁまぁ。というわけで、
9月27日(日)はJava女子部のGradle勉強会です。
9月27日(日)はJava女子部のGradle勉強会です。
9月27日(日)はJava女子部のGradle勉強会です。

おしまい。

*1:たとえば、"他のモジュールに対して依存するモジュール群を提供するため"といった役割で使う時とか(参考:Modules without content roots: Collections of dependencies

Ansibleが便利だと聞いたので試そう

せろさんとかたんごさんとかあねしがよく話しているAnsible!

Homebrew使ってMacに必要なものを揃えるやつ書いた!ちょっと必要だったので!
よく分からないシェルスクリプトも書いたけどよく分からない!

github.com

本格的な(?)カックイイ使い方は知りません!!!
寝てないからか、夜中だからか、テンション高くなってしまった!おわり

初めましてfluentd!

fluentdのこと知らなすぎて
真顔で設定ファイルとにらめっこすることしか出来なかったので(・_・)
クイックスタートガイドの一部を読んだ。

✫fluentd

ログ収集用のツール。いろんなログに対応しておりプラグインがたくさん

✫使われている技術・特徴

✫fluentdイベントのライフサイクル

  1. イベントが発生し、fluentdにインプットがあるとタグを発行する。
  2. タグを識別し、マッチするアウトプットの形式(設定)を判断する。
  3. マッチしたアウトプットに合わせて適切にイベントを送信する。
    ※アウトプットしたあと、イベントに新しいタグを付与して再利用することも出来る。

✫configファイル

☁configファイルの場所

  • パッケージインストールした場合
    /etc/td-agent/td-agent.conf
  • Gemインストールした場合(インストール時に指定)
    /etc/fluent/fluent.conf

☁ディレクティブ

configファイルには6つのディレクティブを指定する。

  • source
    • インプットデータがどこからどういう方式で送られてくるか指定する。
    • typeパラメータが必須。http(http通信を行う)、forward(TCP通信を行う)を指定するのが標準的。
    • tagtimerecordというパラメータでルーティングが出来る。
  • match
    • どういう処理をするか指定する。処理の終点!
    • イベントを他システムにアウトプットするのがよくある使い方。
    • マッチするパターンが必須。マッチパターンにtagの指定がある場合のみアウトプットする。
    • typeパラメータが必須。typeはどのアウトプットプラグインを使うか指定する。file(ファイルに出力する)、forward(TCP通信を行う)を指定するのが標準的。
    • matchの記法はこちらを参照。
    • 設定ファイル内で一番最初にマッチした(上に書かれた)処理を実行し、それより下に記載した処理はマッチしても実行しない。
  • filter
    • どういう処理をするか指定する。処理の通過点!
    • matchと同様の使い方をするが、一度マッチした後も、それより下にもマッチする処理があれば全て実行する。
  • system
    • 各種設定を行う。
    • log_levelsuppress_repeated_stacktraceemit_error_log_intervalsuppress_config_dumpwithout_sourceという値が対象。
  • label
    • filterやアウトプットをグループ分けする。
    • 各パラメータにプレフィックス@が必要となる。
  • @include
    • 異なる設定ファイルの情報をインポートし再利用する。
    • ファイルパス、グロブ、URLで指定できる。

☁configファイルについてその他

プラグイン

おおまかに分類すると6種類ある。

  • Input
    ソケットを生成してログを収集したり、定期的にログを取得したりする。
  • Parser
    インプットのフォーマットを変更する。
  • Filter
    特定フィールドの値によって絞り込んだり、フィールドを追加・削除したりする。
  • Output
    結果を出力する。即時出力する(Non-Buffered)か、チャンクのキューにバッファしてから出力する(Buffered)か、一定時間毎に出力する(Time Sliced)かの3パターンある。 ※チャンク(chunk)はイベントの集まり
  • Formatter
    アウトプットのフォーマットを変更する。
  • Buffer
    Bufferedアウトプットにて、バッファの設定を行う。

✫その他

ちなみにこれ会社のwikiにも書いといたやつ…w
うすっぺらい情報だけどこれくらい分かってればとっつきやすいでしょう!
あ、あとどうでもいいけどエントリのフォントサイズあげた。