nDiki : Markdown

2014年9月4日 (木)

今日のさえずり: インターン予定席にティシューボックス配備済みなの良い

2014年09月04日

[ 9月4日全て ]

2014年9月16日 (火)

社内でも動かしている PSGI アプリケーションに OpenID 認証をつけた

Plack::App::Directory::Markdown をベースにちょっと手を入れた Markdown ビューアを使っている(記事)んだけれど、閲覧要認証なシチュエーションが出てきた。

自分のみ閲覧のものは builder で Plack::Middleware::Auth::Digest を enable にして Digest 認証をかけ、htdigest コマンドでパスワード管理とかで済ませているのだけれど、複数人に閲覧してもらうのにこれは嫌だ。人のパスワード管理はしたくない。

OAuthGoogle アカウントとかの認証を使うというのもあるけれどキーとか面倒くさいので、せっかくだし mixi OpenID を使うことにした。Perl モジュールは Net::OpenID::Consumer::Lite を使用。

とりあえずやっつけで以下のような感じ。いきなり mixi OpenID 認証させるしエラー・キャンセル処理もほとんどないし、call の中にネジこんだりしてあるので、まだまだダメダメだけれどとりあえず認証はできた。後で整理する。

セッションを使うようにしておく

 $app = builder {
   enable 'Session', store => 'File';
   $app;
 };

call の先頭に以下を追加。

 my $session = $env->{'psgix.session'};
 my $request = Plack::Request->new($env);

 unless ($session->{openid}) {
   unless ($request->parameters->{'openid.mode'}) {
     my $check_url
       = Net::OpenID::Consumer::Lite->check_url(
       'https://mixi.jp/openid_server.pl',
       $request->uri);
     return [302, ['Location' => $check_url], []];
   }

   return Net::OpenID::Consumer::Lite->handle_server_response(
     $request->parameters => (
       not_openid => sub {
         return [503, [], []];
       },
       setup_required => sub {
         my $setup_url = shift;
         return [302, ['Location' => $setup_url], []];
       },
       cancelled => sub {
         return [403, [], []];
       },
       verified => sub {
         my $vident   = shift;
         my $identity = $vident->{identity};

         # %member に閲覧 OK の OpenID を入れてある。
         if (exists $member{$identity}) {
           $session->{openid} = $identity;
           return [302, ['Location' => $vident->{return_to}], []];
         }
         else {
           return [403, [], []];
         }
       },
       error => sub {
         my $err = shift;
         return [503, [], []];
       },
     )
   );
 }

 # 以下は認証済みの場合の処理を書く。

今日のさえずり: 着席 & モードチェンジ

2014年09月16日

[ 9月16日全て ]

2014年9月19日 (金)

なんで社内 Wiki じゃなくて howm + Markdown ビューアかって?

「(自前の) Markdown ビューアじゃなくて Wiki に……」って言われた。もっとも。できるだけオープンに情報共有された方がハッピーだと常々思っているので、ちょっと耳が痛い。

なぜ Wiki じゃなくて howm + Markdown ビューアなのかの言い訳。 うーん Wiki といいつつ、もはや(ハワイ語的) WikiWiki じゃないからかな。

  • Confluence はリッチテキストエディタ中心になってしまったのでもはや wikiwiki じゃない。
  • PageName とぱっと考えるの面倒。置く階層を考えなければならないのも面倒。 howm だと日時からファイル名が決まって新規作成なので wikiwiki。
  • ブラウザベースだと Emacs でぱっと書けない。コマンドの実行手順とか。tmux でリモートホストで実行した記録をコピーして、そのまま Emacs にペーストしてちょっとメモして完了にしたい。

整理してストックしておくものはきちんと Wiki に書き直すのがもちろんいいんだけれどね……。

今日のさえずり: iPad 2 を iOS 7.1.2 にソフトウェアアップデート中

2014年09月19日

[ 9月19日全て ]

2014年10月28日 (火)

Markdownプレゼンテーションスライドを書ける reveal.js と remark のどちらが良いか

Markdown ファイル読み込んでプレテンテーションスライド Web ページにする reveal.js と remark を試してみたところ Markdown ファイルの再利用の点で reval.js の方がイケていた。

以前プレゼンテーションスライドを Markdown で書いて pandoc で reveal.js なページを生成する方法を使っていた。この方法だと1つの Markdown ファイルからスライドページと普通の HTML5 ファイルを生成できるという点が便利だった。

