タグ

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

  • Lima を使って Apple Silicon 版の Mac で x86-64 (Intel on ARM) な仮想マシンを扱う - CUBE SUGAR CONTAINER

    Apple Silicon 版の Mac を使っていても、依然として成果物をデプロイする先は ISA が x86-64 (amd64) のマシンであることが多い。 となると、どうしても x86-64 の環境を使って作業をしたい場面が出てくる。 もちろん、IaaS を利用してリモートにマシンを立ち上げれば良いんだけど、簡単な検証なら手元で手軽に済ませたい。 今回は、そんなニーズを埋めてくれるかもしれない Lima を使ってみる。 Lima を使うと、Apple Silicon 版の Mac 上で ISA が x86-64 の Linux 仮想マシンを手軽に立ち上げることができる 1。 ただし、バックエンドは QEMU のソフトウェアエミュレーション (qemu-system-x86_64) なので、ネイティブな環境に比べるとパフォーマンスは大きく劣る。 使った環境は次のとおり。 $ sw_v

    Lima を使って Apple Silicon 版の Mac で x86-64 (Intel on ARM) な仮想マシンを扱う - CUBE SUGAR CONTAINER
  • 返り値のチェックでシェルスクリプトが止まらないようにする - CUBE SUGAR CONTAINER

    シェルスクリプトで set -e しておくとコマンドの返り値が非ゼロ (エラー) のときにスクリプトを止めることができる。 この機能を使うと、コマンドの実行結果がエラーになった状態で処理が突き進んでしまうことを防止できる。 ただ、この機能は便利な反面、スクリプトが意図せず止まってしまうこともある。 今回は、それを回避する方法について。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G103 $ bash --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18) Copyright (C) 2007 Free Software Foundation, Inc. もくじ もくじ set -e

    返り値のチェックでシェルスクリプトが止まらないようにする - CUBE SUGAR CONTAINER
  • 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

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

    Python: ユニットテストを書いてみよう - CUBE SUGAR CONTAINER
  • Python: デコレータについて - CUBE SUGAR CONTAINER

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

    Python: デコレータについて - CUBE SUGAR CONTAINER
  • 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
  • まっさらな状態から Docker イメージを作る - CUBE SUGAR CONTAINER

    Docker イメージというと、一般的には既存の Docker イメージをベースにして作る機会が多い。 そうしたとき Dockerfile にはベースとなるイメージを FROM 命令で指定する。 とはいえ、既存のイメージをベースにしない、まっさらな状態からイメージを作ることもできる。 それが FROM 命令に scratch を指定した場合になる。 今回は FROM scratch でまっさらな状態から Docker イメージを作ってみることにする。 試した環境は次の通り。 $ docker version Client: Version: 18.01.0-ce API version: 1.35 Go version: go1.9.2 Git commit: 03596f5 Built: unknown-buildtime OS/Arch: darwin/amd64 Experiment

    まっさらな状態から Docker イメージを作る - CUBE SUGAR CONTAINER
  • Python: ソケットプログラミングのアーキテクチャパターン - CUBE SUGAR CONTAINER

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

    Python: ソケットプログラミングのアーキテクチャパターン - 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
  • Golang: ソースコードを静的に解析する - CUBE SUGAR CONTAINER

    2016/4/5 追記: こっちを使った方が便利そうです。 blog.amedama.jp 今回は Golang でイケてるソースコードを書くのに使うと良さそうなツールについて調べた。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ go version go version go1.6 darwin/amd64 標準のコンパイラ まずは大前提として Golang は他の言語に比べると標準のコンパイラも結構細かくお作法について口出ししてくれる。 例えば、次のようにして使われない変数 n を残したソースコードを用意する。 $ cat << 'EOF' > helloworld.go package main import ( "fmt" ) func main(

    Golang: ソースコードを静的に解析する - CUBE SUGAR CONTAINER
  • Xvfb を使って仮想ディスプレイを作る - CUBE SUGAR CONTAINER

    Xvfb (X virtual framebuffer) は X Window System の仮想ディスプレイを作ることのできるソフトウェア。 これを使うと実際にスクリーンがない状態でも GUI が必要なソフトウェアを使えるようになる。 今回使う環境には CentOS7 を選んだ。 $ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ uname -r 3.10.0-327.3.1.el7.x86_64 下準備 まずは GUI を必要とするソフトウェアとして Firefox をインストールしておく。 $ sudo yum -y install firefox ipa-{,p}gothic-fonts ipa-{,p}mincho-fonts 次にランレベルを確認しておく。 単なるマルチユーザモードなので、通常であ

    Xvfb を使って仮想ディスプレイを作る - CUBE SUGAR CONTAINER
  • 1