カテゴリー: Development

iPhoneアプリ勉強再開

キックボードに乗ってた子供が交差点に飛び出してトラックにはねられて死んだらしい。
子供やその親には気の毒な話だが、もっと気の毒なのはトラックの運転手だ。
こんなんで人殺し扱いされてはかわいそうだし、ちゃんと法改正して、歩行者にも相応の責任をきっちり負わせるべきだと、私は思う。
(この場合、キックボードを買い与えていた親にも)

自転車もそうだが、あまりにも手軽すぎるために、運転能力(技術と知識)がなくても平気で乗っている人が多いが、その責任は自動車運転と変わりなく取らせるべきだというのが私の考えである。
社会に出るからにはそれ相応の責任が伴うということを子供のころからわからせるのが大人の役目だとも思う。
当然、大人には、さらなる自覚と行動が求められるはずである。

さて、Xcodeだ。
夏のはじめに早くも夏バテして何のやる気も起きなかったのだが、ようやくMacbookを立ち上げてアプリ作成を再開しようという気になった。
この扱いにくい開発環境もStoryboardとObject-Cファイルとの関連付けや、簡単な画面遷移ならチョコチョコっとできるようになった。
値の引き渡しも、とりあえずAppDelegateに入れて・・・みたいのものであればできる。

他の人が1,2週間ぐらいでわかったことを私は半年ほどかけてようやく理解できた。
(なんて軽い脳みそなんだ・・・)

できるようになりだすと、楽しくなってくるのだが、どうせまた(自分にとっては)巨大な壁が立ちふさがってくれそうだ。

今作っているアプリは、インターネットの接続確認と、XMLのパースがうまくできれば!ってところまで来ている。

やっと人に見せられるようなアプリができそうでウレシイ。

Win8.1/iOS/Xcode5

タブレットが欲しいんだけど、iOS7がでる秋までとりあえずは待ち。
Win8.1がどんなんかによって、PCを新しくするのもありかなぁ・・・などとVAIOを物色してみる。
Xcode勉強中だが、Xcode5が出るってので、今まで作ったやつ使えなくなったらどうしよう・・・と焦る。

あぁ、なんかモヤモヤするぅ!

ExcelVBA覚え書 プロシージャ呼出し順

Excelマクロのお勉強。
WorkbookやFormといったオブジェクトにデフォルトで備わっているプロシージャ(メソッド)って、どんな順番で呼び出されるのよ?って思ったので調べてみた。
今更だけど・・・
ちなみにバージョンは2003。

ブックを開いたとき(起動時)
Workbook_Open
Workbook_Activate
Workbook_WindowActivate

※ブックをVisible=FalseにしたときはActivateプロシージャは走らないと思うので、基本はOpenプロシージャに処理を書く。

ブックを閉じるとき(終了時)
Workbook_BeforeClose
Workbook_WindowDeactivate
Workbook_Deactivate

※起動時と同様。

フォームロードしたとき
UserForm_Initialize
フォーム.Showしたとき
UserForm_Layout
UserForm_Activate
フォーム.Hideしたとき
なし
フォームアンロードしたとき
UserForm_QueryClose
UserForm_Terminate

QueryCloseとTerminateの違いは何?って思ったけど、QueryCloseはアンロードの起動処理で、Terminateはホントのアンロード処理という感じ。
つまり、アンロードの起動処理なのでアンロードするかどうかプロシージャ内で分岐できるのがQueryClose。CancelパラメータにTrueを設定するとアンロードを中止できる。
QueryCloseで何事もなければTerminateプロシージャが呼び出されて、アンロード処理の記載ができるようだ。

PostgreSQL覚書 カンマ区切り→縦

つづけて、1つのカラムの中にカンマ区切りでデータが入っていた場合に、
これを縦にする方法。


SELECT regexp_split_to_table(item_cd,’,’) item_cd FROM table_name

item_cdカラムに「a,b,c」と入力されているとすると、出力は

a
b
c
となる。

PostgreSQL覚書 横→縦

財布を落とした。
警察へ行った。
紛失届を作成するのにあれやこれや聞かれて、答えれば答えるほど(なくしたものの大きさに)堪える・・・
って、こんな時にもダジャレが出るぐらいに凹んでる。

さて、仕事しよう。

data1,data2,data3 というカラムがあるとして、それを

data1
data2
data3
と縦に並べたいときのやり方。

SELECT unnest(array[data1, data2, data3]) as data_col
FROM table_name;

PostgreSQL覚書 現在の接続数

PostgreSQLで現在の接続数をみたい場合のSQL文

詳細
SELECT * FROM pg_stat_activity
ORDER BY query_start;

サマリー
SELECT datname, usename, COUNT(*)
FROM pg_stat_activity
GROUP BY datname, usename;

PostgreSQL覚書 型変換して並び替え

文字型のフィールドを数値化して並び替えする場合はキャストするらしい。

