nDiki : 文法

2009年10月23日 (金)

さくらのレンタルサーバ プレミアム申し込んだ

www.naney.org で使っているホスティングサービスは

  • SSH が使える。
  • daemon プログラムを起動しておいても怒られない。
  • cron が使える。

という点でいろいろ遊べるのだが、

  • 今の相場的にはかなり高めなのにホームが容量 100MB (メールは別に 100MB)。
  • Perl が10年以上前の Perl 5.005_03。自分で新しい Perl を入れようにも容量 100MB だと厳しい。5.005_03 だと Perl 5.6 系以降の文法が使えないし、使える Perl モジュールも限定されているので悲しい。
  • 夜中になると analog が動いてサーバが重くなる。
  • メールの送受信が遅延することがある。

などから使いづらくなってきた。 なにより容量を気にして記事を書き控えようという心理が働くのがよろしくない。 そろそろ今後を考えて他社に乗り換えようかと。

選んだのはやはり人気があって SSH も使える「さくらのレンタルサーバ」。

選んだプランは容量 10GB のプレミアム。 スタンダードでも容量 3GB でまずまずだし cron も使えるから機能的にも十分なんだけれど、1ホストあたりの収容ユーザ数により余裕があるであろう1つ上のプランにしておいた。

Web から申し込んで、風呂に入っている間に DNS 設定が反映されて SSH ログインできるように。 順次ソフトウェアインストール・コンテンツの移行とメールの設定をしてから、naney.org をこちらに切り替える予定。

スポンサード リンク
[ 10月23日全て ]

2010年10月20日 (水)

今日のさえずり: ロック方式のバージョン管理機能やっぱりお肌にあわない

2010年10月19日

2010年10月20日

[ 10月20日全て ]

2010年11月11日 (木)

Evernote 上で reStructuredText で書いてクリップボード経由で HTML

Evernote の書式機能はしょぼい。 Evernote 上でちょっとした文書を書く場合は reStructuredText 形式で書いておいて必要な時に HTML 形式などに変換したいのだが、ノートの内容に対してコマンドを実行する機能などがないのでクリップボード経由で rst2html を呼ぶようにしてみた。

Evernote for Windows 4 のノート上で全文選択して[コピー]後、以下の Perl スクリプトを実行するとクリップボードの内容に対して rst2html を実行して HTML ファイル生成後、デフォルトブラウザで開いてくれる。

 #!/usr/bin/perl
 
 use warnings;
 use strict;

 use Encode;
 use Win32::Clipboard;
 use File::Temp;

 my $clip = Win32::Clipboard();
 exit 0 unless $clip->IsText();
 my $text = $clip->GetAs(CF_UNICODETEXT);
 $text = Encode::decode("UTF16-LE", $text);
 $text =~ s/\015\012\015\012/\015\012/g;
 $text =~ s/\x{00a0}/ /g;                  # U+0020

 my $tmp_file = File::Temp->new(SUFFIX => '.rst');
 binmode($tmp_file, ":encoding(utf8)");
 print $tmp_file $text;
 system "rst2html", $tmp_file, $tmp_file . '.html';
 system "start", $tmp_file . '.html';

まずは的 Perl スクリプトなので、ファイルは一時ファイルとして作成していて削除もしていない。なお rst2html は設定ファイルで [general] input_encoding: utf-8 に設定してある。

Evernote のクリップボードテキストを処理するのに、ちょっと工夫がいる点は以下。

  • 現在の Windows 版では空行が増殖するので削除してあげる必要がある。
  • 一部空白が U+0020 (NO-BREAK SPACE) になる。

どちらもそのままだと reStructuredText 文法的におかしくなるので、変換してあげる必要あり。

HTML 版のプレビュー

  1. 全文選択
  2. コピー
  3. Perl スクリプトの実行

と3アクションあるので若干手数が必要だが、そこそこ便利。 Perl スクリプトの方は Win32::Clipboard::WaitForChange() あたりを監視するようにするともう1操作減らせるはず。

