You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
本稿は 2015年5月27日 (水) に Armin Ronacher (@mitsuhiko) 氏によって書かれた記事の翻訳です。 Rust for Python Programmers 訳者は Rust を全く知らないため、勘違いや誤訳もあると思います (特に用語) 。そういった誤りを見つけたら編集リクエストを送ってもらえると助かります。 いま Rust 1.0 が登場して非常に安定しているので、Python プログラマー向けに Rust の入門記事を書くとおもしろいのではないかと私は思いました。この手引きでは、Rust 言語の基礎を調べながら異なる構成概念とそれらがどう振る舞うのかを比較します。 Rust という言語は Python と比べると全く異なる獣です。単に一方がコンパイル型言語でもう一方がインタープリター型言語であるというだけでなく、その主要な言語機能においても全く違ってい
Part 1 Task の依存関係の解決 Part 2 Workflow の冪等性 Part 3 Task 間でのデータのやり取り Part 4 Task の並列実行 Workflow Engine って何? Workflow Engine と言っても多機能なものから、シンプルなものまで様々なものがあります。そこで、主旨がぶれないように、この記事での Workflow Engine は、以下の要件を満たすソフトウェアとします。 Workflow Engine とは、依存関係のある複数の Task を、意図した順番通りに実行するもの この記事では、この要件を満たす Workflow Engine を Ruby でつくる方法について解説します。 依存関係を記述する 依存関係を解決するコードを書く前に、依存関係を記述する方法をまず決めましょう。 依存関係を記述するには、luigi のように Ta
Part 1 Task の依存関係の解決 Part 2 Workflow の冪等性 Part 3 Task 間でのデータのやり取り Part 4 Task の並列実行 まえおき この連載記事で作成する Workflow Engine は、Luigi の設計思想に大きく影響を受けています。なので、 @k24d さんの Luigi によるワークフロー管理 を先に読んでおくと、理解が深まると思います。 前回は Task の依存関係の解決方法を実装しましたが、Part 2の今回は Workflow の冪等性について実装していきます。 Workflow を実行、制御する上で、冪等性(何回実行しても結果が同じであること)は大変重要です。なぜ重要かというと、現実問題として Workflow は途中で失敗する可能性があり、いかに確実に簡単にリトライ処理ができるかが、業務システムを運用の手間に直結するからで
今回は Task 間でのデータのやり取りを実装していきます。次回以降が少し長くなるのと、実装が簡単なので、今回は短めにまとめます。 Task 間のデータのやり取りとは? 「Task 間のデータのやり取り」とは何かを、いつもの例で説明します。 「Task 間のデータのやり取り」というのは、正確には「下流(Downstream)Task の output メソッドの戻り値を、上流(Upstream)Task が参照できる」機能のことです。上の図でいうと、TaskB, TaskC は TaskD の、TaskA は TaskB, TaskC の output メソッドの戻り値である Target クラスのインスタンスを参照できます。この機能を持つメソッドを、input メソッドとして追加します。 すると TaskD#output == TaskB#input TaskD#output == Ta
これらは排他的ではないので、組み合わせて利用することも可能です。今回は、最もスケールしない1が、最も実装が簡単な Thread を利用して実装していきます。 実装方針 並列実行を処理の概要は以下のようになります。 依存関係に基づいて、Task ソートする。ソートした、配列を Task Queue とする Task 実行用の Worker スレッドを指定した数だけ用意する Worker スレッド内で、Task Queue から Task を取り出す Task が実行可能になるまで待つ Task を実行する Task クラスの変更 並列実装をするにあたって、Task が実行可能状態にあるのかを判定する必要があります。これまでの説明から、「Task が実行可能である」というのは「依存する全ての Task が完了している」ことであり、そして、「Task が完了している」というのは、「出力となる T
Part 1 Task の依存関係の解決 Part 2 Workflow の冪等性 Part 3 Task 間でのデータのやり取り Part 4 Task の並列実行 まえおき この連載記事で作成する Workflow Engine は、Luigi の設計思想に大きく影響を受けています。なので、 @k24d さんの Luigi によるワークフロー管理 を先に読んでおくと、理解が深まると思います。 前回は Task の依存関係の解決方法を実装しましたが、Part 2の今回は Workflow の冪等性について実装していきます。 Workflow を実行、制御する上で、冪等性(何回実行しても結果が同じであること)は大変重要です。なぜ重要かというと、現実問題として Workflow は途中で失敗する可能性があり、いかに確実に簡単にリトライ処理ができるかが、業務システムを運用の手間に直結するからで
Goでプログラムを書いていると、汎用的なmap関数やfold関数(reduce関数)のようなものがあれば便利なのに、という場面が結構あります。 そういうときは、それぞれの型専用の関数を一通りあらかじめ用意しておく、というような方法でお茶を濁すことが多いと思いますが、そんなものではHaskellやLispな人はもちろんRubyやPythonに慣れたLL脳な人にも満足できないはずです。 そこで本記事では、ジェネリックな高階関数をリフレクションを駆使して実装することで、Goで関数型プログラミングを試みようと思います。 単純な実装のmap関数 最初に、関数を引数にとる関数を単純に実装した場合をみてみます。 例えば、sliceのすべての要素に対して関数を適用した結果を新たなsliceで返すMap関数を考えてみます。 package main import ( "fmt" ) var ( ints =
この記事では、RuboCop の開発をする上で役に立つ情報の内、デバッグ入門にフォーカスした話をお伝えします。 対象読者 RuboCop の開発者 (not user) RuboCop の開発をしてみたいけど敷居が高いと感じている人 RuboCop をソースからインストールする RuboCop をデバッグするために、まず最新の RuboCop をソースからインストールしましょう。 バージョンが古かったり、最新バージョンでもリリース版を使用していたりすると、「実は master では直っているバグだった」なんてことがよくあります。 また、コードに修正を加えた場合も、修正を加えたコードをインストールする必要があります。 そのため、まずはソースから RuboCop をインストールする方法を知りましょう。 $ git clone https://github.com/bbatsov/rubocop
こんにちは、pockeです。今回はLintツールのひとつ、RuboCopのCopの実装方法に関して述べようと思います。 対象読者 RuboCopの内部実装を知りたい人 Lintの実装をしたい人 Cop とは? Cop とは、RuboCopにおけるひとつのルールの単位です。 例えば、 evalメソッドの使用を検出する インデントの不整合を検出する Gemfile内のgemがアルファベット順になっているか検査する などがひとつのCopの単位となります。 今回述べるscope RuboCopには現在(2016/12/23現在のmaster)、321個のCopがあります。 数多くのCopがある中で、Copが問題とする領域によってCopが必要とする情報が変わるため、Copの実装方法も変化します。 そのためRuboCopにはCopの実装にいくつかの方法があるのですが、今回はその中から1つを選んで紹介し
#! vim: ruby ##### Yuto's Gemfile ##### source 'https://rubygems.org' gem 'rails' # Authentication gem 'devise' # Flexible authentication solution for Rails with Warden gem 'devise-i18n' # Translations for the devise gem gem 'omniauth-facebook' # OmniAuth strategy for Facebook gem 'omniauth-twitter' # OmniAuth strategy for Twitter gem 'omniauth-google-oauth2' # OmniAuth strategy for Google gem 'om
はじめに Effective Ruby、やっと読み終わった!!! ゴールデンウィーク中の課題図書だったのに、思ったよりも内容が重くて読み終わるのに一ヶ月くらいかかってしまった。 Effective Ruby 作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 本書は48項目から構成されていてるんですが、このエントリは、うちいくつかの項目についての感想や備忘録になります。 なお、各項目におけるサンプルコードは本書に掲載されているものではなく、復習のために自分で書いたものです。 感想・備忘録など 項目4 定数がミュータブルなことに注意しよう 定数が配列やハッシュなどのコレクションオブジェクトの場合は、コレクションの要素もfreezeしないとダメ。 # ダメな例 PERFUME = %w(Aa
Effective Ruby をやっと読みました! Effective Ruby 作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メディア: Kindle版この商品を含むブログ (5件) を見る 薄いと思って油断したら案外重かった……! ざっくりした感想として、Ruby がそこそこ使えるようになってきた人が読むと非常に勉強になる本、だと思いました。 読んでて「へぇ!そうなんだ!」とか「おお!やってみよう!」とか感じることが多く、面白かったです。 ただ、案外重くて、寝る前に読んでたらスヤスヤと爆睡したりもしてました。 会社で「睡眠に Effective な本なんやな」とか言われました。 素晴らしい本です。 本題 さて、実はタイトルをこちらの記事からパクリました。 web-salad.hateblo.jp いつも隣でワイワイ喋りながら働いてる同僚の記事
自己紹介 cuiとリファクタリングが好きなrailsプログラマです。 awsなどのインフラ周りも触ります。 ジモティーという会社で同名のサービスを作ってます。 会社でvim使っているのは自分だけで、寂しいです。 zsh tmux vim peco ergodoxのススメ(+α) cui toolを使いこなすと作業が捗る tmuxのススメ(1) 必要な時に、必要な分だけペインを分割して使っていくのが好き tmuxのススメ(2) zsh起動時に自動起動にしておく # tmux自動起動 if [ -z "$TMUX" -a -z "$STY" ]; then if type tmuxx >/dev/null 2>&1; then tmuxx elif type tmux >/dev/null 2>&1; then if tmux has-session && tmux list-sessions
紹介します。 Railsのコア部分とか。 gem 'rails' WAFと呼ばれる何か。Rubyのキラーフレームワーク。 デフォルトのメッセージとかの多言語化は、gem 'rails-i18n' をどうぞ gem 'mysql2' DBつなぎにいくマン。 MySQL自体はOracleに買収されちゃったので、Postgresqlに戻ってもいい気がしてる。 gem 'unicorn' 本物のサーバーの上でRailsを動かすためのやつ。 unicornとかpumaとかpassengerとかthinとかありますねー。 今はどれがいいんだろう。 Model系のgem gem 'default_value_for' デフォルト値の設定用。 before_validationとかで入れればいいんだろうけど、これ使ったほうが宣言的なので好み。 gem 'enumerize' RailsにEnumが入ったん
最近、Railsプロジェクトでとりあえず入れているgem20個まとめております(随時更新中です) 自分のメモ用なので特に目新しいものはないですが…笑 何か、おすすめがあればぜひ教えてください gem 'devise' 簡単ログイン実装のgem(冷静になると複雑) http://qiita.com/Salinger/items/873e3c667462746ae707 gem 'slim-rails' slimの記法を使うためのgem http://ruby-rails.hatenadiary.com/entry/20140929/1411997071 gem 'draper' decorator使うためのgem http://morizyun.github.io/blog/draper-ruby-gem-code-clear/ gem 'rubocop' rubyらしいコードを書くためのg
awesome_printはrails consoleでも活用できます。 下準備 Gemfileのdevelopmentグループに、pry-railsとawesome_printを記述 group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' # Access an IRB console on exception pages or by using <%= console %> in views gem 'web-console', '~> 2.0' # Spring speeds up development by keeping your application running in the ba
この記事は、Ruby開発環境 Advent Calendar / Jul.の3日目の記事です。 テスト自動実行のススメ TDDを実践していると、Red -> Green -> Refactoring をリズムよくループさせることが重要となります。 そこで、コードの変更を検出してテストを自動で実行するようなツールによるサポートがあるとものすごく捗ります。 古くは autotest(ZenTest) のような gem を利用して実現していました。 今でも「ruby 自動テスト」とかでググると autotest に関する昔の記事が上位に出たりします。 autotest は定まった環境では非常に便利なのですが、 少し違ったことをしようとすると、変更が非常にめんどくさく、柔軟性に欠けていました(今もそうかは知りません)。 そこで、監視対象とそれが変更された時に何をするかがDSLで簡単に書けるような
テスト実行中に、「今ってどんな状態なんだっけ?」と知りたいことがあります。 そこで役に立つのがlaunchyというgemです。 https://www.ruby-toolbox.com/projects/launchy 使い方 launchyをインストール Gemfile group :test do gem 'launchy', '2.4.2' end $ bundle install --without production specファイルを記述 describe "Top page" do it "should have 'home page'" do visit '/static_pages/home' # ブラウザで開く save_and_open_page page.should have_content('home page') end うん。便利です。
初めての人のためのLISP[増補改訂版]のメモです。 最初:初めての人のためのLISP (第1講-第5講) - もうカツ丼でいいよな 関数引数の基本はapply applyの第1引数は関数で、第2引数がその関数の引数のリスト(第11講)。 数値だけが入ったリストの総和を計算する。 (setq x '(1 2 3 4 5 6)) (apply '+ x) ; => 21 funcall funcallを使うと引数をリストにしなくてもよい。 (funcall '+ 1 2 3 4 5 6) ; => 21 mapcar mapcar関数はリストの各々の要素に関数をapplyした結果をリストとして返す。 (setq x '(1 2 3 4 5)) (mapcar (lambda (x) (* x x)) x) ; => (1 4 9 16 25) 定義 (defun mapcar (fn mli
本で言う第10章, その他の機能. 本は「やさしいLisp入門」. もう終わりだな. 局所関数. ;; 構文 (flet ((局所関数1 引数リスト1 局所関数定義1 ...) (局所関数2 引数リスト2 局所関数定義2 ...) ... (局所関数N 引数リストN 局所関数定義N ...)) 実行式) ;; letに対するlet*みたいな位置付けの関数. ;; labelsは, fletとほぼ同じだが, 同時に定義する局所関数を相互に呼びだすことができる. (labels ((局所関数1 引数リスト1 局所関数定義1 ...) (局所関数2 引数リスト2 局所関数定義2 ...) ... (局所関数N 引数リストN 局所関数定義N ...)) 実行式) 多値. ;; floorは小数点以下切捨ててくれる関数. ;; この関数では余りも通常, 発生している. > (floor 11/3)
rspec で時間を操作したかったので delorean を使おうとしたけど、timecop のほうが機能も多いし、GitHub の Star も 400 対 1500 だし、delorean 全然アクティブじゃないし、ってことで timecop 試してみました。 (書いてある内容は readme とほぼ一緒です。) 感想 timecop いいんじゃないでしょうか。delorean もそんなに使ったことあるわけじゃないのであんまり比較できないですが。そして delorean って名前のほうがいけてるけど。 freeze、scale は delorean にはない機能っぽい。scale なんかは実際に時間を進行させたうえでテストしたいときに便利。 機能 travel 指定した時間に移動する。移動したあとも時間が進む。 Time.now => 2014-12-01 10:46:12 +0900
いままでノートPCで開発をしていた時は画面も小さかったのであまりバッファは分割していませんでした。最近広いモニタにしてバッファを分割することが多くなり、分割バッファの幅を変えるのにC-x {やC-x }でやっており結構面倒でした。 ネットで調べていいのがあったのでその設定をメモしておきます。 設定ファイルに下記を追加します。 (defun window-resizer () "Control window size and position." (interactive) (let ((window-obj (selected-window)) (current-width (window-width)) (current-height (window-height)) (dx (if (= (nth 0 (window-edges)) 0) 1 -1)) (dy (if (= (nth
$ # 本体インストール $ cargo install racer $ # racerのためにRustのソースコードを追加 $ rustup component add rust-src $ # パスの確認 $ echo ~/.multirust/toolchains/*/lib/rustlib/src/rust/src /Users/owner/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/src $ # パスを追加 $ echo "export RUST_SRC_PATH='$(echo ~/.multirust/toolchains/*/lib/rustlib/src/rust/src)'" >> ~/.profile $ # インストールチェック $ bash -l $ racer co
対象読者 EmacsでClojureScript開発している人。Spacemacsが気になっている人。Emacsの設定が面倒だと思っている人。 動機 Emacsの拡張パッケージ管理は基本的に面倒です。 まずどんな便利パッケージが世の中にあるか知らないと入れようがない上、入れたとしても .emacs.d/init.el にパッケージの設定を書かないと割りと使えたものじゃないというのがデフォルトです。 パッケージインストールも Cask や package.el などありますが、これを使っていくのはやっぱり面倒です。 Spacemacsの特徴 で、本題のSpacemacsですが、どんなものかというと、 いわゆる、Emacs以外のEmacsenではない (=Meadowなどのカスタマイズ済みEmacsではない) つまり、素のEmacsと組み合わせて使うものということです。 とはいえ、macOSだ
公式サイト A Tour of Go Web上で実行しながら学ぶことができる公式のチュートリアルです。 チュートリアル 公式のチュートリアルです。初学者向けからジェネリクスのチュートリアルなども用意されています。 A Tour of Goが終わった後に取り組むと良いでしょう。 Go Wiki Go Code Review Commentsなどが掲載されているGitHub上のWikiです。 パッケージドキュメント 標準パッケージやサードパーティ製のパッケージのドキュメントが見れるサイトです。検索もできます。 入門 プログラミング言語Go完全入門 筆者が作っている巨大なGoの入門資料です。なぜGoが作られたのか、から最新のジェネリクスの情報、静的解析まで扱っています。 Gopher道場 Goを体系的に学べる場です。10時間くらいある動画教材(自習室から入手可)もあります。 Go の最初の手順
先日、Go言語バージョン1.1がリリースされました。安定しているのは勿論、幾つか新機能が追加されましたが、何よりもパフォーマンスチューニングが施された一番嬉しいですね。 Go 1.1 performance improvements | Dave Cheney This is the first in a series of articles analysing the performance improvements in the Go 1.1 relea... http://dave.cheney.net/2013/05/21/go-11-performance-improvements さて今日はVimを使ってGo言語を開発する方法を紹介したいと思います。 VimでGo言語を開発するには、Go言語のリポジトリに含まれる misc/vim にランタイムパスを追加します。以下を vimr
はじめに こんにちは、Go界の橋爪功です。以前mattnさんがVimを使ったGoの開発環境というエントリを書かれていたんですが、自分用にもEmacs版を、と思ったので、まとめておきます。 基礎からわかる Go言語 作者: 古川昇出版社/メーカー: シーアンドアール研究所発売日: 2012/11/21メディア: 単行本(ソフトカバー) クリック: 7回この商品を含むブログ (2件) を見る 参考 Big Sky :: Vimを使ったGo言語開発手法 / - go - The Go Programming Language - Google Project Hosting Emacsのオプションを入れときましょう Adentures in Go: Using ctags with Go etags/ctagsを使いたい場合には、まだGoに対応してないので.ctagsファイルで対応 Emacsで
TimecopというGemを使うことで、好きな時刻に移動(Timecop.travel)させたり、時刻を止めたり(Timecop.freeze)といったことができ、日付/時間に関するテストをやるときに必須といっていいほど便利なGemです。 具体的な「日付/時間が関係するテスト例」として、うるう歳のテスト、税率変更のテスト、有効期限のテストなどがあります。 動作確認 Rails 4.1.7 Timecop 0.7.1 目次 Timecopのインストール方法 時間の移動方法(travel) 時間の停止方法(freeze) 時間の進みを加速させる(scale) Timecopのインストール方法 Gemfileにtimecopを追加します。 # Gemfile group :test do gem 'timecop' end Bundlerを実行します。 bundle install 時間の移動方
Spacemacsを使っているとき、タイムスタンプを挿入したいなら、さくっとuser-initに関数を定義すると良さそうです。 タイムスタンプを挿入する関数といえば、org-time-stampが挙げられますが、表示形式が<2017-02-13 Mon>となります。時刻まで入れたいときは、手動で入力が必要で面倒です。もっと便利な関数がEmacsでは用意されていると思ったのですが、Spacemacsでは動かし方がわかりませんでした。 Spacemacsに新しく関数を定義する $HOME/.spacemacsのdotspacemacs/user-initに以下の関数定義を追加します。 (defun my/insert-time-stamp () "Insert TimeStamp" (interactive) (insert (current-time-string))) M-x my/ins
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く