Articles in the 開発 category

  1. markdown-itで、目次を記事の外に表示する

    このブログのことではないのですが、markdown-itを使ってMarkdownで書いた記事を表示する際に、目次(Table of Contents, TOC)を記事の外に表示したいと思いました。記事の外とは、例えばサイドバーです。

    markdown-itで目次を記事中に表示するプラグインはいくつかあるようですが、記事外に表示することはプラグインでは達成できないようです。自分でTypeScriptを書いて実現しました。

  2. このブログからCSSフレームワークのBulmaを取り除いた

    私はCSSが苦手で、これまでBootstrapやBulmaに頼ってきました。最近、CSS (SASS)を書く機会がたくさんあり、自分でCSSを書いても思い通りのレイアウトにできるようになりました。

    そこで、このブログからBulmaを取り除いてみました。

  3. CSSのメディアクエリのaspect-ratioには数字ではなく、式を渡さないとBlinkとWebkitで動作しない

    @media screen and (min-width: 1920px) {
       body {
         background-color: red;
       }
    }
    

    CSSのメディアクエリではこれまで、画面の解像度によって適用するブロックを変更するmin-widthmax-widthだけを使っていました。

    最近、初めて画面の縦横比によって適用するブロックを切り替えるaspect-rasioを使いました。

    @media (min-aspect-ratio: 16 / 9) {
      body {
        background-color: red;
      }
    }
    

    16 / 9の部分が1.77778と計算結果が書かれていると、Firefox (Servo)では機能するのですが、Chrome (Blink)やSafari (Webkit)では機能しませんでした。

  4. Rustで中間に挿入可能なLinkedList

    Rustの練習のために中間に要素を挿入できるLinkedListを作りました。同様の例が見当たらなかったのでここに残します。

    Pythonは自身を持って書けるのですが、Rustはまだそこに至りません。このLinkedListにも不備があると思います。

  5. JavaScriptからのHTTPリクエストへのレスポンスでクッキーをセットできる

    私はつい最近まで、JavaScriptが送ったHTTPリクエスト(AjaxやFetch)に対するレスポンスでは、クッキーをセットできないと思い込んでいました。そのため、それ相当のことをするには、レスポンスでクッキーに入れたい値を受け取り、document.cookie = newCookie;のようにJavaScriptでセットしないといけないものだと思い込んでいました。そのためHttpOnlyディレクティブを使うことができないとも。

    これは間違いで、JavaScriptからのHTTPリクエストに対するレスポンスがSet-Cookieヘッダーを持っていれば、自動的にブラウザにそれが保存されます。喜ばしいことに、このときHttpOnlyディレクティブを有効にすることもできます。

    ただしJavaScriptでCookieをセットするときに、HttpOnlyディレクティブを使えないのは真です。HttpOnlyディレクティブつきのCookieはJavaScriptから読めないだけではなく書くこともできません。

  6. SqlHueyに?を含んだパスワードをDSNを文字列の一部として与えると、期待通りにパースされずにデータベースに接続できない

    まず初めに、はっきりとさせておきたいことがあります。この問題の直接の原因がhueyやpeeweeではないということです。

    huey.contrib.sql_huey.SqlHueyは引数databaseにDSNを取ります。DSNとは{schema}://{username}:{password}@{host}:{port}/{database}のような文字列です。具体例を上げるとhuey.contrib.sql_huey.SqlHuey(database='postgresql://postgres:password@localhost:5432/mydatabase')です。DSNはURIと同じ形式です。

    このパスワードの部分がpass?wordのように?を含んでいると、パスワードがそこで切られてしまい、データベースに接続できなくなります。

    パスワードにと言っていますが、ユーザ名などにあったとしても同じ問題を引き起こします。ただパスワード以外に問題を起こす一部の記号を使うことは滅多にないことでしょう。

  7. Celeryの代わりにHueyを採用

    CeleryはSQLAlchemyを通してRDBMSをBrokerとして利用できると記憶していたのですが、Celery 4.0からはSQLAlchemyをBrokerとしてのサポートは終了していました。知識として持っていましたが、実際にCeleryのBrokerにRDBMSを使ったことはありませんでした。

    今開発中のサービスではCeleryをTaskQueueとcronの両方の用途で使おうと考えていたので、Celeryの代わりにPostgreSQLをBrokerを使えるライブラリか、CeleryのためにRabbitMQやRedisといったCeleryがBrokerとして対応しているミドルウェアを用意しなければならなくなりました。

    結果、hueyを採用することにしました。