Qiita 始めた
Qiita 始めた。
OSX - .bash_history のように、 OS X のアプリケーションの使用履歴を記録するスクリプト - Qiita
もともと、本名とは別のいろんなハンドルネームで OSS に首を突っ込んでいた。
今年は 2015 年、いつまでも若くはないので、そろそろ本名のアカウントにシフトすべきだなと思った。
まずは手始めに Qiita から…。
Mac で WebDAV
Backlog のファイル管理には WebDAV が使用できることをしりました。 しかし、プロジェクトページのリンクをたどったら、 Windows XP での操作しか書いてなかったです…。 http://www.backlog.jp/help/usersguide/file/userguide238.html
わざわざブログに書くほどのことでもない簡単なことですが、 備忘録として OS X 版のやり方を記載しておこうと思います。
私は OS X を US ロケールで使ってるので、スナップショットは英語表記になってますが、 記憶を頼りに適当に日本語での操作を書いてあります。 訳が間違ってましたら気軽にご指摘ください!
Finder で「移動」→「サーバに接続」
出現するプロンプトに、 WebDAV の URL を入力
「接続」を押すと、はい、マウントできました。
簡単ですね。
ファイルを個別に管理していると、各々での思い違いの原因になりやすいです。
情報を共有する方法自体を、共有しておいたほうが良いと思います。
2014-09-23 追記:
OS X はマウントしたディレクトリに対しても、システムファイル .DS_Store を生成してしまいます。
以下のコマンドでネットワークストレージをマウントした際に、 .DS_Store ファイルを作らない設定になります。
設定してなかった人は、必ず設定しておきましょう。
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
シェルスクリプトマナー
- 「 exit code が 0 じゃなきゃダメ」
- 「未知の変数があったらダメ」
- 「 pipe でつないだ時に途中の pipe で躓いてもダメ」
を矯正するには、それぞれ
set -e set -u set -o pipefail
する。短縮して
set -euo pipefail
と書ける。
多くの Linux 環境では /bin/sh の実態は bash なのだけど、 sh といえば bash と決まっているわけではない。 csh も ash も bash も zsh もある。
Dash を初め、いくつかのシェルには pipefail がない。 http://ja.wikipedia.org/wiki/Debian_Almquist_shell なので #!/bin/sh ではなく #!/usr/bin/env bash と書く方が石橋を叩いて渡れる。
#!/usr/bin/env bash set -euo pipefail
これらオプションについては賛否両論あるようだ。 例えば diff や cmp は、 exit code を比較結果を伝えるのに用いる。
Debian コミュニティでは set -e を init.d スクリプトに使うときは注意せよ、と言っている。 https://www.debian.org/doc/debian-policy/ch-opersys.html
より詳細な bash プログラミングについては Advanced Bash-Scripting Guide を読むと良い。 http://www.tldp.org/LDP/abs/html/
PyPI の Top 50 プロジェクトで予約語・組み込み関数の合計出現回数を調べてみた。
書いたスクリプトがこちら
gist: https://gist.github.com/kitsuyui/11cb65ef4f4630432bfa
引数にファイルを指定すると、そのファイル内の Python 予約語・組み込み関数名の出現回数を数え上げ、降順で TSV 形式で出力します。
例えば、このファイル自体の予約語・組み込み関数名の出現回数を出力するとこうなります。
$ python keyword_counting.py keyword_counting.py
in 11 for 10 import 8 if 7 yield 6 def 6 open 4 elif 3 return 3 from 1 help 1 format 1 sum 1 tuple 1 __name__ 1 print 1 dir 1
対象は Python ファイルだけでなく、 Python ファイルを含むディレクトリや、 tar.gz, zip 形式などにも対応しています。
PyPI Ranking という PyPI での人気プロジェクトをまとめているサイトがあります。
これを元に、 Top 50 プロジェクトでキーワードの出現回数を記録してみました。
自分のプロジェクトと出現頻度を比較してみると面白いかもしれません。
def 69445 if 48572 return 39990 None 34503 import 27266 in 24468 from 19493 not 17805 for 15311 class 14378 True 14318 else 12466 is 11888 False 10909 assert 8753 raise 7870 try 7530 and 6988 except 6662 len 5970 id 5857 elif 5402 isinstance 5143 pass 5131 or 4991 object 4128 list 3408 type 3104 str 2832 set 2655 as 2613 print 2529 __name__ 2466 dict 2407 ValueError 2258 with 2048 lambda 2044 getattr 2022 property 2009 int 1897 super 1875 hasattr 1763 yield 1697 TypeError 1538 del 1432 filter 1386 finally 1330 range 1328 classmethod 1326 continue 1293 open 1232 while 1227 compile 1221 all 1129 Exception 1106 ImportError 1096 break 1085 KeyError 1071 tuple 989 next 954 file 940 AttributeError 882 format 840 repr 825 setattr 781 help 712 map 708 NotImplementedError 606 iter 550 bytes 517 bool 495 __doc__ 492 sorted 471 enumerate 448 basestring 427 buffer 423 dir 411 vars 404 unicode 400 float 377 max 357 global 347 zip 337 IOError 313 OSError 313 exit 295 min 293 callable 290 input 270 long 269 hash 259 AssertionError 258 xrange 249 RuntimeError 214 globals 206 IndexError 205 locals 201 frozenset 199 StopIteration 197 ord 178 issubclass 177 staticmethod 174 DeprecationWarning 168 any 164 __import__ 162 SystemExit 157 NameError 151 chr 123 sum 119 eval 116 reversed 114 unichr 114 NotImplemented 107 SyntaxError 101 KeyboardInterrupt 101 reduce 99 hex 93 abs 91 apply 90 cmp 86 exec 82 slice 81 coerce 78 LookupError 67 reload 60 delattr 60 UnicodeDecodeError 58 divmod 58 pow 56 intern 55 memoryview 54 UnicodeError 53 PendingDeprecationWarning 50 Warning 47 OverflowError 46 bin 45 raw_input 44 EOFError 39 license 38 execfile 36 bytearray 35 UnicodeEncodeError 34 ZeroDivisionError 33 UserWarning 30 StandardError 29 quit 29 round 28 copyright 26 RuntimeWarning 25 EnvironmentError 25 MemoryError 24 SyntaxWarning 21 BaseException 21 complex 14 __debug__ 10 __package__ 6 UnboundLocalError 6 oct 5 SystemError 4 Ellipsis 3 IndentationError 3 credits 3 GeneratorExit 3 ReferenceError 3 FloatingPointError 1 UnicodeTranslateError 1 ArithmeticError 1 TabError 1
Homebrew と Homebrew Cask でインストールしたパッケージ
私は普段、 OS X と Ubuntu Server で開発しています。 OS X 上でのソフトウェア管理は、以下の 3 つを使っています。
- App Store
- Homebrew http://brew.sh/
- Homebrew Cask http://caskroom.io/
Mac Ports, Fink, Boxen なども試したのですが、今は Homebrew に落ち着いています。
出先で新しい OS X を使う機会があれば今使っているパッケージをすぐに使えるよう、備忘録として gist に上げておくことにしました。
gist: https://gist.github.com/kitsuyui/c0e10fea42dbdefa6494
ポリシー
インストール方法
一括でインストールする際には xargs で行を展開してインストールしています。
xargs < brew.leaves.txt -I% brew install %
xargs < brew.cask.list.txt -I% brew cask install %
libpeerconnection.log
Google Chrome が libpeerconnection.log をルートディレクトリに勝手に生成するようになった。 時期的には、 28 にバージョンが上がったあたりか。 無害らしいけれども、 Finder に表示されるとなんか変な気分。
sudo chflags hidden /libpeerconnection.log
不可視にした。
The Zen of Python の元ネタ?
(注意: 本記事の書籍のリンク先は Amazon になっています。)
Python で
>>> import this
すると出てくる、 The Zen of Python の 17 行目
Now is better than never.
これの元ネタと思しき文章が、先ほど読んでいた本に偶然載っていたのでメモ。
Now if not forever is sometimes better than never
R.D.Laing 著の Do You Love Me? という本の EIGHT-59 にある。
日本語訳は「好き?好き?大好き?」
ちなみに、同著者・訳者の「結ぼれ」は、 詩集にも関わらず、 Python のようなインデントや、 Graphviz で出力したかのようなモデル図が載っている、素敵な本。