1. TypeScriptを約5年ぶりにやってみたら、ほとんど何も覚えていないし、色々変わっていたので再挑戦

    正確な時期を覚えていないのですが、2012年から2013年ごろにTypeScriptを書いていました。TypeScriptがまだ正式リリースされていなくて、アップデートの度にコンパイルできなくなったり、警告が出たり、そういうことをしていた記憶があります。ずっとフロントエンドからは離れてPythonばかり書いていました。久しぶりにTypeScriptをしっかりと書いてみようと思ったら、TypeScriptのバージョンが2.6.1になっていました。

    曖昧な記憶ですが、当時はGruntを使ってMochaやJasmineを使ってテストをPhantomJS上で走らせていました。JavaScriptの世界は新しいツールの登場のサイクルがとても早いので、一からやり直そうと思い挑戦しました。ステップバイステップなので、同じファイルを何度も編集したり、一度で済ませられるコンテナの操作を何度も行って非効率ですが、私と同じ立場の人、未来の自分には、なぜそうしたのかが分かりやすいのではないかと考えて、そのように書いています。

    Vagrant上のUbuntu 16.04.3でやりました。 docker.iodocker-compose をapt経由で仮想マシンにインストールしてあります。

    今回のプロジェクトの名前は hellotsagain です。

    続きを読む


  2. helm-grep-do-git-grepでリポジトリ全体からgrepする

    以前の helm-grep-do-git-grep はgitリポジトリ内のどこにいても、gitリポジトリの全体から検索していましたが、 この変更 から現在のディレクトリ以下からのみ検索されるようになりました。リポジトリ全体から検索するのに、毎回最上位のファイルに移動してから helm-grep-do-git-grep するのは手間なので、以前と同じ動作をするコマンドを定義しました。

    (defun helm-grep-do-git-grep-all ()
      (interactive)
      (helm-grep-do-git-grep t))
    
    続きを読む

  3. PyramidでSwaggerを使う

    Swaggerは公式サイトではこのように説明されています。

    Swagger is a simple yet powerful representation of your RESTful API. With the largest ecosystem of API tooling on the planet, thousands of developers are supporting Swagger in almost every modern programming language and deployment environment. With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability.

    私なりに意訳すると「SwaggerはRESTful APIのシンプルで強力な表現で、ほぼすべてのモダンなプログラミング言語をサポートしています。Swaggerにより、ドキュメントとクライアントのSDKを生成することができます。」です。Swaggerのフォーマットに従って、YAMLまたはJSONでAPIを定義します。

    このSwaggerでAPIを定義し、そのAPIをPyramidで提供してみます。

    続きを読む

  4. サブドメインとセッションを共有する

    PythonのBeakerを使って、あるドメインと、そのドメインのサブドメインの間で認証を共有することを目指します。つまり、example.comでログインしたら、sub.example.comでもログインしている状態になるようにします。フレームワークにPyramidを使用していますが、Pyramidに依存していないので、他のフレームワークでも同じことができます。

    続きを読む

  5. PostgreSQLのCASE WHENの返した値をINの右辺にしたい

    PostgreSQLのINは、左辺の値が右辺に含まれていればTRUEを返します。

    =# SELECT 1 IN (1, 2);
     ?column?
    ----------
     t
    (1 row)
    

    PostgreSQLのCASE WHENは条件に当てはまった要素を返します。

    =# SELECT
        CASE
            WHEN TRUE THEN (1, 2)
            ELSE (3, 4)
        END
    ;
      row
    -------
     (1,2)
    (1 row)
    

    ところが、この2つを組み合わせると ERROR: operator does not exist というエラーになります。

    続きを読む


  6. PyramidとJinja2で、Jinja2にデバッグモードであることを伝える方法

    本番環境でのみ、GoogleAnalyticsを有効にするため、デバッグモードであるか否かをJinja2内で判断する方法を考えました。

    Pyramidのproduction.iniにこれを追記します。

    [app:main]
    jinja2.globals =
        is_debug = app.helpers.false
    

    同じくdevelopment.iniにはこれを追記します。

    [app:main]
    jinja2.globals =
        is_debug = app.helpers.true
    

    これで、Jinja2の中で {% if is_debug %} と書くことで、デバッグモードでのみ有効にしたい内容を書くことができます。同じように、is_productionや否定をすることで、本番での有効な処理を記述すつこともできます。

    ちなみに、helpers.pyの内容はこうなっています。

    true = True
    false = False
    
    続きを読む



2015 - 2017 (c) 成瀬基樹