Windows64bitに移行したので、
Filemaker(Adv.11)からMySQLへESS接続しようとした。
いつものようにMySQL公式からODBCをDL。
今回は64bitOSなので、64bit版のODBCをDLして、インストール。
コンパネから接続設定して、
さぁ、FMから接続だ!と思って外部ソースを見てもDSNに設定した内容がない。( ̄△ ̄;)エッ・・・。
きっと64bit版のODBCがだめなんだ!と思って32bit版にすると
コンパネのデータソース管理にMySQLODBCがない…。
むぅ・・・。どういうことだ???
と思っていたら、64bitのデータソース設定と、32bitのデータソース設定は別に存在することが判明。
コンパネからは64bitへしか進むことができあに。うはぁ・・・。
32bit用設定はWin7(64bit)の場合、
C:\Windows\SysWOW64\odbcad32.exe
↑これ。多分Vista(64bit)も同じ。XP(64bit)はどうかな・・・。
こちらの設定パネルでDSN設定したら無事Filemaker11でも見ることができましたー。
未分類 のブログ記事
Filemaker社が主催する「Filemaker Roadshow2010」へいってきました。
FM社の営業の方がFMの概要を説明。
正直FMってマイナーなDBだと思ってたんですが、
導入事例がたくさんあってびっくりでした。
次に株式会社スプラッシュの方による、
実際の導入事例の説明が行われました。
これが予想のはるか上をいくソリューションでして、かなりびっくり。
FMの奥深さを改めて知った感じです。
普段FMをDISりながら、あんまり普通では行われない使い方をして、
ひんしゅくを買ったりしてますが、、、、
なんというか、、、
すみません、、、
出なおします、、、
という感じでした。
FMは、ノンプログラマーでも扱えるDBなので、
草の根的な開発者が非常に多く、
コミュニティーも非常に小さなものから大きなものまであったりするのが特徴だと思うんです。
そして、必ずしも万全であるDBシステムではないのですが、
その代わりに開発に正解がないDBだと思うのです。
なので、個人的には来年以降またRoadshowがあるようなら、
5分くらいの短い発表の時間があるといいなぁとおもうのですよ。。。
どうでしょうFM社の方!
(そうすれば、私も話せるかも。うしししし。という魂胆ですが)
とりあえず、Filemaer TechNetには参加しました。
初めてFMServer使います。楽しいことあるかな。
そういえば、最近なでしこのおかしな使い方が広がってません。
忙しいのもあるんですが。
夏以降、問題解決しないメールライブラリとかちゃんとやります!
a-blog cmsをためした。
ここで試した。
以下おんなじ記事が、試したサイト内でも書かれてる。
ちなみにこの記事は「a-blog cmsを試してiPadをもらおうキャンペーン」にエントリーするための下心見え見えの記事であることを先に断っておく。
インストール:
超簡単。
PHPの製品は、インストーラーが整備されていても、
たとえば、PEAR_DBやPEAR_MDB2を使っていて、
接続メソッドへ渡すdsnに不備があったりして、
PHPを直でいじらなければならないことがあったりするけど、
a-blog cmsに関してはそういったことはない。
(もしかするとクララオンラインを使ってるから??)
私がよくつかうWPなんかも整備されているものの、
最初のDB接続の設定はPHPの設定ファイルを書き直してから
インストーラーを走らせる必要がある。
つまりWPより簡単!
管理画面
やはり独自の言い回しやページ遷移に戸惑いがあるのは否めないけど、
それを言い出したら全てのソフトウェアに当てはまるので、
気にならない。
(気になるならどっかのASP使ってろ!←個人的意見)
直感的というところでいえば、
concreat5にゆずるところがあるが、
concrea5はテンプレート編集が難解。
a-blog cmsはちょうどいいランディングポイントに落ち着いていると言えるかも。
特に、HTMLテンプレート編集で、管理画面も作り替えられるというのは素晴らしいし、もしかすると、新しいんじゃ?
エントリー
クロスカテゴリーができないのが、ほかのシステムから(っていうかWPから)移ってきた者としては、少し戸惑いを覚える。
ほかのCMSやブログよりタグに重点を置いてコンテンツ作りが必要そう。(既存サイトの移行においては、ツール移行というより、リニューアルするという心構えが必要?)
標準でエントリー入力にWYSIWYGがないのが????と思ったけど、使ってみたら、基本的にブロックを積み上げていくような作りになっているので、実際はないほうが、崩れとか心配しないでいいので、デザイナー的に「まる!」ってことなんでしょうね。
(必要なら追加はできるんですよね?たしか)
WPと違って投稿とページの分類がないので、頭の切り替えがいる。
使いどころ
納入先がエントリー管理などを行う場合においては、
a-blog cms以外に選択肢がないといっていいかも。
個人的にそういう場面においては、concrete5が最強と思ってたんだけど、覆された。
私が働く会社においては、
無茶な拡張をすることが多いので、
(それに対応するため自作のCMSを持っているくらいです)
使う機会はかなり限定的かもしれない。
カスタマイズプラグイン用のAPIなどがあれば、
一気に使う可能性がひろがるかもしれない。
↑めっちゃプログラマ目線ですみません。
でも、実は一番そうなってほしいところです。
SOY CMSのSOY APPみたいなやつ。
テンプレート編集
テンプレート編集は本当に驚いた。
私がよく使うCMSは自作のを除けばWPと(畑が違うCMSですが)EC-CUBEなんですが、WPはテンプレートに生PHPが入るので、非常にプログラム然とした作法が求められる。
EC-CUBEはテンプレートエンジンにSmartyを採用している。Smartyは非常に強力なテンプレートエンジンだが、かなり独特の作法があって悩まされるところもある上に、EC-CUBEの場合は独自作法も追加されているので、やはりこちらもプログラム脳ができていない人には使いづらい。
たぶん、MTなんかもそうだと思う。(MTは独自タグが多すぎて、涙目な人もおおいと思う)
a-blog cmsのテンプレートエンジンはどうかというと、やはり独特の作法が求められ、100%プログラム脳ができてませんというひとには苦しいかなとは思うけど、感覚的にはHTMLの仕様を拡張したという感じを受けるので、ほかのCMSに比べるとかなり敷居は低いのかなと思った。
DWのスニペットがおまけでついてるけど、これはかなりいいアイデア!
その他
たしか公開が昨年の夏でしたっけ?
現在Ver1.3なので、一年弱で3回のちょっと大きめのバージョンアップがあったということでいいのかな?結構な頻度ですね。こういうとき気になるのが、バージョンアップの大変さ。自動アップデートはないんでしょうか?ユーザーが増えていって、様々な要望を取り入れていくと、結構重要なポイントになると思うのですが。
表の部分とは関係ないですけど、DBの構造を勝手に覗きました。CMSの出来とは裏腹に、すごくシンプルなテーブル構造で、しかもインデックスも綺麗にまとめられていて、ぶっちゃけ、ここが一番すばらしいと思っちゃいました。同じ開発者として若干嫉妬。
二日ほどつかった感じではこんなところです。
PerlでCSVを読み込むメモ。
これまで私は、
こちらのサイトを参考に正規表現だけで処理していました。
速度が云々あるでしょうけれど、そもそもそんなに速度が気になるのならCSVじゃないデータを使うべきでしょう。ということで、これだけで十分です。
※なお、CSVデータは完全にアプリケーション依存のデータフォーマットで入出力するアプリケーションによって形式が異なります。この記事ではMS-AccessのCSVを前提に書きます。エクセルも問題ないと思います。それ以外のアプリケーションでの動作は考慮していませんので、必要に応じて書き換えて使ってください。
ですが、CPANのモジュールも活かさないとそれはそれでもったいないので、今回はそちらを使ったときのメモ。
いくつかのモジュールがあり、中には数々の文字コードのCSVの処理を考慮したものもありますが、エクセルでの出力で最も多いであろうShift-JISのデータを扱うには、Text::CSVをバイナリモードで使うのが一番トラブルが少ないようです。
じゃぁやってみよう!
use strict;
use Text::CSV;
use IO::File;
#CSVファイルを開きます。
my $file = "CSVのパス";
my $io = IO::File->new( $file, 'r' );
#解析をはじめましょう。
my $csv = Text::CSV->new({binary => 1});
while (not $io->eof and my $columns = $csv->getline($io)) {
#ここでデータを処理する。
#$columnsへ1レコード分のデータが配列への参照として渡されます。
#例:$columns->[0](1列目)
}
exit();
こんな感じ。意外にベタベタと書かないといけない。
Text::CSVは標準モジュールではないので、インストールが必要なことを忘れずに。
ちなみに、Text::CSV::Simpleというモジュールもありまして、こちらを使うと、全CSVのデータを一気に二次元配列として処理してくれます。さすがにこれはデータ量を考えないとアレですが、便利は便利です。合わせて覚えておきたいです。
SQLiteで文字列結合ってどうやるんだー!!!???
ってだいぶ悩んでやっと分かった!!!
「||」でつなげるらしい。。。
んなあほなっ!!!!!
「||」ってどうしても「または」を思い出すんですけど・・・。なんで「||」にしたんだろうか・・・。
今日は前回に引き続きお友達のWEBデザイナーさんからの依頼で、プログラミングにおける「関数」とは何ぞやという話をしてくれということで書いてみます。
高卒以上のレベルの人でプログラム言語に慣れ親しんでない人が「関数」と聞くと、数学で習った「二次関数」とかの「関数」を思い出すと思います。
※「高卒レベルの人」でと誤解される書き方をしていました。申し訳ありません。正しくは上記の通り「高卒以上のレベルの人」です。
数学で習った「関数」は、ちょっと意味は似ているところがありますが、この際きれいさっぱり忘れたほうがいいです。ということで数学の関数は忘れて話をすすめます。
で、関数っていうのはプログラミング言語やプログラマーによって結構考え方や概念が異なりますので、BASIC(VBではない)やPerlで育ってきた僕の個人的な考えで書いていきます。
お友達デザイナーがActionScriptを勉強していて躓いたらしいですので、僕はASが書けないってことでJSで書いていきます。
まず、簡単なお話から。
Javascriptの入門向け命令辞典を読んでいて、たとえば、「特定の文字列をURLエンコードしたい」というときは以下のような命令を書けと書いてあることがあります。
var str = '文字列'; str = encodeURIComponent(str); document.write( str );
これを実行すると、「%E6%96%87%E5%AD%97%E5%88%97」と表示されると思います。
encodeURIComponent()という命令を使うことで、「文字列」という文字列を簡単にURLエンコードできます。
実はこの「encodeURIComponent()」が「関数」です。
関数とは、ざっくりと簡単に言えば、決まった手順を一まとめにしておいて、再利用できるようにしたものです。
Javascriptの入門書などで「関数」と言えば、上記のような説明をした上で、
function 関数名( 引数1, 引数2... ){
手順;
return 返り値;
}
と書け。みたいなことが書いてあります。
まったくもって、間違いじゃないんですけど、その前に、自分で作らなくても、
Javascriptには最初から前述「encodeURIComponent()」のような便利な関数はたくさん用意されているんです。
たとえば他に
document.write()
alert()
confirm()
window.close()
などなどあります。
こうやって書いてみると、どうでしょうか?プログラミングの初心者でも、これまで書いたプログラムのコードの何割かは関数を使っている部分で埋められているのではないでしょうか?関数は現在の発展したプログラミングにおいては、とても有用なもので、プログラミング言語によって最初からたくさんの関数が用意されています。
前述の「function」を使った「自分で作る関数」は、最初から用意されている関数のほかに、決まった命令をまとめておいたり、それを再利用したりしたい時に作る関数で、一般的に「ユーザー定義関数」などと呼ばれます。言語が最初から用意している関数に対して、自分で作る関数だから「ユーザー定義関数」。分かりやすいネーミングです。はい。
※完全な低級言語やC言語のような低級に近い言語は関数は少なくなるかも。
※window.close()などはオブジェクトのメソッドなので厳密には「最初から用意された関数」ではない。
↑ここの※部分はお友達デザイナは無視したほうがいいですwwww
まず、関数の使いどころです。ここからは入門書を片手に読んでください。
前述の通り、関数は決まった手順をまとめておくもの、そしてそれを再利用できるようにしたものです。
料理で言うと、ダシとかスープみたいなものかな。前もって「一番ダシ」とか用意しておくことがあると思います。関数は、それに近いかな。
「引数」は、そこに醤油や塩などの追加調味料や、メインとなる食材など、目的とする料理に合わせて何かを追加してひとつの料理として完成させたり、また違うひとつの材料にしていったりして行くわけですね。材料を入れたりして加工したものが「返り値」に近いですかね。
では実例。まず関数を使わない例です。
例1
var str_1 = 250; str_1 = Math.floor( str_1 * 1.05 ); alert( str_1 + '円です。' ); var str_2 = 500; str_2 = Math.floor( str_2 * 1.05 ); alert( str_2 + '円です。' );
端数切捨てで消費税額を計算して、その結果をalert()するという内容ですね。
上記例の場合、2つの額に対して消費税計算をしていて、同じような処理を繰り返しています。
この場合同じパターンが2つですから、まだマシですけど、3つ4つ・・・となっていくとなんだかなぁとなります。
こういった決まったパターンがあるときに使うのが関数というわけですね。
では、実際に関数を使って書き直してみましょう。
関数を使うといっても、プログラム全体の設計によっていくつかの関数の実装が考えられます。
例1においてもそうです。
関数実装例パターン1
例1のプログラムを見て重複している部分は、
・変数に1.05をかける。
・1.05をかけた変数を小数点以下切り捨てる。
・この変数のあとに「円です」をつけてalert
という流れです。
ここを関数にします。
例2
//↓ここで関数定義!
function taxAndAlert( str ){
str = Math.floor( str * 1.05 );
alert( str + '円です。' );
}
//↓ここから実行文
var str_1 = 250;
taxAndAlert( str_1 );
var str_2 = 500;
taxAndAlert( str_2 );
こんな感じです。 例1と比べるとMath.floorなどの何回もあった面倒な手続き一式がまとめられています。ここが関数。実行文のところでは作った関数「taxAndAlert」を実行しているだけで、Math.floorを何度も書いたりなど面倒が少しラクになります。
関数には、手続きをまとめてラクにするだけではなくて、後々修正がラクになるという効果もあります。例1・2では消費税計算をしているわけですが、2009年8月現在では、そう遠くない未来に消費税率アップがされることが目に見えています。仮に消費税率が8%になったとすると、例1では「1.05」を「1.08」へ書き換える箇所が複数ありますが、例2ではそれが関数の中1箇所だけで済みます。これは大きなプログラムにとってはメンテ性の向上につながります。
関数実装例パターン2
さて、話は少し戻り、関数の実装パターンはいくつか考えられるということを書きました。次のパターンを考えてみましょう。
例3
//↓ここで関数定義!
function taxAndReturn( str ){
str = Math.floor( str * 1.05 );
return str;
}
//↓ここから実行文
var str_1 = 250;
alert( taxAndReturn( str_1 ) );
var str_2 = 500;
alert( taxAndReturn( str_2 ) );
↑ 例2と比べてみると、関数の中でalertを実行していないことが分かります。
ぱっと見、「あれ?繰り返しやっていることをなぜ関数にしないのだ」と思うかもしれません。確かに例1を関数で書き換えるのであれば、例2が最もいい例なのかもしれません。しかし、消費税計算というのは非常によく使う計算ではありますが、alertを使って表示するということはそれほど多くありません。
関数には返り値(かえりち)というものが用意されていて、返り値を使うことで、関数の中で計算させた結果を、元のプログラムに戻してやることができます。元のプログラムはその返り値を使って、好きなことができるわけですね。たとえば、返り値を積算していけば、合計値を計算することができたりします。返り値をうまくつかうことで、関数の機能をシンプルにして、関数の再利用性をあげることもできるのです。
このように関数は、すべてをひとつにまとめるのではなく、本当に繰り返しが多く、まとめるべき手続きをまとめるのも、関数の利用価値を高めるポイントです。
関数実装パターン3
でも、やっぱりこの際、alertも関数でやっちゃいたいよ!と思うこともありますよね。
次の例はどうでしょうか。
例4
//↓ここで関数定義!
function taxAndReturn( str ){
str = Math.floor( str * 1.05 );
return str;
}
function taxAndAlert( str ){
alert( taxAndReturn( str ) );
}
//↓ここから実行文
var str_1 = 250;
taxAndAlert( str_1 );
var str_2 = 500;
taxAndAlert( str_2 );
例4では、関数を二つ作りました。関数の中から関数を呼び出しています。そう、消費税計算をする関数と、その関数を呼び出してalertする関数の二つを作ったわけです。こうすれば、消費税計算に限定することで利用価値をあげた関数の価値をそのままに、alertを呼び出すという手続きも再利用できるようになったわけです。
かなーりざっくりした話でしたが、以上が、関数の使いどころです。
・繰り返しを関数にすることで、プログラムの可読性があがる。何度も同じことを書かなくていい。
・繰り返しを関数にすることで、プログラムを後日改修するときにラクになる。
というところがポイントで、
・関数はプログラム全体を見渡して、関数の内容はシンプルに。
・関数をいくつかつくり、関数と関数を関連させていくことでさらに便利に。
ここが関数の運用・設計において重要な点です。
個人的には、関数は、プログラミングを嫌いにならないためのひとつの道具でもあると思います。何度も同じことして「うがぁっ!!!」みたいなストレスが一番人間にとってよくないと思うからです。関数。頑張って覚えましょう。
散々便利だとのたまわっているFilemakerのなでしこプラグインが
早速アップデートされました。
バグ修正とFilemakerで使うに便利な命令が追加されています。
おぉっ!使いやすさがアップしてる。
すごいよなー。
本家なでしこもそうだけど、毎月必ずアップデートが行われて、
それもバグ修正にとどまらず、必ず便利になってる。
見習わなきゃいけない。
くじらさんの足元にもおよばないけど同業のプログラマとして。。。
尊敬しているプログラマのひとりです。くじらさん。