タグ

ブックマーク / anatoo.hatenablog.com (18)

  • MastodonはP2Pではないという話、もしくはMastodonの脱中央集権の仕組みについて - id:anatooのブログ

    Fukuoka.php vol22にてMastodonについて話してきました。 Mastodonは最近盛り上がってる分散型SNSですが、その仕組みに興味をもったので調べてみたのが今回の話になります。スライドの中で主に説明しているのは、Mastodonが実装している分散型SNSを実現するためのプロトコルOStatusについてです。 OStatusはAtomフィードを核とした仕様です。ユーザーのつぶやきをAtomフィードで表現し、さらにそれをコンタクト情報を形式化するPortable ContactsとSocial Network上の活動を形式化するActivity Streamsで拡張しています。フィードだけだと、リモートのサーバはポーリングする必要があるため、それを補うためにPubSubHubbubでAtomフィードの更新をほぼリアルタイムに受け取ることができるようにしています。また、Fo

    MastodonはP2Pではないという話、もしくはMastodonの脱中央集権の仕組みについて - id:anatooのブログ
  • factorでズンドコキヨシを書いてみた - id:anatooのブログ

    連鎖性言語のfactorで今流行り(?)のズンドコキヨシ書いてみた。連鎖性言語って何?っていう方はここの説明を見てほしい。 IN: . USING: random io kernel sequences math ; "" [ dup "ズンズンズンズンドコ" tail? not ] [ { "ズン" "ドコ" } random append ] while "キ・ヨ・シ!" append write実行する。 $ factor zundoko.factor ズンドコドコズンズンズンズンドコキ・ヨ・シ!昔触ってたfactorのこと完全に忘れててこれ書くのになんやかんやで1時間ぐらいかかったけど、たまにfactor書くとやっぱ面白い。最近の連鎖性言語をちょろっと調べてみたら、今はkittenというイケてる感じの関数型連鎖性言語も登場してるみたい。暇があったらまたこういうの触っていきたい。

    factorでズンドコキヨシを書いてみた - id:anatooのブログ
  • JavaScriptでのDOM操作は重いのかという話とForced Synchronous Layoutについて - id:anatooのブログ

    2015年にもなるのにJavaScriptでのDOM操作のパフォーマンスについて書く。ウェブページにインタラクションを持たせたい時に、JavaScriptでDOM操作を行うことがよくある。このDOM操作のパフォーマンスについて、よく聞く意見を大別すると次の2つがある。 JavaScriptによるDOM操作は重たい レンダリングが重いだけで、DOM操作そのものはそれほど重たくない JavaScriptでオブジェクトのプロパティを操作したりする単体の処理は通常1ミリ秒もかからないが、DOM操作をするとレンダリングが完了するまでに数十ミリ秒程度かかったりする場合がある。1番目のDOM操作が重たいと言っている人は経験則的にそう言っていることが多い。 レンダリングの仕組みを知っている人は2番目の意見を言うが、重箱の隅をつつくような話をするとこれも必ずしも正しいわけではない。DOM操作するコードによっ

  • JavaScriptをプロトタイプベースのオブジェクト指向言語と言うべきではない - id:anatooのブログ

    勘違いしている方も結構多いと思ったので、これの解説。 JSをプロトタイプベースのオブジェクト指向言語って言うの誤解しか産まない気がしてきた— anatoo (@anatoo) 2015, 5月 3 ウェブ上の記事を眺めていると、JavaScriptをプロトタイプベースのオブジェクト指向言語(以下OOPと書く)と説明している例がよく散見される。この書き方は間違ってはいないかもしれないが、もはや誤解を生むだけである。 そう言う理由には、ES6からはclass構文があるため、通常のクラスベースのOOPと一切何も変わらなくなっているからというのがある。だが最も大きな理由は、JavaScriptはプロトタイプベースのOOPの中でも異端であり、来のプロトタイプベースのOOPとはあまり似ていないからである。 JavaScriptでは、new演算子を使ってオブジェクトを生成したり、prototypeオブ

    JavaScriptをプロトタイプベースのオブジェクト指向言語と言うべきではない - id:anatooのブログ
  • JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログ

    前回の記事の続き。前回は、正規表現が使えない時はパーサコンビネータを使ってみると良いということを書いた。 パーサコンビネータのためのライブラリは、以下のように各言語ごとにいくつかある。 JavaScript - Parsimmon Ruby - rparsec treetop Python - parsy PHP - PHPPEG 各言語でいくつかあるのだが、正規表現と違ってパーサコンビネータには統一的な書き方があるわけではないし、ライブラリによって使い方も様々である。なので、今まで正規表現だけ使ってきた開発者がちょっと使ってみようと思っても、使い方がよくわからずに面らってしまうことがある。 パーサコンビネータはテキストをパースするための非常に強力な仕組みだが、その背後にある考え方を理解しなければこれらのパーサコンビネータのライブラリを使う際の障害になるだろう。逆に言うと、それさえ理解で

    JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き) - id:anatooのブログ
  • 適当なスクリプトをデーモン化するのにSupervisorが便利 - id:anatooのブログ

    適当なスクリプトをデーモン化しようと思った時の典型的な要件が以下であるが、この記事でも紹介したpython製のプロセス管理ツールであるSupervisorを使うことによって解決できる。 プロセスの生死の監視する プロセスが死んだら勝手に再起動する 標準出力やエラー出力のログを取る 場合によっては複数プロセスを起動したい プロセスのステータスを簡単に確認したい この記事では、プロセス管理ツールSupervisorの導入を簡単に紹介する。 インストール easy_installからインストールできる。そもそもeasy_installが入ってない場合は以下みたいにインストール。 $ curl -O http://peak.telecommunity.com/dist/ez_setup.py $ python ez_setup.pySupervisorをeasy_installからインストールしま

  • 正規表現ばかりに頼ってはいけない - id:anatooのブログ

    文字列のパースをする必要がある時、どんな文字列にでも何でもかんでも正規表現で処理しようとするエンジニアをたまに見かける。 正規表現は確かに文字列を扱うための強力な手段だが、万能ではない。正規表現の性質上、そもそもパースできない文法があるからだ。従ってそういうケースの時には正規表現ではなく別の方法を使ったほうが良い。正規表現を無理やり使っても、バグを埋め込んだり、メンテナンスが難しかったり、正しく文字列をパース出来なかったりで良いことはあまりない。 正規表現がパースできない文字列 正規表現が苦手とする文法で一番よく言われるのは、再帰的な構文を含む文法である。例えば、括弧つきの数式なんかがそうで、1+1 でも (1+1) でも ( (1+1) ) でも ( ( (1+1) ) ) でも ( ( ( ( 1+1) ) ) ) でも、という風にいくらでも入れ子にできる。正規表現では、こういった文字

    正規表現ばかりに頼ってはいけない - id:anatooのブログ
  • UI/UXデザイナー兼ソフトウェアエンジニアにジョブチェンジを果たした - id:anatooのブログ

    もともと只のソフトウェアエンジニアだったのですが、最近になって肩書きが長くなりました。 何やってるのか やることが増えました。 UI設計 ワイヤフレーム作成 ビジュアルデザイン プロトタイプ開発 開発 エンジニアの頃は、一番下の普通の開発しかやってませんでしたが、ここ最近は上記のことをまんべんなくやっています。ワイヤフレーム作成では、アプリやウェブサイトの設計書となるワイヤフレームをOmniGraffleでガリゴリ書いています。その次のビジュアルデザインでは、PhotoshopやIllustratorなどを使ってアプリやウェブサイトの実際の見た目のデザイン作業をやっています。プロトタイプ開発では、実際に動作するプロトタイプ(ハイフィデリティプロトタイプって言うらしい)を作ってUI上の問題を解決していくということをやっています。UXに関してはこれらの作業全てを通じて改善に貢献するということを

    UI/UXデザイナー兼ソフトウェアエンジニアにジョブチェンジを果たした - id:anatooのブログ
  • 自分が職を失った経緯 - id:anatooのブログ

    この記事は、How I Fired Myself.という記事の試訳です。 2010年の7月、私は22歳で、カリフォルニアのあるソーシャルゲームのスタートアップで働いていた。卒業したてで、私にとって初めての物の職だった。給料をもらってアパートに住んだ。そのころ私は初めて大人になったような気分でいた。 その会社の主力製品であるRPGのコードを書く二人のエンジニアのうちの一人が私だった。大学では哲学を専攻していた。これはどういうことかと言えば、問題に対してどうやって考えればいいかを知っていた一方で、ベストプラクティスや実用的なデザインパターンに関する知識は最低限しか持っていなかった。私は信じられないほどの熱意でもって自分が持っているごく普通のLAMPの知識を駆使した。 私の悩みの種であるゲームデザイナーはしばしばWorld of Warcraftからインスピレーションを得ていた。WoWは、Bl

    自分が職を失った経緯 - id:anatooのブログ
  • クライアントサイドJavaScriptでのビューの作り方4つ - id:anatooのブログ

    追記: 指摘により、UIオブジェクト型を追加した(thx @kanreisa)。 クライアントサイドJavaScriptでのビューの作り方を大別すると、3つ4つある。 DOM操作型 テンプレートエンジン型 UIオブジェクト型 データバインディング型 ここでいうビューの作り方とは、有り体にいうとJavaScriptからどうやってDOM要素を生成したりするかどうか。イベントリスナーの登録とかも含む。 DOM操作型 昔ながらのやり方。jQueryとか使って直接DOM操作してビューを作る。 // 例えば、<div class='hoge'>fugafuga</div> みたいなDOMを表示する var myView = $("<div class='hoge'/>"); myView.text('fugafuga'); // body以下に挿入 $(body).append(myView); 長所

  • HTML5によるハイブリッドアプリ開発に関する雑記 - id:anatooのブログ

    HTML5でiPhoneAndroid向けのハイブリッドアプリを作るのが最近の流行りみたいです。ハイブリッドアプリとは、外面は普通のアプリとしてAppStoreやGoogle play marketでインストールできるものの、その中身や一部がHTML5で記述されているアプリです。 最近の有名な例だと、CookpadやLinkedIn、はてなスペース、少し前にネイティブに移行してしまいましたがfacebookのモバイルアプリもHTML5を使って記述されていました。GREE界隈で言われているらしいガワネイティブっていう言葉もハイブリッドアプリを指します。ちょっとググってみると、2016年には企業向けのアプリの50%がハイブリッドアプリになるという予測もあります。 ハイブリッドアプリの何がいいかというと、Objective-CとかJavaとかがわからなくてもウェブ系技術者であればAndroid

    HTML5によるハイブリッドアプリ開発に関する雑記 - id:anatooのブログ
  • 海外のソフトウェアエンジニアがコミュニケーション能力をあまり求められていない理由 - id:anatooのブログ

    海外のソフトウェアエンジニアがコミュニケーション能力をあまり求められていない理由として、誰が言ってたのか思い出せないけど、「日と違ってエンジニアとしての能力こそが最重要だから」みたいな意見を聞く。確かにそういう部分も少しはあるんだろうけど、ちょっと外していると思う。 「海外」で普遍的なものなのかはわからないけど、サンフランシスコのミートアップのイベントやスタートアップに何度か連れて行ってもらってそう思った。あっちのエンジニアのコミュニケーション能力の平均値が日よりも数段高い。英語があまり聞き取れないので断言しづらいけど、なんというか、いわゆる根暗、ネアカという概念が成立しないのではないか思うぐらい日とその平均値が違う。日の勉強会とまったく違っていて、ほおっておいてもすごく賑やかにやっている。暗そうな人でも初対面の人とすぐに打ち解け、自分の興味が有ることを喋ったりして、日の勉強会と

    海外のソフトウェアエンジニアがコミュニケーション能力をあまり求められていない理由 - id:anatooのブログ
  • 姿勢を正しく - id:anatooのブログ

    人からもよく言われることに、普段の作業中、背中の姿勢が悪い。それのせいか知らないけど仕事の一日の終りには背中や肩など体のあちこちが痛いし、頭痛の頻度も高い。 こういう悪徳というか意味なく体を痛めるのは当に意味ないと思ったので、姿勢を矯正しようとおもった。 意識を張っているときは姿勢をきちんと保っていられる。すこしでも気を抜いたり、作業に集中したりしていると、すぐに元の悪い姿勢に戻ってしまう。 姿勢を正しくしようと思う事自体すぐに忘れてしまうので、自力でなんとかするのは諦めた。 というわけで器具の力を借りるために、下のようなTシャツの上などから羽織るタイプの姿勢矯正グッズを購入した。これにはゴムが仕込まれていて、これを着ると悪い姿勢をするよりも正しい姿勢をするほうが楽になる。 中山式 脊椎医学 キョウセイベルト メッシュ Lサイズ ウエスト 80~100cm 身長 165~175cm 出版

  • github社製ボットフレームワーク、hubotをIRCボットとして導入した話

    修正: 2/10 node-cronを使ったコードの例が間違っていたので修正。 github社製のボットフレームワーク、hubotをIRCボットとして導入する話。 インストール hubotはnode.jsとcoffescriptで書かれたgithub社製のボットフレームワーク。IRCに限らず、campfireやtwitterなどいくつかのアダプタに対応しているが、ここではIRCで利用するための導入手順を記す。 あらかじめnode.jsとnpmをインストールしておいて、hubotをインストールする。 $ git clone git://github.com/github/hubot.git $ cd hubot $ npm installhubotは、ボットが扱うデータを永続化するためにredisというKVSを利用する。redisが入っていない時はエラーになるので動かす前にインストールする。

    github社製ボットフレームワーク、hubotをIRCボットとして導入した話
  • google+でサークルに250人位追加して使った感想: これは間違いなく成功する - id:anatooのブログ

    ちょっと前に同僚からgoogle+の招待もらって、今現在だとサークルに250人位入れてどんなもんだろうなーという感じで使っている。が、自分にとっては若干ソーシャル性が強くてあまり合わない。twitterやtumblr程度の軽いソーシャル性のほうが好みだ。UIも全体的によく出来ているけどなんか凝り過ぎてて煩わしい部分がある。たまに使う程度で終わってしまうのではないかとすら自分では思っている。ただ、これは自分がそれほど使わないのではないかというふうに思っているだけで、google+が失敗するとは思っていない。というかむしろこれは間違いなく成功するだろうなーという気分で眺めている。 今までgoogleが出して失敗したSNS(orkut、google buzz, google waveなど)は、googleが提供するウェブサービスの一つという位置づけで開発、公開されていた。他のgoogleサービス

    google+でサークルに250人位追加して使った感想: これは間違いなく成功する - id:anatooのブログ
  • Node.jsがどうして注目されているのか、もしくはどうして他のサーバサイドJavaScriptはスルーされているのか - id:anatooのブログ

    サーバサイドJavaScriptにはNode.js以前にもいくつかの実装がある。ちょっと前に注目されかけたものだと、現在はAppcelerater社に買収されたAptana社が出していたJaxerなどがあるが、きちんと調べるとRingoJsやnarwhalやv8cgiなど選択肢の一つとして数えられるサーバサイドJavaScript実装がいくつかある。ただ、これらはNode.jsのように注目を浴びているわけではない。 Node.jsとこれらの既存のサーバサイドJavaScriptの違いは、他のサーバサイドJSの動作モデルが既存のサーバサイドのものと変わらないのに対して、Node.jsの場合はそうではないから。具体的には、HTTPコネクションのハンドリング戦略が違っていて、既存の動作モデルが1コネクションに対して1プロセス/スレッド消費するのに対して、Node.jsの場合は非同期I/Oを用いて

    Node.jsがどうして注目されているのか、もしくはどうして他のサーバサイドJavaScriptはスルーされているのか - id:anatooのブログ
  • jQueryはモナドだ - id:anatooのブログ

    この記事はjQuery is a Monad | Important Shockという記事の勝手訳です。 追記1: bonotakeさんが補足記事を書いてくれています → JQueryがモナドかどうかとか - たけをの日記@天竺から帰ってきたよ 追記2: hirataraさんが補足記事を書いてくれています → jQueryは当にモナドだった - 北海道苫小牧市出身のPGが書くブログ Haskellプログラマーは誰しもがモナドに関する各々のチュートリアルを書くと言われる。というのも、一度モナドの定義とその可能性を理解すれば、モナド全体を囲む神秘性に挑戦して打ち破るのが容易になるからだ。門外漢からすれば、モナドはHaskellを真に理解することを妨げる不可解な障壁だ。モナドはとても不適当な名前で呪われていて、一風変わった文法を持ち、一度に何もかもやってしまう様に見える。しかしながら、その動き

    jQueryはモナドだ - id:anatooのブログ
  • PHPで失敗するかもしれない処理の返り値を配列で表現すると都合がいいという話 - id:anatooのブログ

    値を返すのに失敗するかもしれない処理を扱う場面というのは多い。 例えばあるファイルの中身を取得する処理について考えると、ファイルが存在する場合はその中身を取得して返すことができるが、そうでない場合は中身を取得するのに当然失敗する。 PHPに予め用意されているfile_get_contentsはまさにそれだが、この関数は処理に失敗するとfalseを返す。 ここでは別にもう一つ似た関数を作ってみる。 <?php function my_file_get_contents($path) { $buf = file_get_contents($path); return $buf === false ? array() : array($buf); } このmy_file_get_contents関数は、ファイルの中身を成功した場合は結果を持った配列を返し、そうでなければ空の配列を返す。 これから

    PHPで失敗するかもしれない処理の返り値を配列で表現すると都合がいいという話 - id:anatooのブログ
  • 1