アーカイブ ‘ 2010年 9月

2010年発売のiPod touch第4世代が届きました!

本日の17時頃に携帯電話にiPod touchが届いたと連絡があり、早速とりに行ってきました!

お金は、すでに払っていたので商品を受け取るだけだったのですが、意外と待たされました・・・

何枚か写真を撮ってみました。携帯カメラで撮ったからか、腕が悪いからかちょっとブレてます。撮り直すのも面倒なのでそのままで!

外側

透明のケースを白いフィルムで覆ってあります。

iPod touch外側

白いフィルムを外したところ。

iPod touch外側

付属品

付属品は、イヤホン、USBコネクタ、クイックスタートの3つです。

iPod touch付属品

 

せっかく手元に届いたのですが、10月の上旬ぐらいに届くと思っていたで、まだ、ケースと保護フィルムを購入していません・・・

なので、使うのは、ケースと保護フィルムを買ってからになりそうです。

ケースは、TUNEWEARのSOFTSHELL for iPod touch 4Gを考えています。材質は、TPUです。

まだ、色を決めていないので、オススメの色があれば、教えてください!

このケースの発売日予定は、25日らしいのでそれまでに色を決めて購入したいと思います。

Share on Facebook

PHPの正規表現でUTF-8を使用する方法

PHPの正規表現でUTF-8を使用するには、内部エンコーディングをUTF-8にしておく必要があります。

mb_ereg系とpreg系ではやり方が違うので、それぞれ紹介します。

mb_ereg

プログラム上から正規表現の内部エンコーディングを変更するには、プログラムの先頭に以下のコードを入力します。このエンコーディングの指定は、mb_ereg系の正規表現に対して有効です。

mb_regex_encoding("UTF-8");

 preg

preg系の正規表現で、UTF-8を使用するには、正規表現オプションに “u” を指定します。以下は、例です。スラッシュの後ろに書いてあるのが正規表現オプションです。

preg_match("/^[A-Z]/u", "ABCD")

PHPの内部エンコーディングを変更

ちなみに、PHPの内部エンコーディングを変更するには、以下の記事を参考にしてください。上記だけではうまくいかない時に指定してみてください。

PHPの内部エンコーディングを変更する方法

Share on Facebook

PHPの内部エンコーディングを変更する方法

PHPの内部エンコーディングを変更するには、以下のコードをプログラムの頭に書きます。例では、内部エンコードをUTF-8に変更しています。

mb_internal_encoding("UTF-8")

Share on Facebook

VB.NETで文字列結合を高速化する方法(比較計測あり)

VB6やVBAで文字列を結合する場合は、&を使って結合します。この方法はVB.NETでも使うことができるので、VB6を使っていた人は文字列を結合する時には、&を使うことが多いと思います。

ですが、&を使った結合はパフォーマンスが悪く、動作が遅くなります。

特に、CSV等のサイズの大きな文字列を作る場合には、かなり速度が遅くなります。

 VB6やVBAでは、この問題を回避する方法はありませんが、VB.NETではStringBuilderクラスを使うことで高速化することができます。

以下、計測用のソースと計測結果です。

計測用のソース

ソースのライセンスはGPLとします。

Dim Stopwatch As New System.Diagnostics.Stopwatch()
Dim Join1 As String = ""
Dim Join2 As New System.Text.StringBuilder
Dim i As Integer

'ストップウォッチ開始
Stopwatch.Start()

'&による結合を10万回繰り返す
For i = 1 To 100000
    '"あいうえお"を結合
    Join1 &= "あいうえお"

    '10000回毎に時間を出力
    If i Mod 10000 = 0 Then
        'ストップウォッチ停止
        Stopwatch.Stop()

        '時間を出力
        Debug.Print(i.ToString & " " & Stopwatch.Elapsed.ToString)

        'ストップウォッチ再開
        Stopwatch.Restart()
    End If
Next

'ストップウォッチリセット
Stopwatch.Reset()

'ストップウォッチ開始
Stopwatch.Start()

'StringBuilderクラスによる結合を10万回繰り返す
For i = 1 To 100000
    '"あいうえお"を結合
    Join2.Append("あいうえお")

    '10000回毎に時間を出力
    If i Mod 10000 = 0 Then
        'ストップウォッチ停止
        Stopwatch.Stop()

        '時間を出力
        Debug.Print(i.ToString & " " & Stopwatch.Elapsed.ToString)

        'ストップウォッチ再開
        Stopwatch.Restart()
    End If
