tarの使い方

tar(tape archives)はファイルフォーマットの1つです。Linux/UnixではWindowsでいうところのzipのような感覚で使います。元々は磁気テープに記録する用途で使われていたフォーマットですが、現在ではgzipbzip2と組み合わせて圧縮して使う場合がほとんどです。

基本的な使い方

複数のファイルをtarにまとめる

$ tar cvf example.tar file1.txt file2.jpg file3.doc

ディレクトリーexampletarにまとめる

$ tar cvf example.tar example

tarファイルを展開する

$ tar xvf example.tar

※処理内容を表示する必要がない場合はvを除いてtar cfのように指定することもできます。
※シェルから使う場合、ワイルドカード*を使って*.txtという風にもできます。

圧縮する場合

圧縮なしのtarはファイルを1つにまとめるだけで、サイズは変わりません。(正確には少し増えます。)zipなどのように圧縮したい場合はgzipbzip2を使います。

gzipで圧縮(圧縮率は普通で、処理負荷は低め)

$ tar zcvf example.tar.gz example

.tar.gzを展開

$ tar zxvf example.tar.gz

bzip2で圧縮(圧縮率は高めで、処理負荷も高め)

$ tar jcvf example.tar.bz2 example

.tar.bz2を展開

$ tar jxvf example.tar.bz2

特定のファイルを除外して圧縮する場合

tarに圧縮する際、特定のファイルやディレクトリを除外したい場合は--excludeオプションを使います。

exampleディレクトリ内でabcでないファイル・ディレクトリを.tar.bz2に圧縮

$ tar jcvf example.tar.bz2 --exclude abc example

exampleディレクトリ内で拡張子.logのファイルを除いて.tar.gzに圧縮

$ tar zcvf example.tar.gz --exclude *.log example

アーカイブされているファイルの一覧を表示

実際に展開はしないで、ファイルの一覧のみ表示したい場合はxオプションの代わりにtオプションを使います。

$ tar ztvf example.tar.gz

アーカイブから特定のファイルもしくはディレクトリのみ取り出す

アーカイブから特定のファイルもしくはディレクトリのみ取り出したい場合は次のようなコマンドを実行します。

$ tar zxvf example.tar.gz path/to/file.txt

ワイルドカードを使って取り出すファイルを指定したい場合は--wildcardsオプションを使います。

$ tar zxvf example.tar.gz --wildcards "path/to/dir/*"

Shader内でTiling/Offset値の取得方法

UnityのShaderプログラム内で「Tiling」や「Offset」の値を知りたい場合は{TextureName}_STの値を参照すると良いそうです。

sampler2D _MainTex;
float4 _MainTex_ST;
_MainTex_ST.x; // Tilingのxの値
_MainTex_ST.y; // Tilingのyの値
_MainTex_ST.z; // Offsetのxの値
_MainTex_ST.w; // Offsetのyの値

テクスチャーのサイズを知りたい場合は{TextureName}_TexelSizeの方が使えます。

リンク

Unity – Manual: Accessing shader properties in Cg/HLSL
https://docs.unity3d.com/560/Documentation/Manual/SL-PropertiesInPrograms.html

PythonでQRコードのスキャン方法

PythonでQRコードの読み取り方

使用するライブラリ

ZBar
http://zbar.sourceforge.net/

Pillow (Python Imaging Library)
http://python-pillow.github.io/

使い方

QRコードの画像qrcode.pngを読み込む

>>> from PIL import Image
>>> pil = Image.open('qrcode.png').convert('L')
>>> width, height = pil.size
>>> data = pil.tobytes()

tostring()は廃止されたので、代わりにtobytes()を使います。

ZBarを使ってQRコードをスキャン

>>> import zbar
>>> scanner = zbar.ImageScanner()
>>> scanner.parse_config('enable')
>>> image = zbar.Image(width, height, 'Y800', data)
>>> scanner.scan(image)

スキャンした内容

>>> for symbol in image:
>>>   print symbol.type, ':', symbol.data