taisablog

taisa's engineer blog

20160208112338

投稿日:

-

執筆者:


comment

Your email address will not be published.

関連記事

PHPUnitの使い方を仕組みから理解する

ここ数年仕事ではPHPを使って開発をしていますが、最近品質について考える機会が増えたこともあり、これを機にPHPUnitと周辺のモジュールの仕組みを理解してより楽にテストができるようにしたいと思います。 PHPUnitは? Sebastian Bergmann Created PHPUnit. Co-Founded thePHP.cc. Helps PHP developers build better software. PHPUnitの作者は、Sebastian Bergmannという方でthePHP.ccのファウンダーのようです。関連情報は以下にて確認してみてください。 TwitterアカウントPHPUnit GithubPHPUnitマニュアル PHPUnitの構成 PHPUnitは以下のような構成になっています。 phpunit php-code-coverage php-file-iterator php-text-template php-timer php-token-stream phpunit phpunit-mock-objects これらはGitHub上ではそれぞれ別々のリポジトリに分かれていますが、phpunitが本体でそれ以外はデフォルトの関連ライブラリという位置づけになるかと思います。 PHPUnitのsrc構成 モックオブジェクトなどを除いたphpunitだけのパッケージとクラス構成を見てみるとこんな感じになります。 ├── Exception.php ├── Extensions │   ├── GroupTestSuite.php │   ├── PhptTestCase.php │   ├── PhptTestSuite.php │   ├── RepeatedTest.php │   ├── TestDecorator.php │   └── TicketListener.php ├── ForwardCompatibility │   └── TestCase.php ├── Framework │   ├── Assert │   │   └── Functions.php │   ├── Assert.php │   ├── AssertionFailedError.php │   ├── BaseTestListener.php │   ├── CodeCoverageException.php │   ├── Constraint │   │   ├── And.php │   │   ├── ArrayHasKey.php │   │   ├── ArraySubset.php │   │   ├── Attribute.php │   │   …

プログラミング言語の歴史を見える化してみた

「まつもとゆきひろ 言語のしくみ」と「Talk Python #100」のGuidoの回をたまたま同時期に見聞きしたら言語の歴史を調べたくなった。言語は少なからず他の言語から影響を受けたり、他の言語に影響を与えたりしている。ということでその影響関係をwikipediaの情報を元に見える化してみた。 まつもとゆきひろ 言語のしくみ ぐちゃ〜。。。これだけ見ると複雑に絡み合ってよくわからない。ただ見たい言語をクリックするとその言語がフォーカスされどの言語がどの言語に影響を与えどの言語に影響を受けたかが見やすくなる。 使い方 ソースはこちら GitHub taisa831/Langury Contribute to Langury development by creating an account on GitHub. 多重継承が可能なC++で(ただクラスをつくってるだけ)doxygenとgraphvizを使って出力している。 インストール DoxygenとGraphvizをインストールする。 brew install doxygen brew install graphviz Languryをクローンする。 git clone git@github.com:taisa831/Langury.git cd Langury 出力 doxygenコマンドを実行してHTMLを出力して開く。 doxygen open html/index.html select Classes -> Class Hierarchy 対象言語 ここで取り上げた言語はwikipediaの以下を対象にした。 ※一部記載なし。 ※実際とは異なっていたり足りてない箇所があるご注意ください。 各言語について 1950年代:FORTRAN、LISP、ALGOL、COBOL 1960年代:CPL、BASIC、PL/I、BCPL、Simula、LOGO、B 1970年代:Forth、Pascal、C、Prolog、Smalltalk、ML、AWK、Ada 1980年代:C++、Objective-C、Common Lisp、Eiffel、Erlang、Perl 1990年代:Python、Tcl/Tk、Haskell、Visual Basic、Ruby、Lua、Delphi、Java、JavaScript、PHP、OCaml、SuperCollider、R 2000年代:C#、Scala、D、F#、Go 2010年代:Ceylon、Rust、Dart、Elixir、Hack、Swift 1950年代 FORTRAN 1954年にIBMのジョン・バッカスによって考案された。コンピュータにおいて広く使われたプログラミング史上最初の高水準言語。 LISP 1958年にジョン・マッカーシーによってはじめて設計された。高水準プログラミング言語の中ではFORTRANに次いで2番目に古い。LISPの名前は「list processor」に由来している。 ALGOL 1950年代中ごろに開発され、多くの言語に影響を及ぼした。ACMや教科書や学術論文などでアルゴリズム記述のデファクトスタンダードとして30年以上使われ、ほぼ同世代の高水準言語であるFORTRAN、LISP、COBOLに比べて最も成功した。設計者はバウアー、 ルティシュハウザー、 サメルソン、 バッカス、 パリス、 ナウア、 ファン・ワインハールデン、 マッカーシー他。FORTRANで明らかとなった問題を防ぐよう設計された。「ALGOL」は「アルゴリズム言語」を意味する英語「algorithmic language」に由来する。 COBOL 1959年に事務処理用に開発されたプログラミング言語。名前は「Common Business Oriented Language」(共通事務処理用言語)に由来する。 1960年代 CPL CPLはケンブリッジ大学の数学研究所とロンドン大学コンピュータ部の共同プロジェクトとして1960年代に開発された。C言語の遠い祖先となった言語でクリストファー・ストレイチーが関与している。Combined Programming Language「統合プログラミング言語」の意。 BASIC 1964年に米国ダートマス大学にて数学者ジョン・ケメニーとトーマス・カーツにより教育用などを目的としてダートマスBASICが開発された。初心者向けのプログラミング言語として、1970年代以降のコンピュータ(特にパソコン)で広く使われた。Windowsアプリケーションの主力な開発言語であるVisual Basicの文法に影を残している。 PL/I 1964年に生まれ。教育機関、商用、工業で使用され現在も使われている。「programming language one」(ピーエルワン)に由来する。 BCPL Basic Combined Programming Language、Basic-CPLは、1966年にケンブリッジ大学のマーチン・リチャーズが設計した。B言語の基礎で、B言語から派生したC言語は文法的にBCPLの亜種。 Simula オルヨハン・ダールとクリステン・ニガードによってALGOL60を拡張する形で1960年代に開発が始められたシミュレーション用途のプログラミング言語(登場時期は1967年)。世界最初のオブジェクト指向言語であると言われる。 …

