タグ

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

  • GNU/Linux (x86/x86-64) のシステムコールをアセンブラから呼んでみる - CUBE SUGAR CONTAINER

    今回は、表題の通り x86/x86-64 の GNU/Linux でシステムコールをアセンブラから呼んでみる。 システムコールは、OS (ディストリビューション) のコアとなるカーネルがユーザ空間のプログラムに向けて提供しているインターフェースのこと。 なお、アセンブラの実装に関しては以下の二つを試した。 NASM (Netwide Assembler) GAS (GNU Assembler) アセンブラには INTEL 記法と AT&T 記法という二つのシンタックスがある。 NASM はデフォルトで INTEL 記法を、GAS はデフォルトで AT&T 記法を使うことになる。 使った環境は次の通り。 $ uname -sr Linux 4.15.0-65-generic $ nasm -v NASM version 2.13.02 $ as -v GNU assembler versio

    GNU/Linux (x86/x86-64) のシステムコールをアセンブラから呼んでみる - CUBE SUGAR CONTAINER
  • Python: ソケットプログラミングのアーキテクチャパターン - CUBE SUGAR CONTAINER

    今回はソケットプログラミングについて。 ソケットというのは Unix 系のシステムでネットワークを扱うとしたら、ほぼ必ずといっていいほど使われているもの。 ホスト間の通信やホスト内での IPC など、ネットワークを抽象化したインターフェースになっている。 そんな幅広く使われているソケットだけど、取り扱うときには色々なアーキテクチャパターンが考えられる。 また、比較的低レイヤーな部分なので、効率的に扱うためにはシステムコールなどの、割りと OS レベルに近い知識も必要になってくる。 ここらへんの話は、体系的に語られているドキュメントが少ないし、あっても鈍器のようなだったりする。 そこで、今回はそれらについてざっくりと見ていくことにした。 尚、今回はプログラミング言語として Python を使うけど、何もこれは特定の言語に限った話ではない。 どんな言語を使うにしても、あるいは表面上は抽象化さ

    Python: ソケットプログラミングのアーキテクチャパターン - CUBE SUGAR CONTAINER
  • keepalived のログを rsyslog と logrotate でローテーションする - CUBE SUGAR CONTAINER

    今回はホストの冗長化するのに使う keepalived のログを rsysloglogrotate を使ってローテーションさせる方法について書く。 検証環境には CentOS7 を使った。 $ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) $ uname -r 3.10.0-229.11.1.el7.x86_64 デフォルトの状態で keepalived を動かす まずは keepalived と rsyslog をインストールしておく。 $ sudo yum -y install keepalived rsyslog 今回は keepalived を動かすこと自体が目的ではないので設定は最低限に留める。 以下の設定で enp0s8 インターフェースに仮想 IP アドレス (VIP) を付けることができる。

    keepalived のログを rsyslog と logrotate でローテーションする - CUBE SUGAR CONTAINER
  • Linux のシャドウパスワードについて調べた - CUBE SUGAR CONTAINER

    ふと Linux ディストリビューションのユーザ認証周りについて気になって、その中でも特に UNIX パスワード認証について調べてみた。 UNIX パスワード認証というのは、Linux に限らず Unix 系のディストリビューションで広く採用されているパスワードを使った認証の仕組み。 特に、ログイン用のパスワードを暗号化 (ハッシュ化) した上でパスワードファイル (/etc/passwd) やシャドウパスワードファイル (/etc/shadow) に保存するところが特徴となっている。 UNIX パスワード認証は Unix 系の色々なディストリビューションでそれぞれ実装されている。 その中でも、今回は Linux ディストリビューションの Ubuntu 18.04 LTS について見ていく。 先に断っておくと、かなり長い。 注: この記事では、やっていることがハッシュ化でも manpage

    Linux のシャドウパスワードについて調べた - CUBE SUGAR CONTAINER
  • Python: デコレータについて - CUBE SUGAR CONTAINER

    Python の特徴的な構文の一つにデコレータがある。 便利な機能なんだけど、最初はとっつきにくいかもしれない。 そこで、今回はデコレータについて一通り色々と書いてみる。 先に断っておくと、とても長い。 これを読むと、以下が分かる。 デコレータの質 デコレータはシンタックスシュガー (糖衣構文) に過ぎない デコレータの作り方 引数を取るデコレータと取らないデコレータ デコレータの用途 用途はラッピングとマーキングの二つに大別できる デコレータの種類 デコレータは関数、メソッド、インスタンスで作れる デコレータの対象 デコレートできるのは関数、メソッド以外にクラスもある 今回使った環境は次の通り。 尚、紹介するコードの中には、一部に Python 3 以降でないと動作しないものが含まれている。 $ python -V Python 3.6.6 デコレータについて まずはデコレータのおさら

    Python: デコレータについて - CUBE SUGAR CONTAINER
  • SSHFS を使ってリモートホストのディレクトリをマウントする - CUBE SUGAR CONTAINER

    SSH でログインできるリモートホストとのファイルのやり取りは SCP を使うことが多い。 ただ、頻繁にやり取りするときは、それも面倒に感じることがある。 ただ、あんまり手間のかかる設定作業はしたくない。 そんなときは SSHFS を使うと手軽に楽ができそう。 使った環境は次の通り。 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS" $ uname -r 4.15.0-20-generic 下準備 まず、ファイルを頻繁にやり取りする先として 192.168.33.10 という IP アドレスのホストがいたとする。 $ ping -c 3 192.168.33.10 PING 192.16

    SSHFS を使ってリモートホストのディレクトリをマウントする - CUBE SUGAR CONTAINER
  • Python: memory_profiler でプログラムのメモリ使用量を調べる - CUBE SUGAR CONTAINER

    今回は memory_profiler というモジュールを使ってプログラムのメモリ使用量を調べる方法について紹介する。 pypi.python.org このブログでは、以前に Python のプロファイラとして profile/cProfile や line_profiler について書いたことがある。 これまでに紹介したこれらのプロファイラは、主に時間計算量の調査が目的となる。 それに対して memory_profiler では、調べる対象は空間計算量となる。 blog.amedama.jp blog.amedama.jp 使った環境は以下の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G1212 $ python --version Python 3.6.4 下準備 まずは mem

    Python: memory_profiler でプログラムのメモリ使用量を調べる - CUBE SUGAR CONTAINER
  • Python: map/filter 処理を並列化する - CUBE SUGAR CONTAINER

    今回は Python でリストなんかへの map/filter 処理をマルチプロセスで並列化する方法について。 この説明だけだと、なんのこっちゃという感じだと思うので詳しくは後述する。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29 $ python --version Python 3.6.3 下準備 Python の REPL を使って説明していくので、まずは起動する。 $ python まずは、サンプルのデータとして 0 から 9 までの数字が入ったリストの data を用意しておく。 >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> data = list(range(10)) map/filte

    Python: map/filter 処理を並列化する - CUBE SUGAR CONTAINER
  • sqlmap を使って SQL インジェクションの脆弱性を検証する - CUBE SUGAR CONTAINER

    sqlmapSQL インジェクションに特化したオープンソースのペネトレーションテストツール。 これを使うと Web アプリケーションの特定のパラメータに SQL インジェクションの脆弱性があるか否かを確認しやすい。 注意: 外部のサーバに使うことは攻撃となるので絶対にしないように。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29 $ sqlmap --version 1.1.8#stable $ python --version Python 2.7.10 インストール sqlmap は Homebrew でインストールできる。 $ brew install sqlmap これで sqlmap コマンドが使えるようになる。 $ sqlmap --vers

    sqlmap を使って SQL インジェクションの脆弱性を検証する - 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
  • 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: profile/cProfile モジュールでボトルネックを調べる - CUBE SUGAR CONTAINER

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

    Python: profile/cProfile モジュールでボトルネックを調べる - CUBE SUGAR CONTAINER
  • Python: pipdeptree でパッケージの依存関係を調べる - CUBE SUGAR CONTAINER

    Python のパッケージ同士が、どのように依存しているかを調べるのは意外と面倒くさい。 そんなときは今回紹介する pipdeptree を使うと楽ができそう。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34 $ python --version Python 3.5.1 下準備 まずは pip を使って pipdeptree をインストールしておく。 $ pip install pipdeptree 使ってみる インストールすると pipdeptree コマンドが使えるようになる。 このコマンドを使うと、今の Python 実行環境にインストールされているパッケージの依存関係が得られる。 $ pipdeptree wheel==0.29.0 今回は virtua

    Python: pipdeptree でパッケージの依存関係を調べる - CUBE SUGAR CONTAINER
  • SQL: ナイーブツリーと経路列挙モデル - CUBE SUGAR CONTAINER

    今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造を表現するための解決策のひとつ経路列挙モデルを扱う。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ mysql --version mysql Ver 14.14 Distrib 5.7.12, for osx10.11 (x86_64) using EditLine wrapper 下準備 まずは下準備として MySQL にデータベースを作るところまで。 今回使ったのは Mac OS X なので MySQL は Homebrew でインストールする。 $ brew instal

    SQL: ナイーブツリーと経路列挙モデル - CUBE SUGAR CONTAINER
  • SQL: ナイーブツリーと再帰クエリ - CUBE SUGAR CONTAINER

    今回は「SQLアンチパターン」の中で紹介されているナイーブツリーというアンチパターンについて見てみることにする。 www.oreilly.co.jp 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ mysql --version mysql Ver 14.14 Distrib 5.7.12, for osx10.11 (x86_64) using EditLine wrapper $ sqlite3 --version 3.8.10.2 2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4 ナイーブツリーとは リレーショナル・データベースで再帰的な構造を表現したいときに発生しうるアンチパターン

    SQL: ナイーブツリーと再帰クエリ - CUBE SUGAR CONTAINER
  • Python: コマンドラインパーサの Click が便利すぎた - CUBE SUGAR CONTAINER

    Python のコマンドラインパーサといえば、標準ライブラリに組み込まれている argparse が基。 蛇足になるけど、バージョン 2.7 以前で使われていた optparse は将来的に廃止予定なので新たに使うことは避けた方が良い。 そして、今回紹介する Python のサードパーティ製コマンドラインパーサ Click は、既存のパッケージと比較すると最小限のコードで美しくコマンドラインインターフェースを実装できるように作られている。 どれくらい楽になるかといえば、もう argparse を使っている場合じゃないな、と思えるレベル。 Welcome to Click — Click Documentation (8.0.x) もくじ もくじ Click をインストールする 基的な使い方 コマンドを定義する オプションを追加する 引数を追加する サブコマンドを作る オプションについて

    Python: コマンドラインパーサの Click が便利すぎた - CUBE SUGAR CONTAINER
  • 1