カテゴリー: Development

PostgreSQL サービス開始できなくなる

そもそもの発端は、私がPostgreSQLのpostgreユーザのパスワードを忘れてしまったことにある。

忘れてしまったので、コマンドプロンプトを起動させて再設定をしたその後、pgAdminでローカルのDBにアクセスできなくなってしまった。

あぁ~、またパスワード忘れたかなぁ・・・
あぁ~、再インストールかなぁ・・・

などと思ってコマンドプロンプトからpsqlを起動させてみた。
「つながらないよ」「ホントにDBあんの?」みたいな返答が返ってきたので、「あるよ?」と思ったが、「サービス開始されてないんじゃない?」って思って、Windowsの管理画面を見る。

案の定、サービス起動されてませんがな・・・

パスワードを変えちゃったせいで、起動できなくなっていたようで、さっそく新しいパスワードを設定してサービスを開始。
pgAdminで接続したら、ちゃんと見えるようになった。

なんか、自分で原因作って、自分で悩んで、自分で解決って・・・
一人で遊んでしまった。

PHP覚書 json_encode未対応に対応する

json_encodeはPHP5.2から対応ということで、5.1の環境では使えない。

ということを今日知った。

終わったと思って悠々としていたのに、今日はその対応で必死・・・

といっても、無事終わったけど。

本当にネットって有難い。欲しい情報が見つかるときは・・・だけど

やり方はいろいろあるようだけど、参考にしたのはこのサイト。
ある1つのサンプル PHP5.2以前の環境でのjson_encode

このほか、Services/JSON.phpを取り込む方法もあり。

キュニナル!! PHPのバージョンが低くて「json_encode()」が使えないでござる

なるほど・・・
でもさ、本当は、バージョンぐらい上げてよ!と言いたい。
(まぁバージョン上げたら次はWarningばっかり出るようなことになることもあるんだけど)

PostgreSQL覚書 PSQLを使ってSQLファイルを実行

普段はpgAminを使ってSQLを実行しているのだけど、SQLファイルがデカすぎて、ファイルを開けない場合は、PSQLをつかうか、ファイルの中身を分散してSQLを流していくしかない。

ということで、PSQLを使ったSQLファイル実行。

コマンドプロンプトを開いて、cd等でpostgreSQLのpsql.exeのあるフォルダ(bin)まで遷移し、以下のコマンドを実行

psql -U yyy -h localhost xxx
ユーザ yyyのパスワード:(ここにパスワードを入力してEnter)

xxx => ¥i dump.sql

(xxx:DB名、yyy:ユーザID、dump.sql:SQLファイル名)

DBがローカルにない場合は、localhostの箇所をDBサーバーのIPアドレスに変えればよい。

この例の場合はdump.sqlをpsql.exeと同じフォルダに入れている。

終了するときは、

xxx => ¥q

でpsqlを終了する。

Macは直感的?

「Macは直感的」っていう人がいるけど、私にはサッパリだ。

iPod Touchを買って、手に持った瞬間、「電源ってどこ?」だったし、どうやって電源OFFにするのかも「???」だった。

Macにしても同じ。

マウスボタンが1つのほうがわかりやすい?

2つぐらいなら使いこなせるでしょう。
Windowsを使ったあとでMacを使うと、もう鬱陶しかった。
(家でMacだけ使ってた時は、全然そんなことなかったけど、仕事でWindowsを使い始めたら一変した。)

「な~んで、右クリックがないの!」

みたいな。
もう、マウスパッドの使い方なんて魔法にしか思えん。
でも、ショートカット覚えたら、ショートカットのほうが間違えがないし早い。
(Macってマウスジェスチャじゃなくて、ショートカットだと思う。)

なので、正直、「Macは直感的」って言ってる人は、Macをわかってないか、日本語の使い方間違えてるか、どちらかだと思う。
(私もわかってないけどサ)

そんな私だが、時流に勝てず、今Macを触っている。
というのも、会社でいよいよ「iPhoneアプリを作ってみるべし!」ということになり、私は今Macの使い方から勉強中。

PostgreSQL覚書 配列,縦→横,カンマ区切り

