kazuk は null に触れてしまった

C# / .NET 系技術ネタ縛りでお送りしております

カテゴリーアーカイブ: 未分類

Vivado HLS での高位合成を業務系バッチに適用できるか試してみる


 

Amazon の FPGA F1 インスタンスでは、Xilinx の Vivado および Vivado HLS で設計を行う事になる。

Vivado が Velilog 等 RTL でのハードウェア記述で FPGA へ投入するBitstreamを生成するのに対して、Vivado HLS が C / C++ でのロジック記述から高位合成を行うという事でソフトウェアエンジニアとしては多少記述の抽象度が低いとは言え C /C++ で記述できるのはうれしいことだ。

Vivado HLS についての記述例やサンプルを色々眺めてみても bitmap を扱う例だったり業務データの扱いによくあるレコード的な物が無かったりしたので、とりあえず構造体使えるの?程度に試してみたのが以下。

#include <hls_stream.h>

struct OrderLine
{
    int itemId;
    int amount;
    int unitPrice;
};

long foo( hls::stream<OrderLine> indata, int count)
{
    long totalPrice =0;

    for( int i=0;i<count;i+=4 )
    {
        OrderLine line0;
        indata.read(line0);
        totalPrice += line0.unitPrice * line0.amount;
    }
    return totalPrice;
}

よくあるっちゃよくある、注文明細行なめて、単価x個数を集計するようなバッチ処理。

image

3クロックごとに1行を処理するロジックに落ちたみたい。

hls の stream を使ったので、struct の各要素の各ビットを入れる為の pin があるハードウェアが作られた!(ちゃんと構造体がパラメータとして使えてる!)

image

メモリにマップしてそれを読み込んで処理して回るロジックにしてみたりとかは、また今度ですが一応とっかかりとしては普通にCで構造体とか作ってレコード定義してそれ処理して回るハードウェアアクセラレータは普通に作れるようだってところ。

Microsoft Surface が起動しなかった


日本で発売されなかったとか、そういう話じゃなくて、買って手元に届いたんだけど起動しなかった感じ。
普通の人だとちょっと諦めでサポートに駆け込んだ方がいいケースだったのでは?なんですが、日本未発売のマシンだから当然にサポートとの往復とか相当な時間がかかるはずなので無理矢理でもリカバリーさせたの話。

入手経路については細かくは書きませんが、届いてすぐに「なんかエラーでて上がらない」のスクリーンショットをFacebookに書いたら入手経路に中の人が速攻でメッセージで幾つかのエラーの情報を送ってくれましてそのうち一つがビンゴだったわけであります。

結果的にはUSBメモリーからリカバリーが必要だったんですが、もちろんの事としてUSBメモリーにリカバリーイメージを作る元が起動してないから困る。

結果的に向こうでUSBメモリーにリカバリーイメージを作ってもらい、その中身のファイルをもらってなんとかする方向で対処に入ります。

こういう事すると困るのがブートレコードがないので、単純にはリカバリーに入れないのがCPUアーキテクチャが違うケースでの困りごとだったりします。

というわけで起動しきれなかったWindoes RTのWinPEコマンドプロンプトでどんなコマンドがあるかなとかとか。

コマンドプロンプトでWinPEが上がると、XドライブにはWinPEのイメージが、Cドライブには起動しきれなかったWindows RTがみえます。とりあえず、ARMでPEと本番のブートが同じかわからなかったので、RTがわからブートレコードをUSBメモリーにとります。
投げたコマンドは以下。

c:
cd windows\system32
format d: /q
bcdboot c:\windows /s d:
exit

bcdbootは約1分弱かかりますのでゆっくりして下さい。自分の環境ではメモリーはdドライブに見えました。
このUSBメモリーに送ってもらったリカバリーイメージを上書きし、起動失敗した Surface をUSBブートさせます。

これでリカバリーをうまく起動できれば何事もなくなのですが、残念ながらリカバリーの起動も失敗、今度はリカバリーイメージの展開時のエラーの模様。

