head

2014年6月19日木曜日

HTML5 canvasで、スライドショー部品を作成。 2014-06-19


梅雨ですね。
HTML5で、スライドショー部品を作成してみます。

全編の
http://knaka0209.blogspot.jp/2014/06/chrome-packaged-appshtml5canvas-2014-06.html
chrome Appsのスライド部品の続編です。
HTML5版に一部修正しました。

[前おき]
スライドショー部品で、jQueryプラグインを使用していたのですが、
画像の数が多くなると、読込み起動が重たくなる場合があり。
対策で別ライブラリ等を探したのですが。結局、HTML5で自作する事にしました。
(初期化で、ブラウザ画面内のIMGタグなどに、全画像配置する仕組みが重かったようです)

[主な要件]
1) 1画像づつスライドさせる。
2) 1画像を通信して取得後完了後、アニメーションを開始。
*) 目安目標で、大きめの画像(500KB以上) 100-150 枚程度を、永久ループ可能。

[Screen]


[source code]
Github : https://github.com/kuc-arc-f/h5_canvas_slide

起動画面
https://github.com/kuc-arc-f/h5_canvas_slide/blob/gh-pages/top.html


ブラウザから、XMLHttpRequestを一部設定変更を除き使えないようで
Image.src 属性で直接URL指定します。
コールバックからのアニメ起動は同じ。
==========================
var image = new Image();
image.src = item.url + '?' + new Date().getTime();
image.onload = function() {
  CustomSlide.start_anim( image, mNUM_TIMER );
}
==========================

Chrome Packaged Appsで、スライドショー部品を作成。(HTML5/canvas) 2014-06-19

梅雨ですね。
HTML5で、スライドショー部品を作成してみます。

[前おき]
スライドショー部品で、jQueryプラグインを使用していたのですが、
画像の数が多くなると、読込み起動が重たくなる場合があり。
対策で別ライブラリ等を探したのですが。結局、HTML5で自作する事にしました。
(初期化で、ブラウザ画面内のIMGタグなどに、全画像配置する仕組みが重かったようです)

[主な要件]
1) 1画像づつスライドさせる。
2) 1画像を通信して取得後完了後、アニメーションを開始。
*) 目安目標で、大きめの画像(500KB以上) 100-150 枚程度を、永久ループ可能。

[Screen]

[source code]
Github : https://github.com/kuc-arc-f/chrome_slide

初期データの配列作成します。 get_slideData()
スライド部品のインスタンスを作成し、
間隔=ミリ秒
配列データ(URL etc)
canvas width
canvas height
を渡す。


onload = function() {
var canvas =document.getElementById('id_canvas');
var iW = canvas.width;
var iH = canvas.height;
console.log( 'iW='+ iW +',iH=' + iH)
var items= get_slideData();
var slide = new CustomSlide(1000 * 10 ,items, iW, iH );
slide.start();
}
//
//function
//
function get_slideData(){
var items= new Array();
items[0]={ title:'p11.JPG' , url: 'http://kuc-arc-f.github.io/h5_t0604_page/img/p11.JPG' };
items[1]={ title:'p12.JPG' , url: 'http://kuc-arc-f.github.io/h5_t0604_page/img/p12.JPG' };
items[2]={ title:'p13.JPG' , url: 'http://kuc-arc-f.github.io/h5_t0604_page/img/p13.JPG' };
items[3]={ title:'p14.JPG' , url: 'http://kuc-arc-f.github.io/h5_t0604_page/img/p14.JPG' };
return items;
}
XMLHttpRequest で画像を取得
Imageのロードのコールバック内から
アニメーションを開始させる。

CustomSlide.load_image = function ( item, ipos) {
console.log('#load_image=' + item.url );
var xhr = new XMLHttpRequest();
xhr.open('GET', item.url );
xhr.responseType = 'blob';
xhr.onload = function() {
console.log('#r.onload,url=' + item.url );
var image = new Image();
var objURL = URL.createObjectURL(xhr.response);
image.src = objURL;
image.onload = function() {
console.log('#image.onload.w='+ image.width + ',h='+ image.height);
CustomSlide.start_anim( image, mNUM_TIMER );
};
};
xhr.send();
};