以下のようなテーブルがあったとして
【t_sample】
id,element,rank,…
1,’A’,1,…
1,’B’,2,…
1,’C’,3,…
2,’D’,1,…

これを
1,’A,B,C’
2,’D’
ってな感じで取得する方法

SELECT id
 , ARRAY_TO_STRING(ARRAY(SELECT element
                         FROM t_sample a
                         WHERE a.id = b.id ORDER BY a.rank),',') elements
 FROM (SELECT id FROM t_sample GROUP BY id ORDER BY id) b

ARRAY_TO_STRING:取得した配列をARRAY_TO_STRINGでカンマ区切りにする。

SQL文が少々複雑で面倒だけど、使い勝手はよさげ。

[編集メモ] 2017/3/29 タイトルと見栄えを修正

Excelマクロ覚書 HappyMonday算出

休日を自動的に作成するマクロを作成中、ハッピーマンデーってどうやって求めるのかを考えた。

色々サイトを見たのだけれど、「結局どうやってやるのよ!」とか、「なんでこんなにこねくり回してるのよ!」とか、まぁとにかくあんまり参考になりそうなロジックがきれいに提示されているサイトがなかったので自分で作った。

引数に、年、月、週を設定すると、Date型の日付が返る仕組み

Private Function GetMondayDateFromYearMonthWeek(ByVal y As Integer, ByVal m As Integer, ByVal w As Integer) As Date

Dim t As Date

t = DateSerial(y, m, 1)
t = DateAdd(“d”, (8 – Weekday(t, vbMonday)) Mod 7, t) ‘1週目の月曜日
GetMondayDateFromYearMonthWeek = DateAdd(“d”, 7 * (w – 1), t)

End Function

例えば、GetMondayDateFromYearMonthWeek(2012,9,3) とすると、戻り値は2012/9/17となる。

たぶんうまくいくと思うけど、2012年でしか試してない・・・

PostgreSQL覚書 列定義を変更

alter table [table名] alter column [column名] type numeric(1,0) using 0 ;
alter table [table名] alter column [column名] SET NOT NULL;
alter table [table名] alter column [column名] SET DEFAULT 0;

1つめは型変更(数値型に変える、すべて0に置きかえる)
 using to_number([column名],0)として、カラムの値を数値に置き換える場合もあり。
2つめは、NOT NULL定義にする場合。NOT NULLを外す場合はDROP NOT NULLとする。
3つめは、Default値の定義。こちらもDROP DEFAULT とすれば外れる。

PHP5技術者認定初級試験を受けてみる

PHPの試験を受けてみようと決めたのが月の初めだったか。
初級の後、続けて上級も受けようと、アールプロメトリックで予約を取ったが、あまりに時間がないので上級の予約をキャンセルして初級の試験だけにすることになった。

今月は会社で土日出勤しなければならず、とても上級試験に受かりそうもなかったから。
上級試験の合格率は10%強ということで、結構厳しいようだ。
そこへいくと、初級試験は7割弱は合格するレベルなので、まぁ頑張れば受かるかな・・・と。

まずはじめに、認定教材である「PHP5技術者認定初級試験対応 PHP公式資格教科書」を買って一読。
そして次に、ITトレメの模擬問題をやってみたのだが、教材レベルではとても解けそうにない問題が数多くあり、急いでオライリーの「プログラミングPHP 第2版」を買いに走る私。

「プログラミングPHP 第2版」を順に読んでいくものの、とても試験日までに最後のページまでたどり着けそうもないため、途中で断念。

試験の前々日、前日は、再度「PHP公式資格教科書」とITトレメの模擬問題をやって試験に臨んだ。

問題はよくわからないものもあったが、それでも大学受験とかと同じ要領で答えていけば大抵はあたるのではないかと思う。
たとえば、「必ず・・・」とかいうのは間違い、とか。

まぁ、そんなこんなで、100点には届かなかったものの、30分強で試験を終えて無事合格はできた。
試験問題について書くことはできないけれど、自分が間違えたのはマルチバイトのメール送信のところだった。
ちゃんと教科書にも書いてあることだったのに・・・
Mix-inって言葉が出てきて、なんじゃそれ?って思ったけど、多重継承のことだった。