ORDER BY cast( [文字型フィールド] as int)

って感じ。
([文字型フィールド] をフィールド名に変える。)

このブログのPostgreSQL情報もどんどん増えてきていい感じだ。

PostgreSQL覚書 日付と曜日

PostgreSQLは配列を使えるので、簡単な書き方が何かあるはずだと思っていたら、やっぱりあった。


SELECT
TO_CHAR(current_timestamp,’YYYY年MM月DD日’) ||
(ARRAY[‘(日)’,'(月)’,'(火)’,'(水)’,'(木)’,'(金)’,'(土)’])
[extract(‘dow’ FROM current_timestamp) + 1] as now_date

“2013年04月18日(木)”

ってな感じで表示される。
便利だなぁ~~~

PostgreSQL 8桁日付の日付加算

8桁で日付を表しているときの日付計算について

下の例では、8桁日付のところを文字列にしているが
 COALESCE(TO_CHAR(20120921,’99999999′),’99991231′)
とか置きかえてやれば、数値でも転用できる。

——————————————

SELECT to_char(to_timestamp(‘20120921′,’YYYYMMDD’) + ’20 days’,’YYYYMMDD’) as add_date;

とすると、結果は “20121011” と返ってくる。

SELECT to_char(to_timestamp(‘20120921′,’YYYYMMDD’) + ’20 days’,’YYYYMM01′) as add_date;

とすると、結果は “20121001” と返ってくるので月初めの日付を取得することができる。

要は、TO_TIMESTAMPメソッドでタイムスタンプ型にしてやることのようだ。
TO_DATEでは計算はできなかった。

[2013/05/09追記]
select to_date(20120921::text,’YYYYMMDD’)
::で型変換(キャスト)してしまえば、もっと楽ってわかった。

PHP覚書 正規表現

はぁ~

正規表現は本当にイヤだ。
便利なんだが、とっかかりにくい。

それはさておき、メモメモ!
phpで値を定義するdefine関数の定義と値をとってきたい!などと思って、とりあえず作ってみた。


$arr1 = preg_split(‘/^define¥(|¥)¥;/’, $buf);
$arr2 = explode(‘,’, $arr1[1], 2);

本当はpreg_split 1回で済ませたいのだが、

define(AAA, 1);
define(ABC, “A,B,C”);

みたいな定義をしているもので、
「1つめのカンマは効いてほしいけど、2つ目以降は見てほしくないの!」
なことをしたい。
だけど、preg_splitでカンマで区切るのは1回だけ!っていう指定をどうやってやるのかわからんかったので、とりあえず、preg_splitで「define(」と「);」 で、

 array( “”, “AAA, 1”, “”)

という感じに分割させて、その後、

できた配列の2つめの文字列(上で言うと、”AAA, 1″)をカンマで2つの配列に分けよ!

ということでexplodeを利用してみた。

もっといいやり方ないかな・・・

PostgreSQL覚書 RETURNING句

私はPostgreSQLが好きだ。
無料だし、機能も結構充実してる。
MySQLのGUI管理画面はいかにも重そうなのだけど、PostgreSQLのはそんなに重くない。
(よく強制終了しているけど)

この間、他の人の書いたソースコードにRETURNING句があった。
一目見ただけで、何のためのものかは分かったのだが、
「こんなことできるんだ・・・」
と衝撃的だった。
INSERT INTO ….. RETURNING A,B
とかにすると、挿入したデータのカラム値を配列で返してくれるそうな。

便利だ!
Nextval()とか、CurVal()とかしなくてもいいのね!
なんて素敵なんだ!

HTML覚書 inputタグIMEモード切替

<携帯>
Docomo、au、Softbankの3社の端末で認識させるためには、istyleとmode属性を使う必要あり。

  1. [漢字] istyle=”1″ mode=”hiragana”
  2. [カナ] istyle=”2″ mode=”hankakukana”
  3. [英数字] istyle=”3″ mode=”alphabet”
  4. [数字] istyle=”4″ mode=”numeric”

携帯で注意することは、maxlengthプロパティ。
バイト数でみるケースと、文字数で見るケースの2通りあるので、漢字・ひらがな入力させる欄については、文字数×2に設定しておかないといけない。

<iOS-safari>
勝手にやってくれること、勝手にやっちゃうことに気を配らないといけない・・・

  1. [数値] type=”numeric” : 日本語/英字切替はしない。0から始まる数値は自動的に0を取り除くので注意。
  2. [TEL] type=”tel” : 先頭0を自動的に外されると困る場合は、数値入力でもこちらを利用する。
  3. [email] type=”email” : 自動的にメールチェックをするので注意。
  4. [PW] type=”password” : 日本語/英字切替はしない。

SVN覚書 hook

SVNやっております。

