トップ 追記

のろのろのろ雑記

2006|05|06|07|08|09|11|12|
2007|01|03|04|05|10|
2008|01|02|03|04|05|06|08|09|10|11|12|
2009|02|03|04|05|
2012|08|09|11|12|
2016|04|09|11|

2016-11-26 [P2PQ] 徐々に徐々に

_ [P2PQ] 徐々に徐々に

for Peer、まずはどこまでを最初の目標にしようか…

機能開発言語・ミドルウェア
P2P地震情報サーバ接続管理・情報配信[古] VB6
地震情報・津波予報解析[更新] VB6→C# (2011年~)
緊急地震速報 発表検出[古] VB6
P2P地震情報 for Peer[古] VB6
API・その他データベース[更新] ファイル→MongoDB (2014年~)
P2P地震情報の情報受信(for Peer相当)[新] C# (2014年~)
地震情報 詳細解析[新] C# (2016年9月~)
地震感知情報API[更新] Perl→Ruby (2016年9月~)
JSON API[新] Ruby (2014年9月~)
for Android(β) バックエンド[新] Ruby (2015年4月~)

2016-09-08 地震感知情報APIをこっそり入れ替え。

_ [P2PQ] 地震感知情報APIをこっそり入れ替え。

P2P地震情報で提供している地震感知情報APIの提供URIを変更しました。

今回、地震感知情報APIの返却内容に変化はありませんが、中身はごっそり作り変えました。

項目
開発言語VB6.0 + PerlC# + Ruby
WebサーバApache (CGI)nginx + unicorn
DBファイルベースMongoDB

JSON APIも同じ構成で作っていて、そこに機能追加したような形です。

P2P地震情報の公開からもうすぐ12年、本体のバージョンアップは未だ出来ていませんが、外堀はちょっとずつ埋めています。


2016-04-23 サーバ更新

_ [PC] サーバ更新

20160125_P1250029_mini.jpg

サーバ新しくしました。スペックこんな感じ。

ケース RAIJINTEK METIS
M/B    ASRock N3150-ITX
CPU    Celeron N3150
メモリ A-DATA ADDS1600W8G11-R (8GB)
HDD    HGST HTS541010A9E680 (1TB)
電源   SilverStone SST-ST30SF

コンパクト&省電力な構成です。

性能は若干抑え気味ですが、サーバとして運用する分には特に問題なし。


2012-12-16 Mongoid: 複数のデータベースを扱う

_ [Web][Ruby] Mongoid: 複数のデータベースを扱う

class Userquake
  include Mongoid::Document
  store_in database: "p2pquake"
end

 …というふうに、 store_in をつけるだけでした。

 ただし、store_in はMongoid 3.0.0以降でないと使えません。


 もしPadrinoからMongoid 3.0.0以降を使う場合、 padrino edge(git版) を使う必要があります(padrinoとmongoid 3.0系は相性が悪い? → padrino edge(git版) なら大丈夫)。


2012-11-25 利用者に一斉通知するためのプッシュ通知サービスメモ

_ [Web] 利用者に一斉通知するためのプッシュ通知サービスメモ

Boxcar

  • 定番。iPhoneアプリのみ。ブラウザから履歴閲覧・設定とかはできる。
  • Twitter、Facebook、メール(アドレスが用意され、そこに転送する形)、RSSフィードなどに対応。
  • たまに通知してくれないとき、すんごい遅れて通知してくるときがある。
  1. 開発者独自のプロバイダを作成し、キーを取得する。
  2. 利用者登録: HTTPでキーと利用者メールアドレスを投げる。 (Provider API#SUBSCRIBE)
    • Boxcar未登録のメールアドレスを投げると、そのアドレス宛に「Boxcar登録しませんか」メールが届く。
    • 登録解除はBoxcar上から。公開プロバイダになれれば登録もBoxcar上から出来るようになる、たぶん。
  3. ブロードキャスト: HTTPでもろもろ添えて投げるだけ。 Provider API#BROADCAST

Airgram

  • iPhone/Android両対応。
  • 使ったことないので安定性とかわかりません。。

Notifo


2012-11-18 Monoと.NET FrameworkとのDateTime.Parseの挙動の違い

_ [C#] Monoと.NET FrameworkとのDateTime.Parseの挙動の違い

Windowsで動くプログラムがLinuxだとコケる。もとい、.NET Frameworkだと動くプログラムがMonoだとコケる状況に遭遇しました。

デバッグするとDateTime.Parseでコケてたので、挙動の違いを調べてみました。

文字列 .NET Framework Mono
2012年11月18日
2012年11月18日12時00分 △ (DateTime.Parseはエラー。ParseExactで対応可)
平成24年11月18日 ×

Monoだと和暦はまったくダメで、西暦でも時刻が含まれていると DateTime.Parse では対応できないようです。困りました。


以下、詳細です。

実行環境

  • Windows 7 x86 + .NET Framework 3.5 (Visual Studio 2008)
  • Ubuntu Linux 12.04 x64 + Mono 2.10.8.1

1. 西暦を日本語表記、日付のみ

string target = "2012年11月18日";
DateTime parsed = DateTime.Parse (target);
Console.WriteLine (parsed.ToString ());
.NET Framework
2012/11/18 0:00:00
Mono
2012/11/18 0:00:00

2. 西暦を日本語表記、日時

string target = "2012年11月18日12時00分";
DateTime parsed = DateTime.Parse (target);
Console.WriteLine (parsed.ToString ());
.NET Framework
2012/11/18 12:00:00
Mono
Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
  at System.DateTime.Parse (System.String s, IFormatProvider provider, DateTimeStyles styles) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s, IFormatProvider provider) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s) [0x00000] in <filename unknown>:0
  at DateTimeTest.MainClass.Main (System.String[] args) [0x00006] in ***/DateTimeTest/Main.cs:10
[ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: String was not recognized as a valid DateTime.
  at System.DateTime.Parse (System.String s, IFormatProvider provider, DateTimeStyles styles) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s, IFormatProvider provider) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s) [0x00000] in <filename unknown>:0
  at DateTimeTest.MainClass.Main (System.String[] args) [0x00006] in ***/DateTimeTest/Main.cs:10

3. 西暦を日本語表記、日時、ParseExact使用

string target = "2012年11月18日12時00分";
DateTime parsed = DateTime.ParseExact (target, "yyyy年MM月dd日HH時mm分", new CultureInfo("ja-JP"));
Console.WriteLine (parsed.ToString ());
.NET Framework
2012/11/18 12:00:00
Mono
2012/11/18 12:00:00

4. 和暦を日本語表記、日付のみ

string target = "平成24年11月18日";
DateTime parsed = DateTime.Parse (target);
Console.WriteLine (parsed.ToString ());
.NET Framework
2012/11/18 0:00:00
Mono
Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
  at System.DateTime.Parse (System.String s, IFormatProvider provider, DateTimeStyles styles) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s, IFormatProvider provider) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s) [0x00000] in <filename unknown>:0
  at DateTimeTest.MainClass.Main (System.String[] args) [0x00006] in ***/DateTimeTest/Main.cs:11
[ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: String was not recognized as a valid DateTime.
  at System.DateTime.Parse (System.String s, IFormatProvider provider, DateTimeStyles styles) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s, IFormatProvider provider) [0x00000] in <filename unknown>:0
  at System.DateTime.Parse (System.String s) [0x00000] in <filename unknown>:0
  at DateTimeTest.MainClass.Main (System.String[] args) [0x00006] in ***/DateTimeTest/Main.cs:11

5. 和暦を日本語表記、日付のみ、ParseExact使用

string target = "平成24年11月18日";
CultureInfo culture = new CultureInfo("ja-JP", true);
culture.DateTimeFormat.Calendar = new JapaneseCalendar();                  // 和暦使用
DateTime parsed = DateTime.ParseExact (target, "ggyy年MM月dd日", culture);
Console.WriteLine (parsed.ToString ());
.NET Framework
2012/11/18 0:00:00
Mono
Unhandled Exception: System.FormatException: Invalid format string
  at System.DateTime.ParseExact (System.String s, System.String[] formats, IFormatProvider provider, DateTimeStyles style) [0x00000] in <filename unknown>:0
  at System.DateTime.ParseExact (System.String s, System.String format, IFormatProvider provider, DateTimeStyles style) [0x00000] in <filename unknown>:0
  at System.DateTime.ParseExact (System.String s, System.String format, IFormatProvider provider) [0x00000] in <filename unknown>:0
  at DateTimeTest.MainClass.Main (System.String[] args) [0x00022] in ***/DateTimeTest/Main.cs:14
[ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: Invalid format string
  at System.DateTime.ParseExact (System.String s, System.String[] formats, IFormatProvider provider, DateTimeStyles style) [0x00000] in <filename unknown>:0
  at System.DateTime.ParseExact (System.String s, System.String format, IFormatProvider provider, DateTimeStyles style) [0x00000] in <filename unknown>:0
  at System.DateTime.ParseExact (System.String s, System.String format, IFormatProvider provider) [0x00000] in <filename unknown>:0
  at DateTimeTest.MainClass.Main (System.String[] args) [0x00022] in ***/DateTimeTest/Main.cs:14

2012-09-24 padrinoとmongoid 3.0系は相性が悪い? → padrino edge(git版) なら大丈夫

_ [Web][Ruby] padrinoとmongoid 3.0系は相性が悪い? → padrino edge(git版) なら大丈夫

先日 padrinoとmongoid 3.0系は相性が悪い? → mongoid 2.5系を使う を書きましたが,githubのpadrino (padrino edge)だと大丈夫だったので,その方法をば.


ちゅうい

  • githubのpadrino は,きちんと動く状態になっているとは限りません.
    • よーく見ると「build status: failing」になってたりします.

方法

  • まずはGemfileを編集して, Padrino Edge (gitのもの) を使うようにします.ついでに,bson_extをコメントアウトしておきます。
# gem 'bson_ext', :require => "mongo"
(省略)

# Padrino Stable Gem
# gem 'padrino', '0.10.7'

# Or Padrino Edge
gem 'padrino', :git => 'git://github.com/padrino/padrino-framework.git'
  • bundle installします.
$ bundle install
development:
  sessions:
    default:
      database: myapp_development
      hosts:
        - localhost:27017
  • config/database.rb を書き換え,以下の3行だけにしてしまいます.
Padrino.before_load do
  Mongoid.load!(File.join(Padrino.root,"config/database.yml"))
end
  • 動作確認してみましょう.
$ padrino c
=> Loading development console (Padrino v.0.10.7)
=> Loading Application MyApp
=> Loading Application Admin
1.9.3-p194 :001 > Account.first
 => #<Account _id: 505d79e18e406f2bc4000001, _type: nil,
      name:  "Foo", surname: "Bar", email: "test@example.com",
      crypted_password: "$2a$10$MuNCMgHB.jnz5d4g9clSQurCyRamdppvHglTRFB9ZvGyDBbXER5IC",
      role: "admin">

めでたしめでたし.


参考