認定教材だけでは合格できないと思うけど、ITトレメを一通りやれば受かるかなぁと思う。

Excel覚書 どのバージョンで起動させるか

例えば、2003と2007両方インストールしていた場合、後でインストールしたバージョンで起動するようになっているので、常に2003で起動させたいというときは、以下のコマンドをスタートボタン>ファイル名を指定して実行で実行させる。

“C:\Program Files\Microsoft Office\OFFICE11\excel.exe” /regserver

パスはインストール環境によって違うので注意。
OFFICE11ってのをOFFICE12とかに変えれば、常時2007で起動とかになるハズ。

便利ツール 文字検索・置換 Devas

対象フォルダの設定、複数拡張子指定、検索文字列指定で検索ボタンをクリックすると、該当行の一覧がツラ~~~と並んでくれる。

そして、チェックをつけた行だけ文字置換をすることができる。
(同じ行で置換するものとしないものっていう対応はできないと思うけど)

行の実際の内容が表示されるのが便利。
(チェックをつけたファイルだけ置換ってのはあるんだけど、行にチェックをつけるものってあまりない)

PostgreSQL覚書 coalesce(NVL)

OracleでいうところのNVLって、postgreにはないと思ってたけど、あった。

COALESCE関数:coalesce(paraA,paraB)

paraA is NULL なら、paraBに置きかえてくれる。

jQueryを使ってみる

最近色々やってる。
VBマクロに、actionscript、phpと、それぞれ微妙に違うので、鬱陶しい。

そして今回は、JavaScript、jQueryだ。

やってみると、まぁ、カンタンな動的ページがカンタンに作れてしまうので、なんだか嬉しくなっちゃって・・・

まぁ、ありがたいことだ。

ActionScriptの面白さ

とか楽しさとか、色々できるのねっ!とかというのは、wonderflを見てて知ってたけど。
やっぱり開発してて面白い言語というのはいいなぁと思う。

この1月、業務でAirアプリを作成することになり、サーバ側のJavaの処理に送るやり方やら、フォルダ内のファイルを取得する方法やら、まぁいろいろ勉強した。

きっちり動かすまで大変だったし、FlashでのAir開発と、Flexでのそれとでは、微妙な違いがあったりするので、

あっちでできてなんでこっちでできないの!

なこともあったけど、まぁよい勉強になった。
次からは、phpでの開発に戻るのだけれど、同じように、多少「キーーーー」とか「ウギャァ・・・」とか言ってたとしても、スムーズにいく開発にしたいものだ。

auでiPhone5、willcomでストラップフォン

いやぁ~、嬉しいニュース。

まずは、iPhone5がauでも使えるようになるらしいニュース。

うちの家族は、au by KDDI&家でもKDDIなので、これはGood News。
ポシャらないことを願います。
そして、これに触発されて、もっと面白いAndroid携帯が出てくることも楽しみにしておきます。

そして、willcomでストラップフォン登場。

ストラップフォン WX03A

待ってました!

Willcomなら出してくれるのではと思っていたケド、ようやく・・・kao21.gif

家族で唯一willcom PHSを使用している私。
(どうせ、電話架けないし、架かってもこないし・・・あぁサミシイ人生だ。)

W-VALUE契約が12月に終わるから、検討してみよう。

ActionScript3.0覚書 SimpleButton

ActionScriptでボタンを作るやり方は色々あるようで、MovieClipを利用しButtonMode=trueにするやり方や、fl.controlsを使ってしまうやり方。
そして、SimpleButtonを使うやり方。

var sb:SimpleButton = new SimpleButton();
var b1:Sprite = new Sprite();
b1.graphics.beginFill(0x009966,1);
b1.graphics.drawRect(0,0,100,25);
b1.graphics.endFill();
//--  中略 --
sb.upState = b1;
sb.downState = b2;
sb.overState = b2;
sb.hitTestState = b2;

