Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

2015-05-01から1ヶ月間の記事一覧

DuckDuckGoで日本語等々、特定の言語で検索したい場合klオプションをくっつける

DuckDuckGoは追跡レスの検索エンジン故、基本的にユーザについて感知しません。 何もしなければデフォルトの英語&セーフサーチです。 そういうわけで、各種絞り込みには検索オプションが有効です。たとえば日本語の検索結果をゲットしたい場合を想定します…

「1」「01」と両方のパターンがあり得る場合の正規表現

まぁ考えてみれば当たり前なのですが……「1」「01」と両方のパターンがあり得る場合の正規表現は "4" =~ /[0]*\d+/ #>> 0 "034" =~ /[0]*\d+/ #>> 0 です。 "*"は0個以上、"+"は1個以上続く場合ですから、 あたまの0はあってもなくても一致します。 参…

中括弧展開式(Brace expansion)はprintfでも使える

中括弧展開式(Brace expansion)はfor文なんかでよく使う便利記法です。 ドットでつないで範囲指定もできますし、 カンマでつないで配列っぽい使い方だってできます。これ、単に実行前に展開されるだけなので……printfでも使えます $ printf "Num_%s\n" {1..…

特殊変数「$RANDOM」から乱数を得る

特殊変数「$RANDOM」から乱数を得る事ができます。 $ echo $RANDOM 8487 応用:文字列のランダム化 これを応用すると、文字列をランダムでかき乱す事ができます。 $ for i in big brother is watching you; do printf "$RANDOM $i\n"; done | sort | sed -E …

Structクラスを継承してはいけない(戒め

以前書いたStructで構造体なデータを扱う - Bye Bye Mooreという記事で class Point < Struct.new(:x, :y) def +(other_object) Point.new(x + other_object.x, y + other_object.y) end end とか書いていました。 が、公式リファレンスには 無名クラスのサ…

Rubyで標準エラーに出力するにはSTDERR

Rubyで標準エラーに出力するにはSTDERR puts "stdout" STDERR.puts "stderr" 実際のところ $ ruby error.rb stdout stderr $ cat buff.txt stdout $ ruby error.rb > buff.txt stderr $ cat error.rb puts "stdout"

Gem「railroady」でモデルを図表化する

Railroadsはgraph bizを利用し Railsのモデル関係をグラフ化してくれるgemです つかいかた gemリストに group :development, :test do gem 'railroady' end …and then run the master rake task… としてbundleした上で、必要な時に rake diagram:allとやって…

ZigbeeパケットをRubyで送ってみる

Digiから XCTU Software - Digi International てなツールは出ているのですが。 LinuxのGUIなしで送信しないといけない等々、そういった事情に合わせたものです。幸いにして、API2にも対応したruby-xbeeというgemがあるのでこれを使ってみましょう。 gem ins…

caseによってビミョーに違うメソッドを呼び出している場合の別実装

たとえば、次のようなタイプと値を指定すると特定の処理をしてくれるメソッドがあったとします。 def sortMethod(type,val) case type when :name then val.upcase when :val then val.next end end sortMethod(:name, "name") #>> "NAME" sortMethod(:val, …

「Ruby-Graphviz」で図表を楽に作る

Ruby-Graphvizは名前の通りGraphizをRubyから扱う事ができるgemです。 導入法 Graphvizを導入した上で gem install graphviz……とやればいいのですが。 OS X環境ではうまい事読んでくれないらしく require 'rubygems' gem 'graphviz require 'graphviz' と、…

until修飾子でloop系構文が不要になるケースがある

until修飾子は後置きのifみたいな感じで使える構文です。 違いは、フラグが立つまで延々と読み続けてくれること。 StringIOやSerialPortみたいな読みに行く系ライブラリでは重宝します。 実際のところ たとえば、以前扱ったN進数リテラルが混在している文字…

StringIO#eachには、FSっぽい感じで文字列を切り分ける機能がある

SringIOは標準添付でありながら、あんまり使われる所を見かけないライブラリ*1です。 これは文字列にIOクラスの挙動を持たせる便利なものです。このクラスのうち、StringIO#eachはちょっと特別な挙動をします。 引数に切り分け文字を指定してあげると、それ…

Enumerable#any?は条件が一致するか判定する

単純に、何か入っているか確認する用途にも使えますし (1..9).map.any? #>> true あるいは、ブロックを渡して条件が一致するメソッドがあるか調べることも可能。 (1..9).map.any?(&:odd?) #>> true これを応用したメソッドが、例のactive_supportに実装され…

(0xff - ...)みたいなことをやるなら、排他的論理和(XOR)を使うとメソッドチェインにできる

ZigBeeのチェックサム等々、結果から0xffを減算する処理があります。 とはいえ、一回の減算のためにメソッドチェインを崩すのも気が引けます。 こういう場合、排他的論理和(XOR)を使えば引き続きメソッドチェインできます。 XOR 0xff - 0x12 #=> 237 これは…

brew catで中身をみる

mac

OS Xの便利パッケージ管理ツールbrewでは、 パッケージのビルドレシピを確認できます。 brew cat slとやると require "formula" class Sl < Formula homepage "https://github.com/mtoyoda/sl" url "https://github.com/mtoyoda/sl/archive/5.02.tar.gz" sha…

ZigBeeパケットのチェックサムを計算するRubyスクリプト

Zigbeeパケットのチェックサムはちょっとヤヤコシイです。手順としては 接頭辞0x7eとパケット長2バイトの合計3バイトを削る 末尾1バイトも削る 残った物を一バイト毎に分けて足し合わせる 0xff - さきほどの結果 ……これがチェックサムです。 死ぬほどヤヤ…

Rubyで標準出力からデータをとる

Rubyで標準出力からデータを取る場合、STDINをよみにいけば良いです。 実際のところ パイプ経由で受け取ったデータをCurlコマンドでherokuのアプリにpushする簡単なアプリを考えてみます。 STDINからデータを読むにはgetsメソッドを使えば良いので url = %Q(…

N進数リテラル混ざった文字列を配列に切り分ける場合、scanを使ってはいけない

リテラルが混在しているものから文字を一個ごとに切り出したいとします。 この場合、ぱっと思いつくのはscanですが…… "\u0012aga\x98ga987HH".scan(/.{1}/) #=> ["\x12", "a", "g", "a", "枠", "a", "9", "8", "7", "H", "H"] と、変に気を利かせて\x98gを"…

【イベントレポ】IoT/M2M展に行ってきました

IoT/M2M展に行ってきました。 全体の雰囲気 IoTマジバブル。 ……ビッグデータ!? 生きていたのか! ユニティちゃん大躍進。中小企業ほどOculus Rift + Unity とりあえず姉さん方……素肌は晒さないで、どうぞ(迫真 ネット営業系、少し自重してください。せめ…

8進数リテラルや16進数リテラルが混在した文字列を元の16進数な文字列に置換する

SerialPortなどで16進数のパケットを受けると、 こんな感じの文字列が返ってくる事があります。 "~\u0000\u0018\x91\u0000\u0013\xA2\u0000@u" もとは16進数の数値がズラズラと並んでいるはずなのですが。 8以内の数値は8進数リテラル 9〜Fが含まれて…

月刊ムー編集部公認「オカルトかるた」で遊んでみたよ

月刊ムー編集部公認「オカルトかるた」で遊んでみました。 おもて面が文字と写真、裏は写真という構成。 フツーのカルタっぽいですが……そのネタは「オカルト」。一つ例をあげると 「ち 地底人の存在を公表したもとCIA」=>「スノーデン」 ……割と有名なネタ…

PC版のSerialPortアプリで動いて組み込み機器で動かない場合、timeoutまわりを疑ってみる

とある案件で、組み込み機器で通信を受けて彼是するアプリを開発した事があります。 いわゆる組み込みLinux関係でしかもdebianだったので楽勝だろーとrubyのSerialPort系gemをつくってチャッチャッとつくってみました。……ところが。 いざ、本番環境の機器で…

何らかの事情でgemのリストを確認できないときは「GEMNAME::VERSION」で参照してみる

人様から譲り受けた環境で、かつ固定環境のため焼きこまれているgemのバージョンが確認し辛いときがあります。 そんなときは GEMNAME::VERSIONとやればバージョンが出てきます。 少なくとも、rubugemに公式で公開されている真っ当なgemならこれで値がでてき…

sinatraでhelperを使う

sinatraでもhelperを使う事ができます。 実際のところ link_toを作ってみます。 使うもの app.rb いつものsinatraアプリに、helpersメソッドを追加。 ブロックの中身にメソッドを記述します。 require 'sinatra' require 'slim' helpers do def link_to(url,…

sinatraでmarkdownを使う(slim経由)

楽にネタアプリを作りたい場合、Railsではなくsinatraを使ったほうがいい場合も多々あります。 加えて、マークダウンみたいなのが使えれば更に試作が早くなりますよね。 今回はそんな話です。 実際のところ 画面遷移なし、コメントとGoogle.comへのリンクだ…

SlimのEmbedded_engines機能で、入力で楽をする

Slimはtiltというgemと連動しているため、 coffee scriptやsass、markdownを書くときに便利な機能を使えます。 実例 例えば、 coffee: square = (x) -> x * x markdown: #Header Hello from #{"Markdown!"} Second Line! なんてslimスクリプトだと <script type="text/javascript">(function…

Google chartで線表を作成できる

世にエンジニアの天敵多かれど、ガントチャートほど七面倒なモノは多くはないでしょう。 作業日程を正確に計算できれば、ワケないですし。WEB荒野に遣わされた効率化の使者Google様は、その辺りも宜しくやるライブラリを提供しています。 執筆ちう…… 参考も…

OSXでRaspberryPiのイメージをSDカードに書き込む

OSXでRaspberryPiのイメージをSDカードに書き込む場合、 自分でdd等々で初期化するのもいいですが、 専用ツールを使うと楽でよいです。 インスタンス導入 Rasbianの仮想イメージを入れます。 900MByteもあるので、気楽にやりましょう。 Raspberry Pi Downloa…

kill -9 の9はSIGKILLという意味

「kill -9」といえば、強制終了の定番コマンドです。 今日の今日まで、この9てのは一体なんなのか把握していなかったのですが…… これはSIGKILLというシグナルの番号なのだそうです。 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIG…

Enumerable#findにProcオブジェクト等々を渡して一致ナシの場合を楽に実装する

Enumerable#findにProcオブジェクトを渡してあげると、一致ナシの場合呼び出してくれます。 実際のところ findの引数にcallをもつオブジェクト……Procクラスとかlambdaとかを渡せばよいです。 (1..10).to_a.find( Proc.new { :none } ) {|i| i > 11} #=> :non…