[ 11月11日全て ]

2011年1月19日 (水)

Test::More の TODO: は無意味

PerlTest::More を使ったテストを修正していて、fail するけど今すぐ直せないのがあったので TODO: { } で囲ったんだけれど何も変わらないじゃない。 あれそんな時は perldoc Test::More の TODO: BLOCK サブセクションでも TODO: { } で囲ってるじゃん。

「そもそもテストが TODO: な ブロック内だってことどうやって判定しているのよ、どんな Perl マジック?」と調べたら…… $TODO 変数設定されているか見ているだけだった(あるいは Test::More->builder->{Todo} が defined か)。 ドキュメント中の local $TODO = $why; の方が肝だった。 ああ、それは説明文するための optional な設定だと思ってたよ。

そもそも TODO: って文法的にはブロックの名前じゃなくてただのラベルか? ということで

 TODO: {
   local $TODO = $why;

   ok( foo(),       $test_name );
   is( foo(42), 23, $test_name );
 };

 {
   local $TODO = $why;

   ok( foo(),       $test_name );
   is( foo(42), 23, $test_name );
 };

でいい訳で。完全に人向けの飾りだった。

「TODO:」? あんなの飾りです。偉い人にはそれがわからんのですよ。

良い子のみんなは $TODO 多用しちゃ駄目だぞ。

2011年1月20日追記

@tokuhirom 情報より。

Test::More::todo_skip を使う場合は中で last TODO; しているので TODO: が必要。 ちなみに Test::More::skip の中では last SKIP; しているので SKIP: が必要。

今日のさえずり: 1万円たれぱんだぬいぐるみとバイバイしてきた

うんこ!

2011年01月19日

  • 08:28 1万円たれぱんだぬいぐるみとバイバイしてきた。
  • 12:28 「うんこ!」っていうのがMOE絵本屋さん大賞第1位らしい。
  • 12:31 チラッと見たらうんこが歩いてた。
  • 12:34 ビッグマックセット 590円。 (@ マクドナルド 秋葉原昭和通り店) http://4sq.com/en9GEB
  • 12:35 この歳になってもうんこに弱い。
  • 12:46 これだ。 http://amzn.to/hkQT6N 子供は絶対喜ぶ。 RT @Naney: 「うんこ!」っていうのがMOE絵本屋さん大賞第1位らしい。
  • 14:35 Test::More で TODO: {} で囲めばいいの何故だろうってソースコード見たら勘違いだった。$TODO 見てるだけなのか(あるいは Test::More->builder->{Todo} が defined か)。 #Perl
  • 14:35 Test::More での TODO: {} のブロック名は何でもよかった。 #Perl
  • 14:36 Test::More->builder->todo_start と Test::More->builder->todo_end も理解した。 #Perl
  • 14:37 @__gfx__ 今時の TODO のやり方ってどんなですか? #Perl
  • 14:45 あ、TODO: {} の TODO: ってもしかしてただのラベルか。文法的に何だろって思ってた。 #Perl
  • 14:46 @__gfx__ perldoc Test::More 通りですね。
  • 14:49 「TODO:」? あんなの飾りです。偉い人にはそれがわからんのですよ。 #Perl
  • 15:23 Test::Harness の prove に --state なんてオプションがあったんだ。 prove --state=save して以降 prove --state=failed,save すると。 #Perl
  • 15:28 RT @pomchon: 1月23日は秋葉原の歩行者天国復活の日なので、私の会社は毎年祝日となるそうです。社長が朝礼で宣言しました。
  • 16:08 ああ、こういう場合は git-cherry-pick か。
  • 16:19 ちょっとドキドキするバグ発見。
  • 18:38 あれ、今 Test::Harness::TAP って無くなっちゃったのか。TAP仕様今いずこ。 #Perl
  • 18:42 Test-Harness-2.64 には Test::Harness::TAP がある。 #Perl
  • 18:46 本題は「このテストスクリプト、Thread::async で実行しているブロックの中で is() しちゃってて TAP で吐く test number が重複しちゃってるんですけど」。 #Perl
  • 18:58 @__gfx__ とりあえず : shared な変数に結果を入れて join してからまとめて is() するようにしました。
  • 19:01 @__gfx__ perldoc Test::More 再びみてみました。ほんとだ use threads; use Test::More しましょうって書いてありますね。 #Perl
  • 19:04 use threads; use Test::More; したらサクッと直った。 TNX @__gfx__
  • 19:55 Xperiaアイコンが 3G になったり H になったりする。
  • 21:04 NTTドコモ電池パック安心サポート、スマートフォンは7月1日から要1500ポイントになるのか。4月になったらすぐもらいにいこう。