リファレンスに、
SimpleButton(upState:DisplayObject = null, overState:DisplayObject = null, downState:DisplayObject = null, hitTestState:DisplayObject = null)
って、書かれていたものだから、upState以外は指定しなくっても大丈夫なのかと思ってたらそうではなかった。
表示はされるんだが、ボタンとして機能してない。

どういうことなんだ!kao21.gif

って、昨日から悩んでたけど、今日分かったことは、「後からでもなんでも、とりあえず指定してやらにゃぁならん」ということだった。

ということで、up,down,over,hitTest すべてのStateプロパティにSpriteをあてがってやると、ちゃんとボタンとして機能してくれた。

かる~いワナだよ、これは。

ActionScript3.0覚書 AirのWindowが閉じるときに処理を入れたい

Flash ProfessionalでAirを開発中。
Airのウィンドウの右上の×ボタンをクリックされたときに確認ダイアログとかを出す処理を入れたいのだが、

先日載せた、

NativeApplication.nativeApplication.addEventListener(Event.EXITING, ファンクション名);

だと、どちらかというと終わったときの処理になってしまう。
FlexでAirを開発している場合の書き方は、いろんなページで書いてあるのだけど、Flashで開発してるものだから、イマイチ参考にならん。
(私、応用力とかないし・・・)

で、上司にまで「探してるけど出来ないんですぅ~」と泣き言言うと、上司も探してくれた。
「できない、デキナイ・・・」と思いながら、何気なく下のコードを書いたら、想定どおりに動いちゃった。

stage.nativeWindow.addEventListener(Event.CLOSING, ファンクション名);

で、指定したファンクションのなかにダイアログ表示処理を書けばよいことが判明。107256.gif

自己解決・・・しちゃったヨ。

でも、上司さんありがとう。時間とらせてごめんなさい。kao29.gif

ActionScript3.0覚書 文字列とバイト数

通常のTextFieldだと、複数行指定してやれば勝手に改行してくれる。
だが、ラジオボタンコントロールのラベルは改行してくれない・・・

で、ラジオボタンのTextFieldのwordWrapプロパティとかをいじればよいということ。

FLASH-JP.COM RadioButton コンポーネントの文字を自動改行させたい

だけど、そもそも指定バイト数で折り返したいときってどうすんの?と思って検索したところ、ありがたい記事発見。

yoshiweb.NET-blog ActionScriptで文字判定

この記事を元にチャレンジ。

checkCodeは参照先そのまま。
checkHalfは、バイト数を返すように変更。
getStrBytesTotalは、checkHalfの変更に伴い変更。
setReturnCodeは、オリジナル。

// 指定バイト数(default=60)で折り返し
function setReturnCode(str:String, max:int=60):String {
	var cnt:int = 0;
	var len:int = str.length;
	var s:int = 0
	var e:int = 0
	var buf:String = '';
	for (e = 0 ; e < len ; e++ ) {
		cnt += checkHalf(str.substr(e, 1));
		if (cnt >= max) {
			if (buf.length > 0) {
				buf += '\r';
			}
			buf += str.substr(s, e-s+1);
			s = e+1;
			cnt = 0;
		}
	}
	if (buf.length > 0) {
		buf += '\r';
	}
	buf += str.substr(s, e-s+1);
	return buf;
}

// 文字列のバイト数を求める
function getStrBytesTotal(str:String):int {
	var cnt:int = 0;
	var len:int = str.length;
	while (len--) {
		cnt += checkHalf(str.substr(len, 1));
	}
	return cnt;
}

// 指定文字のバイト数を求める→全角なら2、半角なら1を返す
function checkHalf(str:String):int{
	return (checkCode(str, 0x00, 0x7f) || checkCode(str, 0xFF61,0xFF9F)) ? 1 : 2; 
}

// 全半角判定→全角ならfalse、半角ならtrueを返す
function checkCode(str:String, min:uint, max:uint) {
	var len:uint = str.length;
	while (len--) {
		var num:uint = str.substr(len, 1).charCodeAt(0);
		if (num < min || num > max) {
			return false;
			break;
		}
	}
	return true;
}

とりあえず、いい塩梅にはなりました。
あんばいって塩梅って書くんだねぇ・・・よい塩加減なのね)