Eclipse4.2 error Unable to execute dex: GC overhead limit exceeded GC overhead limit exceeded
Eclipse4.2でandroidのアプリを実行しようとした際に、以下のエラーが発生しました.
「Unable to execute dex: GC overhead limit exceeded GC overhead limit exceeded」
【原因】
Eclipseのメモリ使用量が限界を超えたときに発生するエラー(だと思います)
【解決策】
「eclipse.ini」を開いて以下の部分を変更し、Eclipseのメモリ使用量を増やします。
変更前
--launcher.XXMaxPermSize 256m (中略) -Xms40m -Xmx512m
変更後
--launcher.XXMaxPermSize 1024m (中略) -Xms512m -Xmx1024m
ubuntuでログイン時にシェルスクリプトを自動実行
参考
ログイン時にシェルスクリプトを自動実行する - ubuntu日記
とりあえず、次の二つの方法を試してみました。
1. ~/.bashrcに実行したいスクリプトを追記
ターミナル起動時に自動実行される
2. 「/etc/profile.d/」以下に実行したいスクリプトファイル(*.sh)を配置
ログイン時に自動実行される
Ubuntu14.04のマウスポインタの速度を変更する
現在使っているノートパソコンにUbuntu14.04をインストールしました!
デフォルトのマウスポインタの速度が速かったので、遅くしようと思ったのですが、
既に最低速度に設定されていました... ∑( ̄Д ̄;)!!
諦めていたのですが「ターミナルから細かく設定できる」方法があったので、
そちらの方法でマウスポインタの速度を設定しました。
最初にデバイス名 or デバイスIDを確認するために以下のコマンドを実行
$ xinput
実行結果
⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)] ↳ Panasonic Laptop Support id=11 [slave keyboard (3)]
タッチパッドの設定を変更したいので、上記の"SynPS/2 Synaptics TouchPad"の設定を変更する。
以下のコマンドを打つことで、速度を調整する。
タッチパッドのポインタ速度を調整
$ xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Accel Constant Deceleration" 5
速度設定は1~10の範囲で設定可能であり、値が大きいほど速度は遅くなる。
デバイスの指定はデバイスIDでも可能らしいのですが、デバイスIDは変更される可能性があるのでデバイス名で指定した方がいいみたいです。
とりあえず、色々操作を覚えつつEmacsを触っていこうかなと思っています。
ビルドとコンパイルの違い
友達の話を聞いていて、ビルドとコンパイルの違いがよく分からなかったので調べてみた.
詳しくは以下の記事を参照しました.itpro.nikkeibp.co.jp
コンパイル
ソースコード(C言語などの高級言語で記述されたファイル)からオブジェクトファイル(マシン語)に変換する作業
本来C言語等のプログラミング言語は人が理解できるように記述された言語であり、機械はマシン語しか理解することができない.そのため機械が理解できるようにプログラミング言語をマシン語に翻訳してあげる作業がコンパイルである.
リンク
オブジェクトファイルの参照関係を結びつける.「ライブラリ」から関数を呼び出すためのファイルと結びつける.
例えば以下の「Hello world!」を出力するコードでは、printf関数は別のファイルに定義されている.このprintf関数が定義されている外部ファイルと下記のソースファイルを結びつける(リンクする)ことで、関数を利用できるようになる.このように複数のファイルを結びつける作業がリンクである.
#include <stdio.h> int main(void) { printf("Hello world!"); return 0; }
C#のSocketIO4Net.Clientで"Error initializing handshake with"が発生したときの解決策
C#のwebsocketのsocketIOクライントのライブラリを使っていた際に、
node.jsで実装したサーバーに接続を試みた際、「Error initializing handshake with "http://localhost:3000"」が発生したので、その解決策をまとめておきます。
クライント側のソースコード
using SocketIOClient; public partial class Display : Form { SocketIOClient.Client websocket; public Display() { InitializeComponent(); connect(); } private void connect() { /* インスタンス生成 */ websocket = new Client("http://localhost:3000"); /* サーバとの接続が確定 */ websocket.On("connect", (fn) => { NotifyUpdateState(INROOM); Console.WriteLine("connect"); }); /* サーバに接続 */ websocket.Connect(); } }
サーバー側のソースコード
var express = require('express'); var mysql = require('mysql'); var http =require('http'); var app = express(); console.log('server running'); /* port:3000で待機 */ var server = http.createServer(app); server.listen(3000, function(){ console.log("server listening on port 3000"); }); /* socket.IOのインスタンス生成 */ var socketIO = require('socket.io'); /* クライアントの接続を待機(IPアドレスとポート番号を結び付ける) */ var io = socketIO.listen(server); /* クライアントが接続してきたときの処理 */ io.sockets.on('connection', function(socket){ console.log("connection"); /* クライアントが切断したときの処理 */ socket.on('disconnect', function(){ console.log('disconnect'); }); }) }
次のページに原因が書いてありました。
sockets - SocketIO4Net Handshake Error - Stack Overflow
要はnode.js側のsocket.ioのバージョン1.0.X以上では0.9.Xとはハンドシェークの手法?(プロトコル?)が異なるので、通信が確立できないらしいです。
node.jsのsocket.ioのバージョンを0.9.17にして実行したところ無事通信できました。
因みに、npmでバージョンを指定してインストールする場合は以下のようにパッケージ名の後ろに@[バージョン]で指定すれば大丈夫だそうです。
npmでバージョンを指定してパッケージをインストール
npm install socket.io@0.9.17
通信の仕組みとか全く勉強不足で分かっていないので、そこら辺も勉強していかないといけないなと感じました。
クライアント側のライブラリを変更した方がいいのかな...
顔認識API「ReKognition」を触ってみた
最近、MicroSoftの年齢推定のWebサイト『How-Old.net』が話題になっています。
そこで顔認識のWebAPI『ReKognition』を使って、似たようなモノを簡易的に作ってみようと思い、APIのサンプルを動かしてみました。
直接画像をアップロードする場合(curlを使ってファイルをアップロード)
<?php $ch = curl_init(); $path = '@C:/xampp/htdocs/example/dataset/test.jpg'; // Windows環境でローカルファイルを指定 $data = array('api_key' => '取得したAPI Key', 'api_secret' => '取得したAPI secret', 'jobs' => 'face_part_aggressive', 'uploaded_file' => $path ); curl_setopt($ch, CURLOPT_URL, 'http://rekognition.com/func/api/'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); if(curl_exec($ch) == false){ echo curl_error($ch); // 実行失敗時にエラー内容を表示 } curl_close($ch); ?>
パラメータで画像のURLを指定
(送られたURLを使って、「ReKognition」のサーバ側で画像を取得)
<?php require_once('HttpClient.class.php'); $data = array('api_key' => '取得したAPI Key', 'api_secret' => '取得したAPI secret', 'jobs' => 'face_part_aggressive', 'urls' => 'http://localhost/example/dataset/test.jpg', // 認識対象の画像URL ); $fate_detection = new HttpClient('rekognition.com'); $fate_detection->setDebug(true); $response = $fate_detection->get("/func/api/", $data); // リクエストを送信して、レスポンス(JSON)を取得 echo $fate_detection->getContent(); ?>
実行結果
{"url":"POST","face_detection":[{"boundingbox":{"tl":{"x":971.88,"y":441},"size":{"width":317.4,"height":317.4}},"confidence":1,"eye_left":{"x":1061.8,"y":565.1},"eye_right":{"x":1183.1,"y":560.8},"nose":{"x":1117.8,"y":626},"mouth l":{"x":1087.3,"y":681.6},"mouth_l":{"x":1087.3,"y":681.6},"mouth r":{"x":1179.5,"y":677.7},"mouth_r":{"x":1179.5,"y":677.7},"pose":{"roll":-2.15,"yaw":-16.55,"pitch":-2.73},"quality":{"brn":0.41,"shn":0.3}}],"ori_img_size":{"width":2528,"height":1856},"usage":{"quota":19963,"status":"Succeed.","api_id":"9WCxtBtyqwdx7DPd"}}
公式のサンプルをコピペして実行しただけですが、Windows環境でのcurlのファイルパスの指定方法がよく分からず「Couldn't open file 'xxx'」が出て苦労しました。
(結果そのまんまだったわけですが...)
WebAPIなのでJavaScriptからAjaxでリクエストを投げて、同様の処理ができると思うので次はJavaScriptで書いてみた後、How-Old.netの簡易版を作ってみようと思います。