喫茶 キエチーフ

......徒然ツンデレまったり雑記(更新不足とも言う)


   ここはしがない音楽屋T28が管理するブログスペースです。
     右側のメニューからどうぞ~ゆっくりしてってね!


   
  (⁰︻⁰) ☝お気軽にポチっ☆それだけで、幸せ

スポンサーサイト :: --/--/--(--)


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. スポンサー広告

12/30 ファイルの読み込みReader?InputStream? :: 2014/12/30(Tue)


【テキストとバイナリで読み込むクラスがそれぞれある】
ファイルの読み込み・・・・ってことで「FileReader」とか「FileInputStream」とかいろいろ目にしては来たけど、実際どれを使うべきなのよ!ってことで調べてみた。

ファイルの入出力系等として、
・InputStream
・Reader
の2つのクラスが用意されているみたい。

それぞれバイナリファイル、テキストファイルを扱うためのもの・・・・らしい。2つの違いがわからん。
とりあえずそれぞれの使い方をこの記事ではまとめておこ

FileInputStream fis = new FileInputStream("file.txt");

FileReader fr = new FileReader("file.txt");

FileReaderの場合は、文字コードを一緒に指定するInputStreamReaderというのもあるぞ。

使い分けしっかりしないとダメだな
普通にテキストファイルのつもりでFileInputStreamを使ってたし!
  1. SW強いられまとめ
  2. | コメント:0
スポンサーサイト

12/19 Java Facadeパターン :: 2014/12/19(Fri)


 【mainクラスにごちゃごちゃ書くのはやめましょ!】


ほぼこれで今日書くことは終わってしまった。
あとはFacadeの読み方。
ふぁさ(↑)ーどパターンね。ふーん


本日の社内勉強会での僕が担当したこのパターン。
mainクラスにごちゃごちゃ書くのはやめましょ!ってこと(2回目)

今まで抽象クラスに抽象メソッドを書き込んで小クラスに具体的に実装を行うってことはやってきました。
でもそこで作ったメソッドを使う、全体の処理の流れはMainにごちゃーっと書く状態。

そこで今回のパターンでは〇〇を行うという全体の処理を開始させるメソッドのみをMainに書いてあとはパッケージにお任せ!というもの。

先輩に言わせれば当たりまえ。
そーいっちゃおしまいだ!

この記事もおしまいだ!
  1. SW強いられまとめ
  2. | コメント:0

12/17 FileWriterクラス :: 2014/12/17(Wed)


【Writeで文字を入力していく】

ファイルを作成して、そこに文字列を記入するときはFileWriterクラスを使う。
newしてwriteしてcloseする。

対になるのはFileReaderクラス。
こっちはテキストファイルを開いて文字を読み込む。

実際使ってみるとこんな感じ。
ファイルの書き込みを行っているからIOEXceptionをおいてるよ。

import java.io.FileWriter;
import java.io.IOException;

public class HtmlWriter{
 private FileWriter writer = new FileWriter(ちゅん.txt)

 public HtmlWriter(){
 }

 public void title(String title) throws IOException{
  writer.write("");
  writer.close();
 }
}

new FileWriterでファイルを作成して、ファイル名も決めている。
あとはそのオブジェクトに対してwrite()メソッドで文字列を追加。
最後にclose()メソッドで閉じる。

write()では文字列のセットが行われていて、closeで実際にファイルに出力されているみたい。

・・・・そういえば出力されるtxtの改行の仕方がまだ分からないや。

疲れたからおしまい。

テーマ:プログラミング - ジャンル:コンピュータ

  1. SW強いられまとめ
  2. | コメント:0

12/16 Java propertiesファイル :: 2014/12/16(Tue)


【properiesで設定項目をまとめちゃうよ】

社内の勉強会のテキストで突然現れたやつ、propertiesファイル。
テキストではメールアドレスを管理するデータベースなんていい方をしてたけど、それならSQLiteでも使えばいいんじゃ・・・・。でもまぁ簡単に使えるからいいのかな。

propertiesファイルは拡張子「properties」のテキストファイルで、「key=value」の形で設定情報等を記入していくもの。.txtだっていいんだけどね。

#アドレス管理

MinamiKotori=chunchun@mail.com
KousakaHonoka=panGaUmai@mail.co.jp
SonodaUmi=loveAro@mail.ne.jp

こんな感じにどんどん書き込んでいく。空白は無視、#でコメントアウト。


●読み込むとき
プロパティオブジェクトを作ってから、loadをする。

Properties prop = new Properties();
prop.load(new FileInputStream("mail.properties"));


●値を取る
オブジェクトからget

System.out.println("ことりちゃんのアドレスは" + prop.getProperty("MinamiKotori"));


●新しい情報を保存する
key、valueをセットして、保存!

prop.setProperty("SonodaUmi","loveAro@mail.ne.jp");
prop.store(new FileOutputStream("newMail.properties"), null);

  1. SW強いられまとめ
  2. | コメント:0

12/16 列挙 Enumeration :: 2014/12/16(Tue)


【IteratorとかEnumerationとか】

ファイルの全件検索、表示を「列挙」っていう見たい。
んで、その方法は色々あるみたい何だけど
どうやら「Enumeration」はディスられ傾向にあって、「Iterator」がいい感じらしい。
ただ列挙したくなったのは別記事でまとめていたpropertiesファイルのデータ。

色々調べた結果、どーーーしてもpropertiesをIteratorで列挙できない。
というわけで、素直にクラスドキュメントに書いてある「Enumeration」を使用します。


 Properties prop = new Properties();
 prop.load(new FileInputStream(filename))

 Enumeration mpEnum = prop.propertyNames();

 while(mpEnum.hasMoreElements()){
  String mailaddr = (String)mpEnum.nextElement();
  String username = prop.getProperty(mailaddr);
  System.out.println(mailaddr + "は" + username + "さんのアドレスです。");
 }
 writer.close();

propertiesファイルはusername(key)とmailaddr(value)のアドレス帳データを想定

propertiesクラスをインスタンス化、loadで読み込みます。
そしてEnumerationで列挙。whileで回してprintlnで表示させます。
nextElement()で次のpropertyを検索、なければwhileから出るロジックです。

(String)mpEnum.nextElement();の(String)のルールがいまいちわからん。なんで書くんだろう。
  1. SW強いられまとめ
  2. | コメント:0

12/9 暗黙的なtoString :: 2014/12/10(Wed)


 
【オブジェクトの情報を文字列で表す暗黙的なメソッド、toString】

社内で行われている勉強会の参考書にて、
system.out.println(player.toString() + "ほにゃらら");
というものがありました。

playerとは、ゲームを行う人のクラスをインスタンス化した時の変数名。
このインスタンスには人の名前等を引数にしてインスタンス化している。




が、別の行にはふつーーーーに。
System.out.println(player + "ほにゃららら");
なんて記述が・・・。同じ出力というオチ。

playerクラスを見るとtoString()というメソッドの実装があり、そこで実装した文字列の内容が上記の標準出力の内容担っていました。
が、player.toStringと書いていない出力もtoString()メソッドの実装内容と同じものになっている・・・・。


ってことで調べてみると、どうやらオブジェクトにはtoStringというメソッドが暗黙的に存在しているらしい。
個別でメソッドを記載しなくても、オブジェクトの変数を書くだけで呼び出されるようだ。

しかし、それだけだととても人が読めるような出力にはならない。(例、省略)
そこで、各クラスでtoStringのオーバーライドを推奨しているようだ。

これで、オブジェクトの詳細を簡単に文字列で表すことが出来る。


ふーーーん。

ところで、オーバーライドとかインターフェイスとか、まだよくわかっていない。
  1. SW強いられまとめ
  2. | コメント:0

12/1 いまどきのデザインセンス :: 2014/12/03(Wed)


【デザインのセンス・・・というかトレンドのアンテナをMOTTO!MOTTO!】

プログラミングはビューに関するものが全てじゃないけれども、やっぱり見た目は大事。
かっこよさはそのまま使用感にも出てくるしね。

で、今日はちょっとだけショックが。


あるデータのリスト表示で、「有効期限切れ」を表現する場合。
残り時間から有効、無効を判断させるわけだけれど、無効の時は残り時間表示ではなく

有効期限切れ

・・・と。


ださくね?とな。たしかにそうだ。
今出来は半透明で無効を表現する。・・・たしかに。

もっといろんなアプリの見た目にも関心を寄せなければ・・・。はぁ




  1. SW強いられまとめ
  2. | コメント:0

??/?? JSON形式 :: 2014/11/30(Sun)


 「この文章はJSON形式でよろしく!」

そんなもの聞いたこともないわ!!単語も知らんのをそろそろ察してほしいもんですよ・・・。
さぁ調べよう。



JSONとは”javascrip object nation”の略らしく、記述形式?の1つらしい。
数字とか文字列とか、(連想)配列まで、全てを文字列で記述する、
最近流行りのデータ保存形式らしいです。

JSON.parse()でパース(解析)することで、文字列のjsonをオブジェクトに変換することで、
文字列で保存、オブジェクトにして使う、文字列で保存。ということが出来る。

[
{title : "ちゅんちゅんことりちゅん", auther : "T28"},
{chapter : "第1章", body : [
{part : "1", sBody : "吾輩はことりである。"},
{part : "2", sBosy : "名は南。"}
]
},
{chapter : "第2章", body : "おなかがすいたのでこれでおわり"},
{key : "あとがき", value : "ちゅーん(・8・)"}
]



上の例は少しどうかと思うけれど、配列とオブジェクトを組み合わせて構造的に文章、データを管理することが出来る。
本であれば、章、節、表紙やあとがきで分けられるね。

htmlに直接書くんじゃなくて、JSONファイルとして外部に書き出せば編集も楽だ。


ちょっと俺にはとっつきにくかったけれど、慣れると管理はし易いかな。



テーマ:プログラミング - ジャンル:コンピュータ

  1. SW強いられまとめ
  2. | コメント:0

11/27 オブジェクト(javascriptの) :: 2014/11/28(Fri)


 【オブジェクトはプロパティとメソッドで】

そもそもオブジェクトってなんなんやねん。という段階です。
耳にタコが出来るほどオブジェクトなんて聞こえてくるけれど、抽象的な概念的な話をされても・・・・はぁ。

とりあえず頭のなかに入れたのは、


オブジェクトは名前(key)のついた変数、関数をもつ(プロパティ)
メソッドは関数を持ったプロパティのこと。

var tori = {
name : ["kotori", "kotorichun", "kotorichan!"],
family : "minami",
naku : funtion(){alert("chun")}
}





配列とか関数とかオブジェクトとか・・・・。とりあえずまとめて書いてみると分かりやすくなってきたかも。






今日仕事先で作成したモジュールの形にはっとしたので、メモ

myApp.factory("nantokaFactory",function(){

var number 

return{


getNumber : getNumber,
hasNumber : hasNumber,
recordNumber


}

getNumber : function(){};

hasNumber : function(){};

recordNumber : function(){};





});






コロンでkeyと関数を挟んでる!ほうほう・・・これもオブジェクト指向のそれなのか?
うん、多分まだよくわかっていないのだろう。

こんがらがってきたので、そろそろ寝ましょう。
9月からお世話になっている職場の歓迎会が今日行われました。来週は忘年会だ(遅いアンド早い)
  1. SW強いられまとめ
  2. | コメント:0

11/26 オブジェクト指向?役割、責任の分担 :: 2014/11/27(Thu)


【jsファイルへのjavascriptコードの書き出しは、役割責任を考慮して行うこと】
【関数に暗黙的な条件を適用しない】
【関数はある機能専用という書き方をしない】

んなこと言われたって「は?」ですわ。
今日やっとこ役割(これがオブジェクト指向?)について理解が少し進んだ気がする。





【jsファイルへのjavascriptコードの書き出しは、役割責任を考慮して行うこと】

今実装している機能は
予約完了画面(スクリーン1)にて
・サーバからの予約情報(予約番号、予約時間、有効期限)をスクリーン1に表示
・予約情報をローカルに保存

予約情報閲覧画面(スクリーン2)にて
・ローカルに保存した予約情報、残り時間ををリスト表示する
・現在時刻と有効期限から残り時間を計算


上の機能を実現するために、

スクリーン1.html と 1.js
スクリーン2.html と 2.js

というように画面ごとにjavascriptファイルを書き出して実装していました。
・htmlファイルにjavascriptがやること(機能使用の指示?)を実装
・jsファイルに機能の具体的な処理を実装
という感じです。

んだが
画面ごとにjsファイルを分けてた意味とは・・・・・?
なし。モジュールの構築としては意味をなしていません。

スクリーン1、スクリーン2で使用している機能は共に「予約情報の管理」
ならば、「予約情報の管理.jsに予約情報管理の役割を任せる」べき。

そこで実装する機能を改めてまとめると

スクリーン1.htmlとスクリーン2.htmlにて
予約情報管理.js
・サーバからの予約情報を表示する
・予約情報をローカルに保存する
・ローカルの予約情報を読み込む
の各機能を読み込む・・・という構造で再実装しました。

機能的には何も変わっていないわけですが、管理はしやすく、読みやすくなりました。





【関数に暗黙的な条件を適用しない】

また最初の段階では、例えば予約情報を読み込むとき、「予約情報がローカルに保存してある」という条件を元に機能を使用して(関数を呼び出して)います。

これはこの機能は前提条件をクリアしていないと使用することはない仕様になっているからです。

しかし自分以外のエンジニアが、今回実装したモジュールを使用する場合、こんな暗黙的な前提条件は知ったこっちゃありません。また、仕様が変更され前提条件外での使用が行われた場合、バグの原因になってしまいます。

勝手に条件づけて関数を実装してはダメってことですね。





【関数はある機能専用という書き方をしない】

現在作っているアプリの規模が小さいからか、関数の記述がある機能専用の(他では使えない)ものになっていました。
しかし、「〇〇を行う」「☓☓を取ってくる」等の関数は役割の1つとして、あらゆる機能を実現するためにいつでも使えるようにするべき・・・とのことです。

これは言葉で書くのが難しい!・・・よく分かってないってことなんじゃないかな・・・。




テーマ:プログラミング - ジャンル:コンピュータ

  1. SW強いられまとめ
  2. | コメント:0

11/25 bower(.json)について :: 2014/11/26(Wed)


【bower.jsonを使ってライブラリを管理する】

bowerとは・・・
パッケージマネージャの1つ。これでonsenUIのパッケージを管理することができるぞ!やったー!
Javaでいうmaven。(それ以外の例を知らない)
仕事先の開発中ウェブアプリにて、onsenUIをbowerで管理しています。
javascriptをチクチクいじっている分には特に意識する必要はないのですが、bower.jsonという存在で小一時間を浪費。

やはり勉強を強いられるようだ。

以下強いられメモ

1.bowerを使えるようにする

homebrewからまずはNode.jsを入れる。
$ brew install node.js

Node.jsからbowerをインストール!
$ npm install -g bower


これでコマンド"bower"が使えるようになります。
onsenUIもこれで入れちゃうぜ!



2.プロジェクトにパッケージをインストールする
onsenUIを入れます。
webappディレクトリに移動して、
$ bower install onsenUI --save

これでwebappディレクトリ配下にbower_componentsディレクトリが作られ、
中にはangularjs、onsenuiディレクトリが入ります。
--saveでbower.jsonに依存関係が記述されます。


これをhtmlファイルから参照させよう!

3.bowerを初期化する
webappディレクトリ内にbower.jsonを作ります。
$ bower init

これはライブラリの情報等を記録させておくものです。
ライブラリの名前やバージョン番号、などなど

コマンドを打つと幾つか質問がされ、それに答えて作成していくスタイル。
ひたすらエンターを打ち続けて作ったファイルがこちら。

{
name: 'chunchun',
version: '0.0.0',
license: 'MIT',
ignore: [ '**/.*', 'node_modules', 'bower_components', 'test', 'tests' ],
dependencies: { onsenui: '~1.2.0' }
}

それぞれ
name・・・ライブラリの名前(作ってるアプリの名前ってことか?)
version・・・ライブラリのバージョン番号(更新したらここもいじるのかしら?)
license・・・ライセンス。
ignore・・・(おそらく)バージョン管理の時にアップロートど省略する指定?
dependencies・・・ライブラリの依存関係。--saveのお陰

このbower.jsonが大事だ。(知らなくて大変だった)
このファイルが有れば、その記述がある依存を含めた全パッケージをインストール、復元ができる。
別の人が開発を進める、手伝うときに便利ね

今回のケースでは、このファイルを元にonsenUIをインストールすればよかった訳だ。
先輩!教えといてよ!!

とりあえずonsenUIを使えるようになれればとりあえずいいかな。
そもそもパッケージ管理の恩恵をまだ、よ く わ か っ て い な い 。

テーマ:プログラミング - ジャンル:コンピュータ

  1. SW強いられまとめ
  2. | コメント:0

SW開発を強いられている社会人の戯言 :: 2014/11/14(Fri)


今年新社会人の私、T28。

10月に本配属となり、下半期から企業の人間として業務の内容に関してコミットを行いました。

やることは・・・勉強。

実際には開発やら色々な業務が出てきますが、要約すると、勉強。
SWエンジニアとして開発のいろはを怒涛の勢いで学んでいくことを強いられる環境にいます。


というわけで、これから学んで行くことをこのブログのスペースを使ってメモっていこうともいます。

他の方(主に初学者)に向けた内容に整理する余裕があればいいのだけれど・・・。

グリグリ書いてエントリとして面白くなったら検討してみましょうか。



さぁ勉強に強いられるぞ!
  1. SW強いられまとめ
  2. | コメント:0

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。