Runner in the High

技術のことをかくこころみ

EclipseでAndroidエミュレータ上のSQLiteのデータを見る

 EclipseAndroidエミュレータ上のSQLiteのデータを見るためのプラグインにはいろいろあるかとは思いますが、今回は最もシンプルで使いやすそうなQuestoid SQLite Browserとやらを使ってみます。

導入

  1. ここからQuestoid SQLite BrowserをEclipseにインストールする(Eclipseのフォルダ内にあるpluginsフォルダに放り込む)
  2. 再起動して有効化されているかどうか(dbファイルを選択したときに、右上のアイコンがクリックできるようになるかどうか)を確認。
  3. 拡張子がdbのファイル以外は選択しても中身を見れないので注意。
 

【コード】

package com.example.dbtest;

import android.app.Activity;
import android.widget.Toast;
import android.os.Bundle;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class MainActivity extends Activity {
private final String DBNAME = "test.db";
private final String TABLE_NAME = "Info";
private final String[] column = { "name", "job", "age" };
private SQLiteDatabase database;
private Cursor cs;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

database = this.openOrCreateDatabase(DBNAME, MODE_PRIVATE, null);
database.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (name TEXT, job TEXT, age INTEGER);");
database.execSQL("INSERT INTO " + TABLE_NAME + " (name, job, age) VALUES('Jonathan', 'Engineer', '24');");
database.execSQL("INSERT INTO " + TABLE_NAME + " (name, job, age) VALUES('Bobby', 'Teacher', '45');");
database.execSQL("INSERT INTO " + TABLE_NAME + " (name, job, age) VALUES('Ricky', 'Taxi Driver', '32');");

cs = database.query(TABLE_NAME, column, null, null, null, null, null, null);
cs.close();
}
}
  • openOrCreateDatabase関数で、データベースファイルが存在していればファイルを作成、なければ新たにファイルを作成して、そこにデータを格納する。
  • SQLiteDatabase型変数のdatabaseから最後にclose()が呼ばれていないことに関して違和感を覚えるかもしれないが、最終的にDalvikVMによってオブジェクトが破棄されるため問題はない。だが、Cursorに関してはしっかりとclose()を呼んでおく必要あり。 (詳しくは「SQLiteをつかうための注意点」を参照)

【中身を見る】

Questoid SQLite Browserを起動するとこんな感じの画面に。
  • データベース構造」タブからテーブルの一覧とそのカラムが見られる。
  • Browse Data」タブからテーブルを選ぶとその中身が見られる。
 
ちなみにQuestoid SQLite Browserからできるのは、テーブルのカラムやその内容を見たりすることだけで、データの修正や追加はできません。あしからず!

(参考)http://www.coderzheaven.com/2011/04/18/sqlitemanager-plugin-for-eclipse/

LINEで「正常に処理できませんでした」が出る

 

 LINEストアにだれかが2回ほどログインしようとしたので、パスワードとメールアドレスの変更を試みるも、「An error has occured. Please try again later.」というダイアログが出て先に進めない。
※ちなみに日本語版だと「正常に処理できませんでした」という文章になる。

【対処法】
Wi-Fiをオンにする

(参考)
http://did2memo.net/2014/06/24/naver-line-e-mail-address-registration-error/

Chrome.storage.syncを使ってみる

Chrome.storageを使うと、異なるマシン上のChromeブラウザ間で同じ拡張機能が保存しているstorageを同期してくれる。

このサンプルの機能は、テキストボックスに入力された文字列をChrome.storage.sync.setでストア。起動時にChrome.storage.sync.getで読み込んで上のdivに内容を表示。同期されていれば、その内容が異なるマシン上で同じになる、というもの。 

  • setもgetも何らかのエラーが起きるとChrome.runtime.errorに文字列をセットする。ちなみに、getで指定されたデータが存在しなかった場合にはundefinedが帰ってくるだけでエラーにはならないので注意。
  • setでデータをセットするときには連想配列でキーを指定すること。ここがlocalStorageと違うところ。
  • データが同期されません!!という場合には、chrome://settings/syncSetup拡張機能にチェックが入っているかどうかを確認のこと。
  • うまく機能していれば、chrome://sync-internalsのSync Protocol Logとか、Transient CountersのCommited Countが増えたりする。

iRiver B100 のレビュー


かなり前にiRiverのB100を買った。
いちおう生産は終了したけれど、レビューだけ記事にしておく。

【所感】

  • うしろの部分が若干熱くなる(動画を連続して見ているときなど)
  • トップメニューの反応は若干遅い
  • Ogg Vorbisのファイルにおけるジャケットの読み込みがされない(これはOgg Vorbisに関連する問題で、Ogg Vorbisバイナリデータを格納できない)
  • 動画再生時に最初の数秒がうまく再生されないことがある
  • 一度、外出していたときにフリーズが発生したことがあったが、再起動のスイッチはiPodなどのように特定のボタンを同時押しなどではなく、小さな穴の中にあるボタンなので、再起動のためにはシャーペンなどが常に必要になる。
  • PCとの接続をしたあとなど、充電が十分なはずなのに、電池切れのマーク表示されることがあるが、その際には再起動をすればよし。
  • ジャケット画像はそれぞれ縦横の比率があっているものを使用するのが望ましい。アルバム一覧などのジャケット画像を表示するところでは、縦横比があっていないと、変な黒い線の様なものが表示される。
  • リプレイゲインの機能は搭載されているmp3gainなどを用いればOK
  • エモーションというものがあり、それぞれの楽曲の雰囲気(SUNNY, RELAX, CALM...など)を自分の好きなように登録できる機能がある。だが、なぜか再起動するごとに登録が全てリセットされる
  • シャットダウンモードとスタンバイモードがあるが、スタンバイモードの電力消費がひどいのであまり使わない。しかし、スタンバイモードにしておけばほとんどといっていいほどフリーズをすることがなくなるので、この点はよい。
  • 搭載されているサラウンドシステムはすばらしく、普通の音楽プレーヤーとは違った効果のある音楽を楽しむことができる。しかしながら、この効果を存分に使うには、その楽曲自体の音質やイヤホンの能力なども関わってくるため、そのあたりは自分の好みに合うようにそろえるべき。
  • ロックの画面は画像のなかから自分で設定することができる。
  • メモ機能があり、手書きでメモをすることができる。しかし、なぜか、英語入力の機能を搭載しているにもかかわらず、メモの文章入力はすることができない。
  • 電卓、ファイルブラウザがある。電卓は普通の電卓とかわらず、最高桁数は11桁。ファイルブラウザは、音楽や画像、テキストファイルなど、対応しているもののみ表示可能
  • 録音の音質についてはなかなか良好。可もなく不可もなく。ライブ演奏などを録音すると割れる程度。
 
ほとんどマイナスポイントばっかりみたいに見えるけれど、なんだかんだ言って約二年程度使っていて不便に感じたことは一度もないので、単なる音楽プレーヤー以上の質を求めなければよい製品だと思う。

履歴への記録を防ぐChrome拡張機能「History Blocker」を作った

History Blocker
 

気づいたらエロサイトを見始めてた、という状況になってからシークレットウィンドウに切り替えてももう遅い。履歴にはばっちり残っちゃってる。

こんなトラブルを防いでくれるのが History Blocker(IzumiSy/HistoryBlocker)
拡張機能をONにしたら、そのとき見ているウェブページ含めてONにされているあいだに見たページが履歴に記録されるのをばっちり防ぎます。

DOWNLOAD >> Chrome ウェブストア - History Blocker

VLCのコントロールをサウンド設定のメニューに表示する[Xubuntu][DBus]

 

つまるところこんな感じで、サウンド設定からVLCを操作できるようにする。

【手順】
1. メニューの「表示」から設定ウィンドウへ
2. 設定の表示を左下のラジオボタンから「全て」にする
3. リストビューから「インターフェース」を選択
4. 「D-Busコントロールインターフェース」にチェックを入れる

以上。簡単。

(元ネタ) http://www.webupd8.org/2012/02/how-to-add-vlc-to-ubuntu-sound-menu.html

太陽系リフレイン(KEYTALK)のタブ譜を作りました


いろんな弾いてみた動画を参考にして、兼ねてからの夢だった太陽系リフレインのタブ譜を作りました。
一応ソロの部分もそれっぽくコピーしましたが、ライヴとか見る限り全部アドリブっぽいのであんまりコピーするもんじゃなさそうですね~
ここが違う!とか、この部分は間違ってるんじゃないの?みたいなのは勝手に自分で直してみてください。

P.S. 2017/6/21
リンク切れになっていたのを修正しました

(Contents: Gt1 Gt2 Bass)
DOWNLOAD ptb format.


CUIでWeblioを使う

LTN with VX Connect
 

LifetouchNOTE用の手頃な日英辞書がなくて困っていたので作った。
HTML::TreeBuilderでweblioの単語検索結果ページをスクレイピングしているだけ。
単語の大まかな意味だけでもわかれば充分なので、割りといいハックだと思う。


#!/usr/bin/perl

#
# Weblio on CUI
#

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;

my $TARGET = "http://ejje.weblio.jp/content/";

if (defined($ARGV[0])) {
&startSearch($ARGV[0]);
} else {
print " Usage: weblio [QUERY]";
}

sub startSearch {
my $query = $_[0];
my $url = $TARGET.$query;
my $ua = LWP::UserAgent->new('agent' => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
my $res = $ua->get($url);
my $content = $res->content;
my $tree = HTML::TreeBuilder->new;
my @items;
my $c;

print "QUERY: $query\n";
print "FETCHED: $url\n";
$tree->parse($content);
if (defined($ARGV[1])) {
if ($ARGV[1] eq "-full") {
@items = $tree->look_down("class", "level0");
} else {
print "Invalid options\n";
}
} else {
@items = $tree->look_down("class", "lvlB");
}

if ($#items != -1) {
foreach (@items) {
$c = $_->as_text;
print $c."\n";
}
} else {
print "No matching word\n";
}

$tree = $tree->delete;
}