土曜日, 1月 02, 2016

Arduino のための「電子サイコロ・モジュール」

モジュール化ってのは大事ですよね。構造化・抽象化することが大事なわけです。

でもハードウエアでモジュールってのはよっぽどの構想がないとあり得ないです。PCとか。

Arduino はその点でも優れています。センサーからディスプレイまでさまざまなモジュールが利用できます。

休みを利用して、くだんの Arduino 版・電子サイコロをユニバーサル基板で作り直して「モジュール化」してみました。LEDでさいころの目を表現します。

部品はいたってシンプルなものです。


Arduino とはデュポン・ジャンパ・ワイヤで接続します。



回路は同じです。プログラムのほうは、リセットボタンを押すと一定時間サイコロを回し、停止するよう改良を加えておきました。



ちょっと裏側はお見せしたくない悲惨な光景が繰り広げられてますが、この電子サイコロ、きちんと動きます。



Arduino のための「電子サイコロ・モジュール」が完成です。




百均ケースでまとめてみました。


割り込みスイッチをつけてあります。押すとさいころが回ってくれます。 時間がたつと消えてくれます。

金曜日, 1月 01, 2016

Arduino: デュポン・ジャンパ・ワイヤ

みそかの大掃除で部品など整理して在庫表など作って新年を迎えました。たくさんの部品をながめて、ほくほくしながら年を越すってのもオツなもんです。

ジャンパ線など整理していると、先端の壊れたのとかがあるわけですね。

このジャンパ線ってのが直せるってご存知でしょうか。

デュポン・ジャンパ・ワイヤというのがあって、この先端部分が自作できます。



金属部分のコネクタ、プラスチック部分のハウジングがあればいいわけです。
http://www.ebay.com/


はんだ付けは必要ないです。 はんだ付けするといいというサイトもあるようですが、ここではそのままで使っています。挟み込んでペンチで締め付ければいい。ハウジングをつければそれで元通りです。

再利用可能ってのはいいですよね。このハウジングが角ばってるのも並べたとき使いやすくていいです。


デュポン・ジャンパ・ワイヤ
http://www.ebay.com/

そこかしこつけまくっておくとかなり便利ですよー 


時間が経つと鳴るブザーがこれで完成です。



水曜日, 12月 30, 2015

PowerBuilder 12.6: 要素をリネーム

PowerBuilder ってのはクセのあるソフトで、気をつけないと半日を潰してしまう「仕様」があります。バグだと思うんですが

なぜか要素をリネームできないんですよ。右クリックしてもリネームなるメニューがない。

リネームなんて「別名でコピーして元のを消せばいい」、と思うかもしれませんが、PowerBuilder だとこれしかない。別名でコピーするしか方法がないんですね。

Save といっても右クリック→Copy ... とするとその要素はもうあるよ、とエラーを出してきます。
ここは File メニューから Save as とするのが正解です。

これがですね、そのままじゃ出てこない。Window を開かないとダメなわけなんです。

この思いがけない癖ってのが PowerBuilder の特徴です。ってことで

ここで一言: PowerBuilder は不安定ですぐクラッシュします。どうにかしてほしいです

こんなときは Regenerate です。

自作ブレッドボード版 Arduino

作ってみました。自作ブレッドボード版 Arduino です。

Arduino UNO を使ってブートローダーを焼いたので、プログラムのアップロードは完了していたわけなんですが、内部クロック(8MHz)だとそのままで動かないので16MHzのクリスタルが届くまでお預けとなっておりました。

で、昨日届いたわけなのでさっそく動かしてみました。

まず5V電源をつくります。ここではLM317を使いました。こいつは可変型のレギュレーターで、抵抗値で電圧を変えることができます。

基本これで動きますが

発振防止、逆流防止ダイオードなどつけるとこうなります

Atmega328P チップと電源をつなぎ、クリスタルをつないで、と




動きました。感動です。13ピンのLEDが点灯しています。電源とクリスタル、これだけで動くんですね。





電源モジュールです。


これで作ったプログラムを保存することができます。

木曜日, 12月 24, 2015

Arduino: リレーを使って明かりを消す

Arduino ってのはよくできたシステムです。

Arduino がどれだけすばらしいかって「発想から実現へ」の直截さが違うわけです。

例えばですね、明かりを消したいとします。つけた明かりが消えてほしい。一定時間たったら消えてほしいと思ったとします。

どうするかっていうとまず100V電源をいじらないといけないので、リレーを使います。5V回路で100Vを操作すると壊れるのでリレーで隔離するわけです。


このリレーですが、一定以上の電流が必要となります。Arduino 出力端子そのままだと心もとないので、こういうときはたいていトランジスタなどを使って電流を操作します。信号を増幅するわけですね。

まあ面倒なわけです。トランジスタ回路を組むというだけでなんか「仕事から帰ってきてこれって」とかいう気分が襲ってくる。

でそこは Arduino の世界なわけです。これがホントよくできててリレー・モジュールなるものが売っている。しかもいい値段で売っている。

(これです→http://www.ebay.com

早い話がこれをつなぐとそれだけで明かりが消せます。そのままつなげばいい。タイマーをプログラムし、信号線をつなぐだけです。

え、これだけ?これだけで動くんだ、という感動があったわけなんですが、これちょっと考えてみてください。このモジュールの利点です。部品が少ないってことは、つまりそれだけ安全だってことです。100V使うんですから安全第一です。

まあしっかり懐中電灯など用意して動かしてみたわけなんですが、大丈夫でした。リセットボタンなど押すと明かりがついて、一時間たつと消えてくれます。

*)整数型では上限を超えてしまうので時間は long 型である必要があります。

土曜日, 12月 12, 2015

Arduino Uno を使ってブートローダーを焼く



Arduino を使うと書いたプログラムで外部装置を動かすことができます。いくらJava/C++/Android でプログラムを書いても所詮ソフトウエアってだけです。家電、LED やセンサーを動かすことはできないですよね。Arduinoなら可能です。USBでつないで外部装置をつなぎ、アップロードすると動きます。このスムーズな流れが「よく考えられたシステム」であるArduinoの特徴です。
 
このArduino、つないで動くというだけではありません。使える装置を作る方向へ発展させることができます。プログラムの書き込まれたCPUを取り出して使えばいい。

本家Arduino のボードのCPUは取り換えがききます。取り出せばそのまま同じ回路を独立して使うことができます。素晴らしいと思います。

このCPUですが、Atmega328のチップを使っています。ebayなど覗くとこのチップがまとめていい値段で販売されています。ありがたいです。

http://www.ebay.com

これらのチップはブートローダーが書き込まれていない場合があります。自分で書き込む必要があるわけですね。書き込みができると安いチップが使えます。挑戦する価値ありますよね。