[ 1月19日全て ]

2011年7月5日 (火)

今日のさえずり: 来年は夏の文脈自由文法祭りですね

2011年07月05日

  • 08:23 http://gplus.to/naney
  • 10:28 ディスプレイアーム設置。よいよい。
  • 10:46 次は半袖でペタペタするこのアームを改善したい。
  • 10:54 次のミーティング12人か。あれ8人まで向けの部屋では。
  • 11:05 うちの開発チームなんて呼ぶのって話やっぱり出た。
  • 12:02 RT @maka2_donzoko: 明日の #shibuyapm に参加される方でまだAcme大全2010欲しい方いらっしゃるかな。10冊ほど残ってた。
  • 13:24 そういえば朝、渋谷に ODBOX があるの今ごろ思い出した。近日ぶらりしたい。
  • 13:43 塩牛丼 400円。 (@ 神戸 らんぷ亭 渋谷並木橋店) http://4sq.com/kyqBv0
  • 14:42 RT @mixi_engineers: mixi Engineers' Blog 更新しました → mixi Engineers’ Seminar #2のご報告 http://alpha.mixi.co.jp/blog/?p=3362
  • 15:00 食券印刷した。今晩のおかずは何かな。
  • 15:11 もう並んだ方がいいですよ。「なお、お食事の数に限りがございますため 無くなり次第終了とさせていただきます。」 RT @mushikabu: @Naney むむ、ここにもライバルがw
  • 17:04 ちょっとだけゾーンに入る。
  • 19:03 RT @mixi_engineers: mixi Engineers' Blog エントリ追加しました(今日は2つめ) → Apache Solr を利用した検索パッケージ Anuenue http://alpha.mixi.co.jp/blog/?p=2880
  • 19:23 なんかもう皆ぞろぞろまかないに向かっている。
  • 19:32 学食?
  • 21:03 RT @nipotan: 明日の Shibuya.pm 用にまど☆マギ T シャツを入手しようと思ったが、お急ぎ便で間に合わないかも知れないから、別の T シャツ着る。
  • 22:35 退勤。まかないパワー。
  • 22:43 明日は #shibuyapm だから皆さん今夜は perlre 丸暗記ですね? #Perl
  • 23:32 Google+ for Android って連絡先の同期つけるつもりないのかな。
  • 23:58 RT @yoshiori: 一周まわって mixi やろうぜ!! けっこう面白いよ!!
  • 25:13 来年は夏の文脈自由文法祭りですね。再来年は…… #shibuyapm
[ 7月5日全て ]

2013年9月24日 (火)

さくらのレンタルサーバメール受信時にプログラムを実行する

さくらのレンタルサーバでは mail delivery agent (MDA) に maildrop が使われているので .mailfilter に設定を書くことで、メール受信時にプログラムを実行できる(サポート対象外)。

$HOME/MailBox/<メールアカント名>/.mailfilter というファイルを作り、

 logfile "/home/<アカウント名>/var/log/maildrop/<メールアカウント名>.log"
 cc "!自分のメールアドレス"
 cc "| /path/to/my/script"
 exit

