brew install nmap できなかった.
nmapインストールに際し,失敗した.
% brew install nmap Updating Homebrew... ==> Auto-updated Homebrew! Updated 5 taps (caskroom/cask, caskroom/versions, homebrew/core, homebrew/services, homebrew/versions). ==> New Formulae guile@2.0 nnn ==> Updated Formulae ace exiftool jenkins mysql-sandbox servus ammonite-repl fabio jetty nagios-plugins shadowsocks-libev ansible ✔ file-roller jetty-runner ncmpcpp shfmt antigen filebeat jmxtrans neofetch slackcat aws-sdk-cpp fluent-bit kafkacat nginx sleuthkit awscli folly kibana nss solr bazel@0.2 fox knot-resolver nvm source-highlight bear fping kobalt oauth2_proxy speedtest_cli bind fq kotlin open-scene-graph swift biogeme freeling lapack orientdb swiftformat bmake geckodriver lcdf-typetools osh syncthing boost git-fresh ldc osquery tee-clc boost-bcp git-lfs ledger osrm-backend terragrunt boost-mpi git-quick-stats libgeotiff packer tmux boost-python gitlab-ci-multi-runner libgosu packetbeat uhd buku gjs libhttpseverywhere paket unicorn bullet glbinding libphonenumber parallel unzip byteman globjects libsoup pdftoedn urh caddy grc libtorrent-rasterbar pick vagrant-completion carthage grpc libvirt pmd vala casperjs gssh libwebsockets polyml valabind closure-compiler gtef lilv ponyc vim conan guile llnode poppler watchexec convox h2o logstash proof-general weechat crystal-lang harfbuzz lumo pure-ftpd wesnoth cucumber-cpp hg-fast-export lv2 pyexiv2 widelands docker-machine hugo meson q wine ✔ docker-machine-completion imagemagick ✔ metaproxy qbs wireguard-tools docker-machine-driver-xhyve imagemagick@6 metricbeat qemu youtube-dl ✔ docker-machine-parallels imageworsener mkvtoolnix scalaenv zabbix elasticsearch instead mongodb schismtracker emacs ✔ iproute2mac mpv sdcv emscripten iso-codes mycli selenium-server-standalone ==> Renamed Formulae mongodb26 -> mongodb@2.6 ==> Downloading https://homebrew.bintray.com/bottles/nmap-7.40.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring nmap-7.40.sierra.bottle.tar.gz Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink share/man/de/man1/nmap.1 /usr/local/share/man/de/man1 is not writable. You can try again using: brew link nmap ==> Caveats Python modules have been installed and Homebrew's site-packages is not in your Python sys.path, so you will not be able to import the modules this formula installed. If you plan to develop with these modules, please run: mkdir -p /Users/hoge/.local/lib/python3.5/site-packages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hoge/.local/lib/python3.5/site-packages/homebrew.pth ==> Summary 🍺 /usr/local/Cellar/nmap/7.40: 761 files, 24.3MB/Users/hoge% brew install nmap Updating Homebrew... ==> Auto-updated Homebrew! Updated 5 taps (caskroom/cask, caskroom/versions, homebrew/core, homebrew/services, homebrew/versions). ==> New Formulae guile@2.0 nnn ==> Updated Formulae ace exiftool jenkins mysql-sandbox servus ammonite-repl fabio jetty nagios-plugins shadowsocks-libev ansible ✔ file-roller jetty-runner ncmpcpp shfmt antigen filebeat jmxtrans neofetch slackcat aws-sdk-cpp fluent-bit kafkacat nginx sleuthkit awscli folly kibana nss solr bazel@0.2 fox knot-resolver nvm source-highlight bear fping kobalt oauth2_proxy speedtest_cli bind fq kotlin open-scene-graph swift biogeme freeling lapack orientdb swiftformat bmake geckodriver lcdf-typetools osh syncthing boost git-fresh ldc osquery tee-clc boost-bcp git-lfs ledger osrm-backend terragrunt boost-mpi git-quick-stats libgeotiff packer tmux boost-python gitlab-ci-multi-runner libgosu packetbeat uhd buku gjs libhttpseverywhere paket unicorn bullet glbinding libphonenumber parallel unzip byteman globjects libsoup pdftoedn urh caddy grc libtorrent-rasterbar pick vagrant-completion carthage grpc libvirt pmd vala casperjs gssh libwebsockets polyml valabind closure-compiler gtef lilv ponyc vim conan guile llnode poppler watchexec convox h2o logstash proof-general weechat crystal-lang harfbuzz lumo pure-ftpd wesnoth cucumber-cpp hg-fast-export lv2 pyexiv2 widelands docker-machine hugo meson q wine ✔ docker-machine-completion imagemagick ✔ metaproxy qbs wireguard-tools docker-machine-driver-xhyve imagemagick@6 metricbeat qemu youtube-dl ✔ docker-machine-parallels imageworsener mkvtoolnix scalaenv zabbix elasticsearch instead mongodb schismtracker emacs ✔ iproute2mac mpv sdcv emscripten iso-codes mycli selenium-server-standalone ==> Renamed Formulae mongodb26 -> mongodb@2.6 ==> Downloading https://homebrew.bintray.com/bottles/nmap-7.40.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring nmap-7.40.sierra.bottle.tar.gz Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink share/man/de/man1/nmap.1 /usr/local/share/man/de/man1 is not writable. You can try again using: brew link nmap ==> Caveats Python modules have been installed and Homebrew's site-packages is not in your Python sys.path, so you will not be able to import the modules this formula installed. If you plan to develop with these modules, please run: mkdir -p /Users/hoge/.local/lib/python3.5/site-packages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hoge/.local/lib/python3.5/site-packages/homebrew.pth ==> Summary 🍺 /usr/local/Cellar/nmap/7.40: 761 files, 24.3MB
嫌にならずに見ていく.
エラーをよく見ると
親切なことに,エラー警告の最後の方に,改善提案があったのでやってみたら治った.
以下の通りにやってみた.
You can try again using: brew link nmap ==> Caveats Python modules have been installed and Homebrew's site-packages is not in your Python sys.path, so you will not be able to import the modules this formula installed. If you plan to develop with these modules, please run: mkdir -p /Users/hoge/.local/lib/python3.5/site-packages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hoge/.local/lib/python3.5/site-packages/homebrew.pth ==> Summary 🍺 /usr/local/Cellar/nmap/7.40: 761 files, 24.3MB
教訓
何事も焦らず迅速に.
エラーを吐き,提案をしてくれるbrewは優秀ですね.
brew doctor
brew doctor
してみた結果,めちゃめちゃエラーはいたので,見なかったことにします.
参考元
python仮想環境
ややこしいんじゃ
pythonの禅にもあるだろが,単純でいいんだよ.参入障壁がなくてコミュニティを活発なのがpythonの強みだろがい.
とおもっていたら,同じことを思っている人がいた.
話を膨らます
上記の通り,私はpythonの強みは,pythonの禅に由来する単純さであると思っている.
私はpyconjp2016に参加したことがある,そこに集まる人達は,プログラミング言語のカンファレンスでありながら,中学生がいたり(その前回開催されたときにスピーカーだった)かなりのご老人がいたりしながら,比較的若い(若々しい)参加者が多く,寛容な雰囲気がpythonという言語を象徴しているように思えた.
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
複雑であるよりも単純な方が良い.
シンプルな一つの方法があれば良い
実装が説明するのが難しい場合、それは悪い考えである.
これらのイデオロギーがpythonをわかりやすく,単純で,強力な言語にしている.なぜならば,プログラミングは既にそれ自体がライブラリや開発ツールなどの援助を前提としているためである.
ライブラリが無いpythonなど使うに値するだろうか,numpy,pandas,などの基礎的なものからjupyter notebookでscikit-learndを動かしデータから何事かのモデルを作り出す.これらは環境として完全に他を圧倒している.今日現在2017-04-26ではrubyはライブラリを充実させるのではなく,pythonのライブラリにブリッジしようという動きさえある.
googleの機械学習ライブラリ群も,julia langやRのようなもので実装されるのではなく,pythonで実装されたのも,環境が整っているからである.
いかにして環境は整ったのか,これが先に述べたpythonの禅が内包するイデオロギーによるものであると私は考える.つまり単純でわかりやすいと,みんな手を付けやすいのだ.
普段ゴリゴリにコードを書き,プロダクトを作るプログラマだけで世界は構成されるわけではない.ツールとしてのプログラミングを選ぶときに,C++を選ぶだろうか.いくら速いとは言え,,,
ruby,perl,pythonを比べた時,ツールとしての扱いやすさはpythonは出色である.なぜなら,皆同じようなことを記述するとき,似たようなコードを書くからである.
ツールとして評価する人は,その扱いやすさの判断基準は情報の多さと,不偏性である.
pythonの文法はインデントに意味を持たせる.これがpythonのコードの見た目の多様性を制限する.これは大きな利点である.
同じ機能を持つ全く違うコードは,ツールとしての扱いやすさを著しく損なう.ツールとして扱いたいのであって,文法を学びたいわけではないのだ.
結果として,道具としての参入障壁が無いため,窓口が大きくなる.これによりコミュニティの裾野が開かれるのだ.
コミュニティが活発な時,言語におけるインフラである,ライブラリや開発環境が充実してくる.ユーザーがあれば,企業はそれ向けのライブラリやIDEを開発するし,頭の良い人もマスが大きくなれば当然多く含まれてくる.その頭の良い人がpythonで良い成果を上げ,再び言語の評価が上がるのだ
結論
pythonの仮想環境わかりやすくしろや.
勉強法
学生時代*1に信じていた勉強法
わんこら式
私が高校生時代に信じて実践していた勉強法にわんこら式というものがある.
これは,高速大回転法とか,7回読みと類似する勉強法である.特徴は以下の通り.
- 問題がすらすらと解けるまで,スピードを落とさず,何度も解く.
- 詰まれば,即座に解答を見ても良い.
- なるだけ短い周期を決め,その周期で決めた範囲を繰り返す.所定の回数を周回したら,繰り返す範囲を変える.
- 問題が難しいならば,どこまでもレベルを落とす.
- 自分が解答なしに解けるかどうかはチェックする.
アジャイル開発
これとは別に,アジャイル開発手法というものがある.
- スプリントという開発サイクルを決め,目標を達成するまでの期間にこれを繰り返す.
- 開発は一つのスプリントで完結させる単位で行う.そしてそれはプロダクトにマージする.
- スプリントの終わりにKPT分析などをして前のスプリントの評価をする.
- 定期的に開発の現状を外部に公表し,評価する.
つまるところ,hello world状態のモデルに周期的に肉付けをしていくのだ.
比較してみて
これらを比較してみてどうだろうか,とても良く似ていると思う.
- 勉強
- 最大の目的は素早く問題を解くこと.
- 一つの問題を解けなくても次に強制的に進むことで,テストまでの時間全てを解けない問題に費やし泥沼化することを防げる.
- 開発
- 開発においては,良い成果物を作ることが目的である.
- 実装できないものに時間を掛けギリギリまでできない実装をしようとすることがない.
回顧
私はわんこら式をやってみたが,上手く行かなかった.それをアジャイル開発を学び,実際に開発を行った経験から,その原因を考えたい.
上手く行かなかった原因
成果の実感
アジャイル開発においては,開発進行具合の確認は比較的容易である.そもそもアジャイル開発においてはスプリント単位で進歩は完結していなければならないため,完了したか遅延しているかは,本体にマージされたかどうかで判断できるため,分かりやすい.
しかし,勉強においては,理解は定量的に図りにくい.問題を解答をなしに解けるかを自分でやってみるということが良いのだが,やりたくないのだ.一つの範囲を比較的時間を掛け,何周も下のにも関わらず,解けなければ,その時間は無駄だったということになる.これが怖くてテストが億劫になってしまい,個人では気持ちが続かない.
結論
もっと原因はあるのだろうが,自分が言いたかったことは,プロジェクト管理とは幅広い範囲に応用できることである.よって,様々なメソッドが出て来るが,根本的な部分は共通している.といういことが言いたかったのだ.そして,アジャイル開発により,効率的にブロジェクト管理をできたならば,もう一度これをやってみて,過去の復讐をしたいと思うのだ.
*1:学生とは本来大学生を指す.
猫も杓子もマストドン
ふつうのHaskellのコードについて
サンプルコードが正しくない.
ふつうのHaskell内容がjavaを例示しながら書かれているシンプルで分かりやすい本である.
私にはすごいHaskellより分かりやすい.しかし,古いためサンプルコードが動かない.
先達
2016-01-11 『ふつうのHaskellプログラミング』 もくもく読書会(第12章) の振り返り - SE情報技術研究会’s blog
ファイルの文字列検索 ~emacs,shellコマンド~
目的
複数のファイル間で,あるいはあるディレクトリ配下全てで,文字列検索をしたい.
動機
サンプルプログラムを,ダウンロードしてきて,このコードを使ってるコードを網羅的に探したい.
emacs
M-x grep-find
C-o,o,C-p,pなど色々面白い.ただ,見るためにバッファが全て開かれる.これは良くない所.ほかにいいのないかな.
C-x C-b (あるいはC-x b)して, markをつけて, C-z (あるいはtab,Function)でpatternで選択, kill bufferを選んで一気に消さなければならない.
shellコマンド
どこからかコピペしてきたやつ.申し訳ありません.
########################## # grep # -r : 再帰的にgrepコマンドを実行する # -n : 行番号を出力する # -w : 文字列全体にマッチする場合 # -l : (option)これをつければファイル名だけを出力(マッチした部分は省く) # # Usage # # 現在いるディレクトリ配下から「httpd」という文字列を含むファイルすべてを抽出する # $ grep -rnw . -e "httpd" ########################## grep -rnw 'directory' -e "pattern"
Haskell ~入出力~
入出力
コード
main = do out <- getLine -- input: out putStrLn (out ++ "は大事")
% stack build;stack exec project1-exe project1-0.1.0.0: unregistering (local file changes: src/Lib.hs) project1-0.1.0.0: build (lib + exe) Preprocessing library project1-0.1.0.0... [1 of 1] Compiling Lib ( src/Lib.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/Lib.o ) Preprocessing executable 'project1-exe' for project1-0.1.0.0... [1 of 1] Compiling Main ( app/Main.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/project1-exe/project1-exe-tmp/Main.o ) [Lib changed] Linking .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/project1-exe/project1-exe ... project1-0.1.0.0: copy/register Installing library in /.stack-work/install/x86_64-osx/lts-8.11/8.0.2/lib/x86_64-osx-ghc-8.0.2/project1-0.1.0.0-AckhfDVtQB568iPvGBSrt7 Installing executable(s) in /.stack-work/install/x86_64-osx/lts-8.11/8.0.2/bin Registering project1-0.1.0.0... % stack exec project1-exe hellowordl hellowordlは大事
do式
コードのレイアウト
do式の複数の式を束ねる構文である.Javaのブロック構文に相当する.
do式のように複数の式を束ねる構文では,複数の式のインデントを揃えることが属するブロックを表す.
この規則を,レイアウト
,またはオフサイドルール
という.
do式と遅延評価
Haskellの特徴は遅延評価である.よって,命令型のプログラム言語のように上から順に実行されるわけではない.do式を使うと,上から処理されていく.
参考
ふつうのHaskell
ここの記事が小さく良くまとまって書いてある. Haskellで競技プログラミング IO編 - Qiita