リカバリーイメージの内容をよーくみる。

ってかディレクトリはbootとefi、sourcesしかなく、まぁインストーラーはsourcesだろうなと当たりをつけてみると3ファイルしかなく、CreatePartitions-UEFI.cmdとResetConfig.xmlとイメージだけ、意外に見るところがない。

落ちたところがイメージの展開開始まえで、観れる中身がディスクのパーティション設定じゃとりあえずパーティション設定をいじってやるべかで、以下コマンドを叩く


diskpart

以下diskpartに対して、


list disk
select disk 0
list partition
select partition 4
delete partition override

list で一覧出してるとおりで一覧みて飛ばすパーティション決めてね。
飛ばしたパーティションはc:につながっていて、ダメなイメージの入ってるところ。WinPEを飛ばすと足がかりさえなくなるので注意。

この状態で一回再起動して、リカバリーを起動もしたら普通にリカバリーできましたって感じ。

タッチキーボードはWinPEには認識されないので全てスクリーンキーからやるのだ!

というわけで、無事 Surface が起動できました。

まとめ、

リカバリーUSBはすぐに作りましょう。
諦めついてるならリカバリー失敗したらdiskpartしてみるといいかも。

SSDは宇宙放射線によるビット化けの可能性があります、航空輸送前にはバックアップをしましょう。

と、IPad で書いた。

fsyacc/lex でDSL – F# Advent Clender 2011 12/24


どーもです。イブのひと時如何お過ごしでしょうか。私事ながら、結婚とかしましてカップルお断り!な感じないいお店とか行けなくて残念って感じにイブを過ごすんじゃねーかな程度な師走時でございます。

という訳で最近始めましたなF#、といってもfsyacc/fslex を使ってパーサーを書いたりしかしてなかったり、しかもプロダクトコードというよりはビルド中に一定の解釈変換をしたい所の処理を書く為にやってるだけという酷い F# の使い方しかして無くて申し訳ない人ですが、その辺に関わるノウハウ的な物という事で書きたいと思います。

C# で定義された AST をfsyacc で出力する方法

やる事が DSL で出力回りに T4 とか使ってると C#コードからASTのトラバースとかしたいわけですが、C#側からF#で定義された判別共用体をグチャグチャいじるのは若干やりづらかったり、出力物はすでに .NET Framework 定義された現物を利用したくて AST を派手に定義したくなかったりする事ってありますよね。たとえば .NET Framework の Expression をパース結果として取りたい時とか。

という訳で F# Parsed Language Starter の AST を C# で置き換えてみましょう。

普通にプロジェクトをまずは作ります。そして C# クラスライブラリを作る事の Ast という事で、Ast 名前空間にぶつけます。

imageimage

参照設定でF#での言語側プロジェクトから Ast クラスライブラリを参照します。

image

Class1.cs の内容を以下の様にして、fsy のアクションを以下の様に書き換えます。 Program.fs の eval 操作を削ると以下の通り。

namespace Ast
{
    public class Factor {}
    public class Term {}
    public class Expr {}
    public class Equation {}

