IntelliJ IDEAのabbreviationというのを見つけた
IntelliJ IDEAの色々なショートカットキー、活用出来たら色々速くなりそうだよね。
でも覚え辛かったり、組み合わせの数に限りがある中好みのキーがほかで使われていたり…
人生甘くないっぽい。
そこでabbreviationが時々便利なのではと私の中で話題に!(さっきまでこんなん知らなかった)
❁環境
❁概要
何かというと、
ある機能に対し、その名の通りabbreviation(略語)を割り当ててらくらく呼び出す
というもの。
❁使い方
⇧
を2回叩いてSearch Everywhere
をひらく- abbreviationを入力する
❁設定の仕方
⌘
+;
->Keymap
をひらく- 設定したい機能に
Add abbreviation
する
❁イメージ
GitHubのCreate Gist
機能にgist
というabbreviationを割り当ててみた!
⇧
x 2 -> gist
-> return
で新しいgistを作れる。
❁発見の経緯
Diagram機能を呼び出すショートカットキーのデフォルトが覚えづらかったので
設定変えようと思ったら緑色で囲まれたuml
の文字を見つけたこと👀
なんだこれ→ぐぐる→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ということを教えてくれていました🌀🌀🌀🌀🌀
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
一応希望を聞いていただき自分で決めたことなのでチガウヨ
割とよく東京来る(今も東京に居る)し勉強会顔出したりするので
関東のみなさまこれからもどうぞよろしくお願いいたしますー。
関西のみなさまこれからどうぞよろしくお願いいたしますー。
区役所と間違えて行った京都市役所(かなしい)
IntelliJ IDEAのContent Rootを設定する
9月27日(日)はJava女子部のGradle勉強会です。
@mike_neckさんがGitHubに専用のリポジトリを置いてくださっています。
その内容が充実しているためとても勉強になるだろうと大変楽しみ!!!
で、予習の際、IntelliJ IDEAについて得た知見を書いておきます。
Content Rootという概念('o')
先に私の身に起こった事象を説明するんだけど
上のGitHubリポジトリ行くとこんな風にいっぱいフォルダやファイルがあるのね。
こいつを普通にcloneしてIntelliJ IDEAで開くとこうなった。
おう、ファイルしかない。明らかな不足・・・!
( ˘•ω•˘ ).。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
⌘
+;
でProject Structure
というウィンドウをひらくProject Settings
のModules
で+ Add Content Root
する- 選ぶ
ここだよ↑
今回だとjavajo-gradle
を選択して・・・
できた!
設定画面を閉じると…よい感じですね(左側Project部分のトリミング)
ハッピー!でも今までこんなことなかったな・・・。
ふえぇrootの指定が足りなかったのか・・・・・。まぁこれで一生同じことで困らない。
— サイホーンよこな (@ihcomega) September 23, 2015
まぁまぁ。というわけで、
9月27日(日)はJava女子部のGradle勉強会です。
9月27日(日)はJava女子部のGradle勉強会です。
9月27日(日)はJava女子部のGradle勉強会です。
おしまい。
*1:たとえば、"他のモジュールに対して依存するモジュール群を提供するため"といった役割で使う時とか(参考:Modules without content roots: Collections of dependencies
初めましてfluentd!
fluentdのこと知らなすぎて
真顔で設定ファイルとにらめっこすることしか出来なかったので(・_・)
クイックスタートガイドの一部を読んだ。
✫fluentd
ログ収集用のツール。いろんなログに対応しておりプラグインがたくさん。
✫使われている技術・特徴
✫fluentdイベントのライフサイクル
- イベントが発生し、fluentdにインプットがあるとタグを発行する。
- タグを識別し、マッチするアウトプットの形式(設定)を判断する。
- マッチしたアウトプットに合わせて適切にイベントを送信する。
※アウトプットしたあと、イベントに新しいタグを付与して再利用することも出来る。
✫configファイル
☁configファイルの場所
- パッケージインストールした場合
/etc/td-agent/td-agent.conf
- Gemインストールした場合(インストール時に指定)
/etc/fluent/fluent.conf
☁ディレクティブ
configファイルには6つのディレクティブを指定する。
- source
- インプットデータがどこからどういう方式で送られてくるか指定する。
type
パラメータが必須。http
(http通信を行う)、forward
(TCP通信を行う)を指定するのが標準的。tag
、time
、record
というパラメータでルーティングが出来る。
- match
- filter
- どういう処理をするか指定する。処理の通過点!
- matchと同様の使い方をするが、一度マッチした後も、それより下にもマッチする処理があれば全て実行する。
- system
- 各種設定を行う。
log_level
、suppress_repeated_stacktrace
、emit_error_log_interval
、suppress_config_dump
、without_source
という値が対象。
- label
- filterやアウトプットをグループ分けする。
- 各パラメータにプレフィックス
@
が必要となる。
- @include
- 異なる設定ファイルの情報をインポートし再利用する。
- ファイルパス、グロブ、URLで指定できる。
☁configファイルについてその他
✫プラグイン
おおまかに分類すると6種類ある。
- Input
ソケットを生成してログを収集したり、定期的にログを取得したりする。 - Parser
インプットのフォーマットを変更する。 - Filter
特定フィールドの値によって絞り込んだり、フィールドを追加・削除したりする。 - Output
結果を出力する。即時出力する(Non-Buffered)か、チャンクのキューにバッファしてから出力する(Buffered)か、一定時間毎に出力する(Time Sliced)かの3パターンある。 ※チャンク(chunk)はイベントの集まり - Formatter
アウトプットのフォーマットを変更する。 - Buffer
Bufferedアウトプットにて、バッファの設定を行う。
✫その他
- インストール方法(環境別)
- 使用例
- もっと詳しく
※他にも色々ある。
ちなみにこれ会社のwikiにも書いといたやつ…w
うすっぺらい情報だけどこれくらい分かってればとっつきやすいでしょう!
あ、あとどうでもいいけどエントリのフォントサイズあげた。