エンジニア?プログラマ?

日々考えたことやメモを書いていきます

PHPで2進数から文字列を導出する方法

時々お題に出される2進数(バイナリ)から文字列を導出する系のロジックをPHPで書いてみました。
バリデーションロジック等はそぎ落としてあります。
(PHP7.0で動作確認)

base_convertは大きな数値で利用すると正しく動かないところがミソですかね。
http://php.net/manual/ja/function.base-convert.php

<?php

function bin2str($bin)
{
    $out = '';
    $bin_parts = explode("\n", chunk_split($bin, 8));
    foreach ($bin_parts as $bin_part) {
        $out .= pack('H*', base_convert($bin_part, 2, 16));
    }
    return $out;
}

$bin = '01100111011011110110111101100111011011000110010100101110011000110110111101101101001011110110100101101111';
echo bin2str($bin);

rails generateコマンドが反応なくなる

rails generateコマンドを使っているとあるタイミングでコマンドから何も返ってこない無反応な状態になることがある。


しょうがないからCtrl+Cで強制中断すると下記のエラーが表示される状況。

^C/home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/run.rb:54:in `gets': Interrupt
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/run.rb:54:in `verify_server_version'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/run.rb:25:in `call'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/rails.rb:23:in `call'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/client.rb:26:in `run'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/bin/spring:48:in `<top (required)>'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load'
from /home/xxx/ruby/gems/2.1.0/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `<top (required)>'
from /home/xxx/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/xxx/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/yyy/bin/spring:16:in `<top (required)>'
from ./bin/rails:3:in `load'
from ./bin/rails:3:in `<main>'

 

直接の原因までは調べられてないけど、springのところでエラーが起きているし、springを止めれば問題は回避できた。

$ spring stop

その後サーバーを立ち上げれば勝手に起動します。

ちなみにRuby on Rails4.1.4です。

CentOSに最新のemacsをインストールする方法

CentOSにデフォルトでインストールされているemacsは古い(23)ので、emacs24を使いたかったらソースを取得してインストールする必要がある。

 

 まず、最新のソース(tar.gz)を以下から探す。現時点で最新の24.3を今回はインストールする。

http://www.gnu.org/software/emacs/

 

必要なライブラリをyumでインストールする。

$ sudo yum install wget
$ sudo yum install gcc
$ sudo yum install make
$ sudo yum install ncurses-devel

 

ソースを取得して解凍する。

$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.3.tar.gz
$ tar xvfz emacs-24.3.tar.gz

 

コンパイルする。configureのオプションは適宜。

$ cd emacs-24.3
$ ./configure --without-x --without-selinux
$ make

 

srcディレクトリ以下にemacsが作られる。
必要に応じてpathを通すか、make installして完了。

ListView内のButtonのイベント処理

Androidにて。

ListActivityやListFragmentでListView内にButtonがあると

クリックイベントがボタンに奪われてしまい、

ListViewの方のonListItemClick等でイベントが拾えなくなってしまう。

 

リストのクリック処理系統は一括で同じところに書きたいので、

ボタンのイベントだけボタンのイベントリスナーの方に書くのも嫌な感じがする。

 

よってボタンがイベントを受け取らずにスルーする方法。

ButtonのlayoutXMLの属性に以下を加える。

android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"

全部必要かはちゃんと検証してないけど、

どれかだけを指定してもうまくいかなかったためはまった。

サービス生み出したかったらコーディングしろ?

最近新しいサービスを立ち上げて起業したいという若者が増えている。

それ自体がいいことなのか悪いことなのかは判断しがたいが、

そういう若者に対して「そんな妄想してる暇あったらコーディングしろ」という声もよく聞くようになった。

 

パッと聞いた感じ違和感はないし、

「作るものを知らないで生み出せるわけない」と言いたいのもわかる。

 

が、この意見の背景に「コーディングしてなんぼ」という意図が含まれている

場合がちらほらあると感じるようになってきた。

 

それはどうなんだろうか。

 

元々は「起業したかったら何から始めたらいい?」との問いに対する回答であり

この一種のプログラマ至上説とも言える意見には怖さも覚える。

 

ここにプログラマが陥ってはいけない落とし穴が隠れているように思える。

 

プログラマはいくつかのプロジェクトに携わりリリースを繰り返すうちに

自分がサービスを生み出している感覚になってしまう。

プログラマがいないと何もできないじゃないか、と。

 

プログラマがいないと何もできないのは事実であるが、

それは「プログラマ」であって「あなた」ではない。

つまりプログラマはクリエイターみたいな個性は持てない。

あなたの代わりはいくらでもいるんだよ、が現実である。

 

と、ただプログラマの存在を否定したいだけじゃないかと思われるかもしれないが、

要は「役割」である。

プログラマには翻訳家のような役割があり、

実現したいことを形にするという場面で最大限の能力を発揮するべきである。

その役割において誇りを持ち、日々努力を怠らないのがあるべき姿なのではないか。

 

素晴らしいプログラマほどこの「役割」において自分の立ち位置をしっかりわきまえている印象がある。

できないことが何かを知っているから。

この立ち位置がプログラマの個性になるのではないだろうか。

 

このようなプログラマから安易に「コーディングしてなんぼ」なんていう言葉が出てくるとは思えない。

 

適材適所という言葉がある。

プログラマができることできないこと、

プログラマができることできないこと、

をちゃんと見極めた人のアドバイスを聞いていただきたい。

 

新しいサービスを立ち上げたいからコーディングをばりばり勉強中です!って言う人を見るたびにこんなことを考える。

お前はもう思考停止している

最近よく聞くけど、

「お前はもう思考停止している」ってすごく便利な否定言葉。

自分は色んなこと考えてます。色んな可能性考えてます。

一方であなたは全然考えてませんね。

だからあなたはできないんです。

 

いやいや、それただの自己正当化でしょう。

考えれば救われますって言いたいのかな?

 

思考停止はできるできないを分けるものではなく、

やるやらないを分けるだけだと思う。

 

思考停止という言葉を最初に考えた人は画期的だと思った。

自分が陥ってしまっている閉塞感への警告音。

しかし現在では、

直面してる問題を相手に丸投げするための、

単なる便利ワードに成り下がっているんじゃないだろうか。

「自信を持て」の意味

どんな内容でもいいので自信持ってる人は魅力的に見える。

という点で自信がない人はそれだけでふるいにかけられてもしょうがないと思う。

 

その一方で経験したことは必ず自信になると思う。

だってそれは自分が感じた真実なんだから。

それを否定する権利は誰にもないし、

否定されたって自分の中の真実なんだから負けるわけない。

だから自信を持てる事が全くないなんてことはないはずである。

 

ここで注意しなければいけないのは

経験と自信がずれている人は胡散臭いということ。

こういう人は少し話してると化けの皮が剥がれてきてしまう。

「自信を持て」と言われると「自信」自体を探すので

こういう人が増えてしまうのも事実。

 

結局自信側から考えるからなんかぎこちない感じになると思うんだよね。

経験側から考えればいいのに。

どういうことを経験しどういうことを感じてきたからこれから何が成し遂げられるの?

あなたについて知りたい人はみんなそれを聞きたい。

 

20年も生きてきたあなたの中には自信の元がある。

それを他人が理解できる形の自信に昇華させろ。

それが「自信を持て」の意味じゃないだろうか。

 

と、就活生を見ていて気になったことを書いてみた。