ただデメリットとして「作成環境で pandoc を用意しなければならないので、環境移行した時などにスライドを作る腰が重くなってしまう」というのと、「原稿を修正するたびに pandoc (make) して生成しなおして確認する必要がある」というのがあってちょっと面倒でもあった。

今は自前で Markdown ビューアを立てているということもあり、某環境では HTML5 ファイルは生成しなくても良いので、スライドページの方も Markdown ファイルを外部ソースファイルとして直接読み込む形の方が気楽かなと。

ちょうどこの間の PerlCasual #06 で @Niratama 氏が Remark というスライドショーツールを 使っていて興味が沸いたのでこのタイミングで試してみた。

reveal.js はちょっとグリグリ動くこともあって結構負荷が高い印象だったのに対して、こちらの方が軽い。また reveal.js はテーマファイルなどを読み込むので一通りパッケージディレクトリを一緒にどこかに置いておかなければならないんだけれど remark は JavaScript ファイルだけで良さそうというのも簡潔で良い。

ただ一方で Markdown ファイルで追加でプロパティを書く必要があったりして、 Markdown ファイルの再利用性はちょっと低い感じ。結局そのスライド専用の原稿ファイルにする必要がある。

一方で reveal.js だと Markdown ファイルに追加の記述をしなくてもそれなりに形になるので自分にとっては reveal.js の方が便利そう。

ということで引き続き reveal.js を使うことにした。

個人的な好みで reveal.js 2.6.2 に対して以下を style に追加してみた。これでちょっと日本語スライドが見やすくなるかな?

 .reveal .slides { text-align: left; }
 .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
    text-transform: none;
    text-shadow: none;
  }
  .reveal h1 { font-size: 3.00em; }
  .reveal h2 { font-size: 2.00em; }
  .reveal h3 { font-size: 1.50em; }
  .reveal h4 { font-size: 1.00em; }
[ 10月28日全て ]

2014年12月31日 (水)

2014年日記まとめ

年末に引き続き2014年日記まとめとして月毎にふりかえり(去年の2013年日記まとめ)。

1月 アイカツ! で始まる1年

naney:12007057735

年初からフリック入力再チャレンジを始めた。これは今年無事マスター。たしかに日本語入力についてはフリック入力が楽なので覚えて損は無いと思う。両親指の付け根が痛くなってスマートフォンが使えない体になってしまうかと思った時もあったのだけれど、これはどうも掃除の時に指を酷使したのが原因だったんじゃないかなということで、ほどなくして治った。

また、正月にデータカードダス アイカツ!初プレイしたところから、アイカツ! 活動が始まった。家ではプリキュアからアイカツ!にトレンドが移った1年。今年後半からプリパラが始まっているのだけれど果たしてどうなるのかな。

遊びといえば今年から花札やり始めた。「マンガで覚える 図解 花札の基本」という本も買ってトライ。主にこいこいをやっていた。最初の頃は結構遊んでいたけれど最近はちょっと下火。この年末年始は百人一首が流行っているところ。

ガンダムフロント東京のガンダムも今年初めてみた。結構しっかり作りこまれた印象だった。

タスク管理ツールは今年は Toodledo復活。公式 Android アプリも出たことで今は Toodledo 1本でタスク管理できている。9月に Toodledo Gold にアップグレードしてアウトライン機能も使ってみているけれども、こちらはおまけレベルかな。Gold だとタスクのノートを永続的に残せるので年に1回やるようなプロジェクトについては過去の知見を生かしていくようにするつもり。

今年出会って良かった製品の1つが「万能Jrくん」。キッチンシンクと、風呂の鏡と握りバーがピカピカになった。もうちょっと安いと嬉しいんだけどな。買う時は何個かまとめて買ってる。

2月 引き続きアイカツ!

naney:12402093015

FaceTime 用に Plantronics M55 Bluetooth ヘッドセット購入。初 Bluetooth ヘッドセット。当初はプライベートの FaceTime で使っていたけれど最近は Skype ミーティングの時に使っている。相手の声が他に漏れずにクリアに聞こえるし持っておくと便利なことがわかった。今だと Plantronics M90 Bluetooth ヘッドセット が後継モデルらしい。

2月からは東京オフィスにエンジニアが転勤してきたので馬肉を食べるなど。一緒にエヴァンゲリオンネタで盛り上がったりしつつ開発している。