アニメーション処理。
タイマで起動、画面左の端でアニメ終了> 次の画像の処理>LOOP
*) 各描画間隔=20 msecですが、10 -15msecでも良いかと思います。

CustomSlide.start_anim = function (image, msec ) {
var ixSt = mWidthSlide;
var ix = 0;
var imx = msec / mDuration;
var ixDf = ixSt / imx;
console.log('imx='+ imx + ',ixDf=' +ixDf +',ipos='+ mPosition_Slide );
setTimeout(function(){
function gravity() {
mContext.clearRect(0, 0, mWidthSlide, mHeightSlide);
var iposX= ixSt - (ix * ixDf);
// console.log('iposX =' + iposX );
var iposY= CustomSlide.get_positinY(image);
mContext.drawImage(image, iposX, iposY, image.width, image.height);
if(iposX < 0){
clearInterval(g);
$(this).delay( mNUM_WAIT_AFT ).queue(function() {
CustomSlide.display_anim( mPosition_Slide +1 );
$(this).dequeue();
});
}
ix++;
};
var g = setInterval(gravity, mDuration);
}, 100 );
};
*) 画像読込みを、1画像づつで。メモリ消費は減らせた気がします。

[update 2014-06-19 13:11]
続編のHTML5版も追加しました。
http://knaka0209.blogspot.jp/2014/06/html5-canvas-2014-06-19.html

2014年6月13日金曜日

asm.js で, 引数を渡す。 2014-06-13

asm.js で, 引数を渡す。 2014-06-13

さて、asm.jsの件です。
jsとの連携部分で
C言語側の関数をエクスポートしておき、JSから呼び出すメモです。

SRC:
main関数なしで、関数のみ配置。
引数=数値、数値、文字 を型変換と結合設定します。
リターンコードは、JS側で使います。
//export1.c
#include <emscripten.h>
#include <stdio.h>
#include <stdlib.h>
char* ex_func01( int a, float b, const char* c )
{
char *po= (char *)malloc(sizeof(char) * 128 );
sprintf(po, "a=%d ,b=%f ,c=%s\n", a, b, c );
printf( "%d %f %s\n", a, b, c );
return po;
}


destの下に、HTML形式でコンパイルします。
引数は、
EXPORTED_FUNCTIONSで、Cは、接頭語=アンスコ[_]が必要。
*) 関数指定無しは、-s EXPORT_ALL=1

>
EMCC_FAST_COMPILER=0 emcc  export1.c -o dest/export1.html -s EXPORTED_FUNCTIONS="['_ex_func01' ]"

呼び出すJS、書きます。
ccall, cwrap() などで、関数使えるようです。
cwrap の場合は
関数名、戻り値、引数(複数可能)
を指定します。


//test.js
onload = function(){
console.log('#onload');
var ex_func01= cwrap( 'ex_func01', 'string', ['number' ,'number' ,'string' ] );
var ret= ex_func01(1, 2.0, 'arg3');
console.log('#ret=' +ret );
}

出力されたHTMLに、読み込みます。
===
<script async type="text/javascript" src="test.js"></script>
===

ブラウザで読み込むと、asm.js処理結果が
JS呼出側からコンソールにログ出力されます。

*) 通常js(非asm) vs asm.js 性能比較の検証も、今後企画したいと思います。
単純な重たい計算処理を実装したところ、あまり誤差が出ませんでした。(汗、、)



asm.js で, helloworldに挑戦。 2014-06-13


さて、asm.jsの件です。

環境:
macで
emscripten :1.19
LLVM : 3.3
clang : 3.3

環境構築の詳細は省略とさせて頂きます。(探せば出そうでした。)
流れ的には、下記のイメージだったようです。
============================================
node.js git homebrew がインストール済みの状態で、

git clone https://github.com/kripken/emscripten
*) /emscripten はPATHに追加した方が良いかもです。

brew install llvm --with-clang

