Bye Bye Moore

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

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

一定値以下の値を固定値で返したい場合、配列とArray#maxでちょっと楽しく書くことができる

その発想がなかったのでメモ。一定値以下の値を固定値で返したい場合…… 例えば、値がマイナスの時、0にしたいというようなケースでは、 配列とArray#maxでちょっと楽しく書くことができます。Rubyだと ary = Array.new(10) {rand(0xf)} #=> [9, 4, 5, 6, 7,…

Integerにinstance_evalによるメソッド追加は不可能

お急ぎの方へ Integerをはじめ、数値オブジェクトはfreezeされて変更を受け付けません。 よって、instance_evalのような破壊的メソッドは適用不能となります 本文 Integerにinstance_evalによるメソッド追加は不可能らしい……という話の記録メモです。文字列…

String#internで文字列をシンボルに変換できる

String#internで文字列をシンボルに変換できます。 "ZZ".intern #=> :ZZ シンボルのまま演算するのが面倒な処理は 一旦文字列化して後でinternでシンボルに戻してあげるといった処理が可能となります。 たとえば、公式によればSynbol#nextは :ZZ.to_s.next.i…

配列をfreezeする時は、ちゃんと中身もfreezeしとく

配列をfreezeする場合は mapにfreezeメソッドを渡し中身を定数化 配列自体をfreezeし、本体も定数化 という手順を取ります。ためしに、最初の手順だけで止めると str_frozen = %w(foo bar buzz).map(&:freeze) #=> ["foo", "bar", "buzz"] str_frozen[0].fro…

リテラル系記述を何度も呼び出す場合はObject#freezeで定数化してしまうと幸せになれる

%wリテラルは微妙に遅い…? - Bye Bye Mooreshuzo-kino.hateblo.jp 以前書いたこの記事。速度面での改善を図りたい場合はObject#freezeで定数化してしまう方法が有効です。 一度定数にしてしまえば一々再生成しないのでGCにも速度にも優しくなります。 ため…

【イベントログ】ものづくりワールド2015

ものづくりワールド2015に行ってきました。 ネタとしては、 機械部品 各種製造装置 VR/AR といった塩梅。 個人的に気になったもの ARme ARmewww.arme.co.jp QRコード画像版みたいな。 アプリを起動し、所定の画像を認識させると3Dモデルが出てくるというや…

ジャパンネット銀行では、振込の中止が選択できる

何かと便利なジャパンネット銀行。 その中でも、振込日を指定して実行できる「振込予約」は特に便利ですね。さらに、振込指定日の前日24時まで…… つまり、30日指定であれば29日23時59分くらいまでであれば 振込動作自体の取り消しが可能です。 取引…

livescriptの条件判定文は程よく気色が悪い

livescriptにも、Rubyでいうところのcase文が存在します。直感的な記法は次の通り。 x = 2 str = switch x case 1 then "re:1" case 2 then "re:2" default "none"私のようなRuby文化圏の人間には気味の悪い構文なので coffeeScriptのように str = switch x …

livescriptで2と"2"を比較する際に使える記法

livescriptで2と"2"を比較する際、使える記法を紹介します。 文字を数値に転換 数値であれば、頭に+|-をつければ数値型に転換されます 2 == +'2' isとis not A is Bだの、A is not Bだのといった記述が可能です。 テストスクリプトかよって感じですが 2 is +…

procのcurry化や部分適用とcase判定文との合わせ技で似た条件判定をスマートに書く

case文、便利ですよね。 フラグ管理なんかだと重宝します。 が、ちょっと複雑な事をやろうとすると そんな時はProcを渡してあげると良くなるかもしれません 実際のところ あまり適正な例では無いのですが…… ビットフィルタかけて、任意のビットが立ってるか…

livescriptにおける関数読み出しのショートカット

(.prop) is short for (it) -> it.prop. とあるように、関数呼び出しが滅茶苦茶短くなります。 これは単体で使うものではなく、mapやeach、sort-byのような高階関数をの合わせ技で効力を発揮します。 実際のところ idと年齢が格納されたデータを idでそーと …

livescriptのCurry化

中途半端に似通ったデータを使う際有用なCurry化ですが、Livescriptでも気軽に使えます。 実際のところ 例1:カンマ区切りCSVっぽい文字列 簡単な例として、カンマ区切りCSVっぽいデータを生成したい場合を考えます。 Curry関数は"-->"と、普段の関数定義よ…

【イベントレポ】第29回Creators MeetUp

第29回Creators MeetUp (2015/06/20 15:00〜)cmu.connpass.com 第29回Creators MeetUpに参加してきました。 何気に人生初の勉強会だったりするのですが、運営サイドで参加です。*1会場は株式会社ハートビーツ様の格好良すぎる勉強会スペース。 カフェと言わ…

EnumerableにProc渡すなら外で作ってからにしましょう

Enumrableにprocオブジェクトを渡すとメソッドを渡した時のように実行してくれます。 このとき、procオブジェクト自体は外に出すか、素直にブロックを使うようにしないと、かなり遅くなります。 実際のところ 0を渡すと「A:1」、5なら「F:6」という感じの文…

livescriptのpiping記法はヤバさみがある

Javascriptはメソッドチェインみたいなことはできませんが、 livescriptではPiping記法を使って、なんやらそれっぽい記述ができます。 x = [1 2 3] |> reverse |> head #=> 3逆メソッドチェインとでもいうような奇妙なこともできます。 y = reverse <| [1 2 …

livescriptでもuptoやdowntoみたいなことができる