第2日曜日にはアイカツ! オフィシャルバインダーを初入手。一時的にオフィシャルバインダーが入手困難な時期で結構確保にやきもきした。

3月 不正ログイン増加

1日から不正ログイン対応で休日出社。また3月20日の内定者アルバイト氏の懇親をかねた飲み会の最中にも発生して、それぞれ別々の場所で飲んでいた部署の人達と LINE グループや IRC などで連絡をしつつ対応したり、その後会社に戻ったりとバタバタしたりしたのも良い思い出ではある。

その日はついでに会社から家まで歩いて帰ってみた。今年はそのあと歩く会に2回参加したりと長距離歩く機会のある年でもあったな。

しかしまあ今年は不正ログインが非常に多い年だった。対策は進んでいるんだけれど、来年はどうなるのかな。

3月3日は mixi 10周年

あと3月中旬ぐらいから howm + Markdown + Plack でのビューアー環境を構築し始めた。ちょっとしたコードだけれど、Emacs で書けるし個人的にはかなり重宝している。 Confluence めんどい。

Emacs といえば Org Capture も3月から使い始めたのだけれど、こちらは Slack に座を奪われた。今はぼっちつぶやきは Slack にしている。 その Slack最初に試しはじめたのもこの3月なんだけれど、今は欠かせないツールになってきている。 IRC 時代に比べて便利になった。

3月から積極的にmixi日記書くようになった。11月20日から「みんなの日記」というのも追加されオープンな記事も書けるようになったのでいろいろ活用できるようになった感じ。

image:http://www.naney.org/nDiki/2014/03/03/10th_Friends_and_mixi.png

4月 歩く会に初参加

naney:13824538435

歩く会初参加。今回は「都電荒川線沿線」。道中楽しいし、達成感もあるしこれはいい会だ。11月には「渋谷から横浜みなとみらい21まで」歩いた。30km ぐらいがこの会のひとつの目安距離だということがわかった。

4月16日で転職から丸3年経過。いい感じに仕事楽しい。

切腹最中も今年初めて食べることができた。切腹沙汰になったら身代わりになってもらおう。

5月 浅草行ったり東京ディズニーシー行ったり

naney:13939532040

ついに SKK を止めることにして Google 日本語入力使い始めた。いや実際には Emacs 上ではまだ SKK を使っていて、思ったより両刀使いできているなと。SKK辞書登録に慣れてしまうとその点だけ他の IM が不便でしょうがない。

ゴールデンウィークは浅草へ。ほぼ「亀十のどら焼」を食べに行った感じだ。今度はもう少し空いている時に行っていろいろ回ろう。それとNHKスタジオパークにも行ったな。予想以上にコンテンツが充実しているので良いスポット。

仕事面ではゴールデンウィーク明けにチームに新卒エンジニアが配属された。今元気に戦力となってくれていて頼もしい。あ、今から Emacs に乗り替えてもいいんですよ。

今年買ったカメラは、防水・防塵・耐衝撃デジカメ FinePix XP70東京ディズニーシー箱根小湧園ユネッサンなどで重宝した。やはり防水デジカメは1台あると便利だな。一度修理に出したけれど気に入っているので愛用している。

今年の健歩大会東京ディズニーシー初めての TDS東京ディズニーランドより居心地が良いね。来年はまた東京ディズニーランドが良いかな。

IDC大塚家具銀座本店で買ったキッチンキャビネットが多分今年一番のお買い物。

6月 NHK おはよう日本にちょろっと出た

rimage:http://www.naney.org/nDiki/2014/06/26/0626_05_watanabe.jpg

いつぶりだろうというぐらいの朝顔の栽培をすることになった。クタッとした状態でやってきた朝顔の復活力には感動した。

例年1人で行っていた渋谷区ふれあい植物センターのホタルの夕べに、今年は家族で行ってみたのだけれど思いのほか長蛇の列だったのでたじろいだ。来年は違うところで見たいな。

そういえばマンボウが流行ったのもこの時期。

引き続き不正ログインはいろいろあって NHK おはよう日本にちょろっと出たパスワードの使い回しはやめましょう。

7月 15年以上ぶりの屋外プール

多分15年以上ぶりの屋外プールみんなペロペロしていてびっくりした。

あと会社で「日本人じゃないと思ってました。」って言われた年末部署紹介の動画でも良くわかってらっしゃる方が本名じゃなくて NANEY ってスーパーをつけてくれたので、引き続き「誰」感が演出できて嬉しい。