サーバにインストールできたし、ちゃんとApacheの設定で、HTTP経由で見れるようにもした。
trunkやらbranchesやらフォルダも作ったし、Importで初期ソースの登録にも成功した。
クライアントからはチェックアウトもコミットもできるようになった。
(そのあたりは、また、覚書にして保存しておかねば!)

でも、Hookができない。
Logを吐くのはうまくいったが、Updateできない・・・

で、便利なツール発見。
http://rakusai.org/svnhookgen/index_ja.htmlオンライン版 SVN フックスクリプト「Post-Commit」作成ツール

もう一回チャレンジする!けど、また明日・・・

PHP覚書 Oracleに接続するときの注意

PHPのOracle接続について、なんとなくわかったことを書いておく。

WindowsServer2008にApacheとPHPを入れたところ、OCI8のライブラリ情報がphpinfo()で表示されなかった。

なんでじゃぁ~~~~!!

と、迷っていたのだが、詰まるところPHPが32bit対応の場合は、Oracle自体も32bitでないと駄目なようで、
Oracleが64bitの場合は、32bitのOracle Clientを入れるとか、32bitで仲介するツール群をインストールするとかしなければならないようである。

もう1つの手といえば、おそらくPHP自体を64bit用にコンパイルすることだろう。
コンパイルしたものも実際にあるようだが、商用で使うのであれば、自身でコンパイルしておいたほうがいいと思う。

PHP覚書 MDB2 oci8_11gで接続(苦戦)

MDB2Oracle11gに接続しているのだが、なんだか実行速度が遅い。
これはひょっとすると、Oracle10gのクライアントをちゃんとアンインストールしなかったからなのでは?
と思い、Oracle関係のファイルをすべてアンインストール後、再度11gを入れなおしたのだが、これが災いして、11gに接続できなくなった。

php_oci8_11g.dllはモジュールが見つからないとかアラームが出て、Apacheもまともに起動できなくなった。

ウゲェ~

と思い、2,3日を悶々と過ごし、ようやく再接続に成功した。

原因がよくわからないのだが、
結局は、アンインストールしても環境変数にゴミが残ってしまっててダメだったようだ。
環境変数のPathやTNS_ADMINが正しく設定されているか確認後、Windowsを再起動してApacheは起動できた。
phpinfoで確認して、oci8が動作していることも確認。

で、実行速度は・・・と言えば、変わらなかった。
タイムアウトでシステムエラーになるので、php.iniのmax_execution_timeの値を変えてみて、とりあえずエラーにはならないようにしたのだが。

結局SQL文が悪いのか?

VB.net覚書 CSVファイルを読む

どこにでもTipsはあるが、メモ

Imports System.IO.StreamReader を忘れずに。

'Shift-JISでpathのファイルを全量取り込んでClose
Dim sr As StreamReader = New StreamReader(path, System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim buf As String = sr.ReadToEnd()
sr.Close()

'改行コードで分断
Dim buf_line() As String = csv_buf.Split(vbCrLf)
Dim buf_item() As String
Dim cnt As Integer = buf_line.Length

'空ファイルである場合終了
If line_cnt <= 0 Then
    Return False
End If

'csvを1行ずつ処理
Dim i As Integer = 0
For i = 1 To cnt - 1 Step 1
    buf_line(i) = buf_line(i).Replace(vbCr, "").Replace(vbLf, "").Trim()
    If buf_line(i) <> "" Then    'Length>0の方がいいかも
        buf_item = buf_line(i).Split(",")
    End If
Next i

CRCLでぶちってもLFが残るみたいなので、カンマでSplitする前に改行コードを全部Replaceさせた。
普通はCRだけででぶちって、LFは改行として使うのだろう。(セル内改行として必要な場合がある・・・)

全量一括で取り込んだ方が、速度としては早い。
(メモリは喰うので、大量の場合は1行ごとに取り込んだ方がよいのだろう)

Oracle覚書 CREATE USER

ようやくOracle。
Silver Fellowという資格は持っているが、とったのが10年ほど前なのでもう忘れてしまった。

仕事で使わないと忘れてしまうのですよ。

もうDBはできているという前提で。
(DBは管理ツールで作成できるんで、まぁいいとしても、SYSTEM権限のPWって、どうやって決めるのだ・・・と思いつつ、後日に持越し)

CREATE USER [USER_NAME] IDENTIFIED BY [PASSWORD];
GRANT CREATE SESSION TO [USER_NAME];

で、とりあえずユーザをつくって権限を与えるところまで完了。
テーブルとかは、Object Browzerで作るからまぁいいや。

PostgreSQL覚書 日時の差分を日数で取得する方法

日付の差分を日数で取得する方法
first_date,last_dateがTimestamp型の場合、差分は1day 10:20:30 みたいに、日数と時間で表示される。

だけど、日数だけで取得したいときは、

SELECT first_date,last_date, cast(last_date as DATE) – cast(first_date as DATE) term FROM [table_name]

と、キャストして実行するそうだ。
勉強になった。