ブックマーク / blog.shibayu36.org (17)

  • TypeScriptの型を手に馴染ませるためにやっていること - $shibayu36->blog;

    最近TypeScriptが好きで勉強していっている。しかしなかなか型定義周りが手に馴染まず、少し複雑な型定義を読んだり、自分でユーティリティ型を定義したりすることが難しかった。 そこで型を手に馴染ませるために色々学習をしてみたので、やっていることをメモしておく。 まずざっとTypeScriptの型概要を学ぶ まずTypeScriptでの型を簡単に学ぶには以下の2つの資料がわかりやすかった。 TypeScriptの型入門 - Qiita TypeScriptの型初級 - Qiita ひたすら型演習をする 資料を読むだけでは全く手に馴染まないと思ったので、その後ひたすら型演習をしている。 まずは TypeScriptの型演習 - Qiita 。これは先程の型初級、型入門の記事を書いた人が演習問題を作っているため同じ流れで学習でき、さらに解説編も充実しているので、手を動かしながら学ぶのに最適であ

    TypeScriptの型を手に馴染ませるためにやっていること - $shibayu36->blog;
  • zsh-autoenvを使って、virtualenvの自動activate/deactivateを実現する - $shibayu36->blog;

    pyenv + venvでPython3環境を構築する - $shibayu36->blog; の記事で、特定のPythonプロジェクト用のvirtualenv環境を導入することが出来ました。しかし、このプロジェクトに入るたびにsource venv/bin/activateし、逆に抜ける時にdeactivateするのは 面倒 どう考えても実行を忘れる という問題があります。 そこでzsh-autoenvというzshプラグインを使って、自動でactivateとdeactivateを出来るようにしたのでメモしておきます。 zplugを導入する 今回の題から外れますが、zshのプラグインの管理ツールをこれまで入れてこなかったので、この機会にzplugを導入しました。 おい、Antigen もいいけど zplug 使えよ - Qiita https://github.com/zplug/zpl

    zsh-autoenvを使って、virtualenvの自動activate/deactivateを実現する - $shibayu36->blog;
  • ScalaのOptionとEitherで例外処理を行う方法 - $shibayu36->blog;

    Scalaの例外処理はOptionとかEitherを利用するっぽいんだけど、調べてもいまいちその使い方が分からなかった。いろいろやってみたところ、だいぶ分かってきたので、後から自分で読み返せるようにメモ。 Optionを利用する Optionは値があるかないかわからない場合に、ラップして返してくれるもの。値がある場合はSome()に値が包まれて返ってきて、ない場合はNoneが返ってくる。エラーの内容が特に必要がない場合の例外処理に便利。 パターンマッチで例外処理をする SomeとNoneでパターンマッチすれば例外処理できる。こんな感じ。 val map = Map("a" -> 1, "b" -> 2) map.get("a") match { case Some(n) => println(n) case None => println("Nothing") } map.get("c")

    ScalaのOptionとEitherで例外処理を行う方法 - $shibayu36->blog;
  • Elasticsearchのインデックス定義を設計する手順 - $shibayu36->blog;

    Elasticsearchを使おうとすると、まずアプリケーションの仕様にしたがってインデックス定義やマッピング定義を設計しなければならない。これはMySQLを使っていてスキーマを考えるフェーズに相当する。 この時、考えることが非常に多く、いろいろなドキュメントを参照し設計したので、今回はその手順について書いていきたいと思う。 インデックスやマッピングが何かという話は、次の記事を参考に。 Elasticsearchチュートリアル - 不可視点 Mapping and Analysis | Elasticsearch: The Definitive Guide [2.x] | Elastic また対象とするElasticsearchのversionは記事執筆時点の安定版の2.3.5とする。 今回サンプルとする例 実際のプロジェクトを参考例にすることは流石にできないので、今回はブログの記事を検索

    Elasticsearchのインデックス定義を設計する手順 - $shibayu36->blog;
  • 自分流Elasticsearch入門 - $shibayu36->blog;

    【2016/09/10追記】 勉強しなおして、Elasticsearchの知識についてさらにまとめた記事を書いたので、そちらを参照してもらうと良さそうです。 blog.shibayu36.org 最近Elasticsearchの勉強をした。ただ、入門のためどのような資料が適しているかを知るのが大変だった。そこでどのように勉強したかについてメモをしておく。少しまとめエントリー的なノリになりそう。 Elasticsearchの概念を知る 全文検索技術の基を知る Elasticsearchのドキュメントのたどり方を知る の順に学習を進めていった。 Elasticsearchの概念を知る Elasticsearchの学習を始めようとした時に、まずは基からということで以下のを読んでいた。 高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍) 作者:Rafal

    自分流Elasticsearch入門 - $shibayu36->blog;
  • フロントエンド速度改善でやったこと(Expiresヘッダ、faviconのgzip圧縮、JSの読み込み遅延化) - $shibayu36->blog;

    フロントエンド速度改善をしようとして参考にしたもの - $shibayu36->blog; という記事を以前に書いたのだけど、結局何をやったか書いて欲しいと社内で言われたので、今回のフロントエンドの速度改善でやったことについて書いてみる。そこまで大したことはやってないので参考程度にどうぞ。 前提 ページのレンダリングが遅いと思い始めたので改善をすることになったのだが、改善をし始めたところChromeのアップデートがあり爆速になってしまった(FirefoxやSafari等はもともと速かった)ので、では明らかにやったほうが良いことだけやりますかという話になった。そのためあんまりbefore/afterもちゃんと取っていないので、今回はやったことの紹介くらいに留める。 やったこと 計測や調査をしてみたところ、以下のようなことはやってしまったほうが良いということになった。 静的ファイルに適切にEx

    フロントエンド速度改善でやったこと(Expiresヘッダ、faviconのgzip圧縮、JSの読み込み遅延化) - $shibayu36->blog;
  • Chrome Developer Toolsのネットワークタブから拡張のリソースを消す - $shibayu36->blog;

    ネットワークタブでパフォーマンスチェックをすると、Chrome拡張で入っているリソースもいろいろ出てきて、実際にこのサイトで使っているリソースがわかりにくかったりする。この場合、Filterを使うとChrome拡張のリソースを除外できることを知ったのでメモ。 stackoverflow.com ここで書かれている通りで、Filterに-scheme:chrome-extensionを入れると良いだけ。 ちなみにschemeのように指定できるものをFilter Typesというようで、他にもいくつかあって、以下に書かれていた。has-response-headerとか便利そう。 https://developer.chrome.com/devtools/docs/network#advanced-filtering

    Chrome Developer Toolsのネットワークタブから拡張のリソースを消す - $shibayu36->blog;
  • Chromeのネットワークタブで、レスポンスにExpiresヘッダが付いていない通信だけ表示する - $shibayu36->blog;

    blog.shibayu36.org 以前こういう記事を書いたけど、特定ヘッダが付いていない通信だけ表示するのも簡単に出来たのでメモ。 Filterに「-has-response-header:Expires」と書くだけ。 また拡張を除外したかったら-scheme:chrome-extensionとかも一緒に書いたら良いし、他にもcdnを使っているならそのURLを入れることで絞り込みできて便利。

    Chromeのネットワークタブで、レスポンスにExpiresヘッダが付いていない通信だけ表示する - $shibayu36->blog;
  • Server::Starterから学ぶhot deployの仕組み - $shibayu36->blog;

    以前http://tech.naver.jp/blog/?p=1369の記事を読んだのだけれど、それまでにprocessの知識が無かったりして、まったく理解できませんでした。そこでWorking with UNIX ProcessesやServer::Starterの中身を呼んでようやくhot deployの仕組みを理解できた(気になっている)ので、Server::Starterの実装を追いながら、それをまとめてみます。 hot deployとは hot deployとは「再起動の時にリクエストの処理を続けながら、変更の内容を反映するための手段」です。 通常serverをrestartさせるときは、stop -> startの流れになると思いますが、この場合stopしてから、start出来るまでの期間にリクエストを処理できない期間が発生します。その期間なしにdeployする仕組みがhot

    Server::Starterから学ぶhot deployの仕組み - $shibayu36->blog;
  • 「Cartonの内部」について社内勉強会で発表した - $shibayu36->blog;

    Perlのバージョン管理ツールであるCartonの内部について、社内勉強会で発表したので、その時の資料をそのまま公開する。けっこう雑に作ってしまったので、正確性については保証できないけど、Cartonのソースコードリーディングの際の参考になればと思う。 アジェンダ Cartonとは いろいろトラブル carton installの挙動を理解する Cartonとは Perlのモジュール管理ツール 依存モジュールを特定のバージョンに固定して、インストールしてくれる Cartonとは(深堀) 一番重要なのはcarton install 基的にはcpanmのラッパーとしてcarton installが実現 Module::CPANfileなど、小さいモジュールを組み合わせている いろいろトラブルもある cpanfile.snapshotが環境によって変わる carton install --de

    「Cartonの内部」について社内勉強会で発表した - $shibayu36->blog;
  • 学習のため書籍を読むときは明確に目的を決める - $shibayu36->blog;

    僕は学習をする際には書籍を参考にするのが好きだ。なぜネットとかではなくて書籍を参考にするかというと、書籍のほうが学びたい事柄についてネット情報や人から教わるのと比べて、どちらかというと体系的にまとめられていると思っているためだ。 ただし書籍を参考にしている時によく陥りがちなのが、「学習する」という目的を忘れて、「を読み切る」という事自体が目的化してしまうことだ。こうならないため、僕はこの書籍を読む目的をはっきり決めるようにしている。その目的が大体3つくらいの種類に分類されてきたので、今回はそれについてまとめてみようと思う。 三つの目的のどれかを選ぶ 僕の中で学習目的で書籍を読むときは以下の三つの目的のどれかに絞っている。 これからの課題を解決する方法を見つけるための読書 これまでうまくいったことの言語化を行うための読書 視野を広げるための読書 この三つのどの目的でを読むか、自分の中で明

    学習のため書籍を読むときは明確に目的を決める - $shibayu36->blog;
    matsumanahate
    matsumanahate 2015/01/23
    目的を明確にするの大事
  • 実践に繋げるように勉強する - $shibayu36->blog;

    遅延評価勉強法だと得られなかったもの - As a Futurist... 漢(オトコ)のコンピュータ道: ヒゲモジャのギークが提案する技術習得戦略 を読んで、なんとなく気分が高まったので、自分の学習のことについて書いてみる。 以下の様なことを書いているつもり。 勉強は実践につなげると知識が定着すると思っている 実践課題を探すのではなくて、実践の目処のあるものを勉強する 一番簡単な実践課題として、自分の言葉でまとめ直すということをしている 実践に繋げる 僕は勉強する時は、いろいろを読んだり、情報を調べたりして、まず知識をつけようとすることが多い。ただし、それだけだとだめで、実践しないと知識が定着せず、どんどん忘れていき、結局意味ないということになる。実践大事。 大事なのはわかってるんだけど、実践するのは意外と難しい。に練習問題あったりすることもあるけどあんまり面白くないし、良い実践課題

    実践に繋げるように勉強する - $shibayu36->blog;
  • コードレビューを円滑に行いたい (#cross2014 のお話) - $shibayu36->blog;

    id:antipopさんやid:studio3104さんに機会をもらえて、CROSS 2021に参加させてもらい、はてなでのレビューの話を軽くさせてもらった。はてなからは僕とid:hakobe932さんとで参加した。 http://blog.kentarok.org/entry/2014/01/18/204552 2014/1/17 #cross2014 コードレビューCROSS 〜ぶつかり稽古 2014初場所〜 - Togetter それで、今回参加して他の会社の人のレビューの話も聞いて、あーそれはあるあるとか、そういう問題解決するためにこういうことしてますとか、他の会社ではこういう時どうしているんだろとか、幾つかおもうところがあったので、もう少しレビューのことについて書いてみる。 レビューと関係性問題 レビュアーとレビュイーの関係に関して - 職質アンチパターン コードレビューと関係性

    コードレビューを円滑に行いたい (#cross2014 のお話) - $shibayu36->blog;
  • 本番環境のBlue-Green Deploymentの仕組みのプロトタイプを作っていた - $shibayu36->blog;

    最近Dockerとか、serfとかその辺りのツールが流行ってる。その中でとりあえずDockerはテスト環境やCIでは使えるかもしれないけど、実際にwebサービスが動いているものに使えるかどうかはまだわかんないねーという流れになっていた。 まあでもとりあえず動いているwebサービスDockerでやったらどうなるかというのを知りたいというのがあって、いろいろ機会があったので4人で3日くらいやってプロトタイプ実装というのをしてみて試した。 結局出来たこと 結局以下の様なものが実際に動くところまで行った。 AWSのような環境がなくてもDockerさえ動けばブルーグリーンデプロイ出来る VPSだろうが自宅サーバだろうがなんでも ボタンだけで「番用環境構築」「番前の確認」「番切替」が出来る web n台くらいを一セットとみなした環境をボタンひとつで簡単に作れる Docker imageのビルド

    本番環境のBlue-Green Deploymentの仕組みのプロトタイプを作っていた - $shibayu36->blog;
  • znc 1.0をインストールした - $shibayu36->blog;

    そろそろちゃんとIRC Proxyのセットアップとかしようと思っていたら、zncが1.0になって、SSL周りの設定がさらに簡単になっていたのでやってみた。tiarra+stoneを卒業してZNCを使い始めた - すぎゃーんメモ時点では、複数のネットワークに接続するには複数ユーザ作らないといけなかったんだけど、1.0の時点では単一ユーザで複数ネットワークに接続出来るようにもなっていた。 インストール aptitudeのstableとかに1.0がまだ来てなかったので、sourceからインストールする。http://wiki.znc.in/Installation を参考に。 $ wget http://znc.in/releases/znc-1.0.tar.gz $ tar -xzvf znc-1.0.tar.gz $ cd znc-1.0 $ ./configure --prefix=$HO

    znc 1.0をインストールした - $shibayu36->blog;
  • cpanmのバージョンは上げましょうという話 - $shibayu36->blog;

    とある事情があって古いcpanmに固定して使っている場所があったのだけれど、それによってハマったことがあったのでメモ。詳しいわけではないので、間違ったことを書くかもしれないです。何か間違っていたら指摘していただけると。 cpanmのバージョン1.5くらいを使っていて、Net::Twitter::Liteをインストールしようとしたら、以下の様な状況が起こった。 何もインストールされていないところにcpanm -L local Net::Twitter::Lite するとインストールが成功する Net::HTTPがインストールされているところに、cpanm -L local Net::Twitter::Lite すると、Invalid version format (non-numeric data) と言われて死ぬ 上のようになった理由としては、cpanにおけるversion rangeとい

    cpanmのバージョンは上げましょうという話 - $shibayu36->blog;
  • いろいろなツールをplenvに移行した - $shibayu36->blog;

    最近はplenvを使うべきって感じだったんだけど、promptとかemacsとかを対応させるのがちょっと面倒でサボっていた。そろそろやばいと思ったので全部plenvに移行した。 インストール macだったらbrewで提供されているので入れる。https://github.com/tokuhirom/plenv を参考に。 $ brew update $ brew install plenv $ brew install perl-build $ plenv install 5.14.2 # お好みのperl入れる $ plenv shell 5.14.2 $ plenv install-cpanm promptに現在利用しているperlのversionを出力する 以下のように、promptにperlのversion出てるとうれしいのでそういう感じにする。 plenv version-nam

    いろいろなツールをplenvに移行した - $shibayu36->blog;
  • 1