    internal class Integer : Factor {
        internal int Value { get; set; }
    }
    internal class Float : Factor {
        internal double Value { get; set; }
    }
    internal class ParenEx : Factor {
        internal Expr Expr { get;set; }
    }
    internal class Times : Term {
        internal Term Term { get; set; }
        internal Factor Factor { get; set; }
    }
    internal class Divide : Term {
        internal Term Term { get; set; }
        internal Factor Factor { get; set; }
    }
    internal class TermFactor : Term {
        internal Factor Factor { get; set; }
    }
    internal class Plus : Expr {
        internal Expr Expr { get; set; }
        internal Term Term { get; set; }
    }
    class Minus : Expr {
        internal Expr Expr { get; set; }
        internal Term Term { get; set; }
    }
    class ExprTerm : Expr {
        internal Term Term { get; set; }
    }
    class ExprEquation : Equation {
        internal Expr Expr { get; set; }
    }
    public class AstBuilder {
        public static Factor Integer(int value)
        { return new Integer { Value=value }; }
        public static Factor Float(double value)
        { return new Float { Value=value }; }
        public static Factor ParenEx(Expr expr)
        { return new ParenEx { Expr=expr }; }
        public static Term Times(Term term, Factor factor)
        { return new Times { Term=term, Factor=factor }; }
        public static Term Divide(Term term, Factor factor)
        { return new Divide { Term=term, Factor=factor }; }
        public static Term Factor(Factor factor)
        { return new TermFactor { Factor=factor }; }
        public static Expr Plus(Expr expr, Term term)
        { return new Plus { Expr=expr, Term=term }; }
        public static Expr Minus(Expr expr, Term term)
        { return new Minus { Expr=expr, Term=term }; }
        public static Expr Term(Term term)
        { return new ExprTerm { Term=term }; }
        public static Equation Equation(Expr expr)
        { return new ExprEquation { Expr=expr}; }
    }
}
start: Prog { AstBuilder.Equation($1) }

Prog:
    | Expr EOF                    { $1 }

Expr:
    | Expr PLUS  Term            { AstBuilder.Plus($1, $3)  }
    | Expr MINUS Term            { AstBuilder.Minus($1, $3) }
    | Term                        { AstBuilder.Term($1)      }

Term:
    | Term ASTER Factor            { AstBuilder.Times($1, $3)  }
    | Term SLASH Factor            { AstBuilder.Divide($1, $3) }
    | Factor                    { AstBuilder.Factor($1)     }

Factor:
    | FLOAT                        { AstBuilder.Float($1)  }
    | INT32                        { AstBuilder.Integer($1) }
    | LPAREN Expr RPAREN        { AstBuilder.ParenEx($2) }

// This project type requires the F# PowerPack at http://fsharppowerpack.codeplex.com/releases

// Learn more about F# at http://fsharp.net

// Original project template by Jomo Fisher based on work of Brian McNamara, Don Syme and Matt Valerio

// This posting is provided “AS IS” with no warranties, and confers no rights.

open System

open Microsoft.FSharp.Text.Lexing

open Ast

open Lexer

open Parser

printfn “Calculator”

let rec readAndProcess() =

printf “:”

match Console.ReadLine() with

| “quit” -> ()

| expr ->

try

printfn “Lexing [%s]” expr

let lexbuff = LexBuffer<char>.FromString(expr)
printfn “Parsing…”

let equation = Parser.start Lexer.tokenize lexbuff
printfn “Evaluating Equation…”

let result = equation
printfn “Result: %s” (result.ToString())
with ex ->

printfn “Unhandled Exception: %s” ex.Message

readAndProcess()

readAndProcess()

めでたく

—— ビルド開始: プロジェクト: Ast, 構成: Debug Any CPU ——

Ast -> c:\users\kazuk\documents\visual studio 2010\Projects\FParsedLanguageStarter1\Ast\bin\Debug\Ast.dll

—— ビルド開始: プロジェクト: FParsedLanguageStarter1, 構成: Debug x86 ——

FParsedLanguageStarter1 -> c:\users\kazuk\documents\visual studio 2010\Projects\FParsedLanguageStarter1\FParsedLanguageStarter1\bin\Debug\Language.exe

========== ビルド: 正常終了または最新の状態 2、失敗 0、スキップ 0 ==========

ビルド成功と。

internal 宣言をマメにやってますが、Ast で internal になっている要素はパーサー実装にとっては要らない子という事です(実際に見えませんがビルドは通ってるのは上記のとおり)

ましてや判別共用体である事やムニャムニャはちっともパーサーにとっては必要のない事なわけです。これで式木をASTとして出力するパーサーを書けと言われても簡単なお話でExpression のノードを保持する型を EBNF の出力部に合せた型で保持して返すだけでよいという事も解るわけですね。

C# からのパーサーの呼び出し

ASTをF#以外の言語でもできたわけで、これでF#固有の言語セマンティックスである判別共用体をC#からモニャモニャする方法を悩まなくて良い様になりました。これでC#コードであるT4からASTを扱う処理は普通に書けばいいでしょって事になります。

