タグ

ブックマーク / blog.amedama.jp (25)

  • dd コマンドの進捗を確認する - CUBE SUGAR CONTAINER

    dd コマンドの進捗を確認したいときは macOS であれば SIGINFO を、Linux (GNU Coreutils) であれば SIGUSR1 を送れば良い。 また、GNU Coreutils の dd には status=progress というオプションもある。 macOS まずは macOS から。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.5 BuildVersion: 18F132 適当にランダムな値でファイルを作らせる。 $ dd if=/dev/urandom of=example bs=1m count=1024 別のターミナルを開いたら killall を使って dd に SIGINFO を送りつける。 $ sudo killall -INFO dd すると、次のように現状が

    dd コマンドの進捗を確認する - CUBE SUGAR CONTAINER
  • OpenSSH のコネクションが切れにくいように Keepalive を送る - CUBE SUGAR CONTAINER

    たまに SSH のコネクションが頻繁に切れる環境があるので、定期的にデータを送受信することで切断されるのを防ぎたい。 これは OpenSSH のクライアントであれば ServerAliveInterval を設定することで実現できる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G3025 $ ssh -V OpenSSH_7.6p1, LibreSSL 2.6.2 コマンドラインからであれば、次のように -o オプションで ServerAliveInterval に秒数を指定しながらリモートに接続する。 $ ssh -o ServerAliveInterval=60 <username>@<remotehost> 毎回コマンドラインで指定するのは面倒なので Open

    OpenSSH のコネクションが切れにくいように Keepalive を送る - CUBE SUGAR CONTAINER
  • shellcheck でシェルスクリプトのコードの質をチェックする - CUBE SUGAR CONTAINER

    正しく動作するシェルスクリプトを書くのは難しい。 できれば書きたくないけど、そうもいかない。 そんなとき心の支えになりそうなのが今回紹介する shellcheck というツール。 これはシェルスクリプトにおける Linter (リンター) で、まずい書き方をしているとそれを教えてくれる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.5 BuildVersion: 17F77 下準備 まずは shellcheck をインストールする。 macOS であれば Homebrew でインストールするのが楽ちん。 $ brew install shellcheck インストールすると shellcheck コマンドが使えるようになる。 $ shellcheck -V ShellCheck - shell scri

    shellcheck でシェルスクリプトのコードの質をチェックする - CUBE SUGAR CONTAINER
  • フレッツ回線が遅すぎる問題を IPv6/IPoE と DS-Lite で解決した - CUBE SUGAR CONTAINER

    最近というほど最近でもないんだけど、近頃はとにかくフレッツ回線のスループットが出ない。 下手をすると、モバイルネットワークの方が速いので時間帯によってはテザリングをし始めるような始末だった。 今回は、そんなスループットの出ないフレッツ回線を何とか使い物になるようにするまでの流れを書いてみる。 先に断っておくと、今回はいつものような特定の技術に関する解説という側面は強くない。 思考の過程なども含んでいるので、いつもより読み物的な感じになっていると思う。 調べ物をして、それらについて理解した内容のまとめになっている。 結論から書いてしまうと、今回のケースでは IPv6/IPoE 接続と DS-Lite を使って何とかなった。 DS-Lite というのはゲーム端末ではなくて IPv4/IPv6 共存技術の一つである RFC6333 (Dual-Stack Lite Broadband Deplo

    フレッツ回線が遅すぎる問題を IPv6/IPoE と DS-Lite で解決した - CUBE SUGAR CONTAINER
  • Apache Spark を完全分散モードの YARN クラスタで動かす - CUBE SUGAR CONTAINER

    Apache Spark を使って複数ノードで分散並列処理をする場合、まずは動作させるためのクラスタマネージャを選ぶことになる。 Apache Spark では以下のクラスタマネージャに対応している。 Apache Spark 組み込み (これはスタンドアロンモードと呼ばれる) Apache Hadoop YARN Apache Mesos 今回は、その中で二番目の Apache Hadoop の提供する YARN を使ってみる。 また、なるべく実環境に近いものを作りたいので Apache Hadoop は完全分散モードを使うことにした。 そのため、まず前提として次のエントリを元に Hadoop クラスタが組まれていることが前提となる。 blog.amedama.jp Apache Hadoop を設定する Apache Spark のクラスタマネージャに YARN を使うときのポイントは

    Apache Spark を完全分散モードの YARN クラスタで動かす - CUBE SUGAR CONTAINER
  • Python: pep8 は pycodestyle になったし pep257 は pydocstyle になった - CUBE SUGAR CONTAINER

    意外とまだあんまり知られていないような気がしたので、このブログにも書いておく。 PEP8 と pep8 と pycodestyle Python には PEP8 という有名なコーディングスタイルガイドラインがある。 www.python.org そして、そのコーディングスタイルに沿ったコードになっているのかをチェックするツールとして pep8 というパッケージがあった。 pypi.python.org 過去形にするのは半分正しくなくて、上記のように今もある。 ただ、これは後方互換のために残されているだけで、もうバージョンアップはされないだろう。 今後は代わりに pycodestyle というパッケージを使うことになる。 pypi.python.org これは単にパッケージとコマンドの名前が変わっただけ。 とはいえ、こちらはバージョンアップが続くので最新の PEP8 に追従していくしチェック

    Python: pep8 は pycodestyle になったし pep257 は pydocstyle になった - CUBE SUGAR CONTAINER
  • Python: python-fire の CLI 自動生成を試す - CUBE SUGAR CONTAINER

    今回は Google が公開した python-fire というパッケージを試してみた。 python-fire では、クラスやモジュールを渡すことで、定義されている関数やメソッドを元に CLI を自動で生成してくれる。 ただし、一つ注意すべきなのは、できあがる CLI はそこまで親切な作りではない、という点だ。 実際にユーザに提供するような CLI を実装するときは、従来通り Click のようなフレームワークを使うことになるだろう。 では python-fire はどういったときに活躍するかというと、これは開発時のテストだと思う。 実装した内容をトライアンドエラーするための CLI という用途であれば python-fire は非常に強力なパッケージだと感じた。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion:

    Python: python-fire の CLI 自動生成を試す - CUBE SUGAR CONTAINER
  • 統計: 統計検定2級に合格した - CUBE SUGAR CONTAINER

    先日、当面の目標にしていた統計検定2級に合格することができた。 今回は、受験に関する諸々について書いてみることにする。 受験のきっかけ 以前から、データ分析機械学習に興味があった。 そして、それらの書籍を読んだり手法を調べていくうちに、だんだんと統計学に対する興味が湧いてきた。 統計学は、データ分析機械学習に深い関わりがある。 その後は、初心者向けの統計に関する書籍などを読んで学び始めた。 とはいえ、それだけでは統計が身についているのかがよく分からない状況に陥ってしまう。 そんなとき、統計検定の存在を知った。 ウェブで下調べしたところ、概ね統計検定の 2 級に合格すれば統計の基礎は分かっていると胸を張れるらしい。 現在、統計検定は 1 級 (数理・応用)、準 1 級、2 級、3 級、4 級と五つのレベルに分かれている。 公式では 2 級の試験内容を「大学基礎課程で習得すべきこと」と位置

    統計: 統計検定2級に合格した - CUBE SUGAR CONTAINER
  • Golang の defer 文と panic/recover 機構について - CUBE SUGAR CONTAINER

    Golang の defer 文と、それにまつわる panic/recover 機構について調べたので、その内容を書き残しておくことにする。 Golang では defer 文を使うことで、それを呼び出した関数が終了する際に実行すべき処理を記述することができる。 例えば関数の中でオープンしたリソースを確実にクローズするために使われたりする。 試してみよう まずは、シンプルなサンプルコードを使って defer 文の動作を確認してみることにする。 内容的にはメッセージを標準出力に出すということしかやっていない。 ただし、片方には defer が付いていて、もう片方には何もついていない。 コードの記述順序的には "End" のメッセージが先に来ているが、実行するとどうなるだろうか。 package main import ( "fmt" ) func helloworld() { defer f

    Golang の defer 文と panic/recover 機構について - CUBE SUGAR CONTAINER
  • Python: freezegun で時刻のテストを楽に書く - CUBE SUGAR CONTAINER

    時刻周りの処理はバグが混入しやすい上にテストが書きづらくて面倒くさい。 今回は、そんな面倒な時刻のテストを楽に書けるようになる freezegun というパッケージを使ってみる。 この freezegun というパッケージを使うと Python の標準ライブラリの datetime から得られる現在時刻を指定したものに差し替えることができる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G1108 $ python --version Python 3.5.2 時刻をテストするときの面倒くささ 時刻周りの処理をテストをするときは、当然ながら色々な時刻を使ってテストがしたい。 とはいえ、そのためだけにシステムの時刻を変更しながらテストを走らせるわけにもいかないだろう。

    Python: freezegun で時刻のテストを楽に書く - CUBE SUGAR CONTAINER
  • Python: 明示的な相対インポートの使い方 - CUBE SUGAR CONTAINER

    Python のインポートには、次のように3つの種類がある。 暗黙の相対インポート 明示的な相対インポート 絶対インポート このうち、暗黙の相対インポートについては Python 3 で廃止されたので使ってはいけない。 となると、残るは明示的な相対インポートか絶対インポートのどちらかを使うことになる。 ただ、これまで明示的な相対インポートは使わずに、もっぱら絶対インポートだけを使ってきた。 今回は、これまで明示的な相対インポートを避けていた理由と、その解決策が分かったのでそれについて書いてみる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34 $ python --version Python 3.5.1 下準備 今回は mypackage というパッケージを用意

    Python: 明示的な相対インポートの使い方 - CUBE SUGAR CONTAINER
  • 統計: 変動係数で値のバラつきを比べる - CUBE SUGAR CONTAINER

    まず初めに、次のようなヒストグラムがあったとする。 このヒストグラムには、青色と緑色のふたつのグループが含まれている。 それぞれのグループは、平均値や度数が異なるようだ。 果たして、それぞれのグループはどちらの方が値のバラつきが大きいのだろうか? 標準偏差だけでは比較できない 通常、データセットの値のバラつきは分散や標準偏差、四分位数といった統計量で表される。 しかし、これらの統計量は、平均値や単位などが異なると単純に比較することはできない。 例えば、あるカブトムシの大きさの標準偏差が 1 cm で、あるクジラの大きさの標準偏差が 1 m だとしよう。 クジラの方が標準偏差にして 100 倍の大きさがある。 しかし、だからといってクジラの方がバラつきも大きいとは限らない。 元々、その生物がだいたいどれくらいの大きさなのかが分からなければ判断がつかない。 先ほどの例であれば、カブトムシがだい

    統計: 変動係数で値のバラつきを比べる - CUBE SUGAR CONTAINER
  • Python: line_profiler でボトルネックを調べる - CUBE SUGAR CONTAINER

    前回は Python の標準ライブラリに用意されているプロファイラの profile/cProfile モジュールについて書いた。 blog.amedama.jp 今回は、同じ決定論的プロファイリングを採用したプロファイラの中でも、サードパーティ製の line_profiler を使ってみることにする。 line_profiler は profile/cProfile モジュールに比べるとコード単位でプロファイリングが取れるところが魅力的なパッケージ。 また、インターフェースについても profile/cProfile に近いものとなっている。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G31 $ python --version Python 3.5.2 イン

    Python: line_profiler でボトルネックを調べる - CUBE SUGAR CONTAINER
  • Python: profile/cProfile モジュールでボトルネックを調べる - CUBE SUGAR CONTAINER

    プログラムを作ってみたは良いけれど、想定していたよりもパフォーマンスが出ないという事態はよくある。 そんなときはパフォーマンス・チューニングをするわけだけど、それにはまず測定が必要になる。 具体的に何を測定するかというと、プログラムの中のどこがボトルネックになっているかという点だ。 この測定の作業は一般にプロファイリングと呼ばれる。 プロファイリングにはふたつの種類がある。 ひとつ目は今回紹介する profile/cProfile モジュールが採用している決定論的プロファイリング。 そして、もうひとつが統計的プロファイリングだ。 決定論的プロファイリングでは、プログラムが実行されていく過程を逐一記録していく。 そのため、時間のかかっている処理を正確に把握することができる。 ただし、測定自体がプログラムに与える影響 (プローブ・エフェクト) も大きくなる。 それに対し統計的プロファイリングで

    Python: profile/cProfile モジュールでボトルネックを調べる - CUBE SUGAR CONTAINER
  • Python: Ellipsis について - CUBE SUGAR CONTAINER

    今回は Python の特殊な定数 Ellipsis について調べてみた。 Ellipsis ってなんだ Ellipsis というのは、主に拡張スライス文と共に使われる特殊な定数のこと。 これを使うと、例えば配列などのスライスで「...」を指定できるようになる。 3. 組み込み定数 — Python 3.5.2 ドキュメント 具体的な使用例 例えば、高速な数値計算のための配列ライブラリである NumPy の配列には、この Ellipsis を使うことができる。 ひとまず NumPy をインストールしよう。 $ pip install numpy そして Python の REPL を起動する。 $ python array という名前で NumPy の配列を作る。 >>> import numpy as np >>> array = np.array([1, 2, 3]) この配列のスライ

    Python: Ellipsis について - CUBE SUGAR CONTAINER
    BigFatCat
    BigFatCat 2016/06/27
    Ellipsis知らなかった。
  • Python: 環境ごとの依存ライブラリをセットアップスクリプトの extras_require で管理する - CUBE SUGAR CONTAINER

    Python のパッケージを作っていると、特定の環境だけで必要となるパッケージが大抵はでてくる。 例えばデータベースを扱うアプリケーションなら、使う RDBMS によってデータベースドライバのパッケージが異なる。 あるいは、インストール先の Python のバージョンによっては標準ライブラリに用意されていないパッケージのバックポート版をインストールしなきゃいけない。 今回は、そんなときに便利なセットアップスクリプト (setup.py) の extras_require 引数を使ってみる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34 $ python --version Python 3.5.1 下準備 まず最初に題材とするのはデータベースを扱うアプリケーショ

    Python: 環境ごとの依存ライブラリをセットアップスクリプトの extras_require で管理する - CUBE SUGAR CONTAINER
  • Golang: gometalinter でソースコードを静的解析しまくる - CUBE SUGAR CONTAINER

    先日、このブログで Golanglinter を使ってみたエントリを書いた。 blog.amedama.jp すると @r_rudi さんから gometalinter という便利なものがあることを教えてもらえた。 @momijiame https://t.co/VkWeIVx6pX をどうぞ— shirou - しろう (@r_rudi) 2016年3月31日 何それ? gometalinterGolang の色々な linter を一度に実行できてしまう優れもの。 インストール gometalintergo get コマンドでさくっとインストールする。 $ go get github.com/alecthomas/gometalinter 初期設定 最初に gometalinter に --install と --update オプションをつけて実行する。 これで対応

    Golang: gometalinter でソースコードを静的解析しまくる - CUBE SUGAR CONTAINER
  • 「スマートPythonプログラミング」という本を書きました - CUBE SUGAR CONTAINER

    表題の通り Pythonを書いたので、そのご紹介です! スマートPythonプログラミング: Pythonのより良い書き方を学ぶ 作者: もみじあめ発売日: 2016/03/12メディア: Kindle版この商品を含むブログ (1件) を見る どんななの? ひと言で表すと、自信を持って Python を書けるようになるためのです。 スマートPythonプログラミングなので、略してスマパイって呼んでください。 こんな人におすすめ なんとなく書いてなんとなく動いているコードに不安を覚えている方 入門書は読み終わったけど次に何をして良いか分からない方 Python の初心者から中級者にステップアップしたい方 ベストプラクティスとかアンチパターンって言葉が好きな方 上記に当てはまる方には、書が少しでも参考になると思います。 どんなことが書いてあるの? 自分が Python を学び始めた

    「スマートPythonプログラミング」という本を書きました - CUBE SUGAR CONTAINER
  • Python: pip と Wheel キャッシュについて - CUBE SUGAR CONTAINER

    これは Python Advent Calendar 2015 の 1 日目の記事です。 Wheel というのは、最近になって導入された Python の新しいパッケージング規格です。 今回はその Wheel を pip が積極的にキャッシュすることで気づいた点について書いてみます。 今回使用した環境は次の通りです。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.1 BuildVersion: 15B42 $ pip list | egrep (pip|setuptools|wheel) pip (7.1.2) setuptools (18.5) wheel (0.26.0) 気づけば Wheel を使っていた Python を使っている方であれば、パッケージマネージャの pip は使ったことがあるとおもいます。 その pip

    Python: pip と Wheel キャッシュについて - CUBE SUGAR CONTAINER
  • Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER

    この記事の目指すところ 現在 Python はバージョン 2.x 系と 3.x 系という、一部に互換性のないふたつのメジャーバージョンが併用されている。 その上で、この記事にはふたつの目的がある。 ひとつ目は、2.x 系と 3.x 系の違いについてまとめること。 現状、それぞれのバージョン毎の違いはまとまっているところが少ない。 自分用に、このページだけ見ればひと通り分かる!っていうものがほしかった。 ふたつ目は、2.x 系と 3.x 系の違いを吸収するソースコードの書き方についてまとめること。 こちらも Web 上にナレッジがあまりまとまっていない。 これについては今 python-future というパッケージがアツい。 尚、サポートするバージョンは以下の通り。 2.x 系: 2.6 と 2.7 3.x 系: 3.3 と 3.4 題に入る前に、最近の Python 事情についてまとめ

    Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER