terada99

今日のDA

2009年5月24日: 蔵書録のススメ。


カテゴリ:
  投稿者:

[ソリューション事業部 テラダ]
こんばんわ。インフルエンザが存分にその猛威をふるっている今日この頃、お元気ですか?
テラダは花粉症終わったと思ったら、夏に向けて抜けまくる我が猫の毛に苦しんでいます。
さて、本好きが多いとされているデジアラですが私ももれなく本の虫であります。
そこで困るのが次々と我が家で領土を広げていく本の収納場所、ももちろんそうなのですが、格別に残念な気持ちになるのは過去に読んだ本とそれを読んだことを忘れた頃に再会し購入してしまうことです。
たちの悪いときには半ば読んだ頃にその事実に気がつくのです。
一生の間に読むことができる本はわずかであるにもかかわらず、このロスは如何ともし難く、また本たちにとっても、迷惑な再会に違いありませんので、この度、蔵書録を始めようと思い至りました。
とはいえ、この不精な私がその様なマメな作業を継続できる分けがありません。
ということで、前置きがクドくて大変申し訳なかったのですが、バーコードリーダーを購入しました。
20090525-20090525001250.jpg
バーコードリーダーと言えば、我が国の消費経済を末端で支える、コンビニ、スーパーなどをはじめ、ありとあらゆるレジに存在する、あのバーコードリーダーです。
このバーコードリーダーはUSB接続なのですが、PC上でエクセルなどを開いた状態でこれをつないで
20090525-2009052500144522.jpg
ピコっとしてやると、
20090525-0031.jpg
なんということでしょう!
番号が入力されました。この番号こそが実は、世界中の本たちを特定するISBN番号なのです。
この番号は本の裏を確認しながら手入力してもかまわないのですが、溜まりにたまった本を継続的に処理していくにはバーコードリーダー様のお力添えが必要です。
このISBN番号を利用して蔵書録をつくろう、というのが今回の趣旨なのですが私の場合、本屋さんで手にとった本がその場で既読かどうか知りたいので“ブクログ”というサービスで管理することにしました。
このブクログにはISBN一括登録機能というものがあり、これでずんずん登録していきます。
20090525-200905250020282.jpg
すると、登録画面では
20090525-0047.jpg
ISBN番号と改行が一緒に入力されていきます。
登録完了後は
20090525-0050.jpg
このように確認ができます。
これで後は、カテゴリ分類や、自分の中でのランク付け、コメントを残しておいたりして
私のように再会防止に使うもよし、眺めるのもよし、自分の趣味志向を再確認するのもよし、蔵書を売っぱらうもよし、これにて一件落着です。
今回はWEBサービスを利用しましたが、ISBN番号がある限り、ローカル上で動作する蔵書録のフリーウェアや自作アプリでももちろん管理が可能です。
皆様良い読書生活を。

この記事に関連する情報

収納力がある家具を探しているけど、デザインにもこだわりたい。そんな方におすすめなのが、「こもれび家具」です。家具の名産地、福岡県大川市で木が持つ本来の魅力を堪能できる上質な無垢家具を製造しています。 家具好きの方も納得する出来栄えです。是非一度ご覧下さい!
こもれび家具
ライダー部

2009年4月17日: ライダー部遠征第2回目「日本的なるもの」


カテゴリ:
  投稿者:

[ソリューション事業部 テラダ]
お天道様とどうしても息が合わなかった前回の初遠征から春の到来を待ち続け、ついに第二回遠征が実現しました。
来る4/11、これ以上ない最高の天気!総勢7名。工程は以下の通り、

0700 三宮組発

0730:赤松PA 下り集合

吉川JCT→舞鶴若狭自動車道→春日IC→青垣トンネル

道の駅但馬のまほろば
http://www.green-wind.co.jp/index.html

立雲峽のヤマザクラ群落
http://www.tajima.or.jp/modules/forest/index.php?nature=264

竹田城
http://www.tomorrowearth.com/2008/08/takeda-castle.html

海鮮せんべい但馬にて小休止(コーヒー無料。せんべい試食)
http://www.kaisen-senbei.jp/shop.html

※峠を超えて時間短縮したいのですが、かなりタイトなコースなので意見を聞き再考します。

昼食 出石そば
http://www.izushi.jp/sarasoba/

生野銀山
http://www.ikuno-ginzan.co.jp/

播但自動車道→中国自動車道

赤松PA (赤松組解散)

六甲北有料道路→新神戸トンネル

1800:三ノ宮着

今回は、なんと!全工程を動画で撮影するということに挑戦してみました。
16倍速にしております。(音量注意)

が、実はバッテリーがもたず、赤松PAまでの行程の撮影になってしまいました。
当日までに撮影テストを繰り返したのですが、盲点でした。次回への課題とします。。
なので写真で振り返っていきます!
20090419-090411_0933~0003.jpg
合流地点の赤松PAまでの途中。
null
八浦さんのかっこよすぎる愛車にまたがらせてもらいました。
null
合流地点に到着したものの何故か予定通りの全員揃わず、ひとまず朝食。
20090419-DARC00015.JPG
個人的に一番楽しみにしてた、竹田城!
あまり大きい声では言えないのですが、竹田さんのお城だと思っていた人が一名いらっしゃいました。
20090420-DARC00024.JPG
ひとまず集合写真。
null
何て日本的な風景なのかと、感動しました。
null
続いて目指すは立雲峽。竹田城からみて赤丸のところです。
null
途中、JR竹田駅で一休み。
null
立雲峽に到着。桜桜桜。
null
炎天下で出石蕎麦を食べまくる。
null
初めての人はきっと驚くに違いない広大な海鮮せんべい屋さんで休憩して
null
最後の目的地、生野銀山に到着。
null
帰路。満足感と疲労感いっぱいの様子。
というような内容でした。
天気も良くて、渋滞にもほとんどあわず最高のツーリングでした。
次回も予定しておりますので潜在ライダーの方は是非!

今日のDA

2009年3月09日: オススメボン教えてください!


カテゴリ:
  投稿者:

花粉がスゴすぎて明日を見失いそうになっているテラダです。
突然ですが、私は小説が大好きです。危ないですが歩きながら読んでしまうくらい大好きです。
マンガももちろんよく読むのですが絵がメインである以上、物理的にボリュームが少ないので、普段はカバンに2,3冊小説を入れています。
むしろ小説持っていないと不安で外出できません。
その中でテラダが1月〜3月の間に読んだ面白かった小説3冊をご紹介します。

(さらに…)

続きを読む >
バースデーセレモニー

2009年1月27日: 2009年1月のお誕生日セレモニー


カテゴリ:
  投稿者:

ぴっちぴちの半ズボンはいて凍った水溜りを割りまくってた小学生の頃っていうのはやはり無敵だったんですかね。
春が待ち遠しい寺田です。
そんな中、デジアラでは今年第一号のお誕生日セレモニーが催されておりました。
1月のお誕生日は、
松田さんと育児休暇中の阿利さんでした。
おめでとうございます!
20090127-IMG_2237.jpg
そして、今回のスイーツはわらびもち、でした!
null

技術トピック

2008年11月12日: Javascriptでマインスイーパをつくる(リベンジ編)


カテゴリ:
  投稿者:

[ソリューション事業部 寺田]

もはや誰も覚えていらっしゃらないと思うのですが、以前Javascriptでマインスイーパをつくる試みをやりまして全然できなかったのですが、こっそり勉強してリベンジしてみました。

ものすごくカオスなコードを晒します。