などと書き権限を 600 にしておけば、メールがきた時に自分のメールアドレスに転送するとともにプログラムを実行できる。届いたメールはプログラムの標準入力に渡される。

.mailfilter の文法チェックは次でできる。

 maildrop -V 9 .mailfilter < /dev/null
[ 9月24日全て ]

2014年3月14日 (金)

Day One のエントリを Web ページ化するサービス Publish

image:http://www.naney.org/nDiki/2014/03/14/publish-shares.jpg

日記アプリ(ジャーナルアプリ)の Day One が今週 Publish というサービスを開始した。

https://dayone.me/

Day One アプリのエントリ画面の右下の Publish のボタンを押した後の画面で「Publish」を押すとそのエントリが Publish のサーバにアップロードされて HTML5 形式になったページが公開される。

もともとプライベートのジャーナル用のアプリなので、公開サービスと連携させるのはちょっとどうなのかと思いもしたけれど、試したところ明示的に Publish したエントリがそのタイミングのみでアップロードされ、勝手に何でも同期されてしまうわけではない感じだ。そういう意味での懸念は大丈夫そう。

Publish したページは以下のような感じ。

整形済みブロックDay One アプリ上とは違い改行が反映されず auto wrap となる。また今のところ画像がインラインで表示されないとう制約がある。

Publish したページにはアカウントのプロフィールが表示されるけれども、そのアカウントで Publish したインデックスページはないので、基本独立したページができていく感じになる。

位置付け的には Evernote の共有ノートに近い。Markdown で書ける点や、公開ページへの反映を明示的にできる点で Publish の方が個人的には使い勝手がいいと思う。

エントリデータのオリジナルはあくまでもアプリ(と同期をとっている Dropbox 上など)にあり、ネットサービス側にはアップロードで送るという形式は、サービス終了で大切な日記が消えてしまうといった不安感が無くていいな。

SNS日記アプリもこんな感じでプライベート日記の一部をアップロードする形だといいと思う。Publish だと公開したものを TwitterFacebookfoursquare でシェアできるけれどもページ自体は全体公開なので、そこをその SNS 内向け公開にできるようなイメージのもので。

mixi日記TwitterFacebook など」と「BlogWeb 日記など」との間あたりのポジションで、両方使っていると利用シーンがちょっと少ないかもとは思う。ただそれらと比べて(機能的にも心理的にも)カジュアルに更新をかけられるので、リアルタイムにアップデートしていくようなイベントエントリを書くのに使うのにいいのかなと思う。

ノート:

  • Publish したエントリについて「Remove Publish Page」をすると公開ページを消すことができる。その後同じエントリを再度 Publish した場合は別の URL が割り当てられる(通常の Update による更新の場合は URL は変わらない)。
  • Publish したエントリについて Publish したページを消す前に、エントリを消してしまうと Publish したページを消す手段が無くなってしまうので注意(Dropbox 上でエントリに対応するファイルを復元して Day One アプリ上で復活させ、Remove Publish Page してからあらためてエントリを削除しなおした)。 → Publish の Web サイトでサインインすれば削除可能だった。

