--.--/--.--  /* スポンサーサイト */

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Entry Time --:--  [Category:スポンサー広告] cm tb Top↑

2013.11/30.Sat  /* Proxyめも2 */

この前串立てはしたけど、自分の環境でどう使うか分からなかったから調べた。
まず自分の開発環境。
VirtualBox上でUbuntu13.04動かして、Nautilusでマウント、geditで編集がほとんど。

まずUbuntuのネットワーク設定でできないかなーと思ったけど、認証設定するとこなくてだめっぽい。
Nautilusも同様、プロキシ設定項目なし。
どうすっかなーと調べてたら、tsocksなる便利ソフトみっけた。
通信をラップして、Socks非対応だろうがなんだろうが対応させてくれるぽい。素敵。

試しにtsocks.confにこの前立てた串通そうとして見るも、ローカルサブネットじゃねーよとエラーメッセージが。
なんでやりたくなかったけどSSHの擬似SOCKSサーバ立てる。

ssh -N -D ポート番号 串アドレス

-Nはポート転送のみ行う、-Dは指定したポートで擬似SOCKSサーバを立て待ち受ける。


んでtsocks nautilusしてみるも、なんかラッピングできてないぽい。
しょうがないんで、sshfs入れてそっちでマウントしようと。

tsocks sshf ユーザ@接続先:対象ディレクトリ マウントポイント

これでローカルにSOCKS経由でマウント出来る。
ただ一定時間経つとなんか固まる。何だろう。
ssh_configにServerAliveIntervalだっけ?設定してみたけどまだ確認してない。


以上メモ終了。
スポンサーサイト
Entry Time 18:15  [Category:Development] [Comment:0] [Trackback:0] Top↑

2013.10/16.Wed  /* proxy構築めも */

うちの会社は基本自宅作業なんですが、IP制限掛かってるサーバで作業する事もあるんですよ。
そういう時は、固定IP取ってる事務所まで出てきて作業してたんですが、みんなダルいと思ってたようで。
んでうちに話が来たと。


サーバは最近ちょっと気になってたNUC買って貰って、OSは普段CentOSばっかだからUbuntu13.04 serverにしてみた。
んで、HTTP、HTTPS、FTP、SSH、SFTPは使うだろうなーって事で、通常のHTTP串とSOCKS串、Squid3とdante-serverを導入。
あと標準でhtpasswd入ってないから、apache-utilsもインストール。


まずsquid3のコンフィグに追記。
詳細書こうと思ったけど面倒だからやめた。ぐぐればたくさん出るし。

danteの方もそういじるとこなかったかな。
libc.soみつかんねーよってエラー出たからリンク作ってやる。

ln -s /lib/x86_64-linux-gnu/libc-2.15.so /lib/libc.so


あとどっちもBasic認証入れたけど、何回試しても認証成功しないなーと思ったら、htpasswdに-dオプションつけないとダメなのね。
適当な場所に作って、squidとdanteの両方に参照させて、ブロードバンドルータのポートフォワード設定して、IP制限掛かってるとこにスマホテザリングで繋いでみて確認しておしまい。
引き籠りライフが捗るな。


メモる必要なかったかもしれない。
Entry Time 23:24  [Category:Development] [Comment:0] [Trackback:0] Top↑

2013.03/25.Mon  /* Android ListView 複数種類の行レイアウト */

単一レイアウトのListViewは腐るほどサンプルも情報も出てるけど、1つのListViewに複数種類の行レイアウトを設定する方法については全くと言っていい程情報がなかった。キーワード選択ミスかもしれないけど。

という訳で自分用メモ。
参考にしたのは次のサイト。
http://logc.at/2011/10/10/handling-listviews-with-multiple-row-types/


1.とりあえずデータクラス作る


コンストラクタでデータ設定する面倒くさがり仕様。
表示するものに合わせて適当に。
getRowTypeメソッドで表示するレイアウトの種類を取得するようにしてみる。


public static class Item{
private String text;
private int type;

public Item(String text, int type){
this.text = text;
this.type = type;
}

public String getText(){
return this.text;
}

public int getRowType(){
return this.type;
}
}


2.BaseAdapter拡張する


複数の行レイアウトを扱えるように手を加える。
コンストラクタはデータクラスのリスト受け取るだけの面倒くさがり仕様。
getItemIdメソッドはよく分かんなかったから引数そのまま返してる。

ここでまずオーバーライドしないといけないのが、getViewTypeCountとgetItemViewType。
getViewTypeCountは扱うレイアウトの数を返値に、getItemViewTypeは使うレイアウトの番号を返す。
言うまでもないけど、引数のpositionは表示する添字的なのをもらうから、getRowTypeメソッド呼んで返す。

んでメインディッシュのgetViewだけど、まず最初のif文で行レイアウトのタイプ判別。
種類増やすならここをswitchに置き換えてやればいい。
2つ目のif文は、引数でもらう行のViewであるconvertViewが作成されているかどうかを判別。
毎回View作るとすごい重くなるらしいから再利用するようになってる。
ここでViewが作られていなかった場合、LayoutInflater使ってお好みのレイアウトを使ってViewを作ってやる。
あとは適当に設定して、Viewを返しておしまい。
スクロールしたりして、画面外→画面内に戻った時もgetViewが呼ばれるから気を付ける。


public static class ArrayAdapterB extends BaseAdapter{

List listArray;


public ArrayAdapterB(List items){
listArray = items;
}

@Override
public int getCount() {
return listArray.size();
}

@Override
public Object getItem(int position) {
return listArray.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public int getViewTypeCount(){
return 2;
}

@Override
public int getItemViewType(int position){
return listArray.get(position).getRowType();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

//Layout判別
if( getItemViewType(position) == 0 ){
//checkedText
if( convertView == null ){
LayoutInflater inflater = LayoutInflater.from(parent.getContext() );
convertView = inflater.inflate(R.layout.checkedtext, parent, false);
}
CheckedTextView textView = (CheckedTextView)convertView.findViewById(R.id.checkedTextView1);
textView.setText( item.getText() );
}else if( getItemViewType(position) == 1){
//NumberPicker
if( convertView == null ){
LayoutInflater inflater = LayoutInflater.from(parent.getContext() );
convertView = inflater.inflate(R.layout.countup, parent, false);

NumberPicker np = (NumberPicker)convertView.findViewById(R.id.numberPicker1);
np.setMaxValue(10);
np.setMinValue(0);
}
TextView textView = (TextView)convertView.findViewById(R.id.textView1);
textView.setText( item.getText() );
}


return convertView;
}

}


3.ListViewにアダプタ渡しておしまい



今作ってるアプリのソースまんまコピペしてるから分かりづらいかもしれないけどまぁいいや。
テスト用に、適当なテストデータ30件作って渡す。


View rootView = inflater.inflate(R.layout.checklist,
container, false);

Random rand = new Random();

int rowType;
for(int i=0;i<30;i++){
rowType = rand.nextInt(1+1);
listArray.add( new Item("CustomAdapter"+i+" rowType="+rowType, rowType ) );
}

ListView listView = (ListView)rootView.findViewById(R.id.listView1);
ArrayAdapterB adapter = new ArrayAdapterB(
listArray);

listView.setAdapter(adapter);



おしまい。
結構適当だから間違いありそうだけど、とりあえず今はいいや。
Entry Time 07:54  [Category:Development] [Comment:0] [Trackback:0] Top↑
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。