Next

計測結果

“あいうえお”という文字列を10万回結合して速度を計測しています。

&を使った文字列結合の計測結果

回数 前回からの経過時間
10000 00:00:00.3918760
20000 00:00:01.7736530
30000 00:00:03.1319449
40000 00:00:04.6875999
50000 00:00:06.4709514
60000 00:00:08.0668959
70000 00:00:09.4594961
80000 00:00:11.4211172
90000 00:00:13.2688551
100000 00:00:15.3745559

 StringBuilderクラスを使った文字列結合の計測結果

回数 前回からの経過時間
10000 00:00:00.0003084
20000 00:00:00.0003092
30000 00:00:00.0036756
40000 00:00:00.0003184
50000 00:00:00.0004411
60000 00:00:00.0002910
70000 00:00:00.0003841
80000 00:00:00.0005679
90000 00:00:00.0003637
100000 00:00:00.0003377

 上記の結果を見てもらうと分かるように、&を使った場合は、文字列の結合を重ねていくと徐々に遅くなっています。

それに対し、StringBuilderクラスを使用した場合は、文字列の結合を重ねても速度に変化はほとんどありません。

&結合よりもStringBuilderクラスの方が速い理由

&で結合する場合は、例えば、20バイトの文字列と10バイトの文字列を結合する時には、結合した文字列を格納する為に30バイトの領域を用意して、そこに20バイトの文字列と10バイトの文字列を格納しています。その為、文字列のサイズが大きくなると、結合の為に確保する領域が多くなり速度が遅くなっていきます。

それに対して、StringBuilderクラスの場合は、はじめに、ある程度の領域を確保し、確保した領域にどんどん追加していくようになっています。確保した領域が足りなくなれば、更に領域を拡張していきます。

以下のようにすると確保する領域を指定することが可能です。

Dim Join2 As New System.Text.StringBuilder(10000)

Share on Facebook

iPod touch 第4世代を予約しに行った時の店員さんの話

第4世代のiPod touchがほしかったので、予約に行ってきました。

その時の店員さんとのやりとりです。これから購入を考えている人の参考になればと思います。

 

新しいiPod touchを予約したいと、店員さんに聞いた時の店員さんの話です。

店員さん「ご予約することは可能です。ただ、今の段階では、いつぐらいに入荷出来るのかまったく分からない状態なので、最悪の場合、11月頃の入荷となります。
今、11月頃と言いましたが、これは、最も遅くなった場合なので、おそらく10月中には入荷出来ると思います。
そこまで、お待ちできるというのであれば、ご予約を受け付けることが出来ます。
どうしても早くほしいというのであれば、Apple Storeで予約された方が、早く手元に来る可能性は高いと思います。」

そのお店に行った理由の一つに、ポイントをためているということがあったので、多少遅くなったとしてもポイントを貰うほうが大事だな~と思ったのですが、最後の店員さんの言葉で予約を断念しました。

 

店員さん「ご予約をされる場合には、代金を先払いして頂くことになります。」

 

普段、予約をしてものを買うことがまったくないので、代金を先払いしないといけないかもしれないということがまったく頭になく、この日は、購入に十分なお金を持っていませんでした・・・(クレジットカードは持たない主義)

今回は、お金を持っていなくて予約できませんでしたが、また今度、お金を持って予約に行ってきたいと思います!

ちなみに、今回購入するiPod touchは、64GBモデルを予定しています。32GBと迷ったのですが、足りなくて困るよりは余る方がいいだろうと思って64GBにしました。

まだ、予約すらしていませんが、今からiPod touchを使うのが楽しみでなりません!!

Share on Facebook

System.Data.SQLiteで独自関数を追加して利用するVB.NETのサンプル

VB.NETから組み込みデータベースのSQLiteを操作する方法の記事で書き忘れていたのを思い出したので、この記事で独自関数を追加する方法をご紹介したいと思います。

今回は、SQLiteに正規表現関数を追加します。

System.Data.SQLiteの基本的な使い方は、VB.NETから組み込みデータベースのSQLiteを操作する方法を参考にしてください。

当然ですが、System.Data.SQLiteを参照に追加しておく必要があるので、必ず参照設定をしておいてください。

今回も、前回に引き続きVisual Studio 2005を使用して説明していきます。

クラスの追加

正規表現関数を定義する為のクラスを追加します。 メニューバーのプロジェクト→クラスの追加をクリックします。

