秋月電子で3方向加速度センサー(Kionix KXR94-2050)を遊びました。このセンサーはX、Y、Z三つの方向での検出した変動値をアナログとして出力できるため、ArduinoやAVRマイコンのAD変換端子付のPINに接続し、そのままデータを読み込めます。さらにArduinoの場合COM接続もArduinoボードに搭載されているため、PC側はCOMポートの入力内容を分析し動きを画面に描画できます。
Category: プログラミング
AVRマイコン+VS1011E 自作MP3プレーヤー
秋月電子でVS1011EのMP3デコーダーを見て、MP3プレーヤーを自作できそうだと思いました。ネットで調べたら既に先輩たちが作成した例をみつけて、データシートやネット文書などを参照しながら自分のMP3プレーヤーも作成できました。 VS1011EはMP1、MP2、MP3、WAV、PCMのフォーマットを320 kbit/sまで再生することができます。AVRマイコンからSPI通信回路でVS1011Eに繋いで、コマンドバースでVS1011Eへの制御が可能です。コマンドで主に以下のことを制御することができます。
- 再生開始
- 音量制御
- 低音、高音の強調
構成
再生するMP3ファイルは事前にパソコンからSDカードに保存して、AVRマイコンがSDカードから読込んでVS1011Eに転送します。SDカードのファイルを読込するためにChaN氏のPetit FAT File System Moduleを利用しています。プレーヤー全体の構成は下図のようです。
C#文字列の簡単可逆暗号化アルゴリズム
今回では文字列をより安全に保存したり、インターネットで転送したりするための簡単暗号化アルゴリズムを紹介いたします。
発想
Base64は8ビットエンコーディングを6ビットエンコーディングに変換するアルゴリズムです。Base64ではデータを生成する際にプレーンテキストのプロトコルでもデータの転送可能のため、プレーンテキストのみを利用しデータの文字列を生成しています。その利用可能なアルファベットはBase64のエンコーダーとデコーダーに事前定義されています。WikipediaのBase64の「変換表」のところをご参照ください。
ネコ技術は6ビットエンコーディングを5ビットエンコーディングに変更し、内蔵のアルファベットの変換表もBase64標準の変換表以外の内容に変更します。この方法で自分だけのプログラムしか認識できない暗号化アルゴリズムを作成します。 Read More
C#で文字列のサイズを正しく測定する(Measure String)
問題の再現
.NETのGraphics.MeasureStringメソッドを利用すると文字列のサイズを測定できますが、通常の方法での測定結果に少しずれが発生します。ここでは正確の測定結果を得る方法を説明します。
まずテスト環境を作成します。新しいWindows Formプロジェクトを作成し、Formのコードを以下のように準備します。(Form7をForm1に変更してください)
public partial class Form7 : Form { public Form7() { InitializeComponent(); Font = new Font(Font.FontFamily, 14); Size = new Size(300, 250); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); var g = e.Graphics; var str = "文字列を測定する"; // ----ここはテストコード---- } }
Global.asaxのApplication_Errorが呼び出されない
開発環境でGlobal.asaxのApplication_Errorでエラー処理を実装して正常に動作しましたが、本番環境で動作しません。いろいろ試したら、IIS7以降のWebSiteの設定について、Web Applicationのアプリケーションプールを「Classic .NET AppPool」に切替すると問題が解消しました。
さらに試したら、実際そのアプリケーションプールの設定の「パイプラインモード」という設定を「クラシック」にすれば問題解消します。
このようにGlobal.asaxのApplication_Errorでアプリケーション全体のエラーを処理することができます。
public class Global : System.Web.HttpApplication { protected void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); if (ex is HttpUnhandledException) { // ... } } }