8月 東京モノレール車両基地見学会

naney:14619446337

会社のデスクトップ PC が故障してリプレース。最近は仕事ではローカルホスト上にはデータをほとんど置かなくなった。

東京モノレール車両基地見学会があって初めて車両基地に入った。モノレール乗車体験などができて夏休みの良い思い出になった。見学会がある時は1度は行ってみると良いと思う。

あと、8月はヱヴァンゲリヲン新劇場版の DVD貸していただいたのでエヴァンゲリオンについてプチブーム到来。新劇場版はきちんと観たことが無かったので今回が初。

8月下旬は YAPC::Asia Tokyo 2014。今年は Go・Docker あたりの学びと刺激を得ることができた。GoHaskell はやっておきたいプログラミング言語

9月 箱根旅行 2014

naney:15107952780

2014年9月12日から14日の2泊3日で箱根旅行旅行という形での箱根は多分1995年3月28日29日の時以来なので、19年半ぶり!

関東ITソフトウェア 健康保険組合の保養施設で評判の良い「トスラブ箱根和奏林」の抽選がようやく当たったので嬉しくて、もう準備やら旅行やら帰ってきてからのふりかえりやらで9月は終了。

10月 ちょこちょこ出掛ける

naney:15620343871

日本科学未来館の企画展「トイレ? 行っトイレ!~ボクらのうんちと地球のみらい」に行って「うんちのにおい」を嗅いできた。すべり台は楽しかったけれども、期待するほどではなかった。

10月8日は皆既月食だったのだけれど、雲がかかっててほとんど見られず。そのかわりフレアスタックを見ることができた。東京の赤い空の原因の1つはこれか。

仙台出張では「仙台の人は牛タン食べないし牛タン食べるならねぎし」と教えてもらったのが収穫。

あとはお出掛け的にはふらっと日本郵船氷川丸乗船しに行ってきた。やっぱり横浜いいわー。

11月 渋谷から横浜みなとみらい21まで歩いた

naney:15848159431

Emacs で anything から helm へ移行したのだけれど、あいかわらず補完がしっくりきていない。

11月は4月に初参加した歩く会に2度目の参加。「渋谷から横浜みなとみらい21まで」歩いた川崎駅経由で約29km。来年は遠征したい。

あと、11月末からぼっち Slack チームでチャネルをタイムライン型ノートにしはじめた。これはとても便利。日記のネタなんかをいったん突っ込んでおいたりするのに使っている。今年は Slack きたなぁ。

12月 楽園追放と峰不二子

naney:16115927935

楽園追放が良かった。周囲でも映画館に観にいった率が高く人気だった。今年は映画館で観た映画は結局この1本だけだったな。

あとは峰不二子のポジションを拝命し黒歴史を刻んだ

年末レゴ買ったり「エルマーのぼうけん」を買ったりしてエンジョイ。

まとめのまとめ

まとめは後半時間が尽きたというか力尽きたというか。今年のキーワード「アイカツ!」「不正ログイン」「Slack」「歩く会」「箱根旅行」あたりだったかな。

去年「プライベートや仕事での出来事や思いなど、Web 日記には載せないことをどう書き留めていくか最近考えている」と書いて意識できたせいか、今年は非公開な日記マイミク向けの日記も書けたのは良かったなと思っている。

なにはともあれ今年一年も良い年でした。ありがとうございました。

[ 12月31日全て ]

2015年1月31日 (土)

今日のさえずり: 「笑っていいとも!」最終回を観ようと思ったら消去されていた

2015年01月31日

[ 1月31日全て ]

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年3月10日 (火)

Android + Google Chrome で使える日記アプリ Journey

image:http://www.naney.org/nDiki/2015/03/10/overview_devicelineup_transparent.png

日記アプリ(ジャーナルアプリ)は「Day One (iOS) + Narrate (Android)」をメインで使っているのだけれど、「別のテーマで日誌をつけるのに分けたい」のと「Web ブラウザでも編集・閲覧したい」というのがあって Journey が良さそげなので使ってみることにした。

Android アプリGoogle Play では Journal (by Journey) になっている。

データは自分の Google ドライブに保存される

データは自分の Google ドライブに保存されるので端末がクラッシュしても大丈夫。開発元の 2 App Studio のストレージには保存されない。「GoogleDropboxEvernote なら自分のプライベートなデータを置くのを許容する」という自分のルール的にも OK。

