サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
中東情勢
please-sleep.cou929.nu
do BLOCK そのブロックで最終的に評価された値を返す ようは関数の戻り値と一緒 その場で無名関数を作って即実行するような意味になるようだ $ perl -le 'print sub { 'foo' }->()' foo $ perl -le 'print do { 'foo' }' foo 使い分けはよくわからない do EXPR EXPR のファイルを読み込んで eval する 以下は同じ意味らしい do 'stat.pl'; # is just like eval `cat stat.pl`; わりと昔ながらの手法らしい モジュールの読み込みの仕組みを理解する - サンプルコードによるPerl入門 ちょっとしたツールを書く場合には便利そう 見かけた例 コンフィグファイルを読み込むモジュール use strict; use warnings; use File::Basename
bash 系の話だけど, $() とかバッククオートでコマンドを実行してその標準出力を得るさいに, そのままだと改行がなくなってしまう. そんな時は全体をダブルクオートでくくれば改行を残せる $ echo $(ls -l /tmp/) total 56 -rw------- 1 kosei wheel 849 12 7 09:13 Config-pAimbL -rw-r--r-- 1 kosei wheel 23020 12 4 22:40 debug.log drwx------ 4 kosei wheel 136 12 6 00:16 launch-8y9r7a drwx------ 3 kosei wheel 102 12 1 16:28 launch-O688DH drwx------ 3 kosei wheel 102 12 1 16:28 launch-Obe9Hd drwx-
Contributing to Chromium: an illustrated guide – Monica Dinculescu という記事が面白かったのでやってみた。Chromium へのコントリビューションのガイドということで、環境構築、コードへの手の入れ方から、ビルド、差分の送り方まで解説している記事。 題材としてはこのように、アバターのメニューに項目を追加するというもの。 さすがにパッチを送るわけにはいかないので、コードに差分をいれてビルドするところまでをやってみる。 環境構築 記事にもあるが、基本的に Get the Code: Checkout, Build, Run & Submit - The Chromium Projects の内容が最新の状態に保たれているので、これに従う。 記事中に説明があるが、この wiki に無い情報としては、以下のビルドオプションの設定がお
例えば package.json がリポジトリのルートから見て foo/ においてあり、手元での開発時は cd foo/ してから npm install (パッケージのインストール先は foo/node_modules/) なり、 npm test しているような場合。 このようなプロジェクトを CI したいという時には、以下のように -prefix や -cwd オプションを指定するとうまく動作する。travis.yml に書く例だと、 language: node_js node_js: - "0.12" install: # foo/package.json に定義されているパッケージを foo/node_modules にインストールする - npm —prefix ./foo install ./foo script: # foo/package.json で指定されているテス
Web サイト上で動作する JavaScript を修正したので、本番環境で動作確認したい。しかも IE で。こんな時は Charles というプロキシと modern.IE の仮想マシンを使うと、さくっとできる。proxy をたてて js へのアクセスをローカルに向け、modern.IE の Windows 仮想環境で動作確認できる。 以下はその手順。 本当はどんな手段でもいいんだけど、Charles は操作が簡単だった。 Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Reverse Proxy 起動後、Tools -> Map Local -> Enable Map Local をオンにすると、ローカルファイルへの置き換えのルールを追加できる。 また Proxy -> Prox
新しいバージョンがあった場合、jenkins の設定画面に通知がでる。そのリンクから jenkins.war をダウンロードできるので、それを配置するだけで良い。 念のためバージョンをつけてバイナリをとっておき、シンボリックリンクをはることにした。以下は CentOS6 での例。 $ curl -OL http://updates.jenkins-ci.org/download/war/1.551/jenkins.war $ sudo /etc/init.d/jenkins stop $ sudo mv /usr/lib/jenkins/jenkins.war /usr/lib/jenkins/jenkins.war.1.541 # 既存の war を退避 $ sudo mv jenkins.war /usr/lib/jenkins/jenkins.war.1.551 # ダウンロードした
Browserify を触ってみたメモ。 Browserify とは CommonJS のモジュールの仕組み、つまり Node.js の require をブラウザ上でも使えるようにするもの、ということでいいみたい。Readme を読む限りは、npm にあるモジュールをブラウザ上にもっていくために作られ始めたような印象をうけるが、ちまたのエントリーをみていると AMD に代わりに CommonJS でフロントエンドの依存関係の管理をする (RequireJS ではなく、Node.js 感覚で require 関数をフロントエンドで使う) ためのツールとしても使っていいようだ。 やりたいこと 複数の js ファイルの依存関係を記述したい 最終的に、依存関係を考慮した順番で、ひとつの js ファイルに結合したい 作りたいのは第三者のサイトに埋め込んでもらうスクリプト (サードパーティスクリプト
MySQL にはパーティションという機能がある。データ全体を特定の範囲ごとに小分けにしてインデックスをそれぞれ別に作ることができる機能と自分は理解している。たとえば id が 10,000 以下のものとそれ以上のものでパーティションをわけると、それぞれひとつずつインデックスが作成される。操作対象がひとつのパーティション内で完結する場合は、検索・更新・削除ともにより高速になる。全体でひとつの大きなインデックスを使うのではなく、部分ごとに小さなインデックスファイルを作成するという戦略だ。 全体のうちある特定の部分にアクセスがかたよる傾向のあるテーブルに対してパーティションをはるのが有効だ。適切な単位でパーティションをきることで、アクセスがひとつのパーティション内の小さなインデックスに収まり、更新も検索も高速に保てる。 例としてわかりやすいのはログ系のテーブルだろう。基本的に時系列に増えていくも
Friendly iFrame という、サードパーティスクリプトの呼び出し方法について調べた。手法自体はかなり古いもので、後述する iAB のドキュメントは 2008 年に出ているものだ。Google の DFP などでは現在でも使われている。 Friendly iFrame (FiF) とは サードパーティのスクリプト (広告タグや SNS のシェアボタン、ブログパーツなど) をページに埋め込む手法のひとつ。より狭義には、iAB が出す Best Practices for Rich Media Ads in Asynchronous Ad Environments (pdf) で説明されている、(主に) リッチアドのアドタグを設計・設置する際のベストプラクティス。 利点と他手法との比較 Friendly iFrame を他のサードパーティスクリプトの埋め込み手法と比較すると、ページのレ
PhantomJS で itunes の url に接続しようとするとエラーになり、デバッグしたいので方法を調べた話。 まず、SSL の通信なので、別のプロセスから tcpdump などで通信をキャプチャすることは難しい。 方法の一つとして、--debug=yes というコマンドラインオプションを渡すと、詳細なログをだしてくれるようだ。(ドキュメント には載っていないオプションだった) $ phantomjs --debug=yes crawl.js 2014-11-01T15:53:28 [DEBUG] CookieJar - Created but will not store cookies (use option '--cookies-file=' to enable persisten cookie storage) 2014-11-01T15:53:28 [DEBUG] Pha
MySQL を使っていて、datetime 型のカラムにインデックスを追加する検証をしていたが、いまいちパフォーマンスが向上しない。クエリをみてみると WHERE 句に DATE 関数を使っているものは、追加したインデックスが効いていなかった。よく考えてみると当然だが、datetime 型のインデックスを違う型で検索することはできない。例えば DATE 関数を使ったクエリが多いのであれば、関数を適用したあとの値でインデックスを作成することも原理的にはできそうだが、MySQL は対応していなかった。 ググると、RDBMS 一般でインデックスが効く演算子のことを Sargable、そうでないものを Non-Sargable と呼ぶことがあるそうだ。 Sargable - Wikipedia, the free encyclopedia あまり広く使われている用語には見えないが、内容は納得のいく
シンプルに、リモートの本家リポジトリを fetch し手元にマージするという方法。 fork したリポジトリに移動して以下を行う 本家を upstream という名前でリモートとして追加する git remote add upstream git://github.com/FOO/BAR.git git remote -v show 本家の変更を fetch git fetch upstream 本家の変更を merge git merge upstream/master 手順としてはシンプルで理解しやすい。 fork したリポジトリの master は常に本家に追従するようにしておいて、pull request を送る際には必ずトピックブランチを切ってから送るように運用すればよさそうだ。 参考 GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する - Qiita
uvbook を読もうと思って make html したら ValueError: unknown locale: UTF-8 という例外がでてビルドできなかった (dev)[12:34 kosei@mba uvbook]% make html sphinx-build -b html -d build/doctrees source build/html Traceback (most recent call last): File "/Users/kosei/.virtualenvs/dev/bin/sphinx-build", line 9, in <module> load_entry_point('Sphinx==1.1.3', 'console_scripts', 'sphinx-build')() File "/Users/kosei/.virtualenvs/dev/lib
例として www.example.com への HTTP GET のパケットキャプチャをやってみる。 $ sudo tcpdump host www.example.com and port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes 09:36:20.760358 IP 10.0.1.23.65428 > 93.184.216.119.http: Flags [S], seq 2250708012, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 938288017 ec
var img = new Image(); img.onload = function() { // event handler }; img.src = 'http://example.com/foo.png'; document.body.appendChild(img); こういうふうに動的に画像をロードして、かつ onload のイベントを取りたい場合。三行目で src 属性に url を設定した時点で即座に非同期のリクエストが飛ぶ。画像のリクエストが完了する前に次の行へ処理が移る。よって src 属性に値をセットする前にイベントリスナの設定をしなくてはいけない。 というのも、たぶん src の挙動をちゃんと理解していなくて、以下のようなコードをサンプルとしてあげているブログなどを複数目にしたので気になったという経緯。 var img = new Image(); img.src
リスティング広告のオークションがどういうふうなメカニズムになっているのか調べた。各社のヘルプページと、基礎となっている論文があったので読んだメモ。 BIng Ads Auction Explained Bing Ads Auction Explained: How Bid, Cost-per-Click and Quality Score Work Together QS (Quality Score) 広告のスコア。キーワード相関性などで決まる。ただし Bid 金額は QS に影響しない。 Ad Rank 最終的な表示順。Ad Rank の降順になる。 Ad Rank = Bid * QS CPC 実績値ではなく、クリック時に請求される課金額 CPC = Bid * Competitor’s Ad Rank / Your Ad Rank Bid 額よりは下がる Competitor’s
linux だと ps auxf or ps aux --forest でプロセスの親子関係をツリー状に表示してくれるが, mac (確認はしてないけどたぶん bsd も) に入ってる px にはそのオプションが無い. 同等のオプションはなくて, pstree コマンドをインストールするしかなさそうだ. homebrew にあるので, mac & homebrew の人はそれでOK $ brew install pstree 出る情報は ps auxf とは同じではない. $ pstree -+= 00001 root /sbin/launchd |--= 00010 root /usr/libexec/kextd |--= 00011 root /usr/libexec/UserEventAgent -l System |--= 00012 _mdnsresponder /usr/sbi
GitHub pull request builder plugin - Jenkins - Jenkins Wiki GitHub pull request builder plugin を使うと、 プルリクエストを自動でマージしてテスト 結果を GitHub の Status API で通知 プルリクエストにコメントしてテストをリトライ などということができる。 設定手順 設定手順は他のシンプルなプラグインに比べてちょっと複雑。 ボットユーザの作成 事前にボット用のユーザーを作成して、対象のリポジトリのコラボレーターとして登録しておく。このボットユーザーがプルリクにコメントしたりするので、アイコンをそれっぽくしておくと楽しい。 全体の設定 プラグイン全体の設定をする。ここの設定がデフォルトとなり、プロジェクトごとに上書きして使う。 Jenkinsの管理 -> システムの設定 -> Gi
スラッシュを考慮したマッチを行っているものを RFC 6265 準拠と呼んでいる。詳細は後述 単純に前方一致でマッチしているものをネットスケープの仕様に準拠と呼んでいる 仕様 そもそも Cookie は仕様からして揺れている。現在ある文章は以下の 4 つ。 Client Side State - HTTP Cookies Netscape が定めた文章。現在ではもとのリソースはなくなっており、第三者によってアーカイブされているものしかない。古いがものによっては依然デファクト。 RFC 2109 - HTTP State Management Mechanism Obsolated かつ Historical。1997 の文章。 RFC 2965 - HTTP State Management Mechanism Obsolated かつ Historical。2000 年の文章。Cooki
アカウントをつくる heroku toolbelt をインストールする インストール後 heroku コマンドが使えるようになる $ heroku --version heroku-toolbelt/3.2.1 (x86_64-darwin10.8.0) ruby/1.9.3 sinatra のアプリを書く Gemfile を準備する。モジュールをインストールする $ cat Gemfile source 'https://rubygems.org' gem 'sinatra' $ bundle install --path vendor/bundle vendor、.bundle は gitignore する。Gemfile.lock はバージョン管理する。 プロジェクトのルートに app.rb などを作ってアプリを書く。テンプレートは views 以下におく。今回は erb を使う。
GitHub にある perl のプロジェクトのテストを jenkins でまわす。 perl のテストは prove で実行する フロントエンドの lint, test のため grunt も導入してあり、そのジョブもつくる perl の環境は plenv + carton node は nvm で GitHub と Jenkins の接続 GitHub に push した際に hook で Jenkins に通知を送り、それをうけとった Jenkins がリポジトリを pull できるようにする。 いろいろ方法があるようだが、今回は GitHub Plugin を使う方法。 Jenkins に GitHub Plugin をインストールする GitHub Plugin - Jenkins - Jenkins Wiki Jenkins ユーザの鍵を作成 $ grep jenkins /e
設定ファイルのデバッグのために一時的に td-agent のログレベルを詳細にしたい。 fluentd(td-agent)使ってサーバ間でjsonログを転送してみる&詳細ログも出してみるテスト - ためしにやってみる系 こちらによると、/etc/init.d/td-agent を直接編集するという方法が公式サイトで説明されているという。探してみてもその記述は見つけられなかったけれど、一時的に書き換えるだけなら手っ取り早いので、この方法でいくことにした。 バージョンによって場所は違うが、/etc/init.d/td-agent 内の、次のようなスクリプトの実行コマンドを定義しているところに TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.lo
jasmine で書いた js のテストを grunt で実行できるようにして jenkins で継続的に動作させる。 Gruntfile.js まず Gruntfile.js には以下のようにする。 module.exports = function(grunt) { grunt.initConfig({ jasmine: { all: { src: 'js/source/**/*.js', options: { specs: 'js/spec/**/*.spec.js', helpers: ['js/spec/helpers/jquery-1.11.0.min.js', 'js/spec/helpers/jasmine-jquery.js'], keepRunner: true, junit: { path: 'build/jasmine-test/' } } } } }); grun
面倒くさいけど一番確実なのは iPhone 構成ユーティリティで確認する方法だと思う。 アップル - サポート - ダウンロード こちらからダウンロードし起動 iPhone を接続 左カラムの LIBRARY -> Devices から接続したデバイスを選択 上部にある Export ボタンでデバイス情報を出力 これでデバイス情報の XML ファイルが出力される。この中からなんとかみたいアプリの情報を探さなければならない。 CFBundleDisplayName という要素にデバイスで表示されるアプリ名が入る。 <key>CFBundleDisplayName</key> <string>FooApp</string> CFBundleURLSchemes にそのアプリの URL スキームが入る <key>CFBundleURLSchemes</key> <array> <string>f
which を使う 最初に思いついた方法. if [ `which SOME_COMMAND` ]; then echo 'found' fi # 一行で which SOME_COMMAND > /dev/null 2>&1 && echo 'found' type を使う OSに付属するシェルスクリプトを読んで技術を盗む(1/2) - @IT で紹介されていた方法. コマンドは違うが考え方は上記と同じ. if type logger > /dev/null 2>&1; then LOGGER="logger -s -p user.notice -t dhclient" else LOGGER=echo fi command -v を使う rvm がこういうふうにやっていた. なぜ builtin command というふうにわざわざやっているのかがよくわからない. command って
use と require のちがい perldoc -f use より、 It is exactly equivalent to BEGIN { require Module; Module->import( LIST ); } とのこと。 BEGIN ブロックの中で require しているので、つまりコンパイル時に評価されるということ。コード中のどこで use してもコンパイル時に読み込み処理が行われる。逆に conditional にモジュールを読み込みたい場合は require を使う。 requrie と同時に import も行う。Exporter の import メソッドを想定していて、Exporter によってエクスポートされた関数を呼び出し側の名前空間に import する。import 関数は別に予約語でもないし、特別扱いもされていない。モジュールがたまたま (Ex
Sender Policy Framework. メール送信者の認証方法のひとつ. 正しい送信者であることを認証してスパム・フィッシングを防ぐのが目的 方式 メール受信側のクライアントが以下の方法で認証を行う. メールヘッダの from から送信元のドメインを取り出す 上記ドメインの dns の spf レコードを問い合わせる そのドメインの spf レコードに定義されている ip にメール送信元の ip アドレスが含まれるかをチェックする. spf レコードの指定例 example.com への指定は, すべての ip が無効になる. このドメインからはメール送信はおこなっていないという表明. 残りの 2 つは 192.0.2.1 は valid. それ以外は無効という指定方法. all の前の - は, 当該ドメインの送信メールサーバとして認証しないという意味になる. + は逆に認証す
送信だけできるよう postfix を設定する。postfix は最初からインストールされていたっぽいが、なければ sudo yum install postfix でいいはず。 /etc/postfix/main.cf を編集する。 ## すでにある項目を編集 myhostname = foo.bar.com mydomain = foo.bar.com myorigin = $mydomain ## ファイル末尾に追記 # SMTP-Auth configuration smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_dest
NAT でゲスト OS の IP を固定し、ホスト OS の hosts でその IP を指定するという方針。 NAT Gateway Address を確認する /Library/Preferences/VMware Fusion/vmnet8/nat.conf に仮想ルータの IP が記述されているので確認する。以下のような行をみればよい。VMWare 特有な手順はここだけ # NAT gateway address ip = 192.168.112.2 ゲスト OS のネットワーク設定から IP を固定する デフォルトではおそらく DHCP になっているので static にする GATEWAY には先ほど調べた NAT Gateway Address の ip を設定する IPADDR には固定したい IP を記述 たとえば CentOS の場合このようにする。これは 192.16
次のページ
このページを最初にブックマークしてみませんか?
『Please Sleep』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く