(function(){
var MineSweeper=function(){
this.elem=document.createElement("div");
document.body.appendChild(this.elem);
this.init();
}
MineSweeper.prototype={
init:function(){
this.elem.id="MineSweeper";
this.setStyle();
setTimeout(function(e){
return function(){
e.gameContainer=new mineSweeperContainer(e);
e.gameControler=new mineSweeperControler(e);
e.gameCore=new mineSweeperCore(e);
}
}(this),1500)
},
setStyle:function(){
with(this.elem.style){
position="fixed";
width="100%";
height="100%";
left="0px";
top="0px";
backgroundColor="#000000";
color="#FFFFFF";
zIndex="30";
opacity=0.8;
}
this.overRay(this.elem,0.8);
},
flash:function(){
this.timerId=setInterval(function(e){
var i=0;
return function(){
if(i%2==0){
e.elem.style.backgroundColor="#ff0000";
}else{
e.elem.style.backgroundColor="#000000";
}
i++;
if(i==10)clearInterval(e.timerId);
}
}(this),100)
},
Start:function(level){
},
End:function(){
document.body.removeChild(this.elem);
}
};
//ゲーム本体の親オブジェクト //----------------------------------------------------------//
var mineSweeperContainer=function(parent){
this.root=parent;
this.parent=parent.elem;
this.elem=document.createElement("div");
this.parent.appendChild(this.elem);
this.init();
};
mineSweeperContainer.prototype={
init:function(){
this.elem.id="mineSweeperContainer";
this.setStyle();
},
setStyle:function(){
with(this.elem.style){
position="absolute";
left=(document.body.clientWidth-500)/2+"px";
margin="120px auto";
backgroundColor="#FFFFFF";
width="500px";
height="540px";
color="#000000";
fontFamily="arial,helvetica,sans-serif";
zIndex="50";
opacity="0";
}
this.overRay(this.elem,0.99);
}
};
//ゲームコントローラー //----------------------------------------------------------//
var mineSweeperControler=function(root){
this.root=root;
this.parent=root.gameContainer;
this.parent.elem=root.gameContainer.elem;
this.elem=document.createElement("div");
this.parent.elem.appendChild(this.elem);
this.levels=["Easy","Normal","Hard"];
this.level=false;
this.init();
};
mineSweeperControler.prototype={
init:function(){
this.elem.id="mineSweeperControler";
this.difficultySelect();
this.restartSwitch();
this.closeSwitch();
this.setStyle();
},
setStyle:function(){
with(this.elem.style){
position="absolute";
left="0px";
bottom="0px";
border="2px solid #000000";
backgroundColor="#000000";
opacity="1";
}
},
difficultySelect:function(){
this.difficultySelect=[];
for(var i=0;i1 && bombY>1)this.cells[bombX-1][bombY-1].bombHint(true);
if(bombX1 && bombY1)this.cells[bombX+1][bombY-1].bombHint(true);
if(bombY>1)this.cells[bombX][bombY-1].bombHint(true);
if(bombX>1)this.cells[bombX-1][bombY].bombHint(true);
if(bombX1 && cellY>1){
if(this.cells[cellX-1][cellY-1].open==false)this.cells[cellX-1][cellY-1].cellOpen();
};
if(cellX1 && cellY1){
if(this.cells[cellX+1][cellY-1].open==false)this.cells[cellX+1][cellY-1].cellOpen();
};
if(cellY>1){
if(this.cells[cellX][cellY-1].open==false)this.cells[cellX][cellY-1].cellOpen();
};
if(cellX>1){
if(this.cells[cellX-1][cellY].open==false)this.cells[cellX-1][cellY].cellOpen();
};
if(cellX99){
with(e.timer.style){
textIndent="-60px";
letterSpacing="-120px";
fontSize="900px";
}
}
}
}(this),1000);
with(this.timer.style){
position="absolute";
left="0px";
right="0px";
top="0px";
lineHeight="0.8";
fontFamily="arial helvetica"
fontSize="960px";
fontWeight="bold";
color="#000000";
margin="0px auto";
padding="0px";
zIndex="10";
}
this.overRay(this.timer,0.5);
},
bombCounter:function(i){
this.hasBombLength=i;
this.bombCounter.id="bombCounter"
this.bombCounter=document.createElement("p");
this.parent.insertBefore(this.bombCounter,this.elem);
this.bombCounter.innerHTML=i;
with(this.bombCounter.style){
color="#FFFFFF";
backgroundColor="#000000";
textAlign="center";
border="2px solid #a4a4a4";
margin="0px";
padding="12px";
fontSize="36px";
}
},
checkBombLength:function(){
},
gameClear:function(){
clearInterval(this.timerId);
alert("clear!");
},
gameOver:function(){
clearInterval(this.timerId);
this.root.flash();
alert("bomb!!!");
},
End:function(){
if(this.timer)document.body.removeChild(this.timer);
if(this.timerId)clearInterval(this.timerId);
}
};
//セル//--------------------------------------------------------------------------------//
var mineCell=function(parent,x,y,cid){
this.cid=cid;
this.neighborBomb=0;
this.x=x;
this.y=y;
this.width=18+"px";
this.height=18+"px";
this.hasBomb=0;
this.parent=parent;
this.flag="P";
this.bomb="(B)";
this.open=false;
this.init();
};
mineCell.prototype={
init:function(){
this.elem=document.createElement("li");
this.parent.elem.appendChild(this.elem);
this.elem.onclick=function(e){
return function(){
e.leftClick();
};
}(this);
this.elem.oncontextmenu=function(e){
return function(){
e.rightClick();
return false;
}
}(this);
this.setStyle();
},
setStyle:function(){
with(this.elem.style){
border = "solid 1px #999999";
width = this.width;
height = this.height;
styleFloat = "left";
cssFloat = "left";
listStyle = "none";
fontSize = "10px";
textAlign = "center";
backgroundColor = "#0a0a0a";
}
},
leftClick:function(){
if(this.parent.firstClick==true){
this.parent.firstClick=false;
this.parent.callBombMaster(this.cid,this.x,this.y);
this.parent.timerStart(this.parent);
}
this.cellOpen();
},
rightClick:function(){
if(this.parent.firstClick==false)
if(!this.elem.innerHTML){
this.elem.innerHTML=this.flag;
this.parent.bombCounter.innerHTML--;
if(this.hasBomb==1){
this.parent.hasBombLength--;
if(this.parent.hasBombLength==0)this.parent.gameClear();
}
}else{
this.parent.bombCounter.innerHTML++;
this.elem.innerHTML="";
if(this.hasBomb==1){
this.parent.hasBombLength++;
}
}
},
setBomb:function(){
this.hasBomb=1;
this.parent.checkBomb(this.x,this.y);
},
bombHint:function(known){
if (known == true) this.neighborBomb++;
},
cellOpen:function(){
this.End();
this.open=true;
if(this.hasBomb==0)this.parent.area--;
if(this.parent.area==this.parent.hasBombLength)this.parent.gameClear();
if(this.neighborBomb>0 && this.hasBomb==0)this.elem.innerHTML=this.neighborBomb;
if(this.neighborBomb==0 && this.hasBomb==0)this.parent.checkAround(this.x,this.y);
//爆弾を踏んでしまった時の処理
if (this.hasBomb == 1) {
this.elem.innerHTML = this.bomb;
this.parent.gameOver();
}
with(this.elem.style){
backgroundColor="#FFFFFF";
fontSize="12px";
fontWeight="bold";
lineHeight="1.5";
color="#ff0000";
}
if(this.neighborBomb>1)
with(this.elem.style){
color="#0000ff";
}
if(this.neighborBomb>2)
with(this.elem.style){
color="#00dd00";
}
},
End:function(){
this.elem.onclick=null;
this.elem.oncontextmenu=null;
}
};
//爆弾管理//------------------------------------------------------------------------//
var bombMaster=function(x,y,parent){
this.parent=parent;
this.x=x;
this.y=y;
this.bombs=[];
this.bombsX=[];
this.bombsY=[];
this.bombsMatrix=[];
this.cellLength=this.x*this.y;
this.bombsRate=0.1;
this.bombLength=Math.round(this.cellLength*this.bombsRate);
}
bombMaster.prototype={
init:function(){
},
putBomb: function(cells,currentX,currentY,carrentCell){
this.cells=cells;
for(var i=1,k=0;i<=this.x;i++){
for(var j=1;j<=this.y;j++){
if ((i != currentX) || (j != currentY)) {
this.bombs[k] = i + "&" + j;
k++;
}
}
}
this.bombs.shuffle();
for(var i=0;i limit) {
clearInterval(timerId);
}else{
i=i+0.04;
}
elem.style.opacity=i;
elem.style.filter="alpha(opacity="+i*100+")";
},30);
}
//debug
Object.prototype.print_r=function(){
var debug="";
for(var item in this){
debug+=item+"=>"+this[item]+"
"; } document.write(debug); } window.onload=function(){ if (!document.getElementById("mineSweeperStart")) { var game = new MineSweeper(); }else{ document.getElementById("mineSweeperStart").onclick=function(){ return function(){ var game = new MineSweeper(); } }(); } } })();

ほんとはもっと鬱陶しい感じのマインスイーパにしたかったんですが、間に合いませんでした。。
後コードは最初きれいに書くこと意識してたのですが、後半から無茶苦茶になってしまいました。
あと3回くらいマインスイーパつくったらキレイになりそうなのですが、これは引き続き自習課題ということで。
あと、多分にバグが含まれているかもしれません。