// pipがなかったのでいれる $ sudo easy_install pip // swiftのclient入れる $ sudo pip install python-swiftclient // 怒られる $ swift Traceback (most recent call last): File "/usr/local/bin/swift", line 7, infrom swiftclient.shell import main File "/Library/Python/2.7/site-packages/swiftclient/__init__.py", line 20, in from .client import * File "/Library/Python/2.7/site-packages/swiftclient/client.py", line 34, in from swiftclient import version as swiftclient_version File "/Library/Python/2.7/site-packages/swiftclient/version.py", line 27, in import pbr.version ImportError: No module named pbr.version // 足りなそうなもの入れる $ sudo pip install pbr // 違う理由で怒られる $ swift --version Traceback (most recent call last): File "/usr/local/bin/swift", line 7, in from swiftclient.shell import main File "/Library/Python/2.7/site-packages/swiftclient/__init__.py", line 20, in from .client import * File "/Library/Python/2.7/site-packages/swiftclient/client.py", line 34, in from swiftclient import version as swiftclient_version File "/Library/Python/2.7/site-packages/swiftclient/version.py", line 28, in version_string = str(pbr.version.VersionInfo('python-swiftclient')) File "/Library/Python/2.7/site-packages/pbr/version.py", line 39, in __str__ return self.version_string() File "/Library/Python/2.7/site-packages/pbr/version.py", line 78, in version_string for part in self.release_string().split('.'): File "/Library/Python/2.7/site-packages/pbr/version.py", line 70, in release_string self.release = self._get_version_from_pkg_resources() File "/Library/Python/2.7/site-packages/pbr/version.py", line 62, in _get_version_from_pkg_resources return packaging.get_version(self.package) File "/Library/Python/2.7/site-packages/pbr/packaging.py", line 870, in get_version raise Exception("Versioning for this project requires either an sdist" Exception: Versioning for this project requires either an sdist tarball, or access to an upstream git repository. Are you sure that git is installed? // このwaringあやしい $ pip list (略) Warning: cannot find svn location for setuptools==0.6c12dev-r85381 // upgradeしてみる $ sudo pip install --upgrade setuptools // ちゃんと動いた $ swift --version swift 2.3.1
2014年12月10日水曜日
MacOS X LionにOpenStack Swiftのclientを入れる
だんだんLionのままにしてるの恥ずかしくなってきたけど…
2014年11月1日土曜日
MySQLのUNIQUE KEYにおける備忘録3つ
環境はMySQL 5.x、innodbを想定している。
備忘録的に。
1. text型にはUNIQUE KEYをそのまま設定できない
※ご指摘頂きました。
blobのため、そのままでは設定できない、というのが正しいです。 代わりにvarcharでも使うことにしよう。
なお、textにインデックスを貼りたいときは、リファレンスにもある通り、こうすればOK
BLOB または TEXT カラムにインデックスを張る場合、インデックスに対して接頭辞長を指定しなければなりません。
例 : CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
接頭辞は、最大 1000 バイト長 (InnoDB テーブルに対しては 767 バイト) まで可能です。接頭辞の最大長はバイトで評価されます。
一方、CREATE TABLE ステートメント内の接頭辞長は文字数として解釈されます。マルチバイトキャラクタセットを使用するカラムに対して接頭辞長を指定するとき、このことを考慮に入れなければいけません。
4.4.2. カラムインデックス
2. keyのlengthは最大で767byteまで
たとえば、UTF-8のとき、3byteで計算すると、varchar(256)はだめで、256*3=768byteになってしまう。(だから、varchar(255)をよく見かけるんだよね)。
あと余談。これ、UTF-8が3byte計算ならいいんだけど、MySQL 6系から今UTF8mb4と呼ばれている4byteUTFが標準のUTF-8になるらしく、そうなった場合、varchar(255)でもあふれることになるんだよね。
UTF8mb4のなにが嬉しいかというと、個人的には絵文字系がそのまま扱えるのが嬉しいかなw
3. NULLはいくらでも入る
nullの定義上、すべてのnullはユニークってことらしいので、nullはいくらでも入る。
カラムにdefault nullを定義するのもOK
2014年9月9日火曜日
MySQLでERROR:1093を回避する
まー些細なことなんですけどね。
エラーになる(as tmpが意味をなしてない)
こんなエラー
リファレンスマニュアルより
http://dev.mysql.com/doc/refman/5.1/ja/subquery-errors.html
ではどうするかというと、いっこ別に fromでtmpを受け取ってあげれば実はOK
うまくいく
エラーになる(as tmpが意味をなしてない)
update hoge set code = 0 where id IN (select id from hoge as tmp where id = 1 group by id order by id) ;
こんなエラー
ERROR 1093 (HY000): You can't specify target table 'hoge' for update in FROM clausemysqlって同じテーブルに対するサブクエリからの操作ができないんですよね。
リファレンスマニュアルより
http://dev.mysql.com/doc/refman/5.1/ja/subquery-errors.html
サブクエリは、SELECT ステートメント同様 UPDATE と DELETE ステートメント内で正当なので、UPDATE ステートメント内で、割り当ての為にサブクエリを利用する事ができます。しかし、同じテーブルを(この場合、テーブル t1)サブクエリの FROM 条項と更新ターゲットの両方に対して利用する事はできません。
ではどうするかというと、いっこ別に fromでtmpを受け取ってあげれば実はOK
うまくいく
update hoge set code = 0 where id IN ( select id from (select id from hoge where id = 1 group by id order by id) as tmp ) ;
2014年6月30日月曜日
ImageMagickのコマンドラインツールで画像の情報をさくっと見てみる
環境はCentOS 6系
ImageMagick入れる
$ sudo yum install ImageMagickidentifyコマンドでチェック
$ identify -verbose newwindow.png Image: newwindow.png Format: PNG (Portable Network Graphics) Class: DirectClass Geometry: 11x9+0+0 Resolution: 72x72 Print size: 0.152778x0.125 Units: Undefined Type: PaletteMatte Endianess: Undefined Colorspace: RGB Depth: 8-bit Channel depth: red: 8-bit green: 8-bit blue: 8-bit alpha: 1-bit Channel statistics: red: min: 117 (0.458824) max: 255 (1) mean: 207.97 (0.815567) standard deviation: 58.2078 (0.228266) kurtosis: -1.58905 skewness: -0.506753 green: min: 0 (0) max: 255 (1) mean: 170.879 (0.670113) standard deviation: 108.467 (0.425361) kurtosis: -1.28129 skewness: -0.68968 blue: min: 0 (0) max: 255 (1) mean: 170.879 (0.670113) standard deviation: 108.467 (0.425361) kurtosis: -1.28129 skewness: -0.68968 alpha: min: 0 (0) max: 255 (1) mean: 167.424 (0.656566) standard deviation: 121.088 (0.474855) kurtosis: -1.56516 skewness: 0.659425 Image statistics: Overall: min: 0 (0) max: 255 (1) mean: 159.326 (0.624807) standard deviation: 111.088 (0.435638) kurtosis: -1.49685 skewness: -0.508195 Alpha: rgba(255,255,255,0) #FFFFFF00 Histogram: 16: (117,117,117,255) #757575 grey46 24: (153, 0, 0,255) #990000 rgba(153,0,0,1) 34: (255,255,255, 0) #FFFFFF00 rgba(255,255,255,0) 25: (255,255,255,255) #FFFFFF white Rendering intent: Undefined Gamma: 0.45 Interlace: None Background color: white Border color: rgba(223,223,223,1) Matte color: grey74 Transparent color: none Page geometry: 11x9+0+0 Dispose: Undefined Iterations: 0 Compression: Zip Orientation: Undefined Properties: date:create: 2014-06-30T19:11:35+09:00 date:modify: 2014-06-30T19:11:35+09:00 signature: 2c79c5cc4298064485707a3e8c1e0ceba9f7241dd7366ff9a9dcb505a8b14936 Software: Adobe ImageReady Artifacts: verbose: true Tainted: False Filesize: 220b Number pixels: 99b Version: ImageMagick 6.5.4-7 2014-02-10 Q16 OpenMP http://www.imagemagick.orgずらーっとでてくる 例えば色空間(RGBとかCMYKとか)だったら
identify -verbose newwindow.png |grep Colorspace Colorspace: RGBColorspaceを見ればよいね。
2014年6月24日火曜日
jmxtermで手軽にJMX経由でmbeanの値を見てみる
ちょっと凝ったことをしたいときは、Javaだったり、JRubyなんかでスクリプト書いたほうがいいと思うんだけど。。。
単純に特定の値を見たい、そんなときはコマンドラインでカジュアルにチェックできると嬉しいよね、ってことで、jmxtermです。
ちなみに、グラフとか見たい時はJConsoleもいいけど、VisualVMのほうが見た目がよいね。最近のJavaならJAVA_HOME/bin配下にjvisualvmってのがあるから、そいつです。
(閑話休題)
というわけで、チートシート風に。例では、hazelcastの値を取っていますが、別にhazelcastでなくてももちろんかまいません。
JMXを有効にするには、最低4つJVMの起動パラメータに追加してください。
(あたりまえだけど、外に晒される環境でああれば、適切なアクセス制限してください)
で、JVMを起動させたら、繋いでみる。
インタラクティブシェルとして操作もできるけど、パイプからコマンド投げたほうがなにかと便利。
javaが実行できる環境で叩いてください。これはMacで使用している例。
単純に特定の値を見たい、そんなときはコマンドラインでカジュアルにチェックできると嬉しいよね、ってことで、jmxtermです。
ちなみに、グラフとか見たい時はJConsoleもいいけど、VisualVMのほうが見た目がよいね。最近のJavaならJAVA_HOME/bin配下にjvisualvmってのがあるから、そいつです。
(閑話休題)
というわけで、チートシート風に。例では、hazelcastの値を取っていますが、別にhazelcastでなくてももちろんかまいません。
JMXを有効にするには、最低4つJVMの起動パラメータに追加してください。
(あたりまえだけど、外に晒される環境でああれば、適切なアクセス制限してください)
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=適当に -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
で、JVMを起動させたら、繋いでみる。
インタラクティブシェルとして操作もできるけど、パイプからコマンド投げたほうがなにかと便利。
javaが実行できる環境で叩いてください。これはMacで使用している例。
// ドメイン一覧 echo domains | java -jar ./jmxterm-1.0-alpha-4-uber.jar -l host:port // bean一覧 echo beans -d com.hazelcast | java -jar ./jmxterm-1.0-alpha-4-uber.jar -l host:port // info取得 echo 'info -b instance=sessions,name=hoge,type=IMap -d com.hazelcast' | java -jar ./jmxterm-1.0-alpha-4-uber.jar -l host:port // 対象の値全部 echo 'get -b instance=sessions,name=hoge,type=IMap -d com.hazelcast *' | java -jar ./jmxterm-1.0-alpha-4-uber.jar -l host:port // 特定の値 echo 'get -b instance=sessions,name=hoge,type=IMap -d com.hazelcast localHeapCost' | java -jar ./jmxterm-1.0-alpha-4-uber.jar -l host:port // keyは要らんからvalueだけ echo 'get -b instance=sessions,name=hoge,type=IMap -d com.hazelcast -s localHeapCost' | java -jar ./jmxterm-1.0-alpha-4-uber.jar -l host:portらくちんですなー
2014年6月16日月曜日
2014年5月16日金曜日
Excelからのcsvをjava.nioで読んだらMalformedInputException
環境
- Mac OS X Lion
- Java 7
- 元ファイルは素性のしれないxlsx
- Excel 2011
経緯
素性のしれないxlsxをExcelでcsvにした
こんな読み込みをしていて
こんな例外が
こんな例外が
java.nio.charset.MalformedInputException: Input length = 1
元のファイルを見てみる
$ file --mime fuga.csv
fuga.csv: text/plain; charset=unknown-8bit
unknownとかいっちゃってる。
sublime Textで、UTF-8 で保存しなおす。
$ file --mime fuga.csv
fuga.csv: text/plain; charset=utf-8
わーい。
これで読み込めた。
追記
そもそもなんだけど、Excelでcsv出力すると、S-JIS(固定)らしい。
別件で、InputStream扱うときに
BufferedReader br = new BufferedReader(new InputStreamReader(hoge.getInputStream(), "SJIS"));
List<String> stringList = new ArrayList<>();
while(br.ready()) {
stringList.add(br.readLine());
}
br.close();
とかで読み込みできた。
ちなみに、hogeはSpringのMultipartFileです。
登録:
投稿 (Atom)