サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
yuroyoro.hatenablog.com
どうも、しいたけです。 去年あたりからローレイヤー周りの知識を充実させようと思い、 低レイヤを知りたい人のためのCコンパイラ作成入門 を読んでCコンパイラを書いてみたりx86_64の勉強をしたりしていました。 今年に入ってから、よりローなレイヤー、具体的にはハードウェアやOSについてもう少し知りたいと思い始め、手頃な書籍を探していました。 CPUなどのハードウェア周りについては概要しか知らなくて手を動かしたことがないので、実際に何か作りながら学べるものとして、 O'Reilly Japan - コンピュータシステムの理論と実装 に挑戦することにしました。 O'Reilly Japan - コンピュータシステムの理論と実装 成果物は以下のリポジトリに置いてあります。 yuroyoro/nand2tetris 結論から言うと、やってみて大変楽しめました! 特にハードウェア周りは今まで挑戦したこ
こんにちわ、しいたけです。 今は夏休みで奥さんと子どもたちが帰省しているので、動物と2人で暮らしています。 で、外出すると動物だけを家に残していくことになります。 ペットモニターとか市販でもあるんですが、せっかくなので、 夏休みの自由研究として、ラズパイ+カメラモジュールとWebRTCを使って、外出先からでも動物の状態を確認できるやつを作ってみました。 ↑ 死活監視される動物の様子です 用意したもの Pi3 B+ スターターキット V3 16GB 白 Piカメラ Official V2 for 3/2/1/0 Manfrotto ミニ三脚 PIXI ブラック MTPIXI-B カメラ用 Manfrotto スマートフォン用三脚アダプター MCLAMP HAKUBA 自由雲台 BH-1 ラズパイ3とケースのセットとカメラモジュールは Raspberry Pi Shop by KSY で購入。
タイトルで全部言い切ってますが // Optional container like maybe monad class Option { constructor(value){ this.value = value } async promise() { return new Promise((resolve, reject) => { if (this.value) { resolve(this.value); } else { reject(undefined); } }); } } こんなMaybe とかOptionalっぽいやつを用意します。 promise() で Promiseを生成して返すようにします。もってる値に応じて resolve (JustやSome)したり reject (Nothing)したりします。 const o1 = new Option("foo");
こんにちは、しいたけです。 某所で関数型プログラミングとはリスト処理のことなのか、と燃えているのを見て、関数型プログラミングとは何か、ということを自分なりの考えを述べたいと思いました。春なので。 この資料は2年ほど前にSupershipの社内勉強会で使ったものですが、この中で関数とオブジェクトを対比している箇所があります。 関数もオブジェクトも、変数や関数の引数戻り値として扱える第1級の値であり、状態を持ち(メンバー変数/クロージャ)、組み合わせが可能(delegate, composition/関数合成)、である、と。 ではオブジェクト指向と関数型プログラミングで何が決定的に異なるかというと、設計・実装のアプローチに何を中心に据えるか、ということだと思います。 オブジェクト指向では、クラス・オブジェクトをモデリングし、各種のオブジェクト指向的デザインパターンを用いてオブジェクト同士を組み
ᕕ( ᐛ )ᕗ こんにちわ、しいたけです。 webのhttps化が推進される昨今ですね? https通信は経路上での通信内容が盗聴・改竄されるのを防ぐことができますが、開発用途でhttps通信の内容を確認したい場合が稀にあります。 そのような場合は mitmproxy などを導入すればよいのですが、せっかくなので実際にこのようなProxyをGoで実装してみて、 中間者攻撃(Man-in-The-Middle Attack)がどのような手法でhttps通信を盗聴・改竄するのか確かめてみました。 実際に書いたProxyのコードはこちらです yuroyoro/mitm_proxy_sample https proxy と HTTP CONNECT tunneling まず、通常のhttps Proxyの動作を確認してみましょう。 httpsでは、ProxyはクライアントからのCONNECTメソッ
こんにちわ。しいたけです。今日はgoroutineの実行状況をいいかんじに可視化するツールの話です。 goのプロファイリングツールと言えば、 runtime/pprof や net/http/pprof ですよね。これらの使い方はググればすぐに出てくるのですが、 詳細なtraceを取得して可視化できる runtime/trace については、日本語の情報が殆ど無いので書いてみましいたけ。 runtime/trace はgoroutineの実行状況やsystem callのイベント、Heapやnetworkの状況をこんな感じに可視化してくれるので便利です。 これは自作のクローラーを動かしている際のtraceを可視化したもので、横軸がタイムラインになっており、上段に Heapの使用状況やgoroutineとos threadの数が, 下段はnetworkやProccesor(GOMAXPROC
こんにちわ。しいたけです。今日はディスク使用量をFlameGraphにするツールの話です。 FlameGraphについては、 Flame Graphs や GolangでFlame Graphを描く | SOTA を読んでもらうのが手っ取り早いのですが、ようはプロファイル結果を可視化する方法です。縦軸が呼び出しの階層に、横軸がサンプル数や実行時間などに対応しており、どの関数が支配的かを直感的に見ることができる優れたグラフですよ。 で、このFlameGraph、別にプロファイル結果だけではなく、ツリー構造で各ノードが量を持つ場合に、枝毎の累積量を可視化するのに利用できます。プロファイル以外に、ツリー構造でノードが量を持つ例として、ディレクトリ階層毎のディスク使用量が考えられます。 というわけで、指定ディレクトリ以下のディスク使用量をFlameGraph化するツールを書きました。 GitHub
最近Elixirが人気ですよね。Erlang VM上でOTPの恩恵を受けながら簡潔な記法で並行処理を書ける言語ということで話題になっていますな? Elixirは関数型プログラミングのエッセンスを取り入れていると言われており、そのひとつにPipe演算子(|>) がある。 Enumerables and Streams - Elixir Kernel – Elixir v1.1.1 Pipe演算子(|>)とは何かというと、左辺の値を右辺の関数の第1引数に適用する演算子。 iex> [1, [2], 3] |> List.flatten() [1, 2, 3] 上記のコードは、左辺の[1, [2], 3] を 右辺の List.fatten(list) の引数として渡す。 このPipe演算子は、Stream モジュールなどと合わせて利用するとデータが左から右へ流れている模様をコードとし視覚化する
http://commit-m.minamijoyo.com/:titele という有名OSSのコミットメッセージを検索できるサービスがあって、英語のコミットメッセージを書くときに「あれ? これどういう風に書けばいいんダー」ってときに例文を検索できて捗る。 commit-m.minamijoyo.com が、自分の場合はコミットメッセージ書くときはvim とか git commit -m とかからなのでCLIで検索できたらより捗るかと思ってGolangで書いた。 APIとかは無いようなのでクロールしてる。 GoQuery 使えばこの手のクローラーが一瞬でかけるのでよさがある。 github.com go get github.com/yuroyoro/gommit-m で入れた後に gommit-m keyword [page] で検索できる。
スライドです 本当は怖いオープンクラスとDuckTyping - 表参道.rb #4 まぁたいした話じゃないんですが、マッドマックスの画像をスクリーンに大写しできたのでその点だけで個人的には満足しています 「型を讃えよ」
あまりにもテスト通らないのでデスメタル聴き始めた— ⁰⁰⁰⁰null (@yuroyoro) 2015, 7月 2 このような事があったので自動化した。 Mac限定。 こんな感じ。successだとレベルがアガる。 事前にbash-itunes というコマンドラインツールを入れておく。 iTunesを日本語で使ってる場合、patchを当てる必要がある。 こちらを山椒 コードはこれな。 class PlayItunesReporter attr_accessor :success_track, :failure_track def initialize(options = {}) @success_track = options[:success] @failure_track = options[:failure] end def dump_summary(notification) re
以前から気になっていたSIMDプログラミングをGoでやってみた。 Single Instruction Multiple Data (SIMD) 演算とは1回の命令で複数のデータを同時に処理する演算です.近年の CPU には SIMD 演算を行うことができる SIMD 演算器が搭載されており,Intel 社の CPU ならば Streaming SIMD Extensions (SSE) を用いることで SIMD 演算を行うことが可能です.SSE は CPU に搭載されている 128bit レジスタを用いて演算を行うため単精度データならば4つ,倍精度データならば2つずつ演算を行うことができます.また,近年 SSE 後継の SIMD 拡張命令として Intel Advanced Vector eXtentions (AVX) が登場しました.AVX は第2世代 Intel Core i シリ
魂のステージが低いのか、CPUの歓声が聞こえません。 CPUの歓声は聞いたことないですが、ハードディスクの断末魔なら何度も聞いてます— ⁰⁰⁰⁰null (@yuroyoro) October 19, 2014 なので、CPUの気持ちになれるツール作った。 Remix: Latency Numbers Every Programmer Should Know(2014) 右側にあるボタンっぽいのをぽちぽちして、CPUの気持ちになってみるとよいかも知れません。
最近Scala Complierをforkするのが流行っているようですね。 paulp/policy · GitHub typelevel.scala | Typelevel Scala and the future of the Scala ecosystem 「俺のコンパイラか?欲しけりゃくれてやる、探せ!この世の全てをそこにおいてきた!」 男達はscalacをforkし、夢を追い続ける。世は正に大コンパイラ時代! 乗るしかないこのビッグウェーブに!! 俺もScalaをforkしてTypolevel Scala Compilerを作ったぜ!! コンパイラ王に、俺はなるッ!!! yuroyoro/typolevel · GitHub 久しぶりのScalaネタがこれとか救いようの無い老害だなテメーは
何をいっているのかというと、こういうことです rubyで、obj.send(pred) がtrueならばselfを、装で無い場合はnil を返すメソッド欲しい— ⁰⁰⁰⁰null (@yuroyoro) August 28, 2014 foo.present? ? foo : other みたいなの書くのダルいので— ⁰⁰⁰⁰null (@yuroyoro) August 28, 2014 class Object def filter(&pred) (yield self) ? self : nil end end 書いてみた。 foo".filter(&:present?) # => "foo" "".filter(&:present?) # => nil ようは、 str.present? ? str : other みたいなやつを書きやすくするためのものです str = "hoge
git-ignore add みたいのが欲しい— azu (@azu_re) August 24, 2014 ちょろっと書けそうだったので書いた。 yuroyoro/git-ignore · GitHub Demo Installation PATH通った場所においてくれ curl -sL https://raw.githubusercontent.com/yuroyoro/git-ignore/master/git-ignore > ~/bin/git-ignore Examples `git ignore add "pattern"`で、.gitignoreへ追加する。 $ git ignore add '*.log' .gitignoreから削除するには、`git ignore remove "pattern"`を実行する。 $ git ignore remove '*.log' a
今まで、rspecコマンドでは任意の引数を渡すことはできなかったので、環境変数経由で引き渡すという方法をとっていた。 ( ;゚皿゚)ノシΣ フィンギィィーーッ!!! MY_OPT1=true rspec spec/my_spec.rb環境変数で渡すのはダルいのでなんとかしたいと思い、`--tag`オプション経由で値を渡すというダーティなhackを書いた。 仕掛けは、helper.rbなどで、以下のように`Rspec.world.filter_manager.incusions`から引数を切り出してクラス変数に保持しておくようなアレをホゲる。 helper.rb class MyOptions class << self OPTION_KEYS = [:my_opt1, :my_opt2] attr_accessor :options def parse(world) @options =
Go lang勉強会 - connpassで発表してきた。 今までにblogに書いたcgoの話。 以下が資料とサンプルコード。 資料 : http://yuroyoro.net/trying_cgo/ サンプルコード : https://github.com/yuroyoro/trying_cgo 久しぶりに人前で発表した気がする。 当日はdemoもやるとなると時間が足りなくなるだろうという予想通りになり、ブランクを感じた。 あと、ネタ成分が不足気味だったのでリハビリしなければならない。 他の人の発表も面白かった。特にライセンスの話など。皆さんお疲れ様でした。 こんな勉強会なら、また参加したいものです。
vimの人はこんな感じで autocmd FileType go :highlight goErr cterm=bold ctermfg=214 autocmd FileType go :match goErr /\<err\>/
3年ほど前に、GitterbというGitリポジトリのコミットログを可視化するツールを作った。 ぼくのかんがえたさいきょうのGit Repository Browser - ( ꒪⌓꒪) ゆるよろ日記 Gitterb by yuroyoro yuroyoro/gitterb · GitHub このアプリケーションはRuby1.9/Rails3.2 で書かれていて、今となってはもう動かないので、Ruby2.1/Rails4へupgradeした。 デモサイトはこちら http://gitterb.yuroyoro.net/ 依存しているGritというRubyからGitリポジトリをホゲるGemがRuby2系では動かないので、libgit2のRubyバインディングであるRuggedに移行している。 あと、せっかくなのでCentOS7で動くDockerImageを作った。Docker Hubにおいてあ
はじめてのGo Runtime。 ということで、GoのAST(抽象構文木)を可視化するツールを書いた。 yuroyoro/goast-viewer · GitHub goast.yuroyoro.net にデモがある。 go/astパッケージを使うと、GoのソースコードからAST(抽象構文木)を得ることができる。 あとはこれをAngulerJSとか使ってみて可視化してみただけ。 ソースコードをアップロードするか、入力してparseボタンを押すと、右側にASTが展開される。マウスオーバーするとASTのnodeに該当するコードが選択状態になる。 以下の手順でインストールできるます $ go get -d github.com/yuroyoro/goast-viewer $ cd $GOPATH/src/github.com/yuroyoro/goast-viewer $ make instal
arr = [ ["foo", "", "bar"], nil, ].sample arr.try(:reject, &:blank?) #=> [“foo”, “bar”] Object#tryはnil-safeなcallとして使える blockを取るメソッドのsymbolを渡した場合に、第二引数にprocを渡しても動作する 要activesupport.gem tryと関数合成は本体に入れて欲しい
うちのメロンちゃんはLv.117です。 Golangで、簡単なWebアプリケーションをいくつかのフレームワークを用いて作成してみた。 サンプルアプリケーションは、こんな感じのPhotoギャラリーアプリケーションで、画像URLを入力すると追加される。 PureというCSSフレームワークのサンプルから拝借した。 Photo Gallery – Layout Examples – Pure ソースコードはGithubで公開している。 yuroyoro/golang_webapp_framework_samples · GitHub 今回試したのは、net/httpパッケージ、Martini、 Revel の3つ。 net/http編 まずは基本のnet/http編。ソースコードはこちら。 http - The Go Programming Language net/httpパッケージでサーバーを
cgoとLevelDBを使って、タイトルのとおりのものを作ってみた。頑張ればRiakとかInfluxdbみたいなのを書けるかもナー。 ʕ ゚皿゚ ʔ cgo楽しいおシーゴォー コードはすべてGithubにある。 yuroyoro/leveldb-go-sample · GitHub なお、この実装はあくまで個人的な練習で作ったものなので、まともにLevelDBをGoから使うならばInfluxdbでも使ってるlevigoがおすすめ。 LevelDBはあらかじめinstallしてある想定。 mac osxなのでbrew install leveldbで入った。 cgoでLevelDBをwrapする まずは、cgoを使ったLevelDBの簡単なwrapperを用意する。単にLevelDBを使うだけなら、感覚的にはsqlite3みたいに、leveldb_openでopenして得られるlevel
cgoとlibv8を使って、タイトルのとおりのものを作ってみた。頑張ればnodeみたいなのをgoで書けるかもナー。 ʕ ゚皿゚ ʔ cgo楽しいおシーゴォー 基本的な方法は以下の記事にあるとおりだが、v8のバージョンが上がっていたりするので、多少の手直しをしてある。 Embedding V8 Javascript Engine and Go | Brave New Method コードはすべてGithubにある yuroyoro/golang_v8_Embedding_sample · GitHub まず、libv8を使う以下のようなwrapperをc++で用意して、cgoから使えるようにしておく。 v8warpper.h #ifndef _V8WRAPPER_H #define _V8WRAPPER_H #ifdef __cplusplus extern "C" { #endif /
前回から一年以上が経過しているけど、最近lambda_driver.gemに機能を追加したので、そのことについて書こうと思う。 Rubyで、モナ……っぽい関数合成を実装した話だ。 Rubyで関数合成とかしたいので lambda_driver.gem というのを作った - ( ꒪⌓꒪) ゆるよろ日記 関数合成 関数合成については以前に書いたので、こちらを見て欲しい。 「関数型Ruby」という病(2) - 関数合成 Proc#compose - ( ꒪⌓꒪) ゆるよろ日記 おさらいをしておくと、関数合成とは、 関数gと関数fから、g(f(x))という関数hを新たに作り出すことだ。 (g ∘ f)(x) = g(f(x)) 関数gと関数fの合成関数g ∘ fに引数xを渡した結果は、関数gにf(x)の結果を渡したものと等しい。つまり、このような操作である。 f = lambda{|x| x + 1
タイトルの通りのことをやりたかったっぽいので。 例えば、現在のRubyのバージョンはREE 1.8.7だけど、次回リリースからは1.9.3にあげることになっている場合なんか、masterブランチはREE使うけどdevelopブランチは1.9.3で動作させる必要があるっぽいけど、checkoutするたびにrbenv localとかするのダルいしよく忘れるので全力回避したいっぽいです。 で、どうやるかというと、gitのhookでpost-checkoutというのがあり、そこに色々書くとふんわりとやってくれる風味っぽい。 gitリポジトリの.git/hooks/post-checkout をこんな風に書いておくとよいっぽい。 #!/bin/sh # Change ruby version CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD` RUBY_
お役立ち情報です。 @yuroyoro スクロールはホイールでの操作になりますね。.tmux.confにset-window-option -g mode-mouse onを追加しておくと、ホイールでtmuxのバッファをスクロール出来るようになります。— いわもと こういち (@ttdoda) 2013, 9月 25 .tmux.confにこのように書くとよいそうです。 set-window-option -g mode-mouse on iTerm2で、以下のようにxterm mouse reportingを有効にしておきます。 さっそく設定。 yuroyoro/dotfiles https://github.com/yuroyoro/dotfiles/commit/4c6eb8520d878867fcf1a685991067d56ff84cb9
こんなコードがあった。 blockの評価結果が偽だったらエラーにする、という意図だと。 def die!(&block)! yield || raise("error") end 実行 irb(main):008:0> die! { true } RuntimeError: error from (irb):6:in `die!' from (irb):8 from /usr/local/var/rbenv/versions/1.9.3-p448/bin/irb:12:in `<main>' irb(main):009:0> die! { false } => true ( ゚д゚) ?! 正しくはこうですね def die!(&block) yield || raise("error") end syntax errorにはなりませんか。そうですか……。
次のページ
このページを最初にブックマークしてみませんか?
『( ꒪⌓꒪) ゆるよろ日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く