ではパーサーを呼ぶ方法です。これが出来ないとT4から呼ぶとか、カスタムツールから呼ぶとか、ビルド時タスクから呼ぶとかパーサーが本当に欲しい人にとっては意味がないよって事で、ここをどうするかのお話になります。

まず単純にやってみて打ちひしがれましょう。

F#のパーサーアセンブリの出力をコンソールアプリケーションからクラスライブラリに変更します。

image

いきなりビルドできなくなります。(一撃目)

image

とりあえず Program.fs を全部コメントアウトしてビルドを通そうとしても無駄で、同じエラーになり、ちゃんとF#を勉強してこいと蹴っ飛ばされます。(二撃目)

仕方ないので Program.fs を削除!するのはもったいないのでビルドアクションにNoneを指定してコンパイル範囲から外してビルドを通します。

image

また C# のクラスライブラリを作ってF#のパーサープロジェクトを参照させます。

imageimage

どんな型が定義されてるのかなと、オブジェクトブラウザを開こうとして打ちひしがれます。

image

以上、ありがとうございました。と終わると暗にF#をdisるエントリーの出来上がりです。

F# Advent Calender でそれをやる勇気はないので、ちゃんと呼べるようにしましょう。

namespace ParserExpose

  open Microsoft.FSharp.Text.Lexing
  open Ast
  open Lexer
  open Parser

  type PaserExpose =
    static member Parse (text:string)  =
      let lexbuff = LexBuffer<char>.FromString(text)
      Parser.start Lexer.tokenize lexbuff

単純に LexBuffer<char> を構築して Parser.start を呼ぶだけです。

これを呼び出すメソッドは以下の通り。

using ParserExpose;

namespace ParserConsumer
{
    public class Class1 {
        public void DoParse(string text)
        {
            var equation = PaserExpose.Parse(text);

        }
    }
}

簡単に静的メソッドを呼ぶだけですね。

ここまでくれば T4 でなんかするのも簡単です。

見えなくても良いよを示す為に internal にしたのが裏目に出たのでサックリと InternalsVisibleTo で Ast アセンブリのinternal をParserConsumer に公開。

前処理されたテキストテンプレートを追加

image

こんな T4 Template を書くと

<#@ template language="C#" #>
<#@ import namespace="Ast" #>
<#+
    public void WriteEquation( Equation equation )
    {
        var equ = equation as ExprEquation;
#><span class="equation"><#+ WriteExpr( equ.Expr ); #></span><#+
    }

    public void WriteExpr( Expr expr )
    {
        var p = expr as Plus;
        if( p!=null ) {
#><span class="expr plus"><#+ WriteExpr( p.Expr );#>+<#+     WriteTerm( p.Term ); #></span><#+
        }
        var m= expr as Minus;
        if( m!=null ) {
#><span class="expr minus"><#+ WriteExpr( m.Expr );#>-<#+     WriteTerm( m.Term ); #></span><#+
        }
        var t = expr as ExprTerm;
        if( t!=null ) {
#><span class="expr"><#+ WriteTerm( t.Term );#></span><#+
        }
    }

    public void WriteTerm( Term term )
    {
        var t = term as Times;
        if( t!=null ) {
#><span class="term times"><#+ WriteTerm( t.Term );#>*<#+     WriteFactor( t.Factor ); #></span><#+
        }
        var d = term as Divide;
        if( d!=null ) {
#><span class="term divide"><#+ WriteTerm( d.Term );#>/<#+     WriteFactor( d.Factor ); #></span><#+
        }
        var f = term as TermFactor;
        if( f!=null ) {
#><span class="term"><#+ WriteFactor( f.Factor ); #></span><#+
        }
    }

    public void WriteFactor( Factor factor )
    {
        var i = factor as Integer;
        if( i!=null ) {
#><span class="factor integer"><#= i.Value #></span><#+
        }
        var f = factor as Float;
        if( f!=null ) {
#><span class="factor float"><#= f.Value #></span><#+
        }
        var p = factor as ParenEx;
        if( p!=null ) {
#><span class="factor">(<#+ WriteExpr( p.Expr ); #>)</span><#+
        }
    }