Visual Studio 2005クラス追加メニュー

新しい項目の追加画面が表示されるので、ファイル名の欄に「Regexp.vb」と入力し、追加ボタンをクリックします。

Visual Studio 2005正規表現用クラス追加

正規表現関数の定義

SQLiteで正規表現を使用する為の定義を作成します。

以下のソースを追加したクラスに入力してください。

SQLiteFunctionは関数の定義内容を表します。Name項目には関数の名前を、Arguments項目には引数の数を定義します。

今回は、Name項目を”REGEXP”とし、引数に「検索する文字列」、「正規表現パターン」、「正規表現オプション」の三つが必要なため、Arguments項目には “3” を指定します。

 ソースのライセンスはGPLとします。

Imports System.Data.SQLite

''' <summary>
''' SQLiteで正規表現関数を実装する為のクラスです。
''' </summary>
''' <remarks></remarks>
<SQLiteFunction(Name:="REGEXP", Arguments:=3, FuncType:=FunctionType.Scalar)> _
Public Class Regexp
    Inherits SQLite.SQLiteFunction

    Public Overrides Function Invoke(ByVal args() As Object) As Object
        Return System.Text.RegularExpressions.Regex.IsMatch(Convert.ToString(args(0)), Convert.ToString(args(1)), CType(args(2), System.Text.RegularExpressions.RegexOptions))
    End Function
End Class

実際に正規表現関数を使ってみる

SQLiteのデータベースファイルは、VB.NETから組み込みデータベースのSQLiteを操作する方法で使用したものと同じものを使用します。

抽出条件に、定義した正規表現関数を指定して、field02の先頭が “あ” のものだけ抽出します。

ソースのライセンスはGPLとします。

Imports System.Data.SQLite

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Connection As New SQLiteConnection
        Dim Command As SQLiteCommand
        Dim DataReader As SQLiteDataReader

        '接続文字列を設定
        Connection.ConnectionString = "Version=3;Data Source=test.db;New=False;Compress=True;"

        'オープン
        Connection.Open()

        'コマンド作成
        Command = Connection.CreateCommand

        'SQL作成
        Command.CommandText = "SELECT * FROM hoge WHERE REGEXP(field02, '^あ', 0)"

        'データリーダーにデータ取得
        DataReader = Command.ExecuteReader

        'データを全件出力
        Do Until Not DataReader.Read
            Debug.Print(DataReader.Item("field01").ToString)
            Debug.Print(DataReader.Item("field02").ToString)
            Debug.Print(DataReader.Item("field03").ToString)
            Debug.Print(DataReader.Item("field04").ToString)
            Debug.Print(DataReader.Item("field05").ToString)
        Loop

        '破棄
        DataReader.Close()
        Command.Dispose()
        Connection.Close()
        Connection.Dispose()
    End Sub
End Class

上記を実行して、デバッグウィンドウに以下の文字が表示されれば成功です。

1
あああ
いいい
ううう
えええ

Share on Facebook

VB.NETから組み込みデータベースのSQLiteを操作する方法

VB.NETからSQLiteを操作する方法をご紹介します。

 

SQLiteとは、SQL ServerやMySQL、PostgreSQLと同じデータベース管理システムですが、それらとは異なり、サーバー上で動作するのではなく、アプリケーションに組み込んで利用するデータベースです。有名なところでは、FirefoxでSQLiteが採用されています。一般的なデータベースとは異なり、大規模なシステムには不向きですが、中小規模では、速度面においては他のデータベースと遜色ありません。

特徴としては、とても軽量であることと、データの保存を単一ファイルで行うことが挙げられます。

SQLiteについて詳しく知りたい場合は、Wikipediaを参照してください。

 

今回は、SQLiteの操作にSystem.Data.SQLiteというライブラリを使用します。

 System.Data.SQLiteの特徴

  • 完全なADO.NET 2.0の実装
  • Monoサポート
    Monoとは、.NET Frameworkの互換環境を提供する為のオープンソースソフトウェアです。
  • ADO.NET 3.5 Entity Frameworkの実装
  • Visual Studio 2005/2008 Design-Timeをサポート
    サーバーエクスプローラーに、SQLiteの接続を追加することが出来ます。
  • 暗号化のサポート
  • 900kb以下の再頒布可能な単体ファイル
  • 完全フリー
    ライセンスはパブリックドメインとなっており、個人、商用問わず自由に使うことが出来ます。

 