(画像https://dayone.me/publish より)

[ 3月14日全て ]

2015年2月6日 (金)

Narrate という Day One 互換 Android アプリ

Narrate

ようやく Narrate という Day One 互換 Android アプリに出会った。大興奮。

日記アプリ(ジャーナルアプリ)の Day One という iOS アプリを愛用していて自分にとってのキラーアプリなんだけれど、残念ながら Android 版が無いし出る気配もない。日本語入力のしやすさを考えると Android デバイスでジャーナルアプリを使いたいのだけれど、Markdown ファイル + Dropbox 同期なもので代替できるものが今まで見つかっていなかった。そこでようやく出会ったのが Narrate。

なんと DropboxDay One アプリフォルダ上にあるエントリファイルと相互同期ができる。Markdown 文法をサポート・位置情報・タグ付け・写真添付機能なども Day One と同じようにサポートしており基本的な部分はほぼ同じようにエントリを書くことができる。天気情報など Day One にはあって Narrate には無いものもあるけれど、普段使いには無くても困らない範囲。Day One で書いたエントリを Narrate で閲覧・変更したり、逆に Narrate で書いたエントリを Day One で閲覧・変更するのも問題無し。

Markdown の解釈に若干の違いがあるのでそこはちょっと意識する必要あり。あと Narrate では全て Markdown として扱われる(Day One ではオプションで Markdown として解釈しない使い方も可能)が、個人的には OK。また Narrate では1行目が必ずタイトル扱いになる。2行目に空行を入れておいても Narrate で編集・保存するとその空行が無くなるという仕様になっている。

既に800強ある Day One のデータと同期させたが、データ量の面では今のところ操作感に問題は無い感じ。

そういえば最初、同期が終わらず泣きそうになった。一晩経っても終わらないのである。もしや何か処理できないファイルがあるのかなと思って var/Dropbox/Apps/Day one/Journal.dayone/entries/ ディレクトリ以下をみたら Emacs の auto-save ファイル (#ファイル名# というやつ)が残っていたので消してみたらビンゴで同期が完了するようになった。ふぅ。

(画像http://narrateapp.com/ より)


[ Android アプリレビュー ]

[ 2月6日全て ]

2015年5月8日 (金)

EmacsGo 環境整備

Go ベースのツール置き場を作る

Go で書かれている各種ツールを go get しておく場所を作っておく。このあたり定番のディレクトリ名が良くわからないので ~/local/golang にしておいた(~/local/go は Go 環境自体を入れてある)。

先日使い始めた ディレクトリ毎に異なる環境変数を設定してくれる direnv を使い、 ~/local/golang に移動したらここに GOPATH が設定されるようにしておき、そこで適宜 go get するようにする。

 $ mkdir ~/local/golang
 $ cd ~/local/golang
 $ echo 'layout go' > .envrc
 $ direnv allow
 $ go get -u golang.org/x/tools/cmd/goimports
 $ go get -u github.com/golang/lint/golint
 $ go get -u github.com/dougm/goflymake

今日は goimports と golint と goflymake をインストール

goimports は「gofmt + import の自動追加・削除」ツール。golint は Go 用の lint。 goflymake は名前の通り Go の Flymake ツール(on-the-fly 文法チェッカ)。

.bashrc

上の $GOPATH/bin に PATH を通しておく。

 if [ -d $HOME/local/golang/bin ]; then
     PATH=$PATH:$HOME/local/golang/bin
 fi

Emacs の設定

go-mode 自体は package.el でインストール済み(package.el は helm を入れた際に設定済み)。

以下今日いれたツールを Emacs から使う設定を追加。

 ; バッファ保存時に gofmt (あれば goimports) を実行してソースコード整形する。
 (add-hook 'before-save-hook 'gofmt-before-save)

 (let ((goimports (executable-find "goimports")))
   (if goimports (setq gofmt-command goimports)))

 ; M-x golint で golint をかけられるようにする。
 (let ((golint-emacs "~/local/golang/src/github.com/golang/lint/misc/emacs"))
   (if (file-exists-p golint-emacs)
       (progn
         (add-to-list 'load-path  golint-emacs)
         (require 'golint))))

 ; on-the-fly シンタックスチェックが動くようにする。
 (let ((goflymake "~/local/golang/src/github.com/dougm/goflymake"))
   (if (file-exists-p goflymake)
       (progn
         (add-to-list 'load-path  goflymake)
         (require 'go-flymake))))
[ 5月8日全て ]

2015年8月22日 (土)

YAPC::Asia Tokyo 2015 2日目

naney:20794290452

今日も朝から YAPC::Asia Tokyo 2015 の2日目です。まずは一杯の無限オレンジジュースからスタート。最初はトラックCから。 C の部屋に入れたのはこれが初めてです。なるほど狭め。

「Mackerel開発におけるScalaとGo、そしてPerl」 songmu @songmu 氏 #yapcasiaC

言語の特性にあわせて様々なプログラミング言語を活用しているというトーク。サーバサイドで使われているということでちょっと Scala が気になりますが、やはりここでもコンパイルが遅いという話が出ていました。

Go は小さなシングルバイナリを作れるというところがやはり大きな利点。あとはやっぱり Perlビルドなどのためのツールを作るのに便利だよねという話でした。

Perl 5.22 and You」 Ricardo Signes @rjbs 氏 #yapcasiaA

Ricardo Signes 氏のトークを聞くのは YAPC::Asia Tokyo 2013 1日目の時(記事)以来です。

前回同様 Perl の機能追加・削除についての話が中心。直観に反するような挙動が修正されるというところは言語としての完成度があがって良いなと。一方、さらに experimental として追加される文法は、ますます変態的になっていくなという印象もありました。

ランチ

今日は一人でぶらりとTFTビルへ。

「Adventures in Refactoring」 Ben Lavender @bhuga 氏 #yapcasiaA

リファクタリングを行う理由の中で「Developer Education」という話があって、理解のためにリファクタリングをしてもらうのも良いと言っていて、ああそうだよなと思いました。リファクタリングの素養はあるけれども、チームのコードは知らないという状態の時にはいいなと思います。

あとは、基本的には Martin Fowler の「リファクタリング」を読んでいれば OK な感じです。

ちょっとうつらうつらしてました。あと「カレのヒゲ」はマイクにこすれるので通訳的に要注意のようでした。

「Parallelism, Concurrency, and Asynchrony in Perl 6」 Jonathan Worthington @jnthnwrthngtn 氏 #yapcasiaA

Perl 6 における 並列・並行・非同期処理の話。 Perl 6 では言語レベルでこのあたりのサポートがしっかり入ってくるという印象でした。昨日聞いたトークといい、やはり Perl 6 が気になってきました。

Go Debugging, Profiling, and Optimization」 Brad Fitzpatrick @bradfitz 氏 #yapcasiaA

Go の各種ツールを使って時間やメモリを消費している部分を見つけてどんどん削っていく様子をライブで実演してくれました。なるほど、ちょっとしたコードでも工夫すると劇的に最適化できるみたいです。

実演中アセンブラコードをチェックしているところや、データが 1 word から 3 words で管理されているという説明などをみて、ああやっぱり Go は C/C++ 的なマシンへの近さやコンパクトさがあるよなとあらためて感じました。

「Lightning Talks Day 2」 #yapcasiaA

YAPC::Asia Tokyo 最後のトーク(になるかもしれない)となった LT は Kuniwak (@orga_chem) 氏の「Vim script性的解析の光と闇」でした。

CONBU さんが LT の時間内で設営・撤収デモまで実演していて、その素早さに驚嘆でした。まさに神業のレベルです。会期中お世話になりました。

「Wrap Up!」 Daisuke Maki @lestrrat 氏 #yapcasiaA

今年はキーノートが無いので LT が終わるとクロージングです。

今年の参加者はなんと約2,130人。今の形での開催は最後と言われている YAPC::Asia は今後どうなっていくのでしょうか。 YAPC::Asia Tokyo 2015 は「The End.」のスライドで幕を閉じました。皆さんお疲れさまでした。

YAPC::Asia Tokyo 2015 を終えて

去年の YAPC::Asia Tokyo 2014 では Go 言語の勢いを感じ、その後ちょっとした規模ですが業務ツール開発に使ってみたりしました。

YAPC::Asia Tokyo 2015 では近年になく Perl のトークを見た気がします。しかも今回は Perl 6 のコードををよく見た気がするのは気のせいでしょうか。今回はこれを機に Perl 6 にチャレンジしていきたいと思います。

今日のさえずり: 鉄道模型かハムかパールのようなものか

2015年08月22日

[ 8月22日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.063287s / load averages: 0.37, 0.54, 0.63
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker