サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
cooldaemon.hatenadiary.org
なぜ、この記事を書くのか? 約9年ぶりの投稿です。9年前、情報公開が難しい会社(とあるFinTech企業)から情報公開を価値と認めてくれる会社(gumi)へ転職したため、所属企業の名前で記事を書いたり、イベントに登壇したりしていました。結果、この個人ブログに書くネタがなくなり放置していました。そして二年前、WOVN という会社に転職し、Developer から Product Owner (CSM-SM 持ってるのに Scrum Master じゃないのかというツッコミ歓迎) に役割を変え、さらに書くネタがなくなりました。 ところが、2022年9月に舌癌が発覚し、大きく私の死生観が変わったため、個人ブログにまとめてみようかと思います。私自身が私以外のがんサバイバーの方々の明るい日記に心を救われため、この記事も、少しでも、同じ境遇の誰かの励みや助けになれば幸いに思います。 伝えたいことのまと
本日(2012年5月31日)をもって、現在お世話になっている会社を退社し、明日から別の会社に入社します。 他所様に伝えるべき何かを持ち合わせてはいないのですが、私に職を紹介してくれたN氏、現職の方々、次職の方々への私信という事で慣れない筆を執りました。 現職について 参入障壁が高く競合他社が少ない、安定した収入を確保できる職場を去るにあたり、様々な葛藤がありましたが、解くべき問題の難易度が低いという理由だけで転職を決めました。ありがちな理由で簡単に詳細を予測できる内容ではありますが、少しだけ補足します。 勤続7年(グループ会社通算で10年)*1の中で、サービスを安定稼働させるために様々な試行錯誤を重ねてきました。あまり詳しい話は守秘義務があるためできませんが、俗にいう上流から下流工程まで様々な事に手を入れてきました。しかし、人間には趣味嗜好があり、私という人間がプログラミングに喜びを感じる
この記事は、Scala Advent Calendar JP 2011 の14日目です。無理を言って、二日間も枠を頂いてしまいました。 今回は、Scalaz 6.0.3 の concurrent について解説を行います。個人的には Scalaz.concurrent の主役は Promise だと思っているので、早速、その解説から行いたいのですが、Promise を理解する為には、Promise と同一パッケージ内に存在する Strategy, Effect, Actor の理解が不可欠であるため、その解説から順番に行っていきます。とは言え、これらは非常にコード量が少ないので簡単に理解できると思います。 御託はいいから、さっさとコード読ませろ!という方は、こちらをご確認ください。これを読んで意味が理解できる方は、以下の解説を読む必要はありません。 以降、掲載する動作確認用のコードには、全て
この記事は、Scala Advent Calendar JP 2011 の13日目です。 今回は、Scala STM 0.4 から導入された CommitBarrier の解説を行います。 CommitBarrier の基本 まずは、下記のコードをご覧ください。 import org.scalatest.fixture.FixtureFunSuite import scala.concurrent.stm._ import scala.concurrent.ops._ import java.util.concurrent.CountDownLatch class CommitBarrierSuite extends FixtureFunSuite { case class F(cb: CommitBarrier, ms: Seq[CommitBarrier.Member], rs: Se
下記で取り上げられているネタについてメモを残す。 Scala の Either についての考察 - scalaとか・・・ Scala勉強会第53回 (EitherやScalazのValidationについて) - Togetter Either と Scalaz Either は flatMap メソッドを持たないので for 式では使えない。for 式内で Right で処理を進めたいなら right メソッドで、Left で処理を進めたいなら left メソッドで *Projection を取得する必要がある。 def r(n: Int): Either[String, Int] = Right(n) for { x <- r(1).right; y <- r(x).right } yield x+y とはいえ、多くの場合 Right で処理を進めたい場合が多く、Left で処理を進め
クラスタリングやキューのミラーリングの詳細は、下記参照の事。 RabbitMQ - Clustering Guide RabbitMQ - Highly Available Queues RabbitMQ をクラスタリングする 今回はサーバを複数用意できなかったので、一つのサーバ上で RabbitMQ を二つ起動する。 % RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 rabbitmq-server % RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 rabbitmq-server起動したら、rabbit2 の方を一旦停止(ErlangVM は停止しない。RabbitMQ だけ停止)して、クラスタリングの設定を行ってから再起動する。 % rabbitmqctl -n rabbit2 s
iPhone/iPad/iPod で暗号化(AES256 を使用)したデータをサーバ側で復号化するのに半日ハマったのでメモ。 まず、ObjC 側。CCCrypt の解説は方々に存在しているので割愛。IV に NULL を指定しているので 0x00 が 16 Byte という事になる。 CCCrypt( kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, key, keySize, NULL, data, dataSize, buffer, bufferSize, &bufferBytes ); 次に、Perl 側。 Crypt::CBC->new( -key => $key, -literal_key => 1, -cipher => 'Crypt::OpenSSL::AES', -header => 'none', -iv =>
Scala for = Haskell do (Java の例外を Either で包んだ後の話し) が少し好評だったので、調子に乗ってちょいネタ。 for 構文を使うと match case のネストを避けられるけれど、じゃー、下記のように書けるのかと言うと… for { a <- Some(1) b <- Right(2).right } yield a "type mismatch" と怒られるハズです。何故か? 上記を map と flatMap を使った形式に変換すると下記のようになります。*1 Some(1).flatMap(a => Right(2).right.map(b => a)) Option の flatMap の型は下記の通りであり… def flatMap [B] (f: (A) ⇒ Option[B]) : Option[B] Option[B] が求められて
最近、こっそりと RabbitMQ Java Client の Scala Wrapper を書いています。 Scala から Java のライブラリを使う場合、例外処理の扱いに困るのですが、当然、RabbitMQ Java Client も例外投げまくりです。 そこで scala.util.control.Exception.allCatch を使って例外を包んでみました。*1 class ConnectionFactory (factory: MQFactory) { def connect(): Either[Throwable, Connection] = allCatch either { new Connection(factory.newConnection) } } object ConnectionFactory { def apply(setter: (Connecti
Vim の Plugin を更新がてら、Yokohama.vim #0 の頃から気になっていた Unite に入門してみました。 基本設定 一先ずインストール後に下記のようなキーマッピングにしてみました。 nmap ;; :Unite nmap ;s :Unite source<CR> nmap ;b :Unite buffer<CR> nmap ;f :Unite file<CR> nmap ;r :Unite ref/ ';' を全て Unite に捧げてます。使用頻度の高い source, buffer, file 以外は、試行錯誤中です。 Unite file でカレントファイルと同じディレクトリのファイル一覧を表示してくれるので、':e' の使用頻度が減り、下記を削除できました。 autocmd BufNewFile,BufRead,BufEnter * exec ':lcd '
久しぶりに neocomplcache を git pull したら snipMate の multiple snippets*1 に対応していたので、neocomplcache 単体に切り替えてみました。 これで、snipMate_complete.vim は、お払い箱です。 .vimrc に追加した内容 始めに、snipMate の TAB キーを模倣するため、マッピングを追加*2 imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>" smap <expr><TAB> neocomplcache#sources#snippets_complet
ScalaSTM を試してみました。正直、ライブラリ内でどのように STM を実現しているか理解していませんが、とりあえずプリントデバックしてみました。 準備 面倒なので sbt, maven 共に使いませんでした。 % curl -O http://scala-tools.org/repo-releases/org/scala-tools/scala-stm_2.8.1/0.2/scala-stm_2.8.1-0.2.jar % fsc-2.8 -classpath ./scala-stm_2.8.1-0.2.jar SampleForSTM.scala % scala-2.8 -classpath .:./scala-stm_2.8.1-0.2.jar SampleForSTM上記は、OSX + MacPorts の例であるため、適宜、ご自身の環境に読み替えてください。 サンプルコード
この記事は Scala Advent Calendar JP 2010 22 日目(12/28)です。 Scala Actor + NIO で Echo server を書いてみました。 毎度の事ですが、突っ込み添削大歓迎です。 Source 解る方用の説明をさらっと行うと、Actor は Thread Pool として利用しており、NIO 単体で利用するより高速に動作します。当然、接続毎に Thread を消費するよりも高速です。コードは、Supervisor と FSM という考え方を使って整理しています。 詳細な説明は、コード全文の後に行います。 不要な var が二カ所ありましたので削除しました。*1 import scala.actors.{Actor, TIMEOUT, Exit} import scala.actors.Actor.State.{New, Terminated
Loan pattern in cps - hano - GitHub Perl の Coro に慣れていると、Scala の限定継続は使い難いなーと思っていたら、認識を覆されたのでメモ。私の理解不足でしたと。 以下に簡単なサンプルを用意しました。 object Sample { import scala.util.continuations.{reset, shift} def main (args:Array[String]) { val alphabets = "abc" val numbers = "123" reset { val alpabet = shift { (k: Char => Unit) => alphabets.foreach(k) } // (1) val number = shift { (k: Char => Unit) => numbers.foreach
Scala で常駐する Daemon を作る用途があり、fsc が使っている方法をパクったのでメモを残す。例によって添削は熱烈大歓迎です。 ざくっと概要を説明すると ProcessBuilder 経由で別の Java VM を起動し、さっさと exit してしまえば Daemonize 完了となる。 という事で下記のような Helper を作り… import java.io.{IOException, PrintStream} import scala.tools.nsc.Properties import scala.tools.nsc.io.{Process, Path, Directory, File} object DaemonizeHelper { private lazy val tmpPath = Path(Properties.tmpDir) private lazy v
Scala を使い始めて Java 文化*1に辟易している方は絶対に使った方が良い Play framework の Tutorial を行ってみたので、そのメモを残す。Play framework は、1.1 の beta version がインストール済みであると仮定する。 Tutorial を始める前の下準備 Play framework で Scala と Scalate を使うためにモジュールをインストールする。 % sudo play install scala % sudo play install scalateOSX 環境で下記のエラーが出る場合は、環境設定から Proxy を外すなどで対処。10.5 から 10.6 へ更新した MBP では出ないが、10.6 が始めから入っていた Macmini では出た。 File "/System/Library/Framework
第五回 Erlang 分散処理勉強会ですが、皆さんにご助力頂き、無事終了いたしました。 発表者の皆様、運営にご協力頂いた皆様、会場をご提供頂いた日本オラクルの皆様、本当にありがとうございました。 懇談会について 今回は、開始時間が遅かったので懇談会を行いませんでした。 @ymotongpoo さんのご好意で少しだけ会場利用時間を延長し、雑談時間を設けさせて頂きましたが、まだまだ、皆様、話足りない様子でしたので、やはり懇談会は必須であると痛感しました。 今後は、懇談会を行えるように調整しようと考えております。 発表者について 申し訳ない事に、連投している発表者の方々がいらっしゃるので、そろそろ別の方々に発表して頂こうと考えております。 事前懇談会 今回は、今後の運営をどうしましょうか…という相談を行う場として考えておりましたので少人数で募集を行いました。 特に場所の確保を行わず、適当に集合場
Scala で XML を Parse してみたのですが、今ひとつカッコ悪いコードになってしまいました。 凄腕の Scala Hacker に添削して欲しい所です… orz import scala.io.Source import scala.xml.{Node, NodeSeq} import scala.xml.parsing.XhtmlParser object Test { def main(args:Array[String]) = { val source = Source.fromFile("/opt/local/share/scala-2.8/doc/scala-devel-docs/api/index.html") val xhtml = XhtmlParser(source) source.close val titles = List( "div" -> compa
以前、告知した通り 2010年7月28日(水) にジェミナイ・モバイル・テクノロジーズ株式会社様の会議室をお借りして Erlang 基礎勉強会の第二回目を行う事ができました。 快く会場をご提供して頂いたジェミナイ・モバイル・テクノロジーズ株式会社様、また、ジェミナイ・モバイル・テクノロジーズ株式会社様をご紹介して頂いた @takemaru_jp さん、誠にありがとうございました。特にジェミナイ・モバイル・テクノロジーズ株式会社様には、ビル入り口の看板、机、椅子、プロジェクタ、電源、WiFi、飲料(ビール含む) のご準備など様々なご協力を頂き、大変、感謝しております。 参加予約について ATND の参加予約は、全く当てにしていなかったのですが、今回は 10 名中 9 名の方にご参加頂き、ほぼ時間通りに開始する事ができました。 とは言え、席が空く事をお待ちになられていた方もいらっしゃったような
zencoding.vim 内の Snippets を覚えられなかったので neocomplcache で補完できないかと思い、下記のような Plugin を書いてみました。 http://gist.github.com/469369 需要はあまりないと思いますが晒しておきます。
vim-ref は、プラグインで拡張できる設計となっているので、試しに Twitter 検索用のプラグインを自作してみました。 と言っても、Twitter 検索を実行する適当なコマンドを Perl で自作し、プラグインの中から実行しているだけの簡単な仕組みです。 ref-twitter search_twitter.pl Net::Twitter や Term::ANSIColor を利用しているので、非常に行数は少ないのですが、Perl 環境が整っていない方は、準備として CPAN 祭りが必要です。 引数の文字コードは、UTF-8 固定です。 twitter.vim から使うには、PATH の通った場所に配置する必要があります。 twitter.vim コマンド側で出力結果にエスケープシーケンスで色を付けていたのですが、何もせずに Vim のバッファに結果を表示するとエスケープシーケンス
cdd - screen の別WINDOWのカレントディレクトリに移動する zsh スクリプト - 川o・-・)<2nd life 上記を tmux で行いたかったので cdd に二行ほど加えてみました。 diff cdd.org cdd.new 44a45 > export WINDOW=`tmux respawn-window | cut -d ':' -f 3` 47c48 < if [ "$STY" != "" ]; then --- > if [ "$STY" != "" ] || [ "$TMUX" != "" ] ; then http://github.com/cooldaemon/myhome/blob/master/bin/cdd .zshrc の中で screen 用にゴニョゴニョ行ってる箇所は、これで全て tmux で動作するようになりました。 具体的には、下記のあ
第四回 Erlang 分散処理勉強会から早や3ヶ月…、学ぼう・試そうと思っていた事が思うようにできない日々を悶々と過ごしておりましたが、何とか時間を作って Erlang linkd-in driver を試すために Lua を組み込んでみました。 Source Code cooldaemon's erluna at master - GitHub 何が出来るのか? とても行数は少ないのですが、こんなんでも Erlang から Lua を呼べます。 設定ファイルを Lua で記述するような簡単な使い方は勿論、ちょっとした拡張を Lua で行うためにも利用できます。 例えば、Kai の Write/Write Conflict をサーバサイドで解決する機能を提供する計画があるのですが、幾つかの解決用アルゴリズムを Lua で記述してプラグイン化しておく事で、Erlang を知らない利用者の方で
第四回 Erlang 分散処理勉強会は、皆様のご協力のもと、無事に終了する事ができました。 発表者の皆様、運営にご協力頂いた皆様、会場をご提供頂いたオラクルの皆様、本当にありがとうございました。 運営について 会場 今回、日本オラクル様に会場をご提供頂きました。 座席数70、ディスプレイ(後部座席用含む)、マイク、無線 LAN、電源、飲料などが調っており、最高の環境を準備して頂き、感謝の言葉もありません。 入場時間の制限 雨や JR の事故が重なり、遅れる方が多数いらっしゃいました。 時間厳守で遅れた方には入場をお断りする旨、事前にオラクル様側と約束しておりましたが、オラクル社員様のご好意に甘えさせて頂き、オラクル社員様に会場(13F)と施錠された入り口(2F)を何度か往復して頂きました。 オラクル社員様も勉強会の参加者として会場で聴講していらっしゃいましたので、大変に申し訳ない事をお願い
素直な書き方をしている*1ので、コードを読んでもらえれば AMQP が何か解ります。*2 cooldaemon's RabbitFoot at master - GitHub AMQP Client の概要 RabbitFoot という名前です。内部で Net::AMQP を利用しています。 RabbitMQ 1.7.0 が対応している AMQP のクラスとメソッドにだけ対応しています。具体的には下記の通りです。 Exchange Declare, Delete Queue Declare, Delete, Bind, Unbind Basic Publish, Consume, Get, Ack, Recover, QoS Tx Select, Commit, Rollback Multi Channel に対応する事が面倒だったため、Single Channel で動作します。*3 逐
以前、AMQP と RabbitMQ を学ぶために RabbitFoot という名前の Perl 版のクライアントライブラリを作成したのですが、非同期化して欲しいと要望を頂いたので、AnyEvent と Coro を利用してみました。 AnyEvent と Coro は、今回、初めての利用となるため、識者からの厳しいツッコミがあると嬉しいです。 cooldaemon's RabbitFoot at master - GitHub Consume 用の Channel を五つ、Publish 用の Channel を一つ開き、Channel 間でメッセージを送受信する例は、下記の通りです。 use Coro; use RabbitFoot; my $rf = RabbitFoot->new()->load_xml_spec( '/path/to/fixed_amqp0-8.xml', )->
Erlang 基礎勉強会で、Emacs 使いの方々が少し羨ましかったので、真似して MacVim 上で Vimshell から erl コマンドを実行してみました。 ちなみに、今回使用したのは MacVim-KaoriYa の 20090802 版です。 Vimshell の準備 MacVim-KaoriYa 20090802 版は、テストリリース版と異なり vimproc.vim が同梱されていないので、下記から vimproc.vim を取得します。 Shougo's vimproc at master - GitHub 取得した vimproc.vim は、/Applications/MacVim.app/Contents/Resources/vim/runtime/autoload/ 配下に設置します。*1 OSX 10.4 を利用している場合、/usr/lib 配下に libut
使い勝手や速度を論じる以前の問題で、BSJSONAdditions のみ下記の JSON を Parse 可能という残念な状態でした。 下記 JSON は、LDR の /api/subs の結果です。 [ { "icon":"http://image.reader.livedoor.com/img/icon/default.gif", "link":"http://clip.livedoor.com/hot/", "subscribe_id":13060851, "unread_count":200, "folder":"ニュース", "tags":[], "rate":0, "modified_on":1251679561, "public":0, "title":"livedoor クリップ - 人気 ページ", "subscribers_count":40216, "feedlink
iPhone アプリ開発の手始めに、NSURLConnection と NSOperation を組み合わせた Simple Http Client というモジュールを作りました。 使い方は、付属のテストコードを読んで頂けると、簡単に理解できると思います。 とても行数が少ないので、作る価値があったのか謎ですが(w; cooldaemon's SimpleHttpClient at master - GitHub 初めての Objective-C なので、突っ込み&添削は大歓迎です。 機能追加しました。詳細は、SimpleHttpClient に JSON と XML のフィルタを追加しました をご参照ください。 HTML フィルタも追加しました。HTML に対して XPath が使えます。 NSOperationQueue を外部から与えられるようにしました。当たり前の事ですが、スレッドを
次のページ
このページを最初にブックマークしてみませんか?
『cooldaemonの備忘録』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く