メインコンテンツまでスキップ

MySQL: ユーザの追加とパスワード、権限の付加 - GRANT文

· 約3分
Yu Sasaki
Enterprise Security Manager / Advisor

前回はCREATE DATABASEコマンドでbookshelfという名前のDBを作成し、SHOW DATABASESコマンドでそれを確認しました。 一連の操作はroot権限で行いましたがこれはセキュリティ上よろしくないので、今回はrootユーザへのパスワードの設定と、新しくユーザ(ここでは安直に"yukun")を作成しbookshelfを操作する権限を付加してみます。

ActionScript: Flash(*.swf)にmp3ファイルを埋め込む - Embedタグ

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

外部ファイルをURLやパスを指定してロードする以外に、ファイルをFlashに埋め込むこむことも出来ます。下記の例で扱うファイルはmp3サウンドですが、これはテキストや画像ファイルに代えても処理の手順はさして変わりません(インスタンスを格納するデータ型が変化するだけです)。

ソースコード

次のコードはEmbedタグで指定したサウンドを再生する処理を表しています。 PlaySound.as

package info.yukun
{
import flash.display.Sprite;
import flash.media.Sound;
public class PlaySound extends Sprite
{
[Embed(source='sample.mp3')] // mp3ファイルのパスを指定(ここではカレントディレクトリのsample.mp3ファイル)
private static const SampleSound:Class;
private var sampleMp3:Sound = new SampleSound();
public function PlaySound():void
{
sampleMp3.play(); // サウンドの再生
}
}
}

コードの説明

[Embed(source='sample.mp3')] で指定されたmp3ファイルは、 private static const SomeSound:Class; で静的なプロパティにClass型として格納します。次に、 private var sampleMp3:Sound = new SampleSound(); でSoundクラス型変数にSampleSoundインスタンスを代入し、 これによって、play()メソッドを用いてサウンドを再生しています。 Embedにはsource属性の他にもsymbolというのがあるみたいです。後でさらっておこうかな。

参考にしたサイト

  • Embedding Resources with AS3 | BIT-101 Blog
  • Sound - ActionScript 3.0 コンポーネントリファレンスガイド

ActionScript: XMLの子要素の読み込み - XMLオブジェクトと「.. 」「[]」演算子

· 約3分
Yu Sasaki
Enterprise Security Manager / Advisor

XMLのパースの練習に、AmazonのWebサービスAPIを用いて本を検索し、表紙の縮小画像をStage上にランダムに配置するFlashをAS3で書いてみました。 追記:現時点はAPI仕様が変わった為、下記のプログラムは機能しません。。

AS3でMind MapぽいFlashを作る (4)右クリックメニューを各ノードとステージに追加

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

今回は各ノードとステージに右クリックメニューを追加しました。コンテキストメニューorショートカットメニューとも言うのかな。 試しにノード(文字が書いてある所)の上や、そうでない背景の黒い所で右クリックしてみると、二つの固有のメニュー項目が出現します。

AS3でMind MapぽいFlashを作る (3)各ノード間の線分に文字列を表示

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

なんだか段々色がダークになってきましたね。 お馴染みですが前々回と同じくRキーで全ノードがランダムに散ったり各ノードをD&Dできたりします。あと最適化を少ししましたので、前より微妙にパフォーマンスが上がっているかと思います。

Python: ファイル読み込み時の例外の扱い例 - try、except、else、finallyブロック

· 約4分
Yu Sasaki
Enterprise Security Manager / Advisor

ファイルのパスや名前のミス、パーミッションの権限が無い等が原因でファイルを読み込めない場合がある。そのような場合、すなわち例外が発生した際にそこで処理を中断して、発生した例外に合わせた処理ブロックにジャンプする構文が、try:~except Error:~構文。 今回は、コマンドライン引数で英文テキストファイル名を指定し、スクリプト内でファイル内容を読み込み、単語数をカウントし出力するスクリプトを以って、オプションのelse、finallyブロックを含めた例外ブロックの扱いを確認する。 ただし、ここでの「単語」とは、簡単に考える為、1つの空白文字で区切られた文字列とする。

ソースコード

# -*- coding: UTF-8 -*-
import sys
script_name = sys.argv[0]
try:
arg = sys.argv[1]
f = open(arg, 'r')
except IndexError:
print 'Usage: %s TEXTFILE' % script_name
except IOError:
print '"%s" cannot be opened.' % arg
else:
print arg, 'contains', len(f.read().split(' ')), 'words.'
f.close()
finally:
print 'n"%s" process end.' % script_name
quit()
print 'Not reach this line.'

コードの説明

tryブロック

まず、例外を発生させる恐れのある行は、tryブロック内に書く。 ここで発生する可能性がある例外はコマンドライン引数が格納されているリストへのアクセス部分であるsys.argv[1]。[]演算子で存在しない要素を参照する例外。また、ファイルを開くopen(arg, 'r')も冒頭の理由で例外発生の可能性もある。

exceptブロック

exceptブロックは、tryブロックで例外が発生した場合にのみ実行されるブロックです。その為、例外が発生しない場合は実行されない。 発生する可能性のある例外のタイプ毎にexceptブロックを書けば、そのタイプ毎の例外への対処処理を書くことが出来る。

