AndroidでBitmap画像を保存
よく忘れるのでメモ書き。
ギャラリーに"/MyPhoto/"フォルダができてその中に保存されます。
最後のContentResolverの部分で保存したファイルパスを登録しておかないと、
デバイスを再起動するまでギャラリーが更新されない罠が準備されてます。
public void saveBitmap(Bitmap saveImage) throws IOException { final String SAVE_DIR = "/MyPhoto/"; File file = new File(Environment.getExternalStorageDirectory().getPath() + SAVE_DIR); try{ if(!file.exists()){ file.mkdir(); } }catch(SecurityException e){ e.printStackTrace(); throw e; } Date mDate = new Date(); SimpleDateFormat fileNameDate = new SimpleDateFormat("yyyyMMdd_HHmmss"); String fileName = fileNameDate.format(mDate) + ".jpg"; String AttachName = file.getAbsolutePath() + "/" + fileName; try { FileOutputStream out = new FileOutputStream(AttachName); saveImage.compress(CompressFormat.JPEG, 100, out); out.flush(); out.close(); } catch(IOException e) { e.printStackTrace(); throw e; } // save index ContentValues values = new ContentValues(); ContentResolver contentResolver = getContentResolver(); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(Images.Media.TITLE, fileName); values.put("_data", AttachName); contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); }
Flash Professionalで配置したオブジェクトをActionScript側(Flash Builderとか)で利用する (CS6, AS3)
メモメモφ(..)
1. Flash Professionalで作った.flaファイルにオブジェクトを配置する
例)Buttonを配置する
2. 配置したオブジェクトをマウスで選択、右側のパレット?の"Properties"の"Instance Name"の部分にインスタンス名をつける。
例) testButton
3. Actionscript側のMainクラス的なところで、こんな感じに書く
public class Main extends Sprite { public function Main() { var testButton:Button = Button(this.getChildByName("testButton")); function onClick(event:Event) { trace('hello!'); } testButton.addEventListener(MouseEvent.CLICK, onClick); } }
getChildByName()がミソ。かな。ここで指定したインスタンス名を引数に入れてオブジェクトを取得できる
4. 配置したボタンをクリックしてみる。イベントが発生して、コンソールに文字が表示されていたら成功!
FlashはIEでも動くから嬉しいよ(´・ω・`)
IE爆発しろっ(・∀・)
さくらVPSにVPN(PPTP)を構築 (Ubuntu 12.04)
漢は黙ってVPNにつないどけっ!って夢で誰かがささやいていたのでVPNの構築をやってみた。
VPNにしておけば開発するときも捗るし、VPN経由でサーバーからネットサーフィンすれば、パブリックなネットワークにつないでも盗聴されるリスクが減るしね。
今回はさくらVPSにUbuntu12.04をインストールしてPPTPを使ったVPNを構築!
いざっ(`・ω・´)!
1. pptpdのインストール
sudo apt-get install pptpd
2. confファイルの編集
ファイルは全部インストールした時に生成されるので、
下記ファイルたちをこんな感じで編集。
/etc/pptpd.conf
今回は 192.168.200.xxx らへんでipを設定。
localip 192.168.200.11 remoteip 192.168.200.128-238
○ /etc/ppp/chap-secrets
# client, server, secret, IP addresses username pptpd "password" *
"client, server, secret, IP addresses" の順番で入力
server の名前は "/etc/ppp/options.pptpd" のnameといっしょにすること。
デフォルトでpptpdになってるのでそのまま使う。
IPはとりあえずどっからでも受け付けるようにしときます。
3. NATの設定
4. IPv4のフォワーディングの有効化
/etc/sysctl.conf
net.ipv4.ip_forward=1
5. 設定のリロード
sudo sysctl -p
Skymarkの入力フォームを半自動化する
あれ毎回入れるのめんどくさい!
なんで会員登録してログイン->予約ができないのー!
それで少しでも楽しようと考えた結果が、”Javascriptでフォームを入力するスニペットをつくったらいんじゃない?”ということでした。
*もし使うときはくれぐれも自己責任でお願いします!
何が起きても一切責任は取りませんよ(´・ω・`)
script
HTMLを解析した結果こうなった。
document.getElementsByName('aLastName0')[0].value = "YOUR"; document.getElementsByName('aFirstName0')[0].value = "NAME"; document.getElementsByName('aAge0')[0].value = 18; document.getElementById('aSex_M0').checked = true; document.getElementsByName('tel')[0].value = 012345678; document.getElementsByName('mailAddressPC')[0].value = "test@example.com"; document.getElementsByName('mailAddressMB')[0].value = "test@example.co.jp"; document.getElementById('callerSame').checked = true;
やってみる
まず、この画面まで行く。
そして、
さっきのスクリプトを貼り付けて実行!
結果
いぇーい( ・∀・)
SQLAlchemyで動的にテーブルを作る2
うーん、いいのかなぁー。もっとリファレンス読まないと。。。
Create
engine = sqlalchemy.create_engine(engine_str, echo=True) def create_test_table(table_name): test_info = TestInfo.__table__ test_info.name = table_name test_info.create(engine) tablename = 'test001' create_test_table(tablename)
Insert
TestInfo.__table__.name = 'test001'
info = TestInfo(info_name, description)
db_session.add(info)
db_session.commit()
Query
TestInfo.__table__.name = 'test001' for row in db_session.query(TestInfo).all(): print row
SQLAlchemyで動的にテーブルを作る
Base.create_all(engine)とすると定義されてるテーブルが全部作られちゃう。
定義してあるけど後でテーブルを動的に作りたい!と思ってやってみた。
一応動いたけど正しいのかどうかは不明。。。
リファレンスに、
Base = declarative_base() class TestInfo(Base): ...
みたいに作ったクラスの中には__table__という属性が作られるよーと、
書いてあった(http://docs.sqlalchemy.org/en/rel_0_7/orm/tutorial.html)
>>> User.__table__ Table('users', MetaData(None), Column('id', Integer(), table=<users>, primary_key=True, nullable=False), Column('name', String(), table=<users>), Column('fullname', String(), table=<users>), Column('password', String(), table=<users>), schema=None)
これを使って、
"Creating and Dropping Database Tables" http://docs.sqlalchemy.org/en/rel_0_7/core/schema.html#metadata-describing
"Column, Table, MetaData API" http://docs.sqlalchemy.org/en/latest/core/schema.html?highlight=table#sqlalchemy.schema.Table
のところを見つつ、書いてみた。models.py
モデルを定義する。
Base = declarative_base() class TestInfo(Base): __tablename__ = 'test_info' info_name = Column(String(128), primary_key=True) description = Column(String(256)) def __init__(self, info_name, description): self.info_name = info_name self.description = description def __repr__(self): return "<TestInfo('%s','%s')>" % (self.info_name, self.description)
db.py
この中でTableを持ってきて、名前を変更してcreateしてる。
def init_db(): image_info = models.TestInfo.__table__ image_info.name = 'test001' image_info.create(engine) engine_str = 'mysql+mysqldb://%s:%s@%s:%d/%s?charset=utf8' \ % (user, password, host, port, db_name) engine = sqlalchemy.create_engine(engine_str, echo=True) if __name__ == '__main__': init_db(engine)
実行
実行結果はこんな感じ。
$python db.py mysql+mysqldb://root:root@localhost:3306/test?charset=utf8 2012-07-04 15:32:31,059 INFO sqlalchemy.engine.base.Engine SELECT DATABASE() 2012-07-04 15:32:31,059 INFO sqlalchemy.engine.base.Engine () 2012-07-04 15:32:31,061 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'character_set%%' 2012-07-04 15:32:31,061 INFO sqlalchemy.engine.base.Engine () 2012-07-04 15:32:31,061 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names' 2012-07-04 15:32:31,061 INFO sqlalchemy.engine.base.Engine () 2012-07-04 15:32:31,062 INFO sqlalchemy.engine.base.Engine SHOW COLLATION 2012-07-04 15:32:31,062 INFO sqlalchemy.engine.base.Engine () 2012-07-04 15:32:31,066 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode' 2012-07-04 15:32:31,066 INFO sqlalchemy.engine.base.Engine () 2012-07-04 15:32:31,068 INFO sqlalchemy.engine.base.Engine CREATE TABLE test001 ( ... )
”CREATE TABLE test001”になった( ・∀・)
でもこれ使い方おかしいかもしれない。
opencvでWeb上のイメージを読み込み (Python)
φ(..)メモメモ。
こんな感じで書いたら動いた。
import cv2 import numpy import urllib2 img_url = 'http://www.universe-s.com/img/news/2004/0520_01.jpg' req = urllib2.Request(img_url) data = urllib2.urlopen(req).read() img_buf = numpy.fromstring(data, dtype='uint8') img = cv2.imdecode(img_buf, 1) cv2.namedWindow('test', cv2.CV_WINDOW_AUTOSIZE) cv2.imshow('test', img) cv2.waitKey(0)