アーカイブ ‘ 2010年 8月 ’
新iPod touchがもうすぐ発売!?
いろいろ噂はありますが、9月頃に新しいiPod touchが発売されるみたいですね。
自分は今、発火の報告が相次ぐ、第1世代のiPoad nanoを使っているので、そろそろ買い替えたいところ・・・
発火の不安もあるんですが、バッテリーの持ちがかなり落ちてきてるので、どちらにしろ買い換えないといけない。
候補としては、新しいiPod touch、iPod nano、WALKMANを考えていたんですが、新iPod touchがかなり進化を遂げるようで、そっちに心が動いているところです。
新しいiPod touchの機能としては以下のようなものがあるようです。(あくまでも噂です。)
Retinaディスプレイ搭載
iPhone 4にも搭載されている、高解像度でシャープなディスプレイです。
アップルのサイトでは、「最もシャープで、最も鮮やかで、最も解像度の高い、携帯スクリーンです。」と紹介されています。
iPhone 3Gとの比較画像もあり、かなり高解像度であることが分かると思います。
デュアルカメラ搭載
前面、背面それぞれにカメラが搭載されるそうです。
前面カメラの画素数は500万画素だそうです。
SIMカードスロット(3Gモデル)
iPodの3Gモデルと同じように、3G回線を用いたネット接続が可能になるそうです。
これは、大きな変化と言えるのではないでしょうか。
これまでは、イー・モバイルのPocket WiFiのような機器を持つか、フリースポット、自宅の無線LANなどを使うしかありませんでした。
特に、外出先でも常にネットワークを使いたい場合は、持ち運び可能な上記のPocket WiFiをもつ他、方法がありませんでしたが、3Gモデルが出るのであれば、かなり便利になりそうですね。
HD動画撮影
iPhone 4同様に720pのHD動画撮影が可能になるそうです。
内容的には、iPhone 4と同程度の機能を有するようです。
個人的に、今回の一番の目玉は、3Gモデルが出ることではないでしょうか。
3G回線を使った、ネットワーク接続は、かなり便利な機能になりそうです。
iPhoneと他のキャリアの電話を2台もつ必要もなくなりそうですね。
Objective-Cを使わないiPhoneアプリケーション開発
「iPhoneアプリケーション開発ガイド――HTML+CSS+JavaScriptによる開発手法」という書籍が、オライリーから発売されているようです。
普通は、iPhoneでアプリを開発する場合、Objective-Cを利用します。
しかし、Objective-Cを使った開発をするには、Macが必要になってきます。
Macの一番安いものでも、10万円ぐらいするので、なかなか手が出ません…
iPhoneアプリを開発したいけど、Macを買うお金はない…という人には、オススメだと思います。
Webアプリなので、当然、デバイスにアクセスしたり出来ない等の制限もあります。デバイスへのアクセスが必要なアプリや、Webアプリでは実現出来ないものを作りたい場合には、Objective-Cを使って開発する必要がありますが、そこまでやる必要がない場合には、HTML5の採用を考えてもいいかもしれません。
これまで、Webアプリはオンラインでないと使用出来ませんでしたが、HTML5ではデータをローカルにキャッシュすることで、オフラインでの利用も可能になっています。
Objective-Cを使ったアプリ開発よりもかなり、敷居が低くなるので手軽に出来ると思います。
PHP正規表現チェッカーの処理概要
PHP正規表現チェッカーの内部処理の概要です。
この記事を書いた時点のPHP正規表現チェッカーのバージョンは1.0.3です。
似たようなアプリを作る時に参考になればと思います。
使用言語はPHPで、通信にはAjaxを使用しています。Ajax部分には、prototype.jsを使用しています。
全体
- PHPの内部エンコードをUTF-8に変更。(mb_internal_encoding)
- 正規表現のエンコードをUTF-8に変更。(mb_regex_encoding)
- HTTP出力のエンコードをUTF-8に変更。(mb_http_output)
- HTTPヘッダー出力。(Content-Type: text/html; charset=utf-8)
画面表示
- オプションをクッキーまたはセッションより取得。セッションに値があればセッションの値を優先。
- ユーザーエージェントをチェックし、Operaの場合は”onchange”イベント、Opera以外の場合は”onkeyup”、”onmouseup”を使用。
- セッションをチェックし、パターン文字列、置換え文字列、対象文字列に値があれば値を取得。
- セッションに値があればその値を元に、正規表現処理を実行。
- メインページの表示。1で取得したオプションの反映。実行した正規表現の結果を出力。
正規表現処理(JavaScriptの処理)
- パターン文字列、対象文字列に値が入力されているかチェック。どちらかが未入力の場合は以降の処理は行わない。
- Ajaxでサーバーにデータを送信してマッチした文字列を取得。
- 置換え文字列に値が入っていれば、Ajaxでサーバ・にデータを送信して置換後の文字列を取得。
- オプションのマッチグループを表示にチェックが入っていれば、Ajaxでサーバーにデータを送信してマッチグループを取得。
正規表現処理(サーバー側)
- 画面上で指定したオプションをセッションに保存。
- パターン文字列、置換え文字列、対象文字列をセッションに保存。
- 直接、SPANタグで囲うと、出力の為にhtmlspecialcharsでHTMLエンティティした場合、正しく強調表示出来ないので、マーキング用の文字列を作成。例えば、”[Match]“、”[/Match]“等。対象文字列に、マーキング用文字列が含まれる場合、必ず一意になるようにする。
- Perl互換の正規表現 (preg)にチェックが入っている場合は、preg_replace関数で正規表現を実行。チェックが入っていない場合は、mb_ereg_replace関数で正規表現を実行。画面上で、オプションが指定されている場合は、オプションを指定。
- 1で作成したマーキング用文字列をSPANタグに置き換える。
- Perl互換の正規表現 (preg)にチェックが入っている場合は、preg_match_allでマッチグループを取得。チェックが入っていない場合は、mb_eregでマッチグループを取得。
オプション保存
- PHPのsetcookie関数で画面上の値をクッキーに保存。保存期間は約2ヶ月間。
VB.NETで複数のデータベースを切り替えて使うサンプルプログラム
SQL Server、MySQL、Oracle等、色々なデータベースに接続先を変更するサンプルです。
.NETのリフレクションを使ってクラスをインスタンス化するように作ってあります。
複数のデータベースに対応する必要がある時に使えると思います。
以下は、自分が探して見つけた.NET用のデータプロバイダです。
- MySQL:Connector/Net
- SQLite:System.Data.SQLite
- PostgreSQL:Npgsql
- Firebird:Firebird ADO.NET Data Provider
サンプルでは、MultiDatabaseConnectionSampleメソッドを呼び出すと、データベースに接続してhogeテーブルのデータをデバッグウィンドウに出力するようになっています。
MultiDatabaseConnectionSampleメソッドの引数は三つでそれぞれの意味は以下のとおりです。
| DataProviderFilePath | データベースに接続する為に必要なデータプロバイダDLLのファイルパス。 有名なデータベースであれば、公式サイトで配布されていない場合でも、有志の方が作成している場合があります。 |
| ConnectionString | データベース接続文字列です。 接続文字列の書き方はデータプロバイダの種類に依存するので、それぞれの公式サイト等を参考にしてください。 |
| ConnectionClassFullName | データ接続クラスの名称です。この引数は省略可能になっています。 IDbConnectionを実装したクラスを指定する必要があります。 省略した場合は、一番初めに見つかったIDbConnectionを実装したクラスを使用します。 |
データベースへの接続は動的に変更出来ますが、SQL構文の書き方には注意する必要があります。
例えば、あるデータベースでしか使えない関数を使っていると、他のデータベースに切り替えた時にシステムが動かなくなります。
複数のデータベースに対応させたい場合は、なるべく汎用的な書き方をするように注意する必要があります。
ソースのライセンスはGPLとします。
以下サンプルソース
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call MultiDatabaseConnectionSample("mysql.data.dll", "Database=データベース名;Data Source=サーバー;User Id=ユーザーID;Password=パスワード;", "MySql.Data.MySqlClient.MySqlConnection")
End Sub
''' <summary>
''' データベースに接続してデータを出力するサンプルです。
''' </summary>
''' <param name="DataProviderFilePath">データプロバイダのファイルパスです。</param>
''' <param name="ConnectionString">データベースに接続する接続文字列です。</param>
''' <param name="ConnectionClassFullName">コネクションクラスの名称です。</param>
''' <remarks></remarks>
Private Sub MultiDatabaseConnectionSample(ByVal DataProviderFilePath As String, ByVal ConnectionString As String, Optional ByVal ConnectionClassFullName As String = "")
Dim DataProviderAssembly As System.Reflection.Assembly
Dim Connection As IDbConnection
Dim Command As IDbCommand
Dim DataReader As IDataReader
'指定されたファイルをロード
DataProviderAssembly = System.Reflection.Assembly.LoadFrom(DataProviderFilePath)
'データベースコネクション取得
Connection = InterfaceCreateInstance(DataProviderAssembly, GetType (IDbConnection), ConnectionClassFullName)
'接続文字列セット
Connection.ConnectionString = ConnectionString
'接続
Connection.Open()
'SQLコマンド用のクラスに開いたデータベースの情報を与える
Command = Connection.CreateCommand
'SQLを登録
Command.CommandText = "SELECT * FROM hoge"
'SQL実行
DataReader = Command.ExecuteReader
'データを全件出力
Do Until Not DataReader.Read
For FieldIndex As Integer = 0 To DataReader.FieldCount - 1
Debug.Print(DataReader.Item(FieldIndex).ToString)
Next
Loop
End Sub
''' <summary>
''' 指定したインターフェイスの型を実装したクラスのインスタンスを返します。
''' </summary>
''' <param name="Assembly">アセンブリです。</param>
''' <param name="InterfaceType">検索するインターフェイスの型です。</param>
''' <param name="ClassFullName">検索対象のクラス名です。</param>
''' <returns>指定したインターフェイスの型を実装したクラスを返します。同一インターフェイスを実装したクラスが複数ある場合は、最初に見つかったクラスを返します。</returns>
''' <remarks></remarks>
Private Function InterfaceCreateInstance(ByVal Assembly As System.Reflection.Assembly, ByVal InterfaceType As Type, Optional ByVal ClassFullName As String = "") As IDbConnection
Dim ConnectionType As Type
'型を取得
ConnectionType = GetInterfaceType(Assembly, GetType (IDbConnection), ClassFullName)
Return DirectCast (System.Activator.CreateInstance(ConnectionType), IDbConnection)
End Function
''' <summary>
''' アセンブリ全体の型からInterfaceTypeに一致する型を取得します。
''' </summary>
''' <param name="Assembly">検索対象のアセンブリです。</param>
''' <param name="InterfaceType">検索するインターフェイスの型です。</param>
''' <param name="ClassFullName">検索対象のクラス名です。</param>
''' <returns>アセンブリ全体の型からInterfaceTypeに一致する型を検索し返します。</returns>
''' <remarks></remarks>
Private Function GetInterfaceType(ByVal Assembly As System.Reflection.Assembly, ByVal InterfaceType As Type, Optional ByVal ClassFullName As String = "") As Type
Dim ReturnType As Type
'全ての型を検索
For Each ReturnType In Assembly.GetTypes()
'IDbConnectionを実装したクラスかチェック
If ReturnType.IsClass AndAlso ReturnType.IsPublic _
AndAlso ReturnType.GetInterface(InterfaceType.FullName) IsNot Nothing _
AndAlso (ClassFullName = "" OrElse (ClassFullName <> "" AndAlso ClassFullName = ReturnType.FullName)) Then
Return ReturnType
End If
Next
Return Nothing
End Function
End Class
ブログを立ち上げました~。
プログラムのことや、サンプルコード、アプリやライブラリを使用した感想などを書いていこうと考えています。
プログラム関係以外にも、身の回りで起きたこと等も書いていきたいと思います。
更新頻度は、月に数回~十数回ぐらいを目標にしています。
ブログタイトルの「ラシカル開発記」の「ラシカル」には理由があると言えばあるし、ないと言えばありません。