#>

これでspanでマークアップされたHTMLフラグメントになるわけですね。

 

マトメ

fsyacc/fslexは作るASTは外部定義の物を簡単に使えるし、作ったパーサーもC#から呼ぶための口を開いてあげれば普通に呼べるしという事で、使えば色々使える代物でございます。

バイナリーのフォーマット定義とか C言語での構造体記述が共通記述言語だったりしますよね、それを手で変換するとかしてたなら軽くパーサー書いてあげればT4でコードに落としたりできるし、バイナリーフォーマットのDSLたるC言語の構造体表現に対応した事になるわけです。その表現に従って BinaryWriter / BinaryReader を連打するコードを吐かせれば古き良きバイナリープロトコルでのOLTPもどんと来いです。

LALR(1)のパーサーが出来るのですから頑張れば C# のコードもパースできるはずです。あなたのマシンにも入ってるC#言語仕様のドキュメントのEBNFを引っ張りだして C#コードに埋められたDSLを解釈しても良いでしょう。

パーサーが必要になるのはDSLに限りません、Lexer / LexBuff は char のシーケンス処理です。ゲームパッドの上下左右やボタンを文字にマップして流し込めば UUDDLRLRBA でコナミコマンドを解釈するなんてのもきっと出来るでしょう。連続するポーズを文字にマップして解釈すればKinectでポーズを読んで仮面ライダーの変身ポーズを Accept するパーサーだって書けるはずですね。

簡単に流れ制御構文をいくつか受け取ってWindows Workflow の流れ制御系アクティビティのインスタンスを生成する事ができるパーサーとか書くと、「俺たちはテキストなコードを書くドメインスペシャリストなんだが、MSの中の人達なんか勘違いしてないか?」とか言えますね。見た目かっこよく素人受けの良いフォーマットでとかは生成されたアクティビティを XamlWriter に渡してXAML書かせてVSでデザイナ表示すればできる事

マトメのマトメ

メソッドをちゃんと定義してあげても結局の所、オブジェクトブラウザで見ようとすると、こうなるのは。

—————————

Microsoft Visual Studio

—————————

利用可能でないか、またはビルドされていないため、このプロジェクトをオブジェクト ブラウザーで表示することができません。プロジェクトが利用可能でビルド済みであることを確認してください。

—————————

OK

—————————

F#たんのこの画像の雰囲気どおりの仕様で良いと思います。図書館の文学少女は誰がなんと言おうと正義です。出来上がったアセンブリがVSで表示できないからとILDASMに読み込むときの背徳感最高です。文学少女を体育倉庫に連れ込んでイケナイ事をしてる妄想がテンションを上げてくれます。F#たんサイコーです。

kazuk の開発環境晒し


最近ではもっぱら開発環境はノートPC、どこでも開発できるのは魅力&やってる事の関係からUSBを頻繁に差し替えるので、キーボードのすぐ脇に出てるケーブル差し替えが出来るのは便利ですねーと。

とりあえず現状使ってるノートPCは hp の ProBook 4420s 本体購入価格は4万円を切っているというアウトレット品。中身は殆ど総とっかえで HDD を SSD換装、メモリはデフォルトの2GBを外して4GBボードx2で8GBへ、本体ディスプレイだけだと情報表示量が貧弱すぎるので外部ディスプレイに UXGA 1600×1200 を接続しています。

SSDにしてあるので、メモリは8GBでもまぁまぁ快適、Core i3 なので Azure のエミュレータで多数ノード上げるとコアが足りなくなる不便さはあるけど一応2コアあるので処理競合をさせようとすればしないでもないぐらいな。

Windows 系メインの開発環境は Visual Studio 2010 Premium 、実はほかの開発環境使う場合の援護系を色々こっちから(後述)