no image

2018年の抱負

今年も去年と同様に2018年の抱負を書く。 2018年の抱負 去年と同様にいろんなことはできないので大目標3つ+サブ目標。これ以外にも細かいものはいくつかあるけど別途まとめる。 CTOとして 機械学習 英会話 サブ目標 引き続きフロントエンド CTOとして 今年1月から不動産テックのスタートアップカンパニーであるCocolive.Inc(ココリブ)にCTOとしてジョインした。エンジニアとして長年やってきたけどCTOははじめて。そしてスタートアップながら良いエンジニアが5人集まったという好状況なのでこれまでのチームビルディングの経験を活かしつつ会社を成長させていきたい。自分個人の目標は昔から「日本のエンジニアの地位をあげる・世界に通用する」であるのでこれはぶれないようにする。また合わせて決めていることは「選択と集中」をすること。限りあるリソースの中でできることできないこと、やるべきことやらないことを見定めて1年やる。あとは楽しむこと。 機械学習 今年技術的には一番力を入れる予定。個人的な興味と現在のサービスの性質上なんらかの形で機械学習が導入できると大きなメリットが見込めることから本格的にスタートすることにした。 機械学習の勉強会を開催する 機械学習の話をいろんな人とする プロダクトに導入する 英会話 これまでほそぼそとやっていたけど実践では全然だめという状況なのでこれをなんとか打開したい。今年は1年間継続して実践メインで徐々に英語慣れしていく。去年はPyCon APAC in マレーシアに参加したけど今年は5月末にシンガポールで開催されるということでここを一つのターゲットとしてやる。 コミュニケーションがとれること サブ目標 いくつもやりたいことをこなすなんてことは自分にはできない。けどサブとしてでもやりたいもの。 フロントエンド 去年はサブでなくもはやメインとして活動できてなおかつ執筆もできたので結果的にすごいよかった。JSはやればやるほど面白いので引き続きやる。 VueJSの深掘り Reactの深掘り CSSやる コードリーディング 今年の抱負のまとめ なにはともあれ健康で楽しく仕事ができていることがなによりなので毎日「今日も生き抜こう©」とつぶやきながらマイペースにやっていく

Rust+WebAssembly で Hello, World!

以前 Rust をはじめてみよう!という記事を書いた。今回は Rust + WebAssembly を使って Hello, World!の出力をやってみた。 WebAssembly について まず WebAssembly とは何か。本家サイトの Overview をみてみる。ここにある通り、WebAssembly(WASM)は C/C++/Rust などの高級言語を使って開発をしバイナリ形式で動かすことができる。その為 Web 上で高速に動かすことができる。とりわけゲームなどの実行速度が求められるような分野で有効になる。Chrome、Firefox、Safari、Edgeで利用が可能。 WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications. https://webassembly.org/ よくデモに出てくる Unity を使った動画 https://webassembly.org/demo/Tanks/ Youtube動画 再生回数が一番多い動画をあげておく。2018年2月の動画ですごく分かりやすく説明されている。 Rust+WebAssembly のドキュメント https://rustwasm.github.io https://github.com/rustwasm ここからは以下の記事を実際にやってみる。実際にほぼそのまま実行しているだけなので以下についてはリンクをチェックするだけでも良いです。 https://rustwasm.github.io/book/game-of-life/hello-world.html 事前準備 参考URL:https://rustwasm.github.io/book/game-of-life/setup.html rustup を使って rust をインストールする curl https://sh.rustup.rs -sSf | sh source $HOME/.cargo/env source $HOME/.cargo/envは .zshrc などに記述しておくとよい wasm-pack インストール wasm-pack を使うとビルド・テスト・公開などが簡単にできる curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh cargo-generate インストール cargo-generate を入れるとcargo …

no image

DockerでGoのWebサーバーを起動する

ミニマムにやっておかないと忘れがちなのでメモ サンプル用Goサーバを作成する package main import ( “encoding/json” “net/http” ) type User struct { FirstName string `json:”firstName”` LastName string `json:”lastName”` } func users(w http.ResponseWriter, req *http.Request) { w.Header().Set(“Content-Type”, “application/json”) user := User{ FirstName: “John”, LastName: “Doe”, } var users []User users = append(users, user) json.NewEncoder(w).Encode(users) } func main() { http.HandleFunc(“/users”, users) http.ListenAndServe(“:8002”, nil) } 普通に起動して動作確認をします。 $ go run main.go http://localhost:8002/usersにアクセスするとJSON結果が出力されます。 [ { “firstName”: “John”, “lastName”: “Doe” } ] Dockerfile Dockerfileを作成します。alpineをつけるとよりミニマムなイメージができます。参考(https://hub.docker.com/_/golang?tab=description) FROM golang:1.14 #FROM golang:1.14-alpine # コンテナログイン時のディレクトリ指定 WORKDIR /opt/sandbox-docker-go # ホストのファイルをコンテナの作業ディレクトリにコピー COPY . . # ADD . . # ビルド RUN go build -o app main.go # 起動 CMD [“/opt/sandbox-docker-go/app”] 構成 $ …