で、
emcc を1回実行して、
ホームの $HOME/.emscripten を編集(LLVM_ROOT=llvmを、 brewでインストールしたフォルダ)
LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or '/usr/local/Cellar/llvm33/3.3_1/bin')  # directory

*)pyhton2のエラーで出る場合、/usr/bin/pythno2 に、pyhton2.7のリンク張って下さい。
============================================

[hello world出す。]

testフォルダにサンプルありましたのでコピー。
emscripten/hello_world.c

emccでコンパイルですが、fastcomp関係のエラーがでる場合、
EMCC_FAST_COMPILER=0
を設定します。 dest の下にコンパイルします。
>
EMCC_FAST_COMPILER=0 emcc  hello_world.c -o dest/hello_world.js

node.js で、確認します。
>
node dest/hello_world.js
hello, world!

シェルで記載する場合(参考)
#!/bin/bash
#export EMCC_CFLAGS="-O3"
rm -rf dest/*
export EMCC_FAST_COMPILER=0
emcc hello_world.c \
-o dest/hello_world.js \

HTML出力する場合
>
EMCC_FAST_COMPILER=0 emcc hello_world.c -o dest/hello_world.html

dest/hello_world.html を、ブラウザで開いて確認。

[インラインJavascript]

C言語側から、インラインで、javascript実行できるようです。
コンパイルします。
#include <emscripten.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("hello, world!\n");
EM_ASM(
//js-call
console.log( '#hello, world-Inline-JS ');
);
return 1;
}
>
EMCC_FAST_COMPILER=0 emcc hello_world_in.c -o dest/hello_world_in.js

nodeで確認します。
Cの表示と、JSの表示が両方出力されます。
>node dest/hello_world_in.js
hello, world!
#hello, world-Inline-JS

*)それでは、また


2014年6月11日水曜日

Chromium OS を、VMWareにインストールしてみる (2)。2014-06-11

さて、前編
http://knaka0209.blogspot.jp/2014/06/chromium-os-vmware2014-06-10.html
の続編です。

chrome OSのクローンOSぽい、Chromium OS
のレポートで
といってもカンタンな使い方編で、技術的な内容はありません。


再度OS起動して、ログインします。
パスワードの入力が必要なようです。



ランチャーを開けると
ブラウザ、ストア、Filesアプリなど。あります。

下のブラウザのボタン押すと、デスクトップが表示されます。
右ボタン押すと、メニュー表示内に壁紙の設定ができそうです。


壁紙の設定です。
ファイルの選択ボタンなどあります。



あらかじめDLした画像を、
ダウンロードのフォルダから設定してみました。



次に、Filesアプリ起動します。
左側に
ダウンロード
Googleドライブ
など、選択できそうです。
ファイルなどは、Googleドライブに保存が前提に見えます。
(ローカルにファイルを置く概念が無いように、見えます)
*) 開発に使えそうなOSでは無い気がしてきましたが。。



どちらかというと、スマホOSぽいかもしれませんね。
文書作成、システム開発でなく。軽めのネット作業を中心のOS
と考えると。できる事は限定されるが十分使える範囲かもしれません。

以上、Chromium OS使用したレポートでした。



2014年6月10日火曜日

Chromium OS を、VMWareにインストールしてみる。2014-06-10

さて、chrome OSのクローンOSぽい、Chromium OS
が存在しているようで、インストールしてみました。

環境など;
win7 64bit
VMWare player 6.x (古い)


下記から、DLできました。
http://chromeos.hexxeh.net/

[インストールの動画]
http://www.youtube.com/watch?v=Bnln_0iojWE

DLしたファイル
===============================
ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144-VMWare.vmdk
ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144-VMWare.vmx
===============================

設定の変更。
vmxファイルを開き, ethernet 関係の設定を追加。
===============================
ethernet0.virtualDev = "e1000"
===============================

仮想マシンを開き、設定変更。
プロセッサ、コア数の変更 =2

ネットワークアダプタの変更。
カスタム>NAT でOKでした。


起動すると、ログイン入力要求されますので
ユーザ等入力、するとログインできます。
左下にランチャーも開きました。



左下のchrome 起動して、webサービスは使えるようです。
webStoreは開きましたが、アプリのインストールはできませんでした。
(DLボタンが表示されない。chromeOSではないので、当たり前ですね、、)

外部サバに、自社ブランドのchrome Apps(ZIP)置く。⇒DL後
機能拡張タブから読み込むと、インストールできました。
(開発時のカンタンな動作確認程度には、使えそうです。)



*)実機は、見たことないのですが、
webサービス、chrome Appsは使えそうですので
機能は限定されるけど
ネットユーザの、サブマシン的な使い方は十分できるるかもですね。

*) chrome bookが早く日本で発売されるといいのですが。。

[update 2014/06/11]
続編も追加しました。
http://knaka0209.blogspot.jp/2014/06/chromium-os-vmware-22014-06-11.html




2014年6月6日金曜日

Chrome Packaged Apps, Indexed DB編(2)  2014-06-06

前回のIndexed DDB編 
http://knaka0209.blogspot.jp/2014/06/chromedb1.html
の続きです。

Project: https://github.com/kuc-arc-f/chrome_db1

検索、表示系の処理
cursor 使って、データ格納します。
cursor.continue() で、次の行へ移動みたいです。

DbHelper.prototype.get_allItems = function(view)
{
var rqOpen = indexedDB.open(DB_NAME);
rqOpen.onsuccess = function(e) {
var db= e.target.result;
var tx = db.transaction(STORE_NAME, 'readonly' );
var store = tx.objectStore(STORE_NAME);
var rq = store.openCursor();
rq.onsuccess = function(e) {
cursor = rq.result;
if(cursor) {
var item= new Item();
var data = cursor.value;
item.id =data.id;
item.name = data.name;
item.nameKana=data.nameKana;
view.disp_line(item);
cursor.continue();
}
db.close();
};
}
};

[表示系]
DOM追加操作します。<li>タグで追加。

View.prototype.disp_init = function() {
$('ul#id-ul-out').remove();
var divOut= $('div#id-div-out');
var ulObj= $('<ul id="id-ul-out"></ul>');
divOut.append( ulObj );
};
View.prototype.disp_line = function( item ) {
// console.log( items );
var ulObj= $('ul#id-ul-out');
var sLine='<li>' + item.id + ': '+ item.name + ': '+item.nameKana+ '</li>';
ulObj.append( $(sLine) );
console.log( sLine );
};
[スクリーン]

*) データ量も少ないので、動作は軽いですが、
5MB限界みたいですので、拡張できるか調べたいと思います。


*) まとめ一覧。こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html

Chrome Packaged Apps, Indexed DB編  2014-06-06

Chrome Packaged AppsのIndexed DB操作などについて。
HTML5の内容になり、Packagedに依存する部分は無いかと思いますが。
クライアント開発で使える技術かと思いますので、メモです。

*)Indexed DBは、開発中の製品でも実績が無いため、
 サンプル作りがあまい部分あります。。

Project: https://github.com/kuc-arc-f/chrome_db1


対応ブラウザなどのチェック、
今回は、Chromeのみで必要無いと思いますが、
window.indexedDB などを、一般的に起動時チェック方法ありそうです。

function init_proc()
{
if (window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB) {
console.log('OK: use indexedDB');
}else{
console.log('NG: use indexedDB');
}
var db= new DbHelper();
db.getInstance();
}
[DB初期化など]
DB存在しない場合、
onupgradeneeded() が呼ばれ、ストア作成する。
key:Id
Index : name
とかにしときます。(一旦、db.close() しときます。)

DbHelper.prototype.getInstance = function( ) {
var db=null;
//open
var rq = indexedDB.open(DB_NAME);
rq.onupgradeneeded = function(result) {
console.log('#onupgradeneeded');
db = this.result;
var store = db.createObjectStore(STORE_NAME, {
keyPath: 'id', // key= id
autoIncrement: false,
});
store.createIndex('byName', 'name');
db.close();
};
};

[データ追加] HTML
追加の入力欄作成します。
id
name
kana など

<form name="form1">
id (int):
<input type="text" id="id-text-id" value=""></input ><br />
name:
<input type="text" id="id-text-name" value=""></input ><br />
kana:
<input type="text" id="id-text-kana" value=""></input ><br />
</form><br />
<a href="#" id="id-a-add" >[ add ]</a><br />
<br />
<a href="#" id="id-a-show" >[ show ]</a><br />
<hr />

[データ追加]
 store に、putします。
*)
トランザクション開始>ストアへPUT みたいな流れ。
key=id なので、重複値(id)は、追加されないようです。


DbHelper.prototype.proc_addItem = function(item ,view)
{
var rq = indexedDB.open(DB_NAME);
rq.onsuccess = function(e) {
console.log('#onsuccess_open');
var db= e.target.result;
var tx = db.transaction(STORE_NAME, 'readwrite');
tx.oncomplete = function() { };
var store = tx.objectStore(STORE_NAME);
var request =store.put({
id : parseInt(item.id ),
name : item.name,
nameKana: item.kana
});
request.onsuccess = function(e) {
console.log('#onsuccess_add');
db.close();
proc_addComplete(view);
}
}
};
*) 続きは、続編(表示系の処理)
に記載予定です。
http://knaka0209.blogspot.jp/2014/06/chromedb1-2.html

*)まとめ一覧。こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html


2014年6月5日木曜日

Chrome Packaged Apps ajax編、2014-06-05


Chrome Packaged Appsのajax通信で、RSS取得などについて。メモです
(Packagedインストール及びデバック方法は省略させて頂きます。)

参考サイト様(公式かも):
https://developer.chrome.com/apps/about_apps


ソースこちら、 https://github.com/kuc-arc-f/chrome_ajax1
(jQuery使ってます。)
chrome : v35.0.1916.114 での動作確認できました。

画面は、ボタンを配置して、イベント設定しておきます。
RSS記事の表示領域は、空テーブルを配置。
*)スタイリングは, bootstrap3使ってますが、無しでもOK。

https://github.com/kuc-arc-f/chrome_ajax1/blob/master/top.html
===============================================
<button class="btn btn-primary"  id="id-a-get">[ RSS GET]</button>

<table style="width:100%;" class="table table-striped table-hover" id="id-table1">
<tbody>
</tbody>
</table>
===============================================

通信クラス(ctlNews)から、
ajax通信し、XMLパースします。
N社のRSS通信して、記事を表示
*)クロスドメイン等のエラーがでると想定してましたが、
 問題なく通信できました。

https://github.com/kuc-arc-f/chrome_ajax1/blob/master/js/ctlNews.js
===============================================
ctlNews.prototype.load_rss = function( surl ) {
var items =new Array();
console.log( 'surl=' + surl );
$.ajax({
url: surl,
type: 'get',
dataType: 'xml',
timeout: 5000,
success: function(xml, status) {
if (status === 'success') {
var row = 0;
var data = [];
var nodeName;
$(xml).find('item').each(function() {
data[row] = {};
//get-childre
$(this).children().each(function() {
//nodeName
nodeName = $(this)[0].nodeName;
data[row][nodeName] = {};
// sttr
attributes = $(this)[0].attributes;
for (var i in attributes) {
data[row][nodeName][attributes[i].name] = attributes[i].value;
}
//text
data[row][nodeName]['text'] = $(this).text();
});
row++;
});
var ict= 0;
for (i in data) {
var itm= new Item( );
itm.title= data[i].title.text;
itm.url = data[i].link.text;
if(ict < mMAX_CountItem){
items[i] =itm;
console.log( 'lnk='+ itm.title );
console.log( 'url='+ itm.url );
}
ict++;
}
} //if_stat_success.
$(this).delay( 500 ).queue(function() {
disp_news(items);
$(this).dequeue();
});
}
});
};
===============================================

データ格納して、DOM追加操作します。
ID=id-table1 のテーブル内に描画します。
A要素は、target="_blank" で、別ブラウザ起動で内容を表示。
===============================================
function disp_news(items)
{
for(var i = 0; i < items.length ; i++){
var body= $('table#id-table1');
var trObj = $('<tr></tr>');
var tdObj = $('<td></td>');
var a_tag = $('<a href="'+ items[i].url +'" target="_blank">'+ items[i].title +'</a>');
var tdObj02 = $('<td align="right"></td>');
var sAtag02 = '<a href="'+ items[i].url +'" target="_blank">';
sAtag02 += ' <button class="btn btn-default" style="margin-left:10px;">';
sAtag02 += ' <i class="glyphicon glyphicon-chevron-right"></i>';
sAtag02 += ' </button>';
sAtag02 += '</a>';
tdObj.append(a_tag);
tdObj02.append( $(sAtag02) );
trObj.append(tdObj);
trObj.append(tdObj02);
body.append(trObj);
}
}
===============================================

ajax通信後、RSS記事を表示できました。

*) まとめ(Chrome Packaged Apps 開発メモ)こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html

2014年6月4日水曜日

Chrome Packaged Apps, image編  2014-06-04


Chrome Packaged Appsのimage(画像)などについて。メモです
(Packagedインストール及びデバック方法は省略させて頂きます。)

参考サイト様(公式かも):
https://developer.chrome.com/apps/about_apps

画像の表示で、
IMG要素-SRC属性に、画像URLを指定すると。
セキュリティ関係のエラーが発生して、
表示できないようです。対策はありそうでした。
xhr(XMLHttpRequest) を使用すると、表示可能のようです。
*) 検索するとサンプルなどに、含まれてました。

ソースこちら、 https://github.com/kuc-arc-f/chrome_image
(jQuery使ってます。)

画像の取得処理。
*)どちらかというと、単純なDOM構築でなく。
通信処理後、バイナリをオブジェクトに渡す
みたいな処理ぽいです。

https://github.com/kuc-arc-f/chrome_image/blob/master/js/controller.js
===============================================
var xhr = new XMLHttpRequest();
xhr.open('GET', imageUrl);
xhr.responseType = 'blob';
xhr.onload = function() {
var img = document.createElement('img');
img.setAttribute('data-src', imageUrl);
img.setAttribute('id', s_id);
img.className = 'icon';
var objURL = this._createObjectURL(xhr.response);
img.setAttribute('src', objURL);
element.appendChild(img);
return img;
}.bind(this);
xhr.send();
===============================================

表示用のDIVタグ配置します。
https://github.com/kuc-arc-f/chrome_image/blob/master/sub.html
===============================================
<div id="id-div-img"  ></div><br />
<div id="id-div-img2" ></div><br />
<div id="id-div-img3" ></div>
===============================================

サブ画面を開くと、
起動時に、外部クラウドから画像ダウンロードして
描画しています。
https://github.com/kuc-arc-f/chrome_image/blob/master/sub.js
*) 画像は、Github-page に、適当に事前に配置しておきます。

===============================================
AppShow.prototype.proc_init = function() {
console.log('#proc_init');
var s1='http://kuc-arc-f.github.io/h5_t0604_page/img/p1.png';
var s2='http://kuc-arc-f.github.io/h5_t0604_page/img/p2.JPG';
var s3='http://kuc-arc-f.github.io/h5_t0604_page/img/p3.JPG';
var ctl = new Controller();
var divcont = document.querySelector('div#id-div-img');
var img_t= ctl._requestRemoteImageAddElem( s1, divcont ,'id_img1');
var divcont2 = document.querySelector('div#id-div-img2');
var img_t= ctl._requestRemoteImageAddElem( s2, divcont2 ,'id_img1');
var divcont3 = document.querySelector('div#id-div-img3');
var img_t= ctl._requestRemoteImageAddElem( s3, divcont3 ,'id_img1');
}
===============================================

サブ画面に表示しました。

まとめ(Chrome Packaged Apps 開発メモ)こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html

*)
[update: 2014/06/05] Gistにコード一部貼付け修正しました。


Chrome Packaged Apps 開発メモ,2014-06-04


Chrome Packaged Apps 開発メモ
(コンテンツは必要に応じて追加を計画しております。)

[ 背景 ]
chrome OS向け(及びマルチプラットフォーム)の製品開発を目標とし、
Packaged Apps の開発技術メモとして、掲載させて頂こうと思います。
*) それにしても、chrome book とかまだ販売されませんね。日本は、、
試してみたい気分です。。

参考サイト様(公式かも):
https://developer.chrome.com/apps/about_apps

[chapter-01]

window操作
http://knaka0209.blogspot.jp/2014/06/chromewindow1.html

[chapter-02]

window操作, 画面間の値渡し
http://knaka0209.blogspot.jp/2014/06/chromewindow2.html

[chapter-03]

storage操作
http://knaka0209.blogspot.jp/2014/06/chromestore.html

[chapter-04]

image操作
http://knaka0209.blogspot.jp/2014/06/chromeimage.html


[chapter-05]

ajax通信で簡易RSSリーダ作成
http://knaka0209.blogspot.jp/2014/06/chromeajax1.html

[chapter-06]

Indexed DB編(1)

[chapter-07]

Indexed DB編(2)


[番外編1] cca(cordova chrome app)でAndroid apk作成してみる

cordova を利用したandroid Apps(APK)の手順等です。
http://knaka0209.blogspot.jp/2014/07/ccacordova-chrome-appandroid-apk2014-07.html


Chrome Packaged Apps, storage操作編  2014-06-04


Chrome Packaged Appsのstorage操作などについて。
(Packagedインストール及びデバック方法は省略させて頂きます。)

参考サイト様(公式かも):
https://developer.chrome.com/apps/about_apps

storage使う例で、local
chrome.storage.local使います。
Packagedは、HTML5のlocalStorageが使えないようで、
移植する場合は、置き換えが必要みたいですね。
*) 非同期I/Oが推奨される為とか。みたいですけど、

ソースこちら、 https://github.com/kuc-arc-f/chrome_store
(jQuery使ってます。)

データ管理用に、
追加、表示、削除のA要素おきます。
https://github.com/kuc-arc-f/chrome_store/blob/master/top.html
===============================================
 <a href="#" id="id-a-add" >[ add ]</a><br />
  <br />
  <a href="#" id="id-a-show" >[ show ]</a><br />
  <br />
  <a href="#" id="id-a-delete" >[ delete ]</a><br />
  <hr />
===============================================

追加の処理。
https://github.com/kuc-arc-f/chrome_store/blob/master/top.js
ストレージ名=strlist
この場合、N番目の配列にid, text(文字)の各列にデータ埋め込みます。
*) Add数回押すと、N番目のデータに、
test-0, test-1 などの数値付の文字が格納されます

===============================================
function click_addStore()
{
var ct = mItems.length;
mItems[ct] = {'id': ct, 'text': 'test-'+ ct };
chrome.storage.local.set({ 'strlist' : mItems });
}
===============================================

表示します。showおす。
storageから値取得して、div要素を書き換えます。
*) 前回表示データは全て削除、
配列データから、全てを再表示します。
===============================================
function click_showStore()
{
$('div#id-div-box').remove();
var divShow =$('#id-div-diplay');
var divBox= $('<div id="id-div-box"></div>')
chrome.storage.local.get( 'strlist' , function(value) {
if(value && value.strlist) {
console.log( value.strlist );
console.log( 'len='+ value.strlist.length );
var items = value.strlist;
for(var i=0; i< items.length ; i++){
var itm = items[i];
divBox.append('<p>'+ itm.text + '</p><br />');
}
divShow.append(divBox);
}
});
}
===============================================

削除の処理、
この場合、空の配列を。ストレージ名指定で上書きしています。
*)別領域を、各個別に削除したい場合などに使える。かと思います。
===============================================
function click_deleteStore()
{
mItems= new Array();
chrome.storage.local.set({ 'strlist' : mItems });
$('div#id-div-box').remove();
}
===============================================

値を表示。追加後、[show]押した時、

まとめ(Chrome Packaged Apps 開発メモ)こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html

*)
[update: 2014/06/05] Gistにコード一部貼付け修正しました。


Chrome Packaged Apps, window操作編、画面間で値を渡す 2014-06-04


Chrome Packaged Appsのwindow操作などについて。
(Packagedインストール及びデバック方法は省略させて頂きます。)

参考サイト様(公式かも):
https://developer.chrome.com/apps/about_apps

画面間で、値を渡す例です。
前回のwindow関連の説明と、ほぼ同じです。
http://knaka0209.blogspot.jp/2014/06/chromewindow1.html
*) クライアントAppsだと、サーバ言語使えないので苦労しますね。

ソースこちら、 https://github.com/kuc-arc-f/chrome_window2

chrome.app.window.create
を使って、サブ画面を開きます。
https://github.com/kuc-arc-f/chrome_window2/blob/master/top.js

クリックイベントでサブ画面開きますが、
DOMContentLoaded の処理で、
querySelector()、次画面の要素を指定して。
値を埋め込みます。
この場合value値に、適当な文字を埋め込みます。
次画面の詳細の描画処理などは、
キー情報などを渡して使える手法かと思います。

*) ストレージに書き込んで渡す手もあるかと思います。

===============================================
function click_sub()
{
chrome.app.window.create(
'sub.html',
{id: "browserSlideID",
bounds: {
'width' : 1024,
'height': 600
}
}
, function(appWin) {
appWin.contentWindow.addEventListener('DOMContentLoaded',
function(e) {
console.log( '#.DOMContentLoaded' );
var text1 = appWin.contentWindow.document.querySelector('#id-text1');
text1.setAttribute('value', "moji-1234 from topWindow");
appWin.show();
}
)
}
);
}
===============================================

サブ画面に、値を埋め込み表示。

まとめ(Chrome Packaged Apps 開発メモ)こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html

*)
[update: 2014/06/05] Gistにコード一部貼付け修正しました。

Chrome Packaged Apps, window操作など, 2014-06-04


Chrome Packaged Appsのwindow操作などについて。
(Packagedインストール及びデバック方法は省略させて頂きます。)

参考サイト様(公式かも):
https://developer.chrome.com/apps/about_apps


さて、初歩的ですがwindowを開くあたり。メモしたいと思います。
manifestに記載した。起動用スクリプトからwindow開く説明は省略したいと
思います。サブ画面を開く例です。

ソースこちら、 https://github.com/kuc-arc-f/chrome_window1

chrome.app.window.create
を使って、サブ画面を開きます。

画面にA要素を置き、
https://github.com/kuc-arc-f/chrome_window1/blob/master/top.html

===============================================
<a href="#" id="id-a-open">[ open-Sub ]</a>
===============================================

jsで、イベント処理を実装します。。
https://github.com/kuc-arc-f/chrome_window1/blob/master/top.js
===============================================
onload = function() {
document.querySelector('a#id-a-open').onclick = function() {
click_sub();
}
}
===============================================

クリックイベントで、サブwindow開きます。
===============================================
function click_sub()
{
chrome.app.window.create(
'sub.html',
{id: "browserSlideID",
bounds: {
'width' : 1024,
'height': 600
}
}
, function(appWin) {
appWin.contentWindow.addEventListener('DOMContentLoaded',
function(e) {
console.log( '#.DOMContentLoaded' );
appWin.show();
}
)
}
);
}
===============================================

サブ開きました。


まとめ(Chrome Packaged Apps 開発メモ)こちら、
http://knaka0209.blogspot.jp/2014/06/chrome-pkg.html


[update: 2014/06/05] Gistにコード一部貼付け修正しました。


google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。 開発環境まわりの内容となり。先人様の情報を元に調査しました。 google colab(google colaboratory) を試してみました。機械学習系の いくつかのライブラリがインストール済みで、 クラウド上で、ある程度機械学...

AD-parts

Shop
Bluetooth搭載
ベース基板

Social