except TYPE_AError:
TYPE_AErrorが発生した際のとある処理...
except TYPE_BError:
TYPE_BErrorが発生した際のとある処理...

elseブロック (オプション)

elseブロックは全てのexceptブロックの後に書く(任意なので書かなくても構わない)。 elseブロックはtryブロックで例外が発生しなかった場合にのみ実行されるブロック。今回は、ファイルの読み込みとクローズに使用している。

finallyブロック (オプション)

finallyブロックはtryブロックで例外が発生するしないに関わらず実行されるブロック(任意なので書かなくても構わない)。

実行結果

読み込むテキストファイルを以下の_aLine.txt_とする。 aLine.txt

Unless I set the standard where I am in any level, I'll be puzzled about what I should do from now on.

コマンドラインで適切な引数を与えた場合

$ python excp01.py aLine.txt
aLine.txt contains 22 words.
"excp01.py" process end.

存在しないファイル名を引数を与えた場合

$ python excp01.py texfile.tex
"texfile.tex" cannot be opened.
"excp01.py" process end.

コマンドライン引数を与えなかった場合

$ python excp01.py
Usage: excp01.py TEXTFILE
"excp01.py" process end.

例外オブジェクト名をpython処理系に聞いてみる

どんなメソッドや関数、演算子が、どのような例外を投げるのか予測が付かない場合もある。そんな場合、一旦はスクリプトを実行してエラーを確認する。 SyntaxError: invalid syntax以外のエラーがある場合、例えば、

$ python excp01.py
Traceback (most recent call last):
File "excp01.py", line 5, in
arg = sys.argv[1]
IndexError: list index out of range

のような場合は、最終行の行頭のIndexErrorが例外名となる。

何でも例外任せにしていいの?

計算量が増える為、良くない。今プログラムのコマンドライン引数の確認を、 if len(sys.argv) != 2: ホニャララ とすると整数の比較ですむが、例外のキャッチに任せると、例外インスタンスを生成し送出という計算量の大きい処理が掛かる。ネットワーク接続やファイル読み書きなどのIOでは例外はイベント駆動で発生する為、例外制御が必須ですが、それ以外では使用しない。

ドキュメント

FedoraにGUI環境GNOMEをyumでインストール

· 約3分
Yu Sasaki
Enterprise Security Manager / Advisor

Fedoraのセットアップ時にGUI環境(GNOME, KDE)をインストールしていないが、セットアップ後にyumコマンドでGNOMEをインストールする手順を以下に示します。

XとGNOMEのインストール

以下のコマンドを打ち込みます。

# yum groupinstall "X Window System" "GNOME Desktop Environment"

もしKDEをインストールする場合は、

yum groupinstall "X Window System" "KDE (K Desktop Environment)"

何事も無ければ、大体230MBぐらいD&Iしますので、他のことでもしながら待ちます。 しかし、以下のようなエラーが出た場合、

Error: Missing Dependency: policycoreutils = 2.0.31-7.fc8 is needed by package policycoreutils-gui

Error: Missing Dependencyは依存関係の問題です。上の例では、policycoreutils-guiをインストールするのに必要なpolicycoreutils(2.0.31-7.fc8)が無いですよーと言っています。 念のため、以下のコマンドで必要なものがインストールされているか調べます。

# yum info policycoreutils

仮にインストールされている場合、そのバージョン番号も表示されますので、その番号が必要とされているものと一致しているかどうか確認します。ここでは2.0.31-7.fc8ですね。 一致していない場合は、yumでupdateか再インストール(removeとinstall)しましょう。もし、一致しているのに上記のエラーが出た場合でも、yum updateで一回システム全体をアップデートしてみてください。その後再度、

# yum groupinstall "X Window System" "GNOME Desktop Environment"

を行えば、インストールが始まります。

Fedora起動時にXを立ち上げる

毎回コマンドでstartxと打ってX Window SystemとGNOMEを立ち上げるのも手間ですので以下のファイルを修正して、起動時にGNOMEセッションが使えるようにします。 ファイル/etc/inittabの18行目付近にある id:3:initdefault: を id:5:initdefault: に書き換えます。 その後、再起動すればOKです。

日本語入力環境(scim)などのインストール

以下のyumコマンドをroot権限で実行しインストールてください。

# yum groupinstall 'Japanese Support'
<中略>
Installing:
scim-anthy i386 1.2.4-2.fc8 fedora 365 k
scim-lang-japanese i386 1.4.7-7.fc8 fedora 23 k
Installing for dependencies:
im-chooser i386 0.5.3-1.fc8 fedora 82 k
scim i386 1.4.7-7.fc8 fedora 475 k
scim-bridge i386 0.4.14-1.fc8 updates-newkey 99 k
scim-bridge-gtk i386 0.4.14-1.fc8 updates-newkey 39 k
<後略>

再起動すれば、「半角/全角」キーで日本語入力が可能になります。 ………大学ではLinuxメインですが、自宅ではWindowsでCygwin、MinGWや仮想OS、クロスプラットフォームなboostライブラリとかを用いながら騙し々々開発していました。が、もうそんなことやってられる段階でなくなったので(socket, threadまわりの評価の為)今回デプロイ用のサーバに一応の開発環境を整えました。 あんまり大学での作業を持ち込みたくないんだけれどなぁ。スケジュール見直そうかな。