livescriptでもuptoやdowntoみたいなことができますデフォルトでは、1毎の加算です [1 to 10] #=> [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]by NUMで指定すれば、NUM毎の加算も可能 [1 to 10 by 2] #=> [ 1, 3, 5, 7, 9 ]downtoのときは、"by -NUM"で。 [10 to 0 …

【イベントレポ】東京おもちゃショー2015に行ってきました

東京おもちゃショー2015に行ってきました なんというか、技術系の展示会とは雰囲気が違いますね。 格好もラフな人が多い上に、小売系*1が大半を占めている印象です 面白かったもの 特急ガン エアガンの老舗、東京マルイの子供向けエアガン。 ビーズクッ…

livescriptで引数なし関数を書くときのアレコレ

livescriptには、引数なし関数を書くときの便利記法が備わっています。まず最も一般的と思われる記法は、 通常の"(args) ->"に変わり"!->"を使う方法。 f = !-> 'sampleFunc' f!これが、 var f; f = function(){ 'sampleFunc'; }; f(); こうなります。すぐに…

altJSの一、livescriptが実際恐ろしくて泣いた

livescriptはaltJSの類です。 現状、Wikipediaに雑な紹介記事がある位の知名度ですが、極めて強力なやつです。 私はcoffeeスクリプトですら恐ろしくて触れない軟弱者なのですが、 知人から受け取ったサンプルがlivescriptで記述されていたので、 読み込みが…

node-gypコンパイル時に怒られるときは素直にpythonを2.7系におとす

npmのパッケージインストール時にnode-gypがエラーを出すなら、 コンパイル時につかうPython系の不整合が問題であるケースが考えられます。 その際は"pyenv local"などでpythonを2.7系におとすと上手くいったりします。 実際のところ $ npm install npm WARN…

express4でbasicAuthをいれてみる

今回はexpress4でbasicAuthをいれてみようと思います。 身内向けアプリで新規参加者がいないような場合、こっちの方が気楽でしょう。 環境導入 express4の環境で作業します。 例に漏れず、basic-authも外部化したので別途導入しておきます。 $ npm install b…

package.jsonはちゃんと閉じないとパッケージをインストールできない。

急いでる人のための結論 エラーログに npm ERR! Failed to parse json npm ERR! Unexpected token }とあったら、package.jsonの末尾に余計なカンマが入ってます。 ちゃんと閉じましょう。 ことのあらまし express4から、express3に入っていたパッケージの内…

node.jsのテストフレームワーク「mocha」を今更試してみた

node.jsのテストフレームワーク「mocha」を今更試してみました。 導入 $ npm install -g mocha 実際のところ ディレクトリ構造はこんな感じ。 $ tree -L 2 . ├── app │ └── configtest.js ├── config │ └── default.json ├── node_modules │ ├── config └── …

Linuxカーネルのメニュー設定画面が出ないときは画面サイズを再チェックしてみる

今回の話は実にショーもない話です。Armadillo-IoT用にLinuxカーネルをビルドすべく設定画面を出そうとしたところ……画面が出ない! 特に設定いじった訳でも無いのに……ナンデ??次のようなエラーが。 $ make menuconfig config/mkconfig > config.in make -C…

nodeで設定情報等々を退避させたい場合、「config」ライブラリが使える

nodeで設定情報等々を退避させたい場合、「config」ライブラリが使えます。 導入 $ npm install config 使い方 $ mkdir config $ YOUR_EDITOR config/default.json $ cat config/default.json { "name": "shuzo" "password": "hoge" }てな感じで、ファイルを…

node.jsとpostgresで文字返すだけのHTTPサーバを立ててみる

今回の記事では、node.jsとpostgresで文字返すだけのHTTPサーバを立ててみようと思います。 普段はMySQL勢だったりするのですが…… Postgresは Herokuの標準 7つのデータベース 7つの世界で最初の項で取り上げられてる と、前々から気にはなっていたのでお勉…

jadeではインデックスつきの繰り返し文が使える

jadeでは、インデックスつきの繰り返し文が使えます。 divにidを振る場合なんかには有効ですね。 実例 h1= "title" hr for item, index in ["as", "you", "like"] h2= item p= index hr以上のものは、こうなります。 <h1>title</h1><hr/><h2>as</h2><p>0</p><hr/><h2>you</h2><p>1</p><hr/><h2>like</h2><p>2</p><hr/> 参考もと Learn Jade -</hr/></hr/></hr/></hr/>…

Imagemagickで画像情報を確認したいときはidentyfy

Imagemagickで画像情報を確認したいときはidentyfyが使えます。 実際つかうとこんな感じ。 w$ identify img/banner.jpg img/banner.jpg JPEG 1489x320 1489x320+0+0 8-bit DirectClass 42.5KB 0.000u 0:00.000名前やファイルサイズはもちろんのこと、 ファイ…

jadeのmixin機能で似たスクリプトをまとめる

mixiin機能は似た機能をまとめるときに便利なスクリプトです。 実際のところ 引数なし とくに引数があるわけではない場合、こちら。 カード表示系のページでも有効かもしれません。 mixin strong hr p strong! hr +strong +strong<hr/><p>strong!</p><hr/><hr/><p>strong!</p><hr/> 引数あり li</hr/></hr/></hr/></hr/>…

jadeの&attributes記法が、かなりつかえる

&attributes記法HTMLの要素をHashっぽい形で追加できる記法です。 div#foo(name="me")&attributes({'data':42},{'year':2015})これが <div id="foo" name="me" data='42' year="2015"> となります。ただ、この記法の真価はmixin記法と合わせる事で発揮されます。 詳しくは後日書きますが、mixinは似たモノを</div>…