SQLの窓 イラストAC フリー素材

2015年06月28日

Android Studio : 行の途中で改行した時のインデント数を 1 にする



※ default そのものは変更できずに、設定変更によって default(1) が作成されています

タブサイズが、インデントの一つのサイズになりますが、デフォルトでは 8 になってしまっていたので、一つ多くインデントされていました。

タブサイズと同じ数字にします( ここでは 4 )




タグ:Android Studio
posted by at 2015-06-28 23:33 | Android | このブログの読者になる | 更新情報をチェックする

Android Studio : キャラクタセット



今時なんで、UTF-8 に揃えたいのですが、デフォルトが windows-31j になるので、Android Studio の更新毎に元に無戻っているような気がします。

あと、ソースコードは個別に、右下にある表示をクリックすると変更できます



変更すると、以下のようにダイアログが表示されるので convert で変換できます






posted by at 2015-06-28 23:09 | Android | このブログの読者になる | 更新情報をチェックする

Android Studio : 起動時にプロジェクトを読み込まない設定

▼ 画面は 1.2.x のものですが、バージョンによって場所が変わる可能性があります


初期状態では、チェックされているので以前に開いていたプロジェクトを開くのですが、もともと重いソフトウェアですから、他のプロジェクトを開きたいと思っていても待つ必要があります。

ぜひ、チェックは外すべきです。




タグ:Android Studio
posted by at 2015-06-28 22:54 | Android | このブログの読者になる | 更新情報をチェックする

Eclipse に 画面分割があるとは知らなかった。

▼ これをショートカットでできないかいろいろ試していて見つけました。
Eclipse で、文字列内のファイルのパスの \ 記号を \\ にする方法

縦分割 / CTRL + \



横分割 / CTRL + [



まあ、でもあまりやらないほうがいいとは思います。なにかのはずみに片方が表示せずに固まったので


タグ:Eclipse java
posted by at 2015-06-28 22:16 | Java | このブログの読者になる | 更新情報をチェックする

2015年06月22日

Android Studio 目的の Java 講義順序 / 2015年6月23日用

Java で JSON 文字列を オブジェクトに変換する Google Gson の基本 4 パターン

※ Eclipse を使ってコンソール Java でテスト

Google Gson を使った JSON => オブジェクトの処理。
文字列としての JSON をソースコードで作成するのが大変 => 外部ファイルとして読み込む。

Java : テキストファイルを読み込んで正規表現で置換

1) ファイルからストリームを取得
FileInputStream

2) ストリームを読み込む為のリーダを取得
InputStreamReader

3) 行単位で読み込む為の BufferedReader を取得
BufferedReader

4) 文字列結合用のクラス
StringBuffer
StringBuilder

5) インターネット上でのストリームと比較
Android Studio のテストの時間を短縮する為のいくつかの static メソッドをまとめた Tools クラス
※ StringBuffer を使っています

❷ Android Studio のテストのコード記述を少し簡潔にする static メソッドをまとめた Tools2 クラス

※ ジェネリックメソッドの定義サンプル
※ ファイルアクセスで、Android 内での JSON 文字列の扱い準備

❸ Android Studio 環境で jar ライブラリを作成する

コマンドライン : "C:\pleiades\java\8\bin\jar.exe" cvf tools.jar jp
1) Java フォルダからパッケージ作成( jp.android.work と入力 )
2) その下で新しいクラスを作成する
3) app\build\intermediates\classes\debug からコマンドプロンプトを開く
4) jar.exe を実行
5) 作成された .jar はすぐに別の場所へ移動
❹ tools.jar を使って ListView アプリ Tools クラスで、Google Gson + ListView + Preferences + Intent


posted by at 2015-06-22 17:31 | 講師生活 | このブログの読者になる | 更新情報をチェックする

2015年06月19日

ジョークブックマークレット : ページの回転 ( jQuery アニメーション )

Twitter は既に jQuery が使われているので、以下の比較的単純なブックマークレットで回転します。
( 一般ページ用ではエラーになります )
▼ ブックマークレット登録用リンクです。
Twitter 用ページ回転
javascript:jQuery({kakudo: 0}).animate({kakudo:360},{duration:3000,easing:'swing',step:function(now){jQuery(document.body).css({transform:'rotate('+now+'deg)'});}});



▼ 一般ページ用ブックマークレット登録用リンクです。
ページ回転

新たに、回転中に CTRL キーを押すと、回転の中心をブラウザの見えている部分の一番上(スクロールバーが一番上)の中心に変更するようにしました。

jQuery の回転アニメーション をページ対象で、ブッマークレットに仕込みました。何の役にも立ちませんが、こういうことが簡単にできる時代ではあります。
▼ jquery_joke_01.js
str="";
str+="<"+"script> \n";
str+="if ( window.addEventListener ) { \n";
str+="	window[window.location.hostname+'.loadjQuery'] = '//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js'; \n";
str+="} \n";
str+="else { \n";
str+="	window[window.location.hostname+'.loadjQuery'] = '//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js'; \n";
str+="} \n";
str+="document.write(\"<\"+\"script src=\\\"\" + window[window.location.hostname+'.loadjQuery'] + \"\\\"></\"+\"script>\"); \n";
str+="</"+"script> \n";
document.write(str);
function joke_start() {
	$({kakudo: 0}).animate(
		{kakudo: 360},
		{
			duration: 3000,
			easing: "swing",
			step: function(now) {
				$(parent.document.body).css({
					transform: 'rotate(' + now + 'deg)'
				});
			}
		}
	);
}
str="";
str+="<"+"script> \n";
str+="joke_start(); \n";
str+="$(parent).keydown(function(event){ \n";
str+="	if ( event.ctrlKey ) { \n";
str+="		console.log(event) \n";
str+="		$(parent.document.body).css({ transformOrigin: '50% ' + parent.document.documentElement.clientHeight/2 + 'px' }); \n";
str+="	} \n";
str+="}); \n";
str+=" ";
str+="</"+"script> \n";
document.write(str);
document.close();

とりあえず、Google Chrome、Firefox、IE11( IE10エミュレーション ) では動作しました。

▼ ブックマークレット部分の整形したもの
if (!window['_bI']) {
    window._bI = {}; (function(w, h, b, l, t, z, v) {
        var wnd = document.createElement('iframe');
        with(wnd) {
            id = 'my';
            frameBorder = b;
            width = w;
            height = h;
            with(style) {
                position = 'absolute';
                left = l;
                top = t;
                zIndex = z;
                display = v;
                border = 'solid 1px #000';
                borderRadius = '10px';
            }
        }
        document.body.appendChild(wnd);
        window._bI.wnd = wnd;
        var % 20url;
        if ((location.href).substr(0, 5) == 'https') {
            url = 'https://secure624.sakura.ne.jp/fire30.winofsql.jp/jquery_joke_01.js';
        } else {
            url = 'http://toolbox.winofsql.jp/jquery_joke_01.js';
        }
        wnd.contentWindow.document.write('<' + 'script src=\'' + url + '\' charset=\'utf-8\'></' + 'script>');
    })(0, 600, 1, '0px', '0px', 1000, '');
} else {
    document.getElementById('my').contentWindow.joke_start();
}
関連する記事


posted by at 2015-06-19 13:37 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

2015年06月18日

別にするつもりは無いのですが、ちょっと気になって『固定IPっていくら?』と調べてみたら

ウチのプロバイダは @nifty なので。

@nifty 固定IPサービス というページを開いてみると・・・なんだかやたら『ふる〜い』あまりやる気のなさそうなページでした。



■ 料金
初期登録費用	5,000円(税抜)
月額料金	2,650円(税抜)※登録月無料

※ 2カ月以上継続してご利用のお客様に限ります。登録月に解除されますと初期登録費用、月額料金は通常通り翌々月にご請求いたします。※ 上記はすべて税抜表示料金です。別途消費税がかかります。また、ご請求額に1円未満の端数が生じた場合、その端数を切り捨ててご請求させていただきます。詳しくは消費税総額表示についてをご覧ください。
さすがに、ADSL はもうダメみたいです 2014年9月1日 イー・アクセス回線利用者の固定IPサービス終了について ADSL接続サービス(イー・アクセス、イー・アクセス(A))を利用した固定IPサービスは、2014年11月30日(日)にサービスの提供を終了いたします。 とお知らせがありました。ついこの間まで、NTT の ADSL を利用していて、『フレッツ・ADSL月額料金』と題して 2,000円 も取られていたのが、光に変えて『@nifty光ライフ with フレッツ (ホーム) 2年割プラン』になって、1,000円で、割引が 260円なので、799円の支払いと大きく変化しています。 やはり、ADSL はコストがかるんでしょうか。 固定 IP のメリットって? かなり特別な目的に利用しないかぎり、必要は無いですし、そのメリットが良くわからない時点で不用意に利用したらリスクもあるので考えないほうがいいかもしれません。もちろん、一見便利に見えて豊かになるかもしれませんが、プロでも『セキュリティ』の分野は弱いのが実際で、結局皆良く解って無いと思います( 自分も含めて ) かけた覚えのない国際通話にご注意ください つい、この間国際通話を使え無いように、NTT へお願いして、確定の郵便が到着したところです。
posted by at 2015-06-18 13:39 | インターネット | このブログの読者になる | 更新情報をチェックする

2015年06月15日

Google Gson の fromJson が、配列でも ArrayList でも同等に扱ってくれる事のテスト

なんとなくできるんだろうなぁ、と思いながらも試した事は無かったのですが、普通にできました。テストはコンソールでやっていますが、本来は Android で ArrayAdapter とセットで使用するので、どちらでもあまり大差はありません。

というより、Google Gson で文字列 JSON がほぼストレートに ListView にセットされるところが最も素敵なところです。
import java.util.ArrayList;
import java.util.ListIterator;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;


public class Main {

	// Livedoor の お天気Webサービス用 (JSON用)
	class Weather {
		// ArrayList で定義
		ArrayList<PinpointLocation> pinpointLocations;
	}
	class Weather2 {
		// 配列で定義
		PinpointLocation[] pinpointLocations;
	}

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		System.out.println("開始");

		// データをセット
		String result = Tools.httpGet(
			"http://weather.livedoor.com/forecast/webservice/json/v1?city=270000",
			"utf-8",
			null
		);

		System.out.println(result);

		Gson gson = new Gson();

		// ArrayList として処理
		Weather weatherData = gson.fromJson(result, Weather.class);

		// 多いので40番目から
		ListIterator<PinpointLocation> li = weatherData.pinpointLocations.listIterator(39);
		while(li.hasNext()) {
			PinpointLocation data = li.next();
			System.out.println(data.name + " : " + data.link );
		}

		System.out.println("-----------------------------------------");

		// 配列
		Weather2 weatherData2 = gson.fromJson(result, Weather2.class);

		// 多いので40番目から
		for( int i = 39; i < weatherData2.pinpointLocations.length; i++ ) {
			PinpointLocation data = weatherData2.pinpointLocations[i];
			System.out.println(data.name + " : " + data.link );
		}

		// 多いので40番目から( 39 番までを削除 )
		for( int i = 38; i >= 0; i-- ) {
			weatherData.pinpointLocations.remove(i);
		}
		
		Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
		String json1 = gsonPretty.toJson(weatherData);
		System.out.println( json1 );

	}

}


後重要なのは、逆の toJson ですが、この場合は整形する方法があるので、ここも重要です。
Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
String json = prettyGson.toJson(weatherData);


Web アクセス用簡易 static クラス
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;


public class Tools {

	// 指定した URL へ 任意の charset で処理
	public static String httpGet( String targetUrl,String targetCharset,Map<String,String> params) {

		StringBuffer web_data = new StringBuffer();

		try {
			// Query String の作成( 必要無ければ引数を null とする )
			String data = "";
			if ( params != null ) {
				Iterator<String> it =  params.keySet().iterator();
				String key = null;
				String value = null;
				while(it.hasNext()) {
					key = it.next().toString();
					value = params.get(key);
					if ( !data.equals("") ) {
						data += "&";
					}
					data += key + "=" + URLEncoder.encode(value, targetCharset) ;
				}
				if ( !data.equals("") ) {
					targetUrl = targetUrl + "?" + data;
				}
			}

			// **********************************************
			// インターネットへの接続
			// **********************************************
			// 読み込む WEB上のターゲット
			URL url = new URL(targetUrl);
			// 接続オブジェクト
			HttpURLConnection http = (HttpURLConnection)url.openConnection();
			// GET メソッド
			http.setRequestMethod("GET");
			// 接続
			http.connect();

			// **********************************************
			// ストリームとして読み込む準備
			// **********************************************
			// 以下読み込み3点セット InputStream / InputStreamReader / BufferedReader
			InputStream input_stream = http.getInputStream();
			// UTF-8 でリーダーを作成
			InputStreamReader input_stream_reader = new InputStreamReader(input_stream, targetCharset);
			// 行単位で読み込む為の準備
			BufferedReader buffered_reader = new BufferedReader(input_stream_reader);

			// **********************************************
			// 行の一括読み込み
			// **********************************************
			String line_buffer = null;
			// BufferedReader は、readLine が null を返すと読み込み終了
			while ( null != (line_buffer = buffered_reader.readLine() ) ) {
				web_data.append( line_buffer );
				web_data.append( "\n" );
			}

			// **********************************************
			// 接続解除
			// **********************************************
			http.disconnect();
		}
		catch(Exception e) {
			// 失敗
			System.out.println(e.getMessage());
		}
		return web_data.toString();
	}
}



タグ:JSON
posted by at 2015-06-15 20:58 | Java | このブログの読者になる | 更新情報をチェックする

DAZ3Dキャラとフリーフォントと吹き出しコンボ画像


 

前からこれをやりたくて、作ったと言っても過言では無い『フリーフォントで吹き出し画像作成』

画像を一旦ダウンロードして使うと完全な背景透過画像になるのは確認したのですが・・・・

クリップボード上で GIMP に貼り付けて背景透過になるのは Firefox だけなんだけど。

なな、なんで?






posted by at 2015-06-15 03:51 | DAZ3D | このブログの読者になる | 更新情報をチェックする

ひかり電話が、外部から不正にアクセスされて1か月に255万円を請求されたというお話は・・・

読売新聞の、6月12日のニュース『IP電話乗っ取り国際通話、高額請求の被害多発』では、
インターネット回線を使うIP電話が乗っ取られ、知らないうちに国際電話をかけられて高額の電話料金を請求される被害が多発していることが分かった。今年3月以降、少なくとも約80件が確認され、1か月に255万円を請求されたケースもあった。
とあって、IP電話と言えばひかり電話なので、いろいろ調べると結局この事件がひかり電話らしいと解り、ビビりながらも『家庭用でそんな事になるか?』と疑問を思い、結果としては 可能性はゼロでは無い という結論になりました そもそも この手の問題は、ずっと前からあって、 IP電話で覚えのない国際通話料金の請求に注意 IP-PBXに不正アクセス という記事は、2010年の 11月という大昔。で、結局ここでも
IP-PBXソフトウェアなどに対し、不十分なセキュリティ対策を突いて第三者が不正アクセスし、内線端末になりすまして国際通話をしているケースが確認できたという。
と、今回と全く同じ。 NTT 東日本 NTT 西日本 で、原因となるソフトウェア
IP−PBXとは、Internet Protocol Private Branch eXchange(インターネットプロトコル構内交換機)の略。IPネットワーク内で、IP電話端末の回線交換を行なう装置およびソフトウェアのことです。企業や家庭などのLANにおいて、IP電話による内線電話網を実現する等の目的で使用されます。
要するに、外部からアクセスしてひかり電話からは内線という扱いで普通に電話できてしまうと言う事なので、自分の契約電話が家や会社の外から使えるというもの。当然無条件では悪用されるのでパスワード等でガードするのだろうけれど、そのへんを突破する方法は現実には存在してしまうというか、ロクにセキュリティが設定されてないとかで他人が勝手に国際通話するという事件。 可能性はゼロでは無い理由 ここまで来ると、『なんだ、一般的では無い』と思うのだけれど、奇しくも『無線LAN「ただ乗り」を初摘発 パスワード解析して不正接続、容疑で男逮捕』というニュースが同日に流れていました。 こうなると、『やばい』となるわけで、LivyTalk というアプリでは、WiFi に繋げる事ができると( 当然セキュリティ突破している )、内線としてひかり電話で電話をかけれるわけです。 なので可能性はゼロでは無いので対策 海外向けの電話の発信を休止すればいいだけです。 が、全ての問題はこういうものを放置している NTT だと思うのですが、普通の家庭では国際電話なんかかけないですし、企業にしたってかける可能性は低い。たとえあったとしても外部から接続してきた場合の国際電話を拒否する設定ぐらいあってもいいと思うのです。 で、結局 0120-116116 にかけて国際通話不能にしました 混んでるとは思ってましたが、5分くらいで繋がりました。もう、向こうはその前提で会話している感じで、電話番号と契約者名と自分の名前と住所を言うと処理が終わり、2営業日ほどかかると言われました。つまり、『今日が土曜なので、火曜日』という説明を受けました 簡単だけれど、こんな事なきゃ一生気づかないです。なんで放置すんねん > NTT とは言え、それなりの安心を得られたのは事実です。
posted by at 2015-06-15 02:42 | 生活 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します