ライブラリのダウンロード先はここです。

この記事を書いた時点でのSystem.Data.SQLiteのバージョンは “1.0.66.0” で、SQLiteのバージョンは “3.6.23.1” です。  

 

今回は、セットアップファイルではなく、バイナリのZIPファイルをダウンロードします。

Newest Filesの項目に、SQLite-x.x.xx.x-binaries.zipというリンクがあるので、そこをクリックし、ダウンロードします。 

ただし、上記にある、Visual StudioのDesign-Timeを使用したい場合には、インストーラーでインストールする必要があります。

 

ZIPファイルをダウンロードしたら、解凍ソフトを使って解凍してください。

使用するのは、System.Data.SQLite.DLL(ライブラリ本体) とSystem.Data.SQLite.XML(インテリセンス用の定義ファイル)の二つです。この二つのファイルは、解凍したフォルダの中にあるbinフォルダの下にあります。System.Data.SQLite.XMLファイルに関しては、無くても動作します。

 System.Data.SQLiteフォルダー

このライブラリの名前空間は、System.Data.SQLiteと分かりやすくなっています。ただ、個人的にSystemの名前空間は、.NET標準の名前空間という気がするのでちょっと違和感があります。 

Visual Studio 2005のプロジェクトを作成

画面左にある、作成のプロジェクトをクリックします。

Visual Studio 2005初期画面

以下の画面が表示されるので、Windows アプリケーションを選択します。

今回は、名前は初期値のままで進めますが、必要があれば、名前も変更してください。

Visual Studio 2005プロジェクト作成

System.Data.SQLiteの参照設定

メニューバーのプロジェクト→参照の追加をクリックします。

Visual Studio 2005参照設定メニュー

以下の画面が表示されるので、参照タブをクリックします。

System.Data.SQLite.DLLを選択し、OKボタンをクリックします。

Visual Studio 2005参照設定

System.Data.SQLiteの接続文字列

接続文字列の引数については、別途記事を書いたので、そちらを参照してください。

System.Data.SQLiteの接続文字列で使用できる引数の説明

サンプルソース

接続文字列のData Sourceにデータベースファイルへのパスを指定してください。

以下、サンプルソースです。ソースのライセンスはGPLとします。

Imports System.Data.SQLite

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Connection As New SQLiteConnection
        Dim Command As SQLiteCommand
        Dim DataReader As SQLiteDataReader

        '接続文字列を設定
        Connection.ConnectionString = "Version=3;Data Source=test.db;New=False;Compress=True;"

        ''パスワードをセット
        'Connection.SetPassword("password")

        'オープン
        Connection.Open()

        ''パスワードを変更
        'Connection.ChangePassword("password")

        'コマンド作成
        Command = Connection.CreateCommand

        'SQL作成
        Command.CommandText = "SELECT * FROM hoge"

        'データリーダーにデータ取得
        DataReader = Command.ExecuteReader

        'データを全件出力
        Do Until Not DataReader.Read
            Debug.Print(DataReader.Item("field01").ToString)
            Debug.Print(DataReader.Item("field02").ToString)
            Debug.Print(DataReader.Item("field03").ToString)
            Debug.Print(DataReader.Item("field04").ToString)
            Debug.Print(DataReader.Item("field05").ToString)
        Loop

        '破棄
        DataReader.Close()
        Command.Dispose()
        Connection.Close()
        Connection.Dispose()
    End Sub
End Class

パスワードが設定されているデータベースの場合は、以下のコードをOpenメソッドの前に挿入します。上記のコードではコメントアウトしてあります。

Connection.SetPassword("password")

データベースのパスワードを変更する場合には、以下のコードをOpenメソッドより後に挿入します。上記のコードではコメントアウトしてあります。

Connection.ChangePassword("password")

独自関数の追加

独自関数の追加につていは、別途記事を書いたので、そちらを参照してください。

System.Data.SQLiteで独自関数を追加して利用するVB.NETのサンプル

PupSQLite

SQLiteのデータベースファイルの中身を見たい場合には、PupSQLiteというツールがオススメです。

他にも似たようなツールはたくさんあるのですが、PupSQLiteは、Microsoft Access 2000/2003ライクなユーザーインターフェイスで、他のツールよりもかなり使いやすくなっています。

このツールは、暗号化にも対応しているので、暗号化されたデータベースファイルを見る場合にも使用することが出来ます。

 