どうやって書き込むのか、ですが、ネットではブレッドボードで回路を組む、専用のシールドを作る、専用ライターを使うなどいう手間のかかる方法が語られています。

でもですね、Arduino Unoを使うと手間いらずです。手間いらずということはつまり成功率が高いということです。是非お勧めしたい方法です。




どうするかというと、プログラムしたいチップを載せたArduino UnoArduino本体をつなぎます。

では焼き込みの手順です。まず ArduinoISPをアップロード。

ArduinoISPをアップロード
 
そしてArduino Uno をつなぎます。電源5VGNDをそれぞれ接続し、ピン11, 12, 13Arduino本体と接続します。あとはピン10とリセットとつなぎます。

新しいAtmega328Pチップを載せて、Board, Port, Programmerを設定します。それぞれArduino UnoUSBポート(ポート番号は環境で異なります)、Arduino as ISPを選択します。


 
ボード Board の設定


ポート Port の設定

 
プログラマ Programmer の設定

そして Burn Bootloader を選択してブートローダーを焼きます。
 
いよいよ書き込み


この方法でなんの問題もなくブートローダーを焼き込むことができました。チップをとりかえてLチカとかアップロードすると動くわけですね。これでArduinoマシンを量産できます。なんだろうこの安心感は(笑

#Arduino 基板を使わない場合はクリスタルで外部からクロックを供給してやる必要があります。

 
写真は自作のAVR-ISP・シールドです。

土曜日, 12月 05, 2015

Arduinoの流行るわけ・電子サイコロ


電子サイコロというものを見たことがあるでしょうか。LED回路などでサイコロの目をつくり、電子回路で操作・表示するものです。

乱数を生成し、各LEDを点灯させるというのはもし回路を自分で組むとしたら面倒な話です。


こんな作業も Arduino があるときちんと組めます。乱数はライブラリを利用し、各LEDへの出力をプログラムで操作します。

Arduinoが外部インターフェースとして便利な件


フォトレジスタというセンサーがあります。明るさを探知します。でもこれをどうやって利用したらいいでしょうか。電源を与え、抵抗値を読み取る装置をどうやって作ったらよいでしょうか。
そこで Arduino を利用します。電源を与え、アナログ値を読み取り、シリアル信号としてPCで読み取るなどという作業はこの Arduinoで行います。つまり、Arduino ならUSBケーブルをつなぐだけでアナログ値が読み取れます。





あとは読み取った値を利用して装置を動かすなどという作業をリレーなど通じてArduinoで行えばいい。

この一連の作業がUSB接続できるArduinoならスムーズかつ危険なく行うことができます。考えてもみてください。旧態然とした開発過程だと、マイコンチップを用意し特殊な装置でプログラムを焼き、電源装置を用意して動かすなどという手間が必要です。このハードルをArduinoがあると楽々と超えられるわけです。





金曜日, 11月 20, 2015

EPUB形式で電子本を作る

アドビ社の迫害をものともせずオープン規格EPUB電子本を作るとここで宣言。

mimetype
META-INF/
 container.xml
OEBPS/
 content.opf
 toc.ncx
 xhtml file

できた。が自前のJavaアプリで圧縮する必要があった。こんな感じです。

木曜日, 10月 08, 2015

PowerBuilder 12.6, C#: データベースへの接続方法

PowerBuilder でデータベースへ接続する方法を示します。

DataObject が機能していることが前提です。


C# でいうと以下のようなコードとなります。



月曜日, 10月 05, 2015

PowerBuilder 12.6: 画像ファイルを読み込む

PowerBuilder で画像ファイルを読み込む方法を示します。というか、そのままじゃだめなんですね。

PictureControl とかがあって、じゃあ置いておけばあとで そのまま読んでくれとかファイル名を渡す、そういう形式だと思っておりました。

C# だとかそうですよね。

ところが FileRead() だと 32KB しか読まないらしいわけです。手元の情報だとそれだけしかないんですが、どこか見てるところが間違えてるんでしょうか。



まあいいんですが、バッファが必要なら書くまでです。

こんな感じで書くと画像ファイルが読み込めます。blob で読み込んで渡してやれば表示してくれます。


PowerBuilder 12.6: UTF-8 ファイルを読み込む

ひょんなことで PowerBuilder プロジェクトの案件を扱うこととなりました。ので、関連情報など載せていきたいと思います。

まずは IDE など勝手が違うので、多少の忍耐が必要です。

日本語のファイルを扱うのでまずはまってしまったので、まずはファイルの読み書きから書いていきたいと思います。

UTF-8 ファイルを読む方法です。


UTF-8 ファイルはこれで読み込めます。

書き込みは以下の通りです。

FileOpen で文字コード EncodingUTF8! を指定します。

木曜日, 9月 24, 2015

C#: ハッシュテーブルをXML形式で書き出す・読み込む

C#でHashtableのデータをXML形式で読み書きするためのコードです。

忙しい貴方のため(将来の自分ですね)コピペできるようそのまま置いておきます。

  • writeXML(Hashtable directory, string fileName):
    Hashtable のデータをXML形式で保存します。

  • readXML(string fileName):
    XML形式のデータをHashtable 形式で読み込みます。


出来上がったXML形式のファイルです。

金曜日, 7月 03, 2015

配列をムダなく並び替える

ここでは配列をムダなく並び替える方法を提案します。

提案というより、いつもの「ループをまわして違う値が出るまで繰り返す」という方法をやめようという提案です。

何度もまわしていれば終わる作業ではあるはずですが、当然のごとくこのアルゴリズムだと終わるという確証がありません。

カウンタなどつけていれば無限ループという最悪の事態は防げるわけですが、ここでは「乱数は配列の大きさだけ計算すればいいはず」というアルゴリズムの提案です。

大げさなことはないわけなのですが、計算しなければならない乱数ってのは「まだ選択されていない数からのみ」なわけなので、その方法を示します。

まずはコード permute() をご覧ください。

… というわけです。選択されていない中から選ぶので乱数の計算が配列の大きさで済むというわけです。

どうでしょうか。

permute() の応用で、重複しない要素を選択する関数 withoutDuplicate(int n, int max) というのも作れます。

selectWithout(int n, int max, int excluded) は選択すべき要素から一定要素を除いた重複しない要素を選択する関数です。

よく使うアルゴリズムだと思います。

火曜日, 6月 23, 2015

コマンドラインでシカゴの気温を調べる(C# で JSON データを読む)

先日 Java での JSON データの読み方を紹介しました。

ここでは C# で JSON データを読む方法を紹介します。

DataContractJsonSerializer を使った方法です。

DataContractJsonSerializer.ReadObject() を使うと JSON データを読み、オブジェクトとして出力してくれます。

オブジェクトへの変換が「宣言」となっているところがいくらか分かりやすいといえるでしょうか。

まず、読み込みたいデータ構造をクラスとして宣言し、DataContract 属性を付加します。JSON データは DataMember 属性を付加します。ネストされているデータはクラスとして宣言しDataContract 属性を付加します。コードを参照してください。#配列データは配列として宣言します。

出来上がったデータクラスを DataContractJsonSerializer のコンストラクタの引数として渡します。

準備が出来たらHttpWebResponse として読んできたデータを、DataContractJsonSerializer.ReadObject() で読み込みます。

と、この手順を踏むとめでたく JSON データが読み込めます。あとは出力するだけ。

ここの気温の表示はデフォルト設定でなんとK(ケルビン)です。ので 273.15 を引いてやります。

#華氏(℉)か摂氏(℃)か迷ったんでしょうか(もめたんですかね)。

木曜日, 6月 11, 2015

コマンドラインでシカゴの気温を調べる(Java で JSON データを読む)

なんと、近々発表されるはずの Java 9 から JSON ライブラリが外されてしまいました。

これは、政治ですね?(笑・XML派の妨害ですね。)

JSON ってコンパクトですよね。名前なしの{}(中括弧)を使うところが XML 形式より多少なりとも不確実ではあっても記述が短くて済むわけです。

openweathermap サイトのデフォルト設定は JSON 出力です。



このサイトは天気情報を提供してくれます。都市名とかを URL で送ってやると天気情報を返してくれます。

そこで、「ねえ、パーサーを書いたら?」とかいう余計な手間をかけたくない忙しいプログラマのため org.json.simple ライブラリの使い方を紹介します。

まず JSON.simple JAR ファイルをダウンロード


データを読み込むプログラムの手順を示します。

  1. まず、JSONParser オブジェクトをインスタンス化。
  2. URL オブジェクトから InputStreamReader、BufferedReader をインスタンス化。
  3. JSONParser.parse() でパース。
  4. あとは JSONParser.get() で要素を読んでいくだけです。
  5. ネストされている要素であれば、JSONParser オブジェクトとして扱う。


あとは、JAR ファイルとコンパイルするだけ。

javac -classpath "JARファイルのあるディレクトリ;." WeatherApp.java
これで、コマンドラインからシカゴの気温が検索できます。

月曜日, 4月 20, 2015

水曜日, 2月 25, 2015

Java: データ・マイニング ECLAT変換

データ・マイニングなんぞでデータ変換など需要がありましたので、プログラムなど置いておきます。

変換といっても縦のものを横にするという種類のもので、こんな感じです。


 アルファベットが項目で、数字がIDです。

走らせるとアルファベットからIDを列挙します。

火曜日, 2月 24, 2015

Java: 楕円銀河

銀河系ってのはさまざまな形をしていますが、楕円形ってのがもっとも多いわけです。

楕円形のつぶれかたで記号までついてるわけですね。

E0 から E7 まであるわけですが、E0 がもっとも丸い。E7 がつぶれた形をしている。



こんなのを Java でインタラクティブで動かせたらいいかな、というんで書いてみました。

そのままコンパイルすると動くはずです。です。


火曜日, 1月 13, 2015

Java: BigInteger で階乗を計算する

自然数ってのは限りがありません。もし上限 n があったと仮定すると、 n+1 が整数、これは矛盾します。よって上限はない。数学ってのは証明ができていいですね。

ところがいざプログラムで実装となるとガラスの壁ってのがあるわけです。ご存じのとおり整数型の上限は64ビット long で -9223372036854775808 から 9223372036854775807。

これだともっと大きな整数は扱えません。そこで、Java では整数を抽象化し、BigInteger として制限のない整数を表現します。

この BigInteger、四則演算は揃っているのですが、演算メソッドが限られていて、階乗がありません。いちいち定義すればいいわけですが、こんなところで立ち止まっていては世界が見えてこない。

そこで、BigInteger で階乗を計算するコードを載せておきます。



この階乗を使うと、組み合わせなど計算ができます。階乗で定義されるやつですね。



実はこの組み合わせ、再帰で定義できます。パスカルの三角形といわれるやつです。



証明はこちら。

金曜日, 11月 21, 2014

NetBeans+Maven: JARファイルが起動しない

NetBeans+Maven で書いた Java アプリを、いざ起動しようと思うと動かないわけですね。

動作環境は NetBeans 8.0.1 です。快適な Java 開発環境です。Maven も入っている。おすすめです。

補完機能もあるし、フォーマットからコメントアウトまで編集機能も万全。JUnit なんかもテンプレートで作成できます。

さくさくとプログラムを書いて、コンパイル。無事テストも通って、できた JAR ファイルを起動。JAR ファイルなら Windows 上で実行形式ファイルとしてそのまま起動できるはずです。

さっそくというのでアイコンをクリックをクリックします。で、動かない。

できてないですね。NetBeans。なんなんですかね。

コマンドラインで動かしてみれば理由はあきらか。Main-Class が設定されていない。

肝心なところでなぜなんだと悩みました。だってできたプログラムをいざ実用化っていう大切な瞬間ですよね。なぜでしょう。意図的としか思えませんね。

まあ陰謀論はいいんですが、結論から言うと解決は簡単で、pom.xml ファイルで Main-Class を設定します。



こんなコードを加えてやります。

#タグの大文字小文字が違っていたので訂正します。
   
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>easai.treeeditor.TreeEditor</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>      


JARファイルを追加するには以下のように記述します。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>easai.db.DB</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>mysql-connector-java-5.1.6-bin.jar</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>     

月曜日, 9月 08, 2014

Java: 標準入力から値を得る

Java で標準入力から値を得るのは C++ より面倒です。

C++ では cin を使いますよね。 標準入力ストリームを使うわけです。

Java では標準入力は System.in です。しかし、です。このままでは使えないんですね。

以下の F1 Score 計算プログラムでは Scanner を使用しています。


木曜日, 7月 10, 2014

3Dプリンターを使ってみての考察



3Dプリンターを使ってみての所感です。

  • ルーターは必須。バリや凹凸はもちろん、サイズを合わせるため必須。
  • プラスチック樹脂の種類によって強度、加工しやすさが違う。色もメーカーによって違う。
  • ABSは曲げられない。折れる。硬さはそれぞれの樹脂の質による。
  • フィラメントが引っかかると層がずれて悲惨な作品が出来上がる。フィラメントのフィードが遅いマシンでは "Extrusion multiplier" の値を低くする。フィラメントの太さを指定する必要がある。
  • アセトンで壊れたパーツを修復できる。フィラメントを溶かしたアセトン溶液を使うといい。アセトンはすぐ蒸発するのでガラス瓶など使うと容器内で蒸発する。目薬の容器は小さくて少量ずつ出すことができて便利。
  • 糊をたっぷり使わないと作品がはがれる。ブリム brim をつけると倒れにくくなる。ラフト raft をつけると底面からはがせる。
  • 糊はコーンスターチと水を電子レンジで加熱すると大量生産できる。夏場は糊が腐るので酢を少量混ぜるといい。
  • よく監視しておかないとフィラメントを無駄にする。
  • 糊が乾燥するので水道水をスプレーするといい。
  • 冷えるまで触ってはならない。柔らかいので無理に外すと壊れる。
  • 解像度は低い。 
  • 時間がかかる。
  • 削るのは時間のかかる作業である。
  • 思いのまま作品ができる。「今まで何してたんだろう」的な気分になる。カスタマイズも自由。



金曜日, 6月 20, 2014

火曜日, 5月 13, 2014

Javascript (jQuery) から PHP の関数を呼び出す

ボタンを押したときに、PHP の関数を呼び出したいとします。

Form を使って PHP ファイルを読み込み、ページ全体を書き直すという手段もありますが、ある関数だけを呼び出したいときなど、ajax を使うと PHP 関数を呼び出してページ側で返り値を得ることができます。

このように、url でファイル名を指定して、success で返り値 results として引き渡してやります。

PHP ファイル側では、渡したい値を echo などで表示します。

これで PHP の関数をページから呼び出すことができます。


木曜日, 5月 01, 2014

HTMLエディターを1行で書く

HTMLエディターを1行で書いてみました。

要するに、書いたHTMLがそれっぽく見えればWYSIWYGってわけですよね。

じゃあ、書いたものをそのままブラウザ表示すりゃいいわけじゃないですか。

これを動かすと、何もないテキストボックスが下のほうに表示されます。

適宜 HTMLコードを入力してみましょう。

画面上部に結果が表示されます。

リアルタイムでHTMLコードが編集できます。

ちょっとしたプレビューにも使えます。

水曜日, 4月 30, 2014

g++ の内部コード

g++ の内部コードは UTF16 で、wchar_t も当然のことながら16ビットです。

なんなら日本語のファイルを読んで、コードを出力してみればいいわけですね。

ロケールを設定する必要があります。


火曜日, 4月 29, 2014

C++ でバイナリで表す

C++ でバイナリで表すには、自分で書かねばならないようです。

べつにたいした手間ではないですが、書かされるという気分が知性に対する挑戦のように思えるわけですね。

こんなことをやらされるために頭脳があるんじゃない!みたいな。

もしそんな教師がいたら最悪ですね。でも現実は頭脳に厳しい。

というわけで書きました。

なんか頭にくるのでここに載せときます。


注意点として、(int16_t)0xff などとキャストすると結果は 1111111111111111 と表示されます。

当然そうなるわけなんですが、0000000011111111 とはなりません。

注意しましょう。

火曜日, 4月 22, 2014

eshell (Emacs) と .website (IE) , time (実行時間の計測)メモ

本日の収穫:

M-x eshell

Emacs エディタの話です。

M-x shell を愛用していたわけなんですが、M-x eshell なるものがあるんですね。

ずっと便利じゃないですかこれ。早いし。なんだったんだ今までの苦労は(笑

コマンドの結果が別ウィンドウで表示されます。


.website

IE の話です。

サイトのファビコンをクリック・ドラッグすると、サイトのリンクを作れます。

サイトのリンクと同じようなものですが、IEを指定できます。

time

time ./a.exe で実行速度が計測できます。

水曜日, 4月 09, 2014

Java:バイナリ表示

Java でバイナリを表示するには、toBinaryString()関数を使うと簡潔に表現できます。

水曜日, 3月 19, 2014

Java 8: ストリーム

Java 8 では文字列をストリームとして扱うことができます。

ストリームにフィルターを追加し、要素を選択することもできます。

下記のコードでは要素の文字長を指定し、表示するものです。

下記のコードは要素の頭文字を指定し、表示します。

Java 8: ラムダ式

Java 8 が正式にリリースされました。

ラムダ式が導入されるということで、さっそく試してみました。

ラムダ式とは関数を抽象化したもので、コンパクトにコールバック関数の引渡し・定義ができます。

ラムダ式のフォーマットですが、

 (引数) -> 定義

となります。Lisp などとは異なる形式ですが、内部クラスなどと比較して簡潔にコールバック関数が定義できます。



火曜日, 2月 25, 2014

MySQL: テーブル構造を取得し、SQL文に変換する

MySQLでテーブル構造を取得するには、DESCRIBE (テーブル名) などのSQL文を使用します。



これをSQL文に変換するには、テーブルの情報をSQL文の形式でそれぞれ記述してやる必要があります。

CREATE TABLE IF NOT EXISTS `notes` (
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` text COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `videoid` text COLLATE utf8_unicode_ci NOT NULL,
  `imagefile` text COLLATE utf8_unicode_ci NOT NULL,
  `docnum` text COLLATE utf8_unicode_ci NOT NULL,
  `shortdesc` text COLLATE utf8_unicode_ci NOT NULL,
  `onhold` int(11) NOT NULL,
  `registered` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
AUTO_INCREMENT=61 ;

ここで気をつけねばならないのは、timestamp値をとるコラムです。

デフォルト値に CURRENT_TIMESTAMP をとるコラムは、TIMESTAMP 値をとるコラムより前に記述しなければなりません。

コラムを並べ替える必要があります。

ここでは array_unshift() という関数を使用し、CURRENT_TIMESTAMP をとるコラムを配列の最初に格納するという方法をとりました。

ソースコード: GitHub: tablestructure.php

木曜日, 12月 19, 2013

PHP: HTML セーフなコードに変換

HTMLコードを書く際に、不等号記号などそのまま書くとブラウザが勝手に変換してしまいます。

プログラムなどを表示するためには、記号をHTMLに変換しなければなりません。

ブラウザの勝手な行動を制限するために、変換するツールを作成しました。

使い捨てないツールのためにここにアップします。

以下のコードを html.php というファイルに保存し、PHP の動く環境でブラウザを使って表示します。

テキストボックスにコードを打ち込み、Convert ボタンを押すと変換されたコードが表示されます。

<html>
<head>
<style>
textarea
{
width:1000px;
height:500px;
}
</style>
</head>
<body>

<?
$text=$_REQUEST['text'];

$text=htmlspecialchars($text);

echo <<<END
<form action="html.php">
<textarea name="text">$text</textarea>
<input type="submit" value="Convert" />
</form>
END;

$html=htmlspecialchars($text);
echo <<<END
<textarea>
$html
</textarea>
END;
?>
</body>
</html>

土曜日, 12月 14, 2013

Java: 列挙型 enum を switch文で使う

Mandelbrot
列挙型 enum は Java5 で導入されました。

public enum Periodic{PERIODIC,PREPERIODIC,NONPERIODIC};

名前を付けて、識別子を列挙します。

この値を変数に代入するには、静的に定義された変数として扱います。

 Periodic periodic=Periodic.NONPERIODIC;


列挙型変数名を指定する必要があるわけです。

ただし、switch文で使う場合には指定しません。

switch(isPeriodic())
            {
            case PERIODIC:
                System.out.println("f is periodic.");
                break;
            case NONPERIODIC:
                System.out.println("f is not periodic.");
                break;
            case PREPERIODIC:
                System.out.println("f is pre-periodic.");
                break;
            }

気を付けましょう。

日曜日, 12月 01, 2013

Windows 8 ストアアプリ開発にはまっております。

作りかけのメトロアプリ
目下のところWindows8用のアプリ開発にはまっております。これが面白い。書き方が全然違うので慣れるまで大変ですが、簡便さ能率と自由度が違う。

Windows8用のアプリは ストアアプリ、メトロアプリ、WinRT などと呼ばれていてどれもメトロスタイルのアプリを書くためのものです。興味深いことにデザインはXAML形式、機能はC#などプログラミング言語で記述します。ここがポイント。

もとWindows7とかWindowsXPのデザインは、もとはRCファイルなどですね。ベタなテキストファイルで、編集は特殊なリソースエディタを使って行っておりました。エディタで部品を置いて、クリックしたときなどの動作をC++で記述するという形です。部品の種類もそこそこあるわけですが、Windows8になってデザインの差もさることながら自由度が格段にアップしました。アプリが豪華に見えます。

ページデザイン、レイアウトをXAMLというXMLに基いた言語で記述することで、あらたな世界が広がっています。HTMLはXMLに準ずる形式ですね。だからXAMLはHTMLのようなものです。ウエブページを書くノリで自由に部品が記述できるのです。これはすごい。どんどんページを書いていって、それから機能を実装していけばいい。

開発環境も優れています。部品の種類もそこそこ厳選されており、ネーミングも悪くない。いや、とてつもなく悪いのもあるわけですが、コンセプト的にはいい。アプリにブラウザ機能をつけるととんでもない便利な環境が出来上がります。ネットにどれだけのリソースがあると思いますか?アプリからそれが全部使える。辞書だろうとニュースサイトだろうとSNSだろうとそのままです。入力を処理する必要さえない。

まだまだ自由に使いこなせているとは言えませんが、チャレンジする価値は十分にあります。情報が少ないのはネックですが、今後の発展を期待しましょう。

日曜日, 11月 24, 2013

Windows ストアアプリ: ローカルファイル

ストアアプリではURIでファイル名を指定します。

Windows.Storage.StorageFile file
   = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
                                 new Uri("ms-appdata:///local/Doc/" + fileName));

上記の指定では、mss-appdataでローカルファイルを指定し、Docディレクトリ以下のfileNameにアクセスしています。このDocディレクトリはアプリで用意する必要があります。あらかじめアプリケーションのほうでDocディレクトリを用意し、ファイルを置いておけば、ローカルファイルから読み込むことができます。

 
ややこしいことに、元ファイルは、ローカルにコピーされたファイルとは別物です。つまり、ms-appdataで指定されたファイルをいくら書き直しても元ファイルには反映されません。 元ファイルのほうは、ms-appxで指定します。ファイルは読み込み専用です。

Windows.Storage.StorageFile file
  = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
                                new Uri("ms-appx:///Doc/" + fileName));

ローカルファイルのほうを調べたければ Windows.Storage.ApplicationData.Current.LocalFolder.Path に指定されているディレクトリを見に行く必要があります。




PHP: CSVをHTML形式のテーブルに変換

CSV を HTML 形式のテーブルに変換するニーズというのは多々あるものです。

HTML のテーブル形式に変換したいときに使えるツールを作ってみました。

CSV 形式のデータを上のテキストボックスにほうりこみ、Convert ボタンをクリックすると変換された HTML コードが表示されます。

ツールを使い捨てないためにここにアップします。

<html>
<head>
<style>
textarea
{
width:1000px;
height:500px;
}
</style>
</head>
<body>

<?
$text=$_REQUEST['text'];

echo <<<END
<form action="table.php">
<textarea name="text">$text</textarea>
<input type="submit" value="Convert" />
</form>
END;

$text=$_REQUEST['text'];
$text=htmlspecialchars($text);
$list=explode("\n",$text);
$html="";
foreach($list as $line)
  {
    $columnList=explode(",",$line);
    $column=implode("</td><td>",$columnList);
    $html.="<tr><td>$column</td></tr>";
  }
$html="<table><tbody><pre>
$html
</pre></tbody></table>
";
echo <<<END
<textarea>
$html
</textarea>
$html
END;
?>
</body>
</html>

日曜日, 11月 10, 2013

WinRT/Metro TIPS:ストアアプリで部品サイズを可変にする

なかなか普及の進まない Windows 8.1 と騒がれていますが、当方果敢にもストアアプリ作成にチャレンジ中であります。

プログラムの基本概念なぞという人間は現場を・知らない・知ろうとしない・連中だとまずここで一言。

考え方としてはプログラム構造は Java のような OOP で、見た目は XML で指定します。

ストアアプリでは XML 形式を拡張した XAML 形式で画面構成を指定します。

Visual Studio 2013 という豪華な(金のかかった) IDE には圧倒されますが、それなりにクセのあるツールではあります。

部品サイズを可変に指定するやり方に悩んでしまい、ネットにもなさそうなのでここに書いておきます。

Visual Studio 2013 部品を可変サイズにする
サイズを可変にするには Width と Height 右のアイコンを押して Auto に指定、さらに HorizontalAlignment と VerticalAlignment の一番右のアイコンで画面最大幅を指定します。

部品の幅を可変にする
 アルファベット順に並んでいるので、Width の真上に高さを指定する属性 VerticalAlignment がくるわけですね。

ストアアプリの開発関連情報はまだまだ少ないですね。

金曜日, 8月 23, 2013

IEでは異なる要素でも同じ名前はダメ。

表題の通りです。

 DIV要素とUL要素で同じ名前にしてやられました。

以下のように指定したとします。
<div id="menu">
<ul id="menu">
<li>
Click Here
</li>
</ul>
</div>
それで、クリック時に呼び出す関数を指定したとします。
    $(document).ready(
 function()
 {
     $("ul#menu > li").click(function(){
     alert("here");
     });
 });
これだと、Firefoxは意図を察して動いてくれるのですが、IEだとだめだめです。

あちゃー という本日の発見でした。

木曜日, 8月 22, 2013

jQuery: クリックして止まるドロップダウンメニュー

jQuery を使うとメニューを比較的エレガントに実装できます。

slideDown() / slideUp() などの関数を利用すると任意のコンポーネントを表示または非表示に設定できます。

さらに、マウスクリックでメニューを固定するなどいう指定が可能です。

固定されたメニューは画面いずれかの場所でクリック数すると解除されます。

以下、jQueryの部分です。
$(document).ready(function(){
    // 1 when any menu is shown
    var menuOn=0;

    $("ul#menu > li").click(function(){
        // hide all menu items
        $("ul#menu > li").each(function(){
            $(this).find('ul').css("display","none");
          });
        $(this).find('ul').css("display","block");
        menuOn=1;
      });
              
    // hide/show menu items
    $("ul#menu > li").hover(function(){// show menu when the cursor is over
        if(menuOn==0)
          {
            $(this).find('ul').css("display","block");
          }
      },      
      function(){// hide menu when the cursor is off
        if(menuOn==0)
          {
            $(this).find('ul').css("display","none");
          }
      });

    // hide all menus and clear the flag
    $("#canvas").click(function(){
        if(menuOn==1)
          {
            $("ul#menu > li").each(function(){
                $(this).find('ul').css("display","none");
              });
          }
        menuOn=0;
      });
  });
スタイルシートです。

ul#menu,
ul#menu ul
{
    list-style:none;
    z-index:1;
    position:relative;
}
ul#menu ul li 
{
    line-height:25px;
    width:100px;
    height:25px;
    background:#2D435A;
}
ul#menu ul li a
{
    text-decoration:none;
    color:#cccccc;
    margin-left:10px;
    font-size:14px;
    text-align:none;
}
ul#menu ul li#heading a,
table#submenu a#heading
{
    color:white;
    font-size:16px;
    margin-left:0px;
}
ul#menu ul
{
    display:none;  
}
ul#menu,
ul#menu li,
ul#menu ul,
ul#menu ul li
{
    margin:0px;
    padding:0px;
}
ul#menu li, 
ul#menu ul li 
{
    color:white;
}

div#menubar
{
    width:100%;
    background-image:url('../../../../images/topNav_bkgd.jpg');background-repeat:x-repeat;
}

ul#menu
{
    width:960px;
    margin:0px auto;
    padding:0px;
}
ul#menu li
{
    height:25px;
    line-height:25px;
    display:inline-block;
    vertical-align:top;
    color:white;
    text-align:center;
    width:130px;
    border:0px;
    *display:inline;
    *zoom:1;
}
ul#menu li ul
{
    width:400px;
    height:400px;
    background:#2D435A;
    opacity:.9;
    filter:alpha(opacity=90);
    -ms-filter:"alpha(opacity=90)";
    -moz-opacity:.9;
    -khtml-opacity:.9;
    text-align:left;
}
ul#menu li ul li
{
    text-align:left;
    border:none;
    padding-top:10px;
    padding-left:10px;
}
table#submenu
{
    margin:0px;
    margin-top:10px;
    margin-left:10px;
    border:0px;
    border-collapse:collapse;
    width:400px;
}
table#submenu td
{
    text-align:left;
    vertical-align:top;
}
div#canvas
{
    width:100%;
    text-align:center;
}
div#position
{
    width:960px;
    margin:0px auto;  
    text-align:left;
}
HTMLの部分を示します。
<div id="menu">
<ul>
<li>Home
    <ul>
<li><a href="http://www.blogger.com/default.htm" title="Noritake VFD">Home</a>
      </li>
</ul>
</li>
</ul>
</div>

水曜日, 8月 21, 2013

z-index はpositionを指定しないと意味がない。

表題の通りです。 z-index はpositionを指定しないとならないんですね。

さらに、IE では clear:both を指定しないと z-index が指定できない。

気をつけましょう。

日曜日, 8月 18, 2013

縦型メニューをjQueryで作る

縦型メニューをjQueryで書いたら簡潔かつ論理的にできたのでここにメモっときます。


    $(document).ready(function()
        {
     $('ul#menu > li').click(function(){         
         $(this).next().slideToggle();
     });
        }); 

これだけです。いくつかポイントがあって、まずは next() で後続の要素を指定します。

入れ子の要素を指定しているわけではないので、サブメニューを記述する時には注意してください。

あとはどのような関数でも呼べばいいわけですが、ここでは slideToggle()で表示を切り替えています。

既出かもという気もするのですがなかなかエレガントなのでここに置いておきます。
    <ul id="menu">
      <li>Homepages</li>
      <ul>
   <li><a href="http://easai.web.fc2.com/biology/">Biology</a></li>
   <li><a href="http://easai.web.fc2.com/travel/">Travel</a></li>
   <li><a href="http://easai.web.fc2.com/phyla/">Phyla</a></li>
   <li><a href="http://easai.web.fc2.com/homepage/">Homepage</a></li>
   <li><a href="http://easai.web.fc2.com/biochemistry/">Biochemistry</a></li>
   <li><a href="http://easai.web.fc2.com/neuroscience/">Neuroscience</a></li>
      </ul>
      <li>Lignuistics</li>
 <ul>
            <li><a href="http://easai.web.fc2.com/linguistics/">Linguistics</a></li>
 </ul>
      <li>Nature series</li>
 <ul>
   <li><a href="http://easai.web.fc2.com/aves/">Aves</a></li>
   <li><a href="http://easai.web.fc2.com/eutheria/">Eutheria</a></li>
   <li><a href="http://easai.web.fc2.com/lepidoptera/">Lepidoptera</a></li>
   <li><a href="http://easai.web.fc2.com/odonata/">Odonata</a></li>
 </ul>
    </ul>
スタイルシートもあげておきます(2013-12-05)。
body
{
display:box;display:-moz-box;display:-webkit-box;display:-ms-flexbox;
}
ul#menu
{
width:180px;
font-family:sans-serif;
font-size:18px;
color:gray;
margin-left:10px;
margin-right:60px;
}
ul#menu,
ul#menu ul
{
  list-style:none;
  padding:0px;
}
ul#menu li
{
    border:1px solid #e0e0e0;
    background:#ececec;
    height:50px;
    padding:10px;    
}
ul#menu ul
{
    display:none;
}
ul#menu ul li
{
    background:#fafafa;
    font-size:16px;
    height:30px;
}
ul#menu ul a
{
    text-decoration:none;
    color:gray;
}

火曜日, 7月 23, 2013

Stylishで「こちらのユーザーもフォローしてみませんか」を消す

つい先ほどツイッターのアカウントに行ったら画面上のほうにどどどーっとむさい顔がずらりと。

うわっっなんだ、知らないぞこんな連中は、ということで何かと思えば

「こちらのユーザーもフォローしてみませんか」

と書いてある。やめてくれー

Twitter Remove Recommendations

というのは愚痴であるので、しっかりアドオンで消す方法を探してみました。

ブラウザはFirefoxです。Stylish というアドオンを使ってみました。

Add to Firefoxボタンを押すとインストールが始まります。

ブラウザを再起動すると、 インストールが完了します。

左上 Firefox ホームメニューから Add-ons を選択。
 
左のメニューから、User Styles を探し、クリックします。

Write New Style ボタンをクリックし、新しいスタイルを作成します。

名前は Twitter Remove Recommendations とでもつけておいて、スクリプト部分にはこのような記述を書いておきます。


@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("twitter.com") {

div.empty-timeline-footer
{
display:none;
}

}

スタイルを保存して、ツイッターのアカウントページに行くと

余計なお世話が見事に消えてくれました。

おせっかいやめろー > ツイッター


ついでに Google News の写真・動画も消します(2013-10-23)。


@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("news.google.com") {

img.esc-thumbnail-image,
div.item-image-wrapper,
div.media-strip-video-wrapper
{
display:none;
}

}

金曜日, 7月 19, 2013

計算可能関数

計算可能関数

性質1.基本算法が含まれている
          1. 定数関数 2. 射影関数 3. 後置関数
性質2.閉包である
性質3.万能関数 枚挙性がある
性質4.流れの制御・選択
性質5.パラメータ性

Churchの提唱
計算可能な手続きと性質1~5を満たす算法の族は一致する。

帰納的関数論
評価可能な全値関数全てに対し、ある整数に対しf(m)=mが成立する。

計算可能なアルゴリズムの族
1.TM (Turing Machine)
2.λー算法
3.μー再帰関数
4.一般帰納的関数

木曜日, 7月 18, 2013

オキソ酸 カルボン酸 ヒドロキシ酸 オキシ酸 の違い

カルボン酸
用語だけの話ですが、カルボン酸ってのはいいと思います。教科書にあるやつですね。RCOOHで表される酸です。

オキソ酸ってのはカルボン酸を含むある種の酸の総称です。

ヒドロキシル基(-OH)とオキソ基(=O)を持つ酸のことを言います。

この定義でいくと、炭酸がオキソ酸に分類されます。
炭酸

でややこしいのがヒドロキシ酸で、ヒドロキシル基を持つカルボン酸のことをいいます。カルボン酸の一種なわけですが、時にオキシ酸という用語が使われることがあるので紛らわしい。

ヒドロキシ酸
集合記号であらわすとこうなります。

オキシ酸 ⊃ カルボン酸 ⊃  ヒドロキシ酸(オキシ酸)

木曜日, 6月 20, 2013

jQueryで要素を置き換えた場合の問題について

jQueryで要素に代入すると領域が確定できなくなるらしい。画面全体に領域が設定されているようだ。さらに、内部要素を追加するとその部分はイベントにフックできないらしい。

ブロック要素にロード時に要素を定義。
さらに、クリックイベントに関数をフック。
するとウインドウ領域全体でクリックイベントで関数が起動。

ブロック要素にロード時に要素を定義。
その要素にクリックイベントをフック。
するとフックされない。

他の要素が絡んでいないかどうか、もう少し追ってみる必要があるわけですが、もう疲れた。ので今日はここまで。


金曜日, 4月 19, 2013

PHPでJava風のprintStackTrace()を実現する方法

PHP では try-catch が使えます。

catchで捕まえた例外をどのように処理するかはまた人それぞれだとは思いますが、Java には printStackTrace() という便利な関数があります。

コールした関数を順に出力してくれる関数です。

ここではPHPで関数コールを出力する関数を実装してみました。

例外処理で呼び出すと、関数呼び出しのトレース文字列を出力します。

    try
      {
 // 関数本体
      }
    catch(Exception $e)
      {
 echo trace(debug_backtrace());
      }

関数のコールを順に出力するための関数です。

function trace($traceList)
{
  $html="";
  foreach($traceList as $debugInfo)
    {
      $pathInfo=pathinfo($debugInfo['file']);
      $baseName=$pathInfo['basename'];
      $funcName=$debugInfo['function'];
      $lineNum=$debugInfo['line'];
      $html.="@$funcName ($baseName: $lineNum)";
    }
  return $html;
}

水曜日, 4月 17, 2013

PHPでJava風のstartsWith()とendsWith()がない件について

読みやすさ、美しさというのもプログラムの質に影響してくるとおもいます。

startsWith(), endsWith()という関数がJavaにはあります。

文字列を比較して、指定した文字列で始まっていれば startsWith()は true を返します。

指定した文字列で終わっていれば endsWith()で true を返します。

Javaのネーミングセンスは最高だと常々思うわけですが、これらの関数はPHPにはありません。

substr_compare()という関数を使って startsWith()とendsWith()を実現してみました。

#文字長を制限し比較するよう変更しました(2013-06-05)。

function endsWith($haystack,$needle,$case=FALSE)
{
  $len=mb_strlen($needle);
  if(0<mb_strlen($haystack) && mb_strlen($needle)<=mb_strlen($haystack))
    $res= (substr_compare($haystack,$needle,-$len,$len,$case)==0);
  return $res;
}

function startsWith($haystack,$needle,$case=FALSE)
{
  $res=false;
  if(mb_strlen($needle)<=mb_strlen($haystack))
    $res=(substr_compare($haystack,$needle,0,mb_strlen($needle),$case)==0);
  return $res;
}


火曜日, 3月 26, 2013

Firefox で「パスワードを保存しますか」が危険な件について

Firefoxのデフォルト設定では、ログイン時に
 「ID/パスワードを保存しますか?」


と聞いてきます。

ここでID/パスワードを保存すると、次にログインするときには自動で値が設定されます。

確かに便利な機能ではあるんですが、これなんとテキストでそのまま見えてしまうんですね。

パスワードはパスワードであって、テキスト表示されるのはセキュリティ上問題がある、と考えられる方は以下のサイトでパスワードを削除できます。

「オートコンプリート」機能で保存されたパスワードの削除方法

 

木曜日, 1月 10, 2013

jQueryでページ内移動するには

ページ内移動には、ページ内アンカータグなどを指定して移動します。

index.html#position といった形で指定してやると、その箇所にページがスクロールします。

ページ内アンカータグについては、アンカータグでname属性を、divタグでid属性で指定します。

では、jQueryではどう処理するか、というのが表題の「jQueryによるページ内移動」です。

以下はアニメーションでページをスクロールするスクリプトです。

     var y=getY(document.getElementById("top"));
     $('body,html').animate({
      scrollTop: y
   }, 800); 

木曜日, 11月 29, 2012

Microsoft Seminar: "The New Era of Work" (Windows 8)

Chicago
At the Microsoft hosted seminar "The New Era of Work", it claimed the year 2012 is an important era for the operating systems, which will incorporate touch screen capabilities, mostly due to the widespread use of mobile phones and tablets. 

Windows 8 does come with the brand new Metro style interface with boxes occupying the screen rather than icons, together with gesture recognition.  Swiping down will close the applications.  SNS updates will be tied with your directory information.  Picture password.  Start typing in and the app comes up, the Microsoft IT evangelist Brian Lewis told the audience.  It took him half a year just to come across the feature, he said. 
IT Pro Evangelist: Brian Lewis

Microsoft has a Metro style app store online.  The apps are searchable there as well, including those being sold online.  On app search box, a question came from the audience.  Can you set parental permissions? There the speaker offered a very modern answer to all possible questions.  Go online, visit his site, ask him the question there. 

http://mythoughtsonit.com/ITcamp/

There should be a lot of questions indeed.  Microsoft claims to have authority over all Metro apps distribution.  Developers need to get its approval to put their apps online for use for other machines than theirs.  Can Microsoft then take the sole responsibility of the apps? How long will be the wait time?  Would the developers' rights be severely restricted?  There are reports that the pre-installed Windows 7 apps seem to run, but the installers may not work.  It costs $49 (personal) or $99 (corporate) to submit your apps for sale at the Windows Store.

Windows 8 is going to be installed in EVERY machine available in the market.  FSF, the Free Software Foundation is asking for signing the petition: "Windows 8 doesn't offer me the privacy and freedom I deserve. I won't be upgrading to Windows 8; instead, I'm standing with the free software movement."

We had a little discussion on this topic back here.  Would it is not practical for Microsoft to have oversight over all Metro apps?  The Apple store does that, they told me.  It is for security and to make money. 

Other topics that got many asking questions is on Windows to go or USB/SSD to go feature that can put your system in the removable storage and boot the system from there.  There are such bootable image available online but not from Microsoft official site.  Now it is all possible to carry your system along wherever you go.  The questions from the audience: Security?  Partitions?  Data protections?  Will it erase the data?  There was no question, however, on how to prevent pirated such bootable systems from being sold.  Will it be protected from piracy?

Microsoft Seminar: "The New Era of Work" (Surface)

Chicago

Microsoft hosted a seminar in Chicago on Wednesday titled "The New Era of Work".

Microsoft claims this is the new era of for Operating Systems.  The Internet, iPhone/iPad, and cloud has changed the nature of computer systems. 

Microsoft has long been pushing for tablet machine for some time.  And the competition is a nice thing.  The latest iPad 4 offers hardly hardware improvements other than resolution.

At the conference room, the Surface RT's were on display along with Lenovo and Toshiba machines.  All those tablet machines have no home buttons.  Swiping out to the edge does the trick.  And they come with keyboards. 

At the Surface booth, they explained to me that Surface RT has somewhat unique capability that Apple's iPad does not.  It works as a remote terminal and runs apps on the host machine just like a workstation.  That, is a wonderful idea, I thought.  There could be many application for it.  "Can you show me how it works?" I asked.  The machines are not connected, they told me.  They were not able to show me how it works as a terminal. 

The only reason why iPad or iPhone can not be loaded as a removable drive is because of security concerns.  The MP3's and eBooks are copyright protected.  If only those directories that contain the copyrighted files then they will be more accessible by the possibly criminals.  What the remote terminal does is that the files in tablets would be accessible freely.  The remote terminal apps might have security concerns. 

Instead of that wonderful feature, they showed me the Surface apps fully loaded with shop icons.  The sight of the ads of all those stores on the screen overwhelmed me.  It looked much bigger than the simple and elegant Apple Store.  "This may change the business style, and consumer life style", keynote speaker said. 

So how about Surface Pro?  The new version of Surface runs on Intel chip.  It means, it runs Windows 8.  And that means, every desktop apps should work on Surface Pro.  Would it be a killer machine?  Does that mean my desktop apps works on my tablet machine?  "You must recompile all apps for that machine," one of the participants told me.  "Surface Pro will be coming in January," the Microsoft people told me.  "The pricing is not yet announced.  It will be as big as the RT machine," they said in answering my questions. 

to be cont.

火曜日, 11月 27, 2012

ボックスレイアウトが absolute で破綻

表題の通りです。

Firefox, IE でボックスレイアウトを使用する場合。

位置指定に absolute を指定するとレイアウトが壊れます。

<div style="display:box;display:-moz-box;display:-webkit-box;position:absolute;top:100px">
<div style="width:100px;height:100px;border:1px solid blue"></div>
<div style="width:100px;height:100px;border:1px solid blue"></div>
</div>

見事に人柱となった気分です。

#厳格とかいう問題じゃないですよね。これ。

月曜日, 11月 19, 2012

Google Analytics API: フィルターをつける

本日の出来事。

ダメ上司の典型。「これネットで見付けんたんだけどどお」
どおって... システム全部書き直せって?

え、あのタグってこちらがつけたものじゃないし、むこうが取り外すだけで話は解決じゃないでしょうか。
こちらがフィルターつけて取り外すのって、それって仕事の一部ですか?!

で、仕事が遅くなったとかいって嫌がらせ。最低。最悪。ほんと性格と頭が悪い。

愚痴はさておいて。本題。

Google Analytics のデータを取り出す方法。

フィルターをつける場合について、書いておきます。

$filter="ga:hostname!=ホスト名";
$ga->requestReportData(homepageId,null,array('pageviews','visits','bounces','entrances','timeOnSite','exits','newVisits'),null,$filter,$startDate,$endDate);

火曜日, 11月 13, 2012

IEでリンク切れ画像を表示しない

リンク切れ画像は、Firefox では表示されません。

ところが親切設計の IE や Chrome では、画像が見当たらないとそれ専用のアイコンを表示してしまいます。

これで困ったのが、画像リンクを利用してスクリプトを走らせるハックを使うアクセス統計サービスの場合。

きちんと表示されれば問題なく img タグだろうとなんだろうと構わないわけですが、ところがサーバーの都合でスクリプトが動かないという状況が発生。

動かないだけ「画像ありません」というアイコンかしっかり表示されてしまいました。

アクセス統計などアナリティクスに任せとけばいいのに、マイナーブランドなど使うからサーバーの都合で対応をせざるを得ないはめに。

そこで、画像切れリンクは問答無用で「表示しない」という方針といたしました。これで振り回されずにすみます。

本題へ。リンク切れ画像の IE と Chrome 対応策です。

img タグのすべての要素を取り出し、画像読み込みが終らないものをすべて非表示とすればよいようです。

$(function(){

$('img').each(function(){

if(!this.complete){
$(this).hide();
return;
}

});

});

PHP: 定数を扱う

プロジェクトごとの定数を扱うクラス Config\Constants の紹介です。 <?php namespace Config; class Constants {     public const DB_USER = "linguist...