日記アプリは、ロックインされないことが重要で選択時の大きな基準。Journey の場合は Android アプリから「Export/Backup」で JSON ファイル群を ZIP アーカイブしたファイルで保存する機能がある。 常に XML ファイルとして普通にアクセス可能な状態になっている Day One より一歩劣るものの、 JSON なので移行が必要な時は自分で変換できるので許容範囲と判断。

Google Chrome から閲覧・編集できる

Chrome アプリがあり PC から閲覧・編集ができる。PC 向けには公式には Mac アプリしかない Day One とは違って WindowsLinux でも使えるのが良い。なお Android アプリとは関係無しに Chrome ウェブストアから Chrome に追加して使えるので、PC のみで使うというのもあり。

ちなみに Journey Web ( http://journeyapp.me/ ) で Chrome アプリを入れなくても自分のジャーナルを閲覧できるようになっている。

ローカルホストから直接 Google ドライブにアクセスし 2 App Studio 側を経由しないと言明しているのでプライバシー的にも安心(信用する限り)。

Chrome アプリでは、いにしえの Evernote を彷彿させる巻物的表示(全文を時系列にスクロールで見ていける)なのがとても良い。個人的にこのタイプの表示が好きなのだけれど、現状少ないので嬉しい。

文字が大きく行間が広いのでかなりスカスカ感はあるので、もう少しタイトになるといいなとは思う。

その他

Markdown をサポートしているのも良いところなのだけれど、見出しがセンタリングだったりするのがそこはかとなくダサい。

あとはまずまず良い感じ。

(画像http://2appstudio.com/journey/ より。)


[ Android アプリレビュー ]

[ 3月10日全て ]

2015年8月9日 (日)

reveal.js 3.1.0 用にサンプルスライドファイルを作り直し

ちょっとしたプレゼンテーションスライドはもっぱら reveal.js を使っているのですが、今日公式ページを見たら reveal.js 3.1.0 が出ていました。自分は reveal.js 2.6.2 を使っていたのですが、これを機会に reveal.js 3 に乗り換えるようと思います。2.6.2 と 3 系は一部互換性がないところがあるとのことなので、確認しつつテンプレート用途的な自分用サンプルを改めて作り直しです。

reveal.js を共有しないサンプルに変更

2.6.2 の時は

  • www.naney.org 上の固定されたパス上に reveal.js が展開されている。
  • スライド Markdown ファイルを HTML ファイルと同じサイトに置く(ので Markdown ファイルと HTML ファイルを分離できる)。

前提でサンプルを作りました。しかしやはり「reveal.js リリースファイルを展開したディレクトリにサンプル HTML ファイル1つを置くだけ」で済むようにしておいた方が便利そうです。なので

  • 参照は相対パスにしておく。
  • 自分でカスタマイズしたスタイルやスクリプトもサンプル HTML ファイルに埋め込んでおく。
  • (サンプル)Markdown データも直接 HTML ファイルに書いておく。

ことにしました。ということで以下が自分用の新しいサンプルです。

[ 8月9日全て ]

2015年9月8日 (火)

Markdown ビューアを OpenID Connect を使って Google アカウント認証できるようにした

社内で動かしている Markdown ビューアについては去年 mixi Open ID 認証にしました(記事)。ですが mixi OpenID については 2016年1月25日提供終了となっていますので今回認証を変更しました。

今回は Google アカウント認証できるように OpenID Connect を使ってみることに。基本的には OAuth 2.0 とほぼ同じです。

認証ページ(https://accounts.google.com/o/oauth2/auth)にリダイレクトさせる時に scope パラメータに 'openid email' を指定しておきます。

そしてコールバックを受けて https://accounts.google.com/o/oauth2/token でアクセストークンを取得した際に、レスポンスに一緒に含まれる id_token をパースして email 取り出します。今回はそのメールアドレスが指定ドメインだったらアクセスを許可するという処理にしました。

JSON Web Token (JWT) である id_token のパースには OIDC::Lite::Model::IDToken モジュールを使用。

 $email = OIDC::Lite::Model::IDToken->load($id_token)
    ->payload->{email};

で email が取得できます。

今日のさえずり: Kindle for Androidインストールして「人を動かす」を買いました。ついに。

2015年09月08日

[ 9月8日全て ]

About Me

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

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

follow us in feedly

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

月別インデックス
Process Time: 0.066222s / load averages: 0.71, 0.78, 0.68
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker