サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
doloopwhile.hatenablog.com
Pythonでは__iter__メソッドを定義すれば((Rubyでは.eachメソッドを定義してEnumerableをincludeすれば、C#ではGetEnumerator()メソッドを定義すれば、 PHPではIteratorを実装すれば))、 晴れて独自のコレクション型でも、foreach文などでループできるようになるわけですが、でもGoにはそんな仕組みはありません。 まあ、妥協案としては、関数を引数にとる.Eachを作ることはできます。 sum := 0 myCollection.Each(func(x int) { sum += x }) 「でも、ぼくがつくったさいきょうの○○型をfor - range文で使いたいんだ!」 解法:channelを返す.Iter() 知ってる人は知っている、rangeにはchannelが渡せます。 A "for" statement with a "
Strategy設計の失敗 前回で、HTMLとテキストでレポートを出力するコードを書きました。その中でFormatter interfaceを定義し、その具象型としてPlainTextFormatter HTMLFormatterを定義するというStrategyパターンを採用しました。 しかし、気になる点が無いではありません。 package main import ( "fmt" ) type Formatter interface { OutputStart() OutputHead(text string) OutputBodyStart() OutputLine(line string) OutputBodyEnd() OutputEnd() } type Report struct { Title string Text []string Formatter Formatter
例:レポートを出力するクラス。 レポートをHTMLで出力するstruct*1を作ったあなた。上司からプレーンテキストでも出力してくれと言われてしまいました。とりあえず、フォーマットを引数で指定するようにしたのですが・・・ // template_method.1.go package main import ( "fmt" ) type Report struct { Title string Text []string } func (r *Report) OutputReport(format string) error { if format == "plain" { fmt.Printf("*** %s ***\n", r.Title) } else if format == "html" { fmt.Println("<html>") fmt.Println("<head>")
DBもapacheも何も要らない、空っぽのdockerコンテナが欲しい。 ただし、1度起動したら、docker stopするまで起動しっぱなしでいて欲しい。 回答 pseudo-tty付きのBashを走らせれば良いようです。 docker run -itd base bash -c "bash --rcfile <(echo \"trap 'exit 0' TERM\")" sleep infinityやtail -f /dev/nullも考えたのですが、これらはTERMシグナルに反応しないらしく、 docker stopするのに時間がかかってしまう(強制終了されてしまう)ようです。 こんなもの何に使うのか? docker run --netにcontainerという、コンテナ間でネットワークを共有するオプションがあります。 --net="container:<name|id>": Set
前回の「ECMAScript6を使うのは5年ぐらい時期尚早だった」が舌っ足らずで、はてぶでコメントがついていたので補足 trasuerを使えば後で移行できる・・・とは限らない koba04さん Traceur使ってES6で書いておくとそのまま移行出来るメリットはあると思う http://b.hatena.ne.jp/entry/225021305/comment/koba04 確かに、全ブラウザがES6を実装するようになれば、Traceurを捨てて、 ES6で書いたソースを直接実行できるようになるかもしれません。しかしながら・・・ 移行できるとしても数年先(その前に製品寿命が尽きる) 全ブラウザがES6を完全実装するとは限らない 「Traceurで生成したコードは動くのに、直接実行すると動かない!」が発生しそう。 少なくとも移行時にはテストが必要。 といった問題があるため、将来の移行可能性
新製品のWEB UIを作ることになりました。 「functionって書くのダルいから、CoffeeScriptにしましょうよ」 「でもCoffeeScriptって、そろそろオワコンじゃないか?」 「ちょっと待てよ、そろそろES6(ECMAScript6、JavaScriptの次期標準、後述)が使えるようになってるんじゃないか!?」 そう思ってES6を調べましたが、やっぱりCoffeeScriptを使うべきだという結論に達しました。 CoffeeScriptとES6のおさらい CoffeeScriptはいわゆるAltJS 長所 「functionの代わりに->」「ローカル変数にvarが不要」といったイケてる文法が使えます。 事前にJavaScriptにコンパイルして使う。*1 Ruby on Railsが対応しているなど、かなり普及しているようです。 短所 事前コンパイルが必要なので製品のビ
「VimからGoを」ではありません。 CLIツールに設定ファイルをエディタで開く機能(git config --editのような)をつくろうとしたところ、上手く行きません。exec.Command("vim").Run() で vimを起動しようとしても、exit status 1で失敗してしまうのです。 困った時のStackOverflow VimやEmacs etc. のようなターミナルアプリを呼び出すときも、Stdin/Stdoutを渡してやれば上手く動いてくれるようです。 http://stackoverflow.com/questions/21513321/how-to-start-vim-from-go Pass on stdin and stdout from the calling program which, provided it was run from a term
peco/pecoがそこそこ流行っているみたいなので、 git commit --fixup の fixup先を選択するコマンドを作ってみました。 git-fixup-peco: select fixup target with peco これで、git log してコミット番号をマウスでコピペする必要がなくなりました! # 実はパイプから1行選択するツールにはmooz/percolという元祖があります。 # percolはPython製、pecoはGolangで書きなおしたものです。 # pecoは単一バイナリとして提供されているのが売りですが、今のところ、機能ではpercolの方が優っている様子。
GOPATH 問題 Gophers! 周知のようにgoはGOPATHで依存パッケージをどこにインストールするか決められます。 入門記事などでは、~/.bashrcや~/.zshrcの中で export GOPATH=$HOME/gocode または export GOPATH=$HOME とすることが多いようです。 しかし、GOPATHを各プロジェクトのパッケージが混ざるので、 同じパッケージの異なるバージョンを同時にインストールできない 変なことをすると、全プロジェクトが巻き添えになる どれが不要なパッケージか分からなくなる という欠点があります。 そこでdirenv direnvを使うと、プロジェクトごと(ディレクトリごと)にGOPATHを分ける事ができます。 direnvのインスト―ルと基本的な設定 # HOMEにインストール $ git clone http://github.co
簡単なまとめ Open3.capture3 Open3.capture2 Open3.capture2e 普通に起動するとき Open3.popen3 Open3.popen2 Open3.popen2e 外部プログラムにパイプでつなぎたいとき バッククオート 書き捨てスクリプト用(出力がほしい場合) system 書き捨てスクリプト用(出力がいらない場合) IO.popen IO.pipe 使いません。 exec spawn fork など 使いません。 systemu 使いません。 Open3.capture2 Open3.capture2e Open3.capture3 Rubyで外部プログラムを実行する、たいがいのケースはOpen3.capture3でまかなえます。 外部コマンドを実行し、標準出力・標準エラーを文字列で取れ、終了コードも受け取れます。 標準入力に文字列を渡すこともで
社内勉強会で発表しようと思ったけど、寿司の運搬という重大任務を仰せつかって、流れてしまったスライドを転載 direnv is an awesome successorof ***env's. from Kenji Omoto (なお原稿では乱立する"***env"をマスコミは「目があって角が2本」としか認識していない国民的ロボットシリーズに、 anyenvをそれらを合体させたプラモ作例、 direnvを白くて角が1本のシンプルなデザインな新作に例えましたが、 大人の事情で削除しています。) pyenvはawesome Pythonには、プロジェクトそれぞれに専用の環境を作ってPythonのバージョンやライブラリを切り替えることができる、virtualenv, virtualenvwrappperというツールがあります。 Rubyなどの他の言語にも、virtualenvのようなツールがありま
https://github.com/doloopwhile/gocheckout 使用例 martiniのバージョン0.1を使いたいとき、 gocheckout github.com/go-martini/martini v0.1 なぜ作ったか? 周知の通り、Go本体にはRubyのBundlerのような、依存ライブラリのバージョンを指定する仕組みがありません。 その解決案として、 Gom BundlerのGolang版 Gondler 記事 BundlerのGolang版2 gopkg.in 特定バージョン用のURLを生成するWEBサービス ソースコードを丸ごと、製品レポジトリに取り込む!(vendoring) などがあります。 しかし、とりあえずGomを使ってみて感じたのが 「Gomを使わなくても$GOPATHでどこにでもインストールできるよな」 「$GOPATHを明示すればgom r
Decoratorパターンの項でも書きましたが、「メンバのメソッドに丸投げするメソッド」をしばしば書く必要が出てきます。 class WriterDecorator(object): #以下のメソッドは単にwriterに丸投げ def writeline(self, line): return self.writer.writeline(line) の様に。そこで、こういうのを自動的に行うようにします。 やり方は数種類あるようです。 方法1:__init__で属性をセット 一番分かりやすい方法です。getattr(self.writer, name)で、self.writerのbound methodを取れるのを利用します。 class SimpleWriter(object): def __init__(self, path): self.file = open(path, "w") d
Python Advent Calendar 2013の13日目です。 Python 3.4ではasyncio functools.singledispatchなど画期的なライブラリがいくつも追加されています。それはアドベンドカレンダーで皆さんが紹介されている通りです。 そして!その中で最も重要で画期的と言えるのがpathlibなのです! 11.1. pathlib ― Object-oriented filesystem paths ― Python v3.4.0b1 documentation まずは、主な使用例を御覧ください パスの結合(演算子オーバーロードだ!) >>> from pathlib import Path >>> p = Path('/etc') >>> q = p / 'init.d' / 'reboot' >>> q PosixPath('/etc/init.d/
前置き Python3.4のSingle-dispatchで遊んでみた - Python Advent Calendar 2013 — hirokiky's blog 読んだ瞬間、脳細胞に衝撃が! 「これはpprintのための新機能だ!」 「あの長いPrettyPrinter._formatがsingledispatchでプリチーに書ける!」 「自作クラスをpprintできるようになったに違いない!」 はやる心を抑え、3.4.0b1をダウンロード し、Lib/pprint.py をgvimで開くと、そこには!? 作ってみた というわけで、 Single-Dispatch を使ったpprintを実装してみました。 doloopwhile / single-dispatch-pprint Re-implementation of 'pprint' in Python Standard Libr
とりあえず、Python & QtQuick についての箇条書き QtQuickってなに? Qt QuickはQML(JSを拡張したDSL)でコンポーネントを作れる Qt Createrも使える でも言語がシンプルなので、直接編集するのも簡単 C++をコンパイルせずUIを開発できる PyQt/PySideも(もちろん)対応している バージョン問題 Qt Quick には ver.1.0 と ver.2.0がある 新型の2.0は、Qt 5.0から使える PySideはQt 5.0に対応していない? PyQtは、PyQt5でQt 5.0とQtQuickに対応 インストール QtQuickは、Qt/PyQt/PySideについてくる PyQt5はまだaptに無いので 公式サイト のソースからコンパイル Qt5 SDKが必要だが、こっちはaptにある PyQt5の前に必要ライブラリのsipをコンパ
AWKは、PythonやRubyに比べれば古くさいイメージがあります。 しかし、ワンライナーとしてはAWKは強力(という話)です。 そこで、一度覚えておけば、きっと役立つ機会は多かろうということで、 AWKワンライナーのよくありそうなパターンを7つ調べてみました。 なお、参考にシェルスクリプト版(sedやgrepを使ったワンライナー)も併記しました。 要素を取り出してフォーマットする タブ以外の区切りを使う 正規表現にマッチした行を出力する 正規表現のマッチを置換する 整数として計算する 他のコマンドを呼び出す Schwartz変換ソート 1. 要素を取り出してフォーマットする 入力: # 言語名 コマンド名 バージョン番号 echo -e "\ Perl\tperl\t5.14.2 Python\tpython\t2.7.3 Ruby\truby\t1.9.3p194 PHP\tphp\
モジュールにソースコード以外のファイルを添付する 添付の種類は4種類あります. (1 - 3) setupの引数として指定する(scripts, package_data, data_files). setup.py内のsetup関数の引数としてファイルを指定します. scripts, package_data, data_filesの違いは, インストール先です. scripts Scriptsフォルダ(C:\Python32\Scripts) data_files パッケージ(C:\Python32\Lib\site-packages\(パッケージ名)) package_data サブパッケージ(C:\Python32\Lib\site-packages\(パッケージ名)\(サブパッケージ)) 括弧内はPython 3.2.x Windows版の場合の位置です. 次のようなsetup.
WindowsのFoobar2000でプレイリストを使っているとき、 AndroidのWinampでも同じプレイリストを使うためのメモ。 ちなみにWindowsとAndroidの両方でWinampを使っている場合、Winamp自体でプレイリストをコピーできるので、こんな苦労する必要はありません。 Androidのプレイリストはm3u形式 中身は↓のような、1行毎に音楽ファイルのパスが書かれたファイルです。 /sdcard/music/スパロボ/OG2(BGM)/ARMAGEDON.mp3 /sdcard/music/スパロボ/OG2(BGM)/THE LAST JUDGEMENT.mp3 /sdcard/music/スパロボ/OG2(BGM)/UNDER COVER.mp3 /sdcard/music/スパロボ/OG2(BGM)/Who Lough Last?.mp3 /sdcard/mu
近未来、2016年(・・・って、中途半端に近い未来ですね)では、 Googleの入社試験では、逆FizzBuzz問題を解くことになるそうな。 逆FizzBuzz問題 (Inverse FizzBuzz) - 猫とC#について書くmatarilloの雑記 F#で逆FizzBuzz問題 - Bug Catharsis わぁいInverse Fizzbuzz解けたよー - 這い寄るゆろよろ・アンド・ライジングフォース日記 Inverse Fizzbuzz - scalaとか・・・ 逆FizzBuzz問題をTrieでトライ - athosの日記 fizzbuzzした結果のリストから、それを生成するような最短の数値の範囲を求める、という問題です。 Pythonでやってみた感想は「やっぱり無名関数が欲しいなぁ」。名前を付けたほうが後々役立つのはそうなんでしょうが、こういった処理ではイマイチ良い名前が浮
Pythonは2.7が2010年7月にリリースされ, 現在では2.8をリリースするかが問題になっているようですが, 今でも旧バージョンである2.6への需要は存在するようです. ここでは, 2.6互換にするために注意する点を紹介します. 1. 標準ライブラリ 当たり前ですが, 2.7で新しく入ったライブラリは2.6にはありません. しかし PyPIを探せば, 同等品があるはずです. 例えば, collections.OrderedDictの場合は, ordereddictがあるので, try: from collections import OrderedDict except ImportError from ordereddict import OrderedDict とすれば, 2.6でも動きます. 他にも, argparseやunittestの新機能(PyPIではunittest2)
(学生時代に書いた記事を発掘したので、一部修正して投稿します) 気になる記事が紹介されてたので、 > 修士論文の代わりに退学願を提出してきた http://blog.riywo.com/2009/02/27/120733 私自身も、就職活動に七転八倒した口で、昨日修士論文を提出し終わった所なので、思うことを書いてみます。 # 学問の府? 「やる気がある学生だけ来ればいい」「大学は学問の府」という意見は、しばしば重要な点を見落としています。それは、研究者になるのは学生のうちほんの僅かという点、そして研究者にならないからと言って劣った学生とは限らない点です。 # エリート輩出にはコストがかかる。 そもそも、大学院に限らず、教育機関はエリートの輩出という機能を持っています。 人から聞いた話なのですが、発展途上国では医師の数が非常に少ない。それは何故かと言えば、十分な教育を受けた時に、医師になれる
PythonでアニメGIFを作るには, BoxHeadRoom » Blog Archive » PythonでアニメGIF作成 その1のようなコードがあり, これはPILを使っています.しかし, これのためだけにだけにPILをimportしたくはないし,PILは画像のLZW圧縮の部分にしか使われていません. そこで, 自前でLZW圧縮のコードを書き, PILを使わずアニメGIFを作るモジュールをつくりました. No documentationですが, とりあえず置いておきます. http://dl.dropbox.com/u/3227558/pygif.zip
冷凍マグロ系スクリプト言語として知られるPythonの、もっともすばらしい用語7点をご紹介します。これらのネーミングセンスを学ぶことにより、PHPerやRubyistでは不可能な変態力を身につける事が出来るでしょう(Perl Mongerには負けるかも知れない)。 PyPI(ぱいぱい or ぱいぴいあい) PyPIはPythonライブラリを誰でも登録・ダウンロードできる、PerlのCPAN・Rubyのgemに当たるものです。4月になったら新人プログラマーに教えてあげましょう。 例:PyPIは基本だ! PIL(ぴる) PILは画像処理用のライブラリです。高度な処理はできませんが、手軽に画像を扱う事ができるので、簡単な処理にもフォトショを使っている人を見たらこう言っておきましょう。 例:PILは絶対使っとけ! なお、Pillow(ぴろー)(英語で枕の意)というforkがあり、インストーラでしか
一部で最強と呼ばれているPythonには, virtualenvやipythonのような絶対入れる超定番以外にも, あると便利なライブラリというものがあります. ここではラッキーセブン, 7つご紹介しましょう. なお, furl以外は3.xに対応しています. requests 覚えやすいWebリクエスト(urllib.request.urlopenの代替) furl URLの扱いをもっとシンプルに(urllib.parse.urlparseの代替) PyQuery jQueryのスクレイピング力をPythonに(html.parser.HTTPParser, lxml, BeautifulSoupの代替) Send2Trash/Send2Trash3k クロスプラットフォームな「ごみ箱へ送る」 Windows向けPythonランチャー 2.xと3.xを切り替える PySide/PyQt4
みんなのPython Webアプリ編がPDFで無料公開されていますが、この本はPython 2.x向けに書かれているので、3.xではそのまま動かない点がチラホラ・・・ とりあえずChapter04を読んでみたところ、以下のような変更が必要です。 CGIHTTPServer -> http.server 3.xでは、標準ライブラリが整理され、名前が変わっている場合があります。 #2.x import CGIHTTPServer CGIHTTPServer.test() #3.x import http.server http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler) 文字列リテラル 3.xではコーテーションで囲ったものが、2.xでいう文字列を表すようになりました。 #2.x greeting_string = u"
Sony Japan | 採用情報|新卒採用|GO FOR IT~情熱と技術が世界を変える~ の真似をして、Pythonで書こうと思います。 以下で作るCubeクラスの仕様はPyQt4/PySideのQtCore.QRectと同様にしたかったのですが、QtCore.QRectは >>> QtCore.QPoint(0, 0) in QtCore.QRect(0, 0, 5, 5) True >>> QtCore.QPoint(5, 5) in QtCore.QRect(0, 0, 5, 5) Falseというように、数学の言葉で言えば、ではなく、になっています。 しかし、Sonyの問題の場合はとするべきだと思うので、そういう仕様に変更しています。 また、2つの立方体が頂点や辺のみで接している場合は「重なっている」と判定することとしています。 #!python3 #encoding:mbcs
@mopemopeさんからバトンを渡されました、2011 Pythonアドベントカレンダー(Python3) 16日目担当のおもけん(@doloopwhile)です。 Q「RubyとPythonどちらが初心者向けでしょうか?」 A「Pythonは日本語情報が少ないので、Rubyがおすすめです」 質問掲示板などで、しばしば見かけるやり取りです。しかし、本当にPythonは日本語情報が少ないのでしょうか? 確かに、かつてはRubyの情報量の方が圧倒的だったでしょう。しかし、現在ではPythonも日本で広く使われ、Pythonプログラマーのブログも多数あります。少なくとも初心者がPythonを始めるのに情報不足ということはありません。 そこで、明日のPythonプログラマーのため、日本語情報を列挙しておきます。ワリと無難というか、常識的な資料ばかりです。 結局、何を読めばいいの?5つの日本語情報
Pythonのdefは関数、Rubyのdefはメソッドを定義します。両者の違いはdefがネストすると現れます。 Pythonでは、ネストしたdefではローカル関数が定義されます。ローカル関数はその場で使われるだけで、外部には影響は及ぼしません(グローバル変数に代入したり、returnで返したりしなければ)。 $ python >>> class Spam: ... def ham(self): ... def egg(): ... print('egg', end='') ... print('egg', end='') ... egg() ... >>> s = Spam() >>> s.egg() AttributeError: 'Spam' object has no attribute 'egg' >>> s.ham() ham egg >>> s.egg() AttributeE
次のページ
このページを最初にブックマークしてみませんか?
『None is None is None』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く