学生の備忘録なブログ

日々のことを忘れないためのブログです。一日一成果物も目標。技術系はQiitaにあげるように変更しました。

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

してみた結果,めちゃめちゃエラーはいたので,見なかったことにします.

参考元

http://qiita.com/ren-10/items/1c1764100aa4b1c7b514

python仮想環境

ややこしいんじゃ

 pythonの禅にもあるだろが,単純でいいんだよ.参入障壁がなくてコミュニティを活発なのがpythonの強みだろがい.

 とおもっていたら,同じことを思っている人がいた.

ymotongpoo.hatenablog.com

話を膨らます

 上記の通り,私は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回読みと類似する勉強法である.特徴は以下の通り.

  1. 問題がすらすらと解けるまで,スピードを落とさず,何度も解く.
  2. 詰まれば,即座に解答を見ても良い.
  3. なるだけ短い周期を決め,その周期で決めた範囲を繰り返す.所定の回数を周回したら,繰り返す範囲を変える.
  4. 問題が難しいならば,どこまでもレベルを落とす.
  5. 自分が解答なしに解けるかどうかはチェックする.

アジャイル開発

 これとは別に,アジャイル開発手法というものがある.

  1. スプリントという開発サイクルを決め,目標を達成するまでの期間にこれを繰り返す.
  2. 開発は一つのスプリントで完結させる単位で行う.そしてそれはプロダクトにマージする.
  3. スプリントの終わりにKPT分析などをして前のスプリントの評価をする.
  4. 定期的に開発の現状を外部に公表し,評価する.

つまるところ,hello world状態のモデルに周期的に肉付けをしていくのだ.

比較してみて

 これらを比較してみてどうだろうか,とても良く似ていると思う.

  • 勉強
    • 最大の目的は素早く問題を解くこと.
    • 一つの問題を解けなくても次に強制的に進むことで,テストまでの時間全てを解けない問題に費やし泥沼化することを防げる.  
  • 開発
    • 開発においては,良い成果物を作ることが目的である.
    • 実装できないものに時間を掛けギリギリまでできない実装をしようとすることがない.

回顧

 私はわんこら式をやってみたが,上手く行かなかった.それをアジャイル開発を学び,実際に開発を行った経験から,その原因を考えたい.

上手く行かなかった原因

成果の実感

 アジャイル開発においては,開発進行具合の確認は比較的容易である.そもそもアジャイル開発においてはスプリント単位で進歩は完結していなければならないため,完了したか遅延しているかは,本体にマージされたかどうかで判断できるため,分かりやすい.

 しかし,勉強においては,理解は定量的に図りにくい.問題を解答をなしに解けるかを自分でやってみるということが良いのだが,やりたくないのだ.一つの範囲を比較的時間を掛け,何周も下のにも関わらず,解けなければ,その時間は無駄だったということになる.これが怖くてテストが億劫になってしまい,個人では気持ちが続かない.

結論

 もっと原因はあるのだろうが,自分が言いたかったことは,プロジェクト管理とは幅広い範囲に応用できることである.よって,様々なメソッドが出て来るが,根本的な部分は共通している.といういことが言いたかったのだ.そして,アジャイル開発により,効率的にブロジェクト管理をできたならば,もう一度これをやってみて,過去の復讐をしたいと思うのだ.

*1:学生とは本来大学生を指す.

猫も杓子もマストドン

 色々批判されているが,面白かったので,

本の虫: そろそろマストドンについて語っておくか

Mac

 macマストドンはこれがいまはいいのかな?

egyo.hateblo.jp

javascriptでメニューバーにタイムライン表示できるとは知らなんだ,,,

ふつうのHaskellのコードについて

サンプルコードが正しくない.

 ふつうのHaskell内容がjavaを例示しながら書かれているシンプルで分かりやすい本である.

 私にはすごいHaskellより分かりやすい.しかし,古いためサンプルコードが動かない.

先達

2016-01-11 『ふつうのHaskellプログラミング』 もくもく読書会(第12章) の振り返り - SE情報技術研究会’s blog

Haskellを始めるにあたって読むべき3冊の本 - セカイノカタチ::Techlog

github.com

ファイルの文字列検索 ~emacs,shellコマンド~

目的

複数のファイル間で,あるいはあるディレクトリ配下全てで,文字列検索をしたい.

動機

 サンプルプログラムを,ダウンロードしてきて,このコードを使ってるコードを網羅的に探したい.

emacs

M-x grep-find

C-o,o,C-p,pなど色々面白い.ただ,見るためにバッファが全て開かれる.これは良くない所.ほかにいいのないかな.

f:id:forhighlow:20170421185613g:plain

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

Amazon CAPTCHA

ここの記事が小さく良くまとまって書いてある. Haskellで競技プログラミング IO編 - Qiita