タグ

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

  • 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
    advblog
    advblog 2021/06/28
  • Python: REPL に複数行をペーストしたときの挙動が変わって困った件について - CUBE SUGAR CONTAINER

    表題のとおりなんだけど、最近 Python の REPL に複数行のコードをペーストしたときの挙動が以前と変わってしまい困っていた。 その Python というのは、具体的には Homebrew でインストールしたものや、Pyenv を使ってソースコードからビルドしたもの。 使っている環境は次のとおり。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H114 $ brew info readline | head -n 1 readline: stable 8.1 (bottled) [keg-only] $ pyenv --version pyenv 1.2.22 もくじ もくじ TL;DR 問題についてもうちょっと詳しく TL;DR 結論から先に述べると、これは Python のビルドに使

    Python: REPL に複数行をペーストしたときの挙動が変わって困った件について - CUBE SUGAR CONTAINER
    advblog
    advblog 2021/02/01
  • NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う - CUBE SUGAR CONTAINER

    今回は NVIDIA Container Toolkit を使って Docker コンテナから Docker ホストGPU を使う方法について書く。 これまで Docker コンテナで GPU を使う方法は、nvidia-docker と nvidia-docker2 という二つの世代を経てきた。 それも、ここに来てやっと一息ついたかな、という印象がある。 GPU の基的なサポートが Docker 体側に取り込まれて (v19.03 以降)、GPU ベンダーはそのドライバを提供する形に落ち着いた。 そして、従来の nvidia-docker2 は非推奨 (Deprecated) な方法となっている。 なお、GPU ベンダーがドライバを提供する、と前述した通り NVIDIA のリソースが一切不要になったわけではない。 そのため、インストール手順やインターフェースの使い勝手という観点で

    NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う - CUBE SUGAR CONTAINER
    advblog
    advblog 2020/06/17
  • 「Linuxで動かしながら学ぶTCP/IPネットワーク入門」という本を書きました - CUBE SUGAR CONTAINER

    表題のとおり TCP/IP に関するを書きました。 今回は、そのご紹介です! Linuxで動かしながら学ぶTCP/IPネットワーク入門 作者:もみじあめAmazon どんななの? Linux を使って実際にネットワークを組んで動かしながら TCP/IP について学べるです。 実際に手を動かすことで、より実践的で風化しにくい知識と技術を身につけることがの目的です。 こんな人にオススメ 次のいずれかに当てはまるような方には、このが参考になると思います。 ネットワークが専門ではない IT エンジニア、またはそれを志す学生さん 他の TCP/IP に関するを読んだことはあるけど、身についている実感が少ない インターネットやインフラの技術についてよく知らないけど興味はある ネットワークを気軽に組んで実験できる環境の作り方に興味がある そして、このを読んで試した後には、次のような効果が見

    「Linuxで動かしながら学ぶTCP/IPネットワーク入門」という本を書きました - CUBE SUGAR CONTAINER
    advblog
    advblog 2020/03/03
  • gRPC の通信を Wireshark でキャプチャしてみる - CUBE SUGAR CONTAINER

    今回は、最近よく使われている gRPC の通信を Wireshark でキャプチャしてみる。 ちなみに、現行の Wireshark だと gRPC をちゃんと解釈できるみたい。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.5 BuildVersion: 18F132 $ python -V Python 3.7.3 $ wireshark --version | head -n 1 Wireshark 3.0.2 (v3.0.2-0-g621ed351d5c9) PythongRPC サーバ・クライアントを書く 通信をキャプチャするためには、まず gRPC のサーバとクライアントを用意する必要がある。 まずは gRPC を使う上で必要なツールキットをインストールしておく。 $ pip instal

    gRPC の通信を Wireshark でキャプチャしてみる - CUBE SUGAR CONTAINER
    advblog
    advblog 2019/07/01
  • Python: ユニットテストを書いてみよう - CUBE SUGAR CONTAINER

    ソフトウェアエンジニアにとって、不具合に対抗する最も一般的な方法は自動化されたテストを書くこと。 テストでは、書いたプログラムが誤った振る舞いをしないか確認する。 一口に自動テストといっても、扱うレイヤーによって色々なものがある。 今回は、その中でも最もプリミティブなテストであるユニットテストについて扱う。 ユニットテストでは、関数やクラス、メソッドといった単位の振る舞いについてテストを書いていく。 Python には標準ライブラリとして unittest というパッケージが用意されている。 これは、文字通り Python でユニットテストを書くためのパッケージとなっている。 このエントリでは、最初に unittest パッケージを使ってユニットテストを書く方法について紹介する。 その上で、さらに効率的にテストを記述するためにサードパーティ製のライブラリである pytest を使っていく。

    Python: ユニットテストを書いてみよう - CUBE SUGAR CONTAINER
    advblog
    advblog 2019/06/19
  • Python: 機械学習における不均衡データの問題点と対処法について - CUBE SUGAR CONTAINER

    機械学習における分類問題では、扱うデータセットに含まれるラベルに偏りのあるケースがある。 これは、例えば異常検知の分野では特に顕著で、異常なデータというのは正常なデータに比べると極端に数が少ない。 正常なデータが 99.99% なのに対し異常なデータは 0.01% なんてこともある。 このようなデータセットは不均衡データ (Imbalanced data) といって機械学習で扱う上で注意を要する。 今回は、不均衡データを扱う上での問題点と、その対処法について見てみる。 なお、登場する分類問題の評価指標については、以前このブログで扱ったことがあるのでそちらを参照のこと。 blog.amedama.jp 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.2 BuildVersion: 18C54 $ python

    Python: 機械学習における不均衡データの問題点と対処法について - CUBE SUGAR CONTAINER
    advblog
    advblog 2018/12/17
  • Python: ベイズ最適化で機械学習モデルのハイパーパラメータを選ぶ - CUBE SUGAR CONTAINER

    機械学習モデルにおいて、人間によるチューニングが必要なパラメータをハイパーパラメータと呼ぶ。 ハイパーパラメータをチューニングするやり方は色々とある。 例えば、良さそうなパラメータの組み合わせを全て試すグリッドサーチや、無作為に試すランダムサーチなど。 今回は、それとはちょっと違ったベイズ最適化というやり方を試してみる。 ベイズ最適化では、過去の試行結果から次に何処を調べれば良いかを確率分布と獲得関数にもとづいて決める。 これにより、比較的少ない試行回数でより優れたハイパーパラメータが選べるとされる。 Python でベイズ最適化をするためのパッケージとしては Bayesian Optimization や skopt、GPyOpt などがある。 今回は、その中でも Bayesian Optimization を使ってみることにした。 使った環境は次の通り。 $ sw_vers Produ

    Python: ベイズ最適化で機械学習モデルのハイパーパラメータを選ぶ - CUBE SUGAR CONTAINER
    advblog
    advblog 2018/08/19
  • Python: Selenium + Headless Chrome で Web ページ全体のスクリーンショットを撮る - CUBE SUGAR CONTAINER

    スクレイピングした Web サイトからページ全体のスクリーンショットを撮影したい機会があった。 そこで Selenium の Python バインディングと Headless Chrome を使ったところ実現できたのでメモしておく。 ちなみに、ページ全体でなければ Headless Chrome 単体でも撮れる。 その方法についても末尾に補足として記載しておいた。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.5 BuildVersion: 17F77 $ python -V Python 3.6.5 $ pip list --format=columns | grep -i selenium selenium 3.13.0 $ chromedriver --version ChromeDriver 2.

    Python: Selenium + Headless Chrome で Web ページ全体のスクリーンショットを撮る - CUBE SUGAR CONTAINER
    advblog
    advblog 2018/07/28
  • 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
    advblog
    advblog 2018/02/05
  • Python: ERAlchemy を使って ER 図を描く - CUBE SUGAR CONTAINER

    今回は ERAlchemy という ER 図を描くツールを使ってみる。 このツールは erd という Haskell で書かれた同様のツールにインスパイアされて作られたものらしい。 ただ、機能的にできることは ERAlchemy の方が多いみたいだ。 ERAlchemy が提供する基的な機能は次の通り。 ER フォーマットのテキストファイルから ER 図を生成する SQLAlchemy 経由で既存のデータベースから ER 図を生成する 後者の既存データベースから ER 図を生成するところなんかは、これまでだと MySQL Workbench を使ったりしてた。 ただ、このやり方だと文字通り MySQL でしか使えないのに対して ERAlchemy はそれ以外のデータベースにも対応している。 今回も試しに SQLite3 のデータベースから ER 図を生成してみている。 ただ、この機能が出

    advblog
    advblog 2017/12/30
  • Python: ジェネレータをイテレータから理解する - CUBE SUGAR CONTAINER

    Python のイテレータとジェネレータという概念は意外と分かりにくい。 今回は、実は深い関わり合いを持った両者についてまとめてみることにする。 というのも、最終的にジェネレータを理解するにはイテレータへの理解が欠かせないためだ。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G1036 $ python --version Python 3.6.3 イテレータとは まず、そもそもイテレータとは何者だろうか。 それについて、いくつかの側面から考えてみることにしよう。 使い方から考える 最初は、使い方という側面からイテレータとは何かを考えてみよう。 このとき、答えは「要素を一つずつ取り出すことのできるオブジェクト」になる。 実際に、使い方からイテレータについて見ていこう。

    Python: ジェネレータをイテレータから理解する - CUBE SUGAR CONTAINER
    advblog
    advblog 2017/11/24
  • オープンソースの脆弱性スキャナ OpenVAS を使ってみる - CUBE SUGAR CONTAINER

    今回はオープンソースの脆弱性スキャナである OpenVAS を使ってみることにする。 脆弱性スキャナというのは、ホストに既知の脆弱性が含まれないかどうかを自動でスキャンしてくれるツール。 注意: 脆弱性スキャンはポートスキャンやペネトレーションを含むため外部のサーバには実行しないこと 使った環境は次の通り。OS は Ubuntu 16.04 LTS にした。 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial $ uname -r 4.4.0-89-generic セキュリティ用途だと Kali Linux を使うことも多いみたい。 インストール Ubuntu で OpenVA

    オープンソースの脆弱性スキャナ OpenVAS を使ってみる - CUBE SUGAR CONTAINER
    advblog
    advblog 2017/08/10
  • Python: データパイプライン構築用フレームワーク Luigi を使ってみる - CUBE SUGAR CONTAINER

    最近になって、バッチ処理においてデータパイプラインを組むためのフレームワークとして Luigi というものがあることを知った。 これは、Spotify という音楽のストリーミングサービスを提供する会社が作ったものらしい。 似たような OSS としては他にも Apache Airflow がある。 こちらは民宿サービスを提供する Airbnb が作ったものだけど、最近 Apache に寄贈されてインキュベータープロジェクトとなった。 Luigi の特徴としては、バッチ処理に特化している点が挙げられる。 ただし、定期的にバッチ処理を実行するような機能はない。 そこは、代わりに cronsystemd timer を使ってやる必要がある。 また、体もそうだけどデータパイプラインについても Python を使って書く必要がある。 今回は、そんな Luigi を一通り触ってみることにする。

    Python: データパイプライン構築用フレームワーク Luigi を使ってみる - CUBE SUGAR CONTAINER
    advblog
    advblog 2017/05/15
  • フレッツ回線が遅すぎる問題を 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
    advblog
    advblog 2017/04/10
  • Python: ソケットプログラミングのアーキテクチャパターン - CUBE SUGAR CONTAINER

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

    Python: ソケットプログラミングのアーキテクチャパターン - CUBE SUGAR CONTAINER
    advblog
    advblog 2017/03/30
  • Python: Pykka でアクターモデルについて学ぶ - CUBE SUGAR CONTAINER

    アクターモデルというのは、並行処理のプログラミングモデルの一つだ。 並行処理という言葉からは、まずマルチスレッドとかをイメージすると思うけど、それよりも抽象度の高い概念となっている。 つまり、アクターモデルというのはマルチスレッドなどを用いて構築することになる。 どちらかといえばプロセス間通信 (IPC) の技法であって、共有メモリやロック、RPC と比較するものかもしれない。 そんなアクターモデルは、概念とか使ったときの嬉しさを理解・実感するのがなかなか難しいモデルだとも思う。 理由としては、使い始めるまでに必要なコード量が多かったり、それなりの規模のアプリケーションで使わないとメリットが分かりづらい点が挙げられる。 ただ、これはあくまで主観的なものだけど、アクターモデルをベースに組まれたアプリケーションは規模が大きくなっても並行処理をしているコードが読みやすい。 共有メモリやロックを使

    Python: Pykka でアクターモデルについて学ぶ - CUBE SUGAR CONTAINER
    advblog
    advblog 2017/03/14
  • Python: Keras/TensorFlow の学習を GPU で高速化する (Mac OS X) - CUBE SUGAR CONTAINER

    Keras というのは Python を使ってニューラルネットワークを組むためのフレームワーク。 Python でニューラルネットワークのフレームワークというと、他にも TensorFlow とか Chainer なんかが有名どころ。 Keras はそれらに比べると、より高い抽象度の API を提供しているところが特徴みたい。 実のところ Keras はデフォルトで TensorFlow をバックエンドとして動作する。 バックエンドとしては、他にも Theano が選べるらしい。 今回は Keras で組んだニューラルネットワークを GPU で学習させてみることにした。 そのとき CPU と比べて、どれくらい速くなるかを試してみたい。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.3 BuildVersi

    Python: Keras/TensorFlow の学習を GPU で高速化する (Mac OS X) - CUBE SUGAR CONTAINER
    advblog
    advblog 2017/02/27
  • 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
  • 「スマートPythonプログラミング」という本を書きました - CUBE SUGAR CONTAINER

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

    「スマートPythonプログラミング」という本を書きました - CUBE SUGAR CONTAINER
    advblog
    advblog 2016/03/14
  • 1