ちなみに、上記サンプルで使用したデータベースを作った時の手順です。

PupSQLiteの起動

公式サイトよりダウンロードし、解凍したファイルの中にあるPupSQLite.exeを実行します。

PupSQLite起動

テーブルの作成

メニューバーのファイル→新規作成をクリックします。

クリックすると、以下の画面が表示されるので、「hoge」と入力します。

PupSQLiteテーブル名入力

テーブル定義を作成する画面が表示されるので、作成するテーブルの定義を入力します。

PupSQLiteテーブル定義

データベースファイルの保存

定義画面でOKボタンを押すとデータベースの保存ダイアログが表示されるので、任意の場所に保存します。

PupSQLiteデータベースファイル保存

データの登録

データベースファイルを作成すると以下のような画面が表示されます。

PupSQLiteメニュー画面

hogeをダブルクリックして、テーブルにデータを登録します。

PupSQLiteデータ入力

入力画面の×ボタンをクリックすると、以下のメッセージが表示されるのではいをクリックします。

PupSQLite保存確認

Share on Facebook

Google IMEやATOKを使っているとMS-IMEに切り替わる現象の対処方法

Google IMEや、ATOKなどのMS IME以外のIMEソフトを使っていると、ふとした時にMS-IMEに切り替わっていることってありませんか?

自分は、しょっちゅう切り替わってイライラしたことがあります。MS-IMEを削除しようかと考えたことも…

 

MS-IMEに切り替わるタイミングですが、Ctrl + Shiftを押した時に切り替わります。

自分の場合は、エディタ等で文字を選択する時に、Ctrl + Shift + 矢印キーを使用して選択することが多く、しょっちゅう切り替わっていました…

現象が起きたのは、Vistaですが、他のOSでも起こるかは分かりません。

MS-IMEに切り替わる現象の対処方法

  1. コントロールパネルの「地域と言語のオプション」を開く
    IME設定
  2. 「キーボードと言語」タブをクリックし、「キーボードの変更」ボタンをクリック
    IME設定
  3. テキストサービスと入力言語の「詳細なキー設定」タブをクリック
  4. 「入力言語のホットキー」一覧で、「入力言語間」を選択し、「キーシーケンスの変更」ボタンをクリック
    IME設定
  5. 「入力言語の切り替え」、「キーボードレイアウトの切り替え」のどちらも「割り当てなし」 に変更
    IME設定

以上がMS-IMEに切り替わる現象の対処方法です!

同じ現象で悩んでいる人は試してください。

Share on Facebook

iPod touchなどiPodシリーズの最新機種が発表されました!

日本時間の9月2日午前2:00に、サンフランシスコで開催されたAppleのイベントにて、新しいiPodシリーズが発表されました!

 

iPod touchは、128GBモデルが出ることを期待してたんですが、今回は出ないみたいですね。ちょっと残念。

以下、ざっとまとめてみました。

iPod touch

  • 8GBモデル、32GBモデル、64GBモデルの3種類
  • 価格は、8GBモデルが2万900円、32GBモデルが2万7800円、64GBモデルが3万6800円
  • 高さ111.0mm、幅58.9mm、奥行き7.2mm、重さ101.0グラムとiPhone 4よりも薄くて軽い
  • 3.5型・960×640解像度のRetinaディスプレイ搭載
  • 720pのHD動画も撮影が可能(背面のカメラ)
  • 3軸ジャイロセンサーや加速度センサーなどを搭載
  • FaceTime 用フロントカメラ
  • iOS 4.1を内蔵

iPod nano

  • 8GBモデルと16GBモデルの2種類
  • 価格は、8GBモデルが1万3800円、16GBモデルが1万6800円
  • カラーバリエーションは7色
  • 高さ37.5mm、幅40.9mm、奥行8.78mm、重さ21.1グラムとかなり小型
  • マルチタッチに対応した1.54インチ240×240ディスプレイ搭載
  • ボタンがなくなり正方形のマルチタッチスクリーンに変更

iPod Shuffle

  • 2Gモデルのみ
  • 価格は、4800円
  • カラーバリエーションは5色
  • 高さ29.0mm、幅31.6mm、奥行8.7mm、重さ12.5グラム
  • 連続再生時間15時間

 

Share on Facebook

広告

Facebook

カレンダー

2010年9月
« 8月   11月 »
 1234
567891011
12131415161718
19202122232425
2627282930  

最近の投稿

アーカイブ