忍者ブログ

スイーツ(笑)と呼ばないで!!

NEW ENTRY
04 2024/05 1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31 06

05/05/05:21  [PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

02/01/17:34  新しい技術に出会ったら・・

弊社では、サーバーサイドの技術としてLaravelを採用している。
Laravelは非常に優れたフレームワークで、熟練のLaravel使いになれば、今までの数倍のスピードでコーディングが可能になる。 

最近、フロントサイドの技術の中で、Vue.jsの導入を進めている。
実験的にすでに採用している社内案件もある。
私自身も時々、Vue.jsについて調べたりサンプルコードを書いてみたりしている。

ここまでいろいろと試してみて感じたことは、Vue.jsを導入する場合、どこまでをJavaScriptでやり、どこまでをPHPでやるかの判断がとても大事ということだ。

新しい技術の採用全般に言えることだと思うが、最初は、今までのコーディング作業がこれを導入することで楽になる、というレベルの話があり、このレベルについてはどんどん導入していってよいと思う。

ただ、そこを推し進めていくと、途中で、コーディングの量はむしろこれまでより増えるけどより魅力的なUIが提供できる、とかってレベルの話になってくる。そしたら要注意だ。

コーディングの量が減るにも関わらずより魅力的なUIが提供できる、なら問題はあまりないが、コーディングの量が増えるのなら、それは本末転倒になりかねないこともある。

話をするときに、当たり前品質のレベルの話か、魅力的品質のレベルの話かは区別する必要があるだろう。

で、Vue.jsの場合は、どうかというと・・・・・今検証中だ。

ただ、所感として、vue-routerを使って、全アプリのルーティングやビューの切り替えをやるとかまで行くと”やり過ぎ”な気がする。componetの仕組みを使ってvuiefyでモジュール化していくのも、程よいところで止めておかないと、オブジェクト同士のメッセージ通信が煩雑になり過ぎて非効率になってしまうと思う、これも”やり過ぎ”注意だ。

基本的に、LaravelでもVue.jsでも、一応それぞれの世界だけで完結できるようにフレームワークは提供されている。そのような場合だと”原理主義”同士の戦いになることもある。Vue.js的にはこうあるべきだ、というのと、Laravel的にはこうあるべきだ、というのがぶつかったりする。実際には、それぞれ、部分的な導入もOK、と柔軟な姿勢を示しているにも関わらず、使う側が原理主義に陥るのだ。

あまり料理が得意ではない私が言うのもなんだが、プログラムは料理みたいなものだと思う。Vue.jsもLaravelも素材だ。それぞれの素材の味を100%引き継いだら美味しい料理はきっとできない。それぞれの素材の良さを生かしつつ、ある意味良さを程よく殺しつつ、単体の素材では出せないより高みを目指すのが、きっと料理という芸術なのだと思う。

ということで、新しい技術の採用においては、”中途半端の美学”とでも言うべき感覚を大事にしたい。目的は、単体の技術を極めることではなく、それらを使ってより高次の目的を実現することにある。

で、Vue.jsの場合は、どうかというと・・・・・今検証中だ(笑)

結論出てなくてゴメンなさいm(_ _)m


拍手[0回]

PR

01/21/14:57  便利にするための仕組みで不便にならないように。


ふと、便利にするための仕組みを無理やり使って不便になることってあるよな、と思ったりすることがある。

例えば、LaravelのController。

Laravelの公式ドキュメントにも

Instead of defining all of your request handling logic in a single routes.php file, you may wish to organize this behavior using Controller classes. Controllers can group related HTTP request handling logic into a class. Controllers are stored in the app/Http/Controllers directory.

と書いてあるように、別にLaravelはControllerの使用は強制してなくて、スタンスとしては、関連するリクエストハンドリングロジックをまとめることができるよ、という感じ。

で、例えば、概念的には3つだけど、システム全体で受け取るリクエストの種類が例えば1つのリソースコントローラーにデフォルトで定義されるactionの数(7つくらいだったけ?)より小さいレベルとかその程度なら、むしろコントローラー分けず、Laravelのbasicなroutingを利用するのは十分ありな選択肢だと思う。

もちろん、サーバーサイドのリクエスト処理が複雑なアプリになってくると別だけどね。

でも、最近はVue.jsとかフロントでいろいろやるアプリとかも多いと思うけど、そうするとサーバーに対するリクエストのパターンなんてアプリの見かけ上の動きよりかなり少ないこともあると思う。

例えば、基本的にAPIでサーバーサイドと連携するアプリなんか、下手すると、リクエスト受付のURLのルールは1つで、単に呼び先のクラスに渡すだけとかあるかもしれない。もちろん呼び先のクラスとかはコマンドパターンとかいろいろ適用して適切に設計したら良い。

ORM周りもそうだし、バリデーション周りのそうだし、Larvalは本当に便利な選択肢がたくさん用意されている、ただ、それらの利用は強制されているわけではなく、必要に応じて利用していくべきものだと思う。と言っても、かなり痒いところに手が届いているので、使って行った方が良いケースがほとんどだけど。

逆に、MVCでMがEloquentとかって決めつけも良くない。それに、なぜか、Controllerで書くかEloquent継承したModel(テーブルと1対1)の2階層しか考えない人もいるけど、普通はそんな単純な構造はなくて、ServiceとかRepositoryとかそういう概念を入れてコーディングをすべきだと思う。その辺も原理主義に陥ってはいけないね。

というわけで、今日は、便利な道具をたくさん集めて逆に不便な状況に陥らないように、たまにセルフチェックしましょう、というお話でしたー

読み返してみると、偉そうだな(笑)

拍手[0回]

12/22/11:50  macとpython

macとpython

macとpython(マックトパイソン)・・うん、マイケルジャクソン的な響きだ。

誰にも初めての瞬間がある。

昔はいろんな書籍とか参考サイトとか見ると、Javaでサンプルが書いてあることが多かった。

でも、最近、割とこみいったことをやろうとしてサイトを見ると、Pythonで説明されているのに遭遇することが多い。

もちろん、一般的な話ではなくて、どういった分野に興味を持って情報を探しているかによるだろう。

そこで、昨日の深夜1時ごろにふと思い立って、Pythonの基礎的なところを試してみようと思い立った。

で、環境は・・というと、我らがMacはやはりこの点もイケていて標準でPythonは使えるようになっていた。

vi tesy.py

としてエディタを開き

#coding: utf8

print ‘Hello World’

として保存し、

python test.py

とすれば、もうHello Worldはクリア。

で、まぁ、if文だfor文だというのは、他の言語と方言といえるほどの違いもないので簡単にマスターできる。

きっと、次にはまるのはDBとの接続だ。

やっぱり本格的にアプリを作りたいとなるとDB接続は外せない。

で、いろいろ情報探すと、pipとかってのを使っていれるとか書いてある。

brewでいれると、どうやらpipもついてくるようだけど、
いまのところmacに最初から入っているPython使っているので、
ここで

brew install python

とかやると、mac上にpythonの環境が二つできてしまう。

そこで、とりあえず、コネクタだけ落としてくることにした。

あ、macにmysqlをインストールしているのは大前提。

brew instal mysql

とすればとりあえずMySQLの5.7がはいる。

そしたら最新のmysqlとpythonのコネクタを落としてくる。

wget http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python-2.1.3.zip

解凍とインストール

unzip mysql-connector-python-2.1.3.zip
cd mysql-connector-python-2.1.3
sudo python setup.py install

これで無事インストール完了。

早速テストコードを書いてみる。

(mysqlにテスト用のテーブル作成するところとかは本筋とずれるので割愛)

まず、接続用のconfigを作る

vi config.py

として

#coding: utf-8
user = ’tsetmysqluser'
host = 'localhost'
passwd = ’testpassword1234'
db = ’testdatabase'

とか書いておく。

で、

vi testtest.py

とでもして

#coding: utf8

import mysql.connector
import config

dbconnection = mysql.connector.connect(
 database=config.db,
 user=config.user,
 password=config.passwd,
 host=config.host
)

dbcursor = dbconnection.cursor()

dbcursor.execute('''SELECT * FROM test1234''')

for row in dbcursor.fetchall():
 print row

こんなコードを書く。

python testtest.py

と実行すると、ターミナルには無事テーブルの中身が表示される。

いや、python的にいけてるかとか全く知らない。

だって、今日初めてpython触ったんだもん。。

ただ、どんな言語でも、制御文(ifとかforとか)と、出力命令(printとか)と、DBの接続ができれば、とりあえずサンプルアプリをどんどん書けるようになる。そしたら、自分が作りたい機能に応じて周辺知識を増やしていったら良いね。


ということで、皆、最初はHello Worldから始めるということで。

拍手[0回]

12/21/18:02  Macに声をかけてもらいたい時



SF映画を見たりすると、コンピュータが話をしているシーンに遭遇する。

昔はわざわざ録音した音声を流していたりしたけど、
今は、音声合成という技術が使える。

昔は専用のソフトとかインストールする必要があったけど、
今はOSとかに標準でついていたりする。

それも、英語だけだなく、最近では多言語対応が盛んだ。

我らがMac OS Xも日本語対応して数年になる。

とはいえ、なかなか日本語で音声合成することはあまりない。

英語のサイトみていて、英語で音声合成して読ませるとかはあるけど。

ただ、時々、最初に書いたようなSF映画なんかを見ると、
メールの着信だけでなく、メールの内容も読み上げてくれないかなー、なんて思う。

今日はそんな仕組みをMacで開発する時の話。

昨日ちょうどそんなSF映画を見ていろいろ試したのでそのメモをまとめてみる。

まず、結論からいうと、Macにはsayというコマンドがある。

say ‘Hello’

と書くと、HelloどMacが発音してくれる。

ここで大事なのは、音声合成にどのVoiceを選択しているかだ。

システム環境設定 > 音声入力と読み上げ

の「システムの声」で選択できる。

ここで「Kyoko」とか「Otoya」とか日本語音声を選択していると、
上記の「Hello」もきっちり日本人的な発音をしてくれる(笑)

ちなみに、私が好きな英語音声はAllison。

で、これだとインタラクティブな操作が必要なので、メモで書いて音声合成しているのと変わらない。

そこでいろいろとオプションを指定してみる。

まずボイスの選択は-vオプションだ。

say -v Kyoko ‘こんにちは’

とやればKyokoさんが読み上げてくれる。

次に、速聴・速読に慣れている人は一般的なスピードだと遅くてイライラすることでしょう。

そんな時は-rオプションが使える。

say -v Kyoko -r 200 ‘こんにちは’

1分間に200語を話すスピードということになる。

個人的には1分間に500語程度のスピードが好きだ。
ちなみに、MAXの設定は720語みたい。

1分間に720語は、一度聞いた文章ならストレスないけど、
初めて聞く文章だと聞き流しだと何個か聞き損じがあるかもしれない。

ちなみに、ざっくり調べた感じだと、ギネス認定の最速ラッパーは15秒で97単語、つまり、1分間で400語程度とか。

で、最後に、システム開発で利用する場合には、文章を動的に変更する必要がある。
リアルタイムに流そうとすると1音声しか準備できないので、
きっと先読みで音声ファィルに変換したいよね。

そんな時は、-fでまずファイルから読むべき内容を受け取るように指定する。

say -v Kyoko -r 500 -f email.txt

こんな感じにするとemail.txtの中身を読み上げてくれる。

最後に、音声ファイルで出力するオプションは-oだ。

say -v Kyoko -r 500 -f email.txt -o email.aiff

とか書けばよいね。

さあ、これで、準備はできた。

あとは表側のシステムを組めばよいね。

バッチ処理とかでメールボックスをチエックする。
メールがあったらその内容をテキストファィルに出力し、
それをsayコマンドを使って音声ファィルに出力する。

その上で

「メールを3件受信しました。読み上げますか?」

みたいに音声で呼びかけ、指令が出たら、順に音声ファイルを読み上げる。

どう? 映画であったワンシーンそのままでしょ。

プログラムだから、いろんな条件でフィルタしたりいろいろ好きにできるね。

プログラミングしながら、バックグラウンドでメールを読み上げなんてこともできる。
目を使う作業は一つしかできないけど、目と耳は別のことができるからね ^ ^

時間は24時間しかないからねー

効率的に生きていきましょ。





拍手[0回]

08/11/15:13  リファクタリングは因数分解


世の中では学校の勉強なんて社会人になってなんの役にも立たない、
とおっしゃる方も多いです。

確かに、学校の勉強”だけ"では何の役にも立たないことも多いかもしれませんが、
それはイコール”学校の勉強が役に立たない"わけではありません。

学校の勉強を暗記だと思っている人もいるかもしれませんが、
学校の勉強は「考え方」を学びそれを応用するトレーニングをする場所です。

中学校に入ると、数学の授業で因数分解というのを習いますね。

初歩的なものでいうと、

ax+ay=a(x+y)

みたいなものも因数分解といえます。

シンプル過ぎますね。

プログラムで言えば、

if($face===’good'){
 $user=$this->getUser();
 $user->hello();
}else{
 $user=$this->getUser();
 $user->good_bye();
}

とあれば、

$user=$this->getUser();

if($face===’good'){
 $user->hello();
}else{
 $user->good_bye();
}

こうやって、共通する部分は外に出してあげましょう、ということになります。

(まぁ、実際には、こんなイケてないコードはありませんが、あくまでサンプルです)

で、これは単純なif文の話なわけですが、この思考方法は、関数化やクラス化でも同じですね。

21と56という数字は一見なんの関係もなさそうですが、
7*3と7*8であり、共通の因数である7を持ちます。

同様に、一見、全体的なまとまりとしては全く別物のコードも、よく見ると共通の考え方があったりします。

ここでポイントは「共通の処理」ではなく「共通の考え方」に着目することですね。

で、それらを一瞬で見抜くスキルは、きっと、
中学校の時の因数分解のトレーニングで身につくんじゃないか、と思うわけです。

コーディングだけでなく、DB設計の正規化なんかも同じような話ですね。


ということで、もし「勉強なんて、社会に出たら役に立たない」と言ってる学生に出会ったら、

「そんなことないよ。そこで学んだ考え方はいろんなところで役に立つ、一生の財産になるよ」

と言ってあげましょう!!

とか思う今日この頃です。

拍手[0回]