そのほかに入ってる開発環境としてはこんな感じ。

MPLAB IDE v6.40 – Microchip の PIC 用開発環境ですな。

EAGLE プリント基板のパターン起こしとかが出来るCADソフトです

LTSPICE アナログ回路のシミュレーションのできる電子回路設計ツールです。

遊びでしか使ってないけど Arduino

上はクラウドから下はマイクロコントローラまで、我ながら幅が広すぎる開発環境でございます。

基本的に使ってる言語は C# か PIC クラスに対してはアセンブラ。C は Aruduino のアレコレいじる時にたまに書く程度。

ローカルマシン内で CruiseControl.NET のCIサーバを上げてある他に SubVersion のリポジトリもあったりして、このリポジトリイメージはWindows Live Mesh でオンラインと同期取ることでバックアップ。

Visual Studio と SubVersion の連携はあえてせず、亀Svn でExplorer からローカルSvnは操作、SubVersion内は主にドキュメント類のバージョン管理とローカル CIサーバに見せる為のリポジトリという位置づけ。

Visual Studio は Codeplex のTFS や会社であれば会社のTFSとつながってるはずなので、それをそのまま運用しながら、TFS で最新ソースを取得したらローカル SVNへコミットしてローカルCIサーバが勝手にビルド、うまくいかないとしたら取ってきたソースに毒が含まれているって事でローカルCIサーバ上で通る様にするためにローカルSvn上でちまちま作業。通ったらTFSへチェックイン。その後アレコレしている最中も SubVersion と ローカルCIサーバが基本としてお友達で手元VSでビルド通ったらSubVersionへコミットしてみてローカルCIサーバでビルドとテストをしてもらう的、CCTray のExec 設定でビルド失敗するとプロジェクトダッシュボードがブラウザに勝手に開くよ設定してるのでブラウザに何も出なければ基本うまく行ってます的な。

PIC用のコードの類とかは VS上で編集して(T4を編集するとT4からPICアセンブラソースが出る的な)、デバッグ用のPICシミュレータ上げる時とかだけ MPLAB 起動。

Visual Studio で開発してるのは基本として VSSDK でサポートされるプロジェクトテンプレートとかの類やT4でのコード生成回りと生成されるコードが使うインフラ実装みたいな感じで、もっぱら開いてるソースの拡張子は csproj と vsproject、tt 的な。

準備は整ったーでエイや!とばかりに作りこんだプロジェクトテンプレートでプロジェクト起こしてアイテムテンプレートからファイルゴンゴン起こして設定的なことチコチコ書き込むとアプリケーションは出来上がりが理想という感じ。プロでも一部の人しか理解できない&やらない世界が自分的にはお好きな所。

デバッグはもっぱらPex で、落ちたコードで行きつく状態の列挙をさくっとやってくれてテストを作ってくれるので、想定通りになってないルートにたどり着くテストをPexに起こしてもらってそれが上手く通る様になるまでコードいじり。Pexがお手上げになるようなコードになってたらリファクタリング。大半は Code Contracts でRequire一行書いて呼び手が悪いと主張すると Code Contracts の静的解析で悪い呼び手を見つけてもらってチコチコ直すとバグは取れている事が大半。Pexが作ったテストとかはそのまま一緒にコミットすればいつでもローカルCIサーバがテストしてくれるのでなんか間違っても安心という。

それと、「テストで結果確認しようとしてる内容ってCode ContractsのEnsureに書いた方がいいんじゃないの?」は常に自分に問う事、これをしてると null チェック忘れてるコードを書くと静的解析が教えてくれるし、その null チェック要らんですよ、null 帰りませんからとかも教えてもらえるのでサクサクやりたい事に集中してコード書いて「このコードで不都合はございませんか?」とCode Contractsに聞いてみると、「ここでnull帰るかもよー」とか教えてくれるので、「さようですか、ではこうします」のループが奇麗に回る。

バグったコードは基本として書けません、仕組み的に。これをちゃんとすると結構色々楽ですよって感じです。

震災ボランティア始めました。


どーも。震災ボランティア始めました。という訳で

昨日は東松島にて活動後、次の活動地の偵察という事で奥松島に行ってきました。

とりあえず奥松島へ向かう途中にとった現地の写真を一枚

SANY1440

撮影地は多分ここ、止まった時計は津波の襲来時刻そのままです。

http://maps.google.co.jp/maps?q=%E6%9D%BE%E5%B3%B6&hl=ja&ui=maps&ie=UTF8&hq=&hnear=%E5%AE%AE%E5%9F%8E%E7%9C%8C%E5%AE%AE%E5%9F%8E%E9%83%A1%E6%9D%BE%E5%B3%B6%E7%94%BA&ll=38.371069,141.162343&spn=0.014266,0.032573&z=15&brcurrent=3,0x5f89999621ba7b6f:0x1540d18a90937311,0

小学校かと思ってましたが、中学校ですね。まぁ、その違いがあっても子ども達のいる学校というものまで無差別に津波に襲われたという事実には何の違いもありません。

学校の手前には数十件の住宅があったと思われますが、基礎以外は何もなくなってました、そこに置かれた花、小さな子供用自転車、意味はお察しください。悲しい現実。

現地入りして2日たちましたが、こういう光景には無力感もなきにしも。ボランティアでできる小さな事があるのと同時に、こういったどうにもならない途方もない事柄が散在しています。

 

現地ではゴールデンウィークのボランティアラッシュから急変直下、ボランティアの減少にあえいでおります。梅雨の始まる前になんとかしないと…なあれやこれやが沢山あります。

無力感と焦りの狭間より。

災害対応用サイト jp110311 Liveしました


公開URL

http://jp110311.cloudapp.net/

現状、郵便番号単位での地域掲示板機能が完成しているという事で公開します。

郵便番号単位としているのは「炊き出しの場所」「仮設トイレの場所」等、地域に密接した情報の交換その他を支援する事を目的としている為で、広域情報は報道や役所に任せて細かい情報交換に使ってもらえればという考えからです。

 

以下、iMode シミュレータでのスクリーンショット各種

サイトトップ ログオン(1)(2)、ユーザー登録画面(1),(2)、ログオン後のTOP、掲示板投稿一覧、タグ追加画面、タグ一覧画面、投稿画面

image image image image image image image image image image

 

 

謝辞

協力いただいたメンバー各位 http://jp110311.codeplex.com/team/view

災害対応用としてAZURE312を対応いただき、codeplex 等既存の物もたっぷり使わせていただいております。

 

続いてユーザー間でのメッセージ交換等を実装していきますが、とりあえず First Release にあたってお礼を申し上げます。

また、自分の Twitter TL上でさまざまな人にアドバイス頂きましたみなさんにもお礼を申し上げます。

jp110311 プロジェクト進捗報告(1)


とりあえず、プロジェクト設定直後でのディスカッション

jp110311 – View Discussion での設定によるファーストマイルストーンに向けて進行中です。

都道府県市区町村では単位が大きすぎるとの考えから郵便番号レベルで分割された情報交換、情報集積を行えるサイトとして立ち上がればいいと考えています。

 

Azure 上に上げる予定なんで、まず最初にネックになりそうな認証プロセスのASP.NET標準から Azure Table 利用版への載せ替えを行い、ユーザー登録処理を実装しました。

(現状エラーチェックとか甘々なんですけど、 developers 各位には validation ルールとか埋めていただけるとうれしいです)

ユーザーの管理は基本的に郵便番号がパーティションキーになるようにしてるので、登録人数全体量によるスループットの低下は無いと思いたいです。

 

動いてる範囲のスクリーンショットを以下

image image image image image image

携帯に合わせた HTML に画面HTMLをチコチコいじってくれる人いればドンドン修正コミット入れていただきたく。

 

自分はとりあえず、掲示板本体系のデータモデルの設計してバックエンドストレージの実装に向かいます。

参加してくれている各位、ありがとう。 被災地の皆様、頑張りましょう。