2014年8月4日月曜日
YahooBBルータ(EWMTA2.2)
ポート開放に必要な条件。
ルータのDHCP傘下にあるIPアドレスを使用すること。
固定IPはルータの設定で指定しろということですか。
普通のルータってこの設定方法なんですかね。少なくともBuffaloではそういうことがなかったんで、戸惑っています。
2014年7月11日金曜日
2014年7月1日火曜日
7/1 Extentionへの配送試験
CoreEngineがだいぶ形になってきました。(といってもちゃんと完成しているのはCtrl+c時のExtention終了処理だけですが。)
本日はExtentionへの配送処理とCoreEngineへの送信処理を実装。
コード自体はどちらも以前の実装のコピペ。テストも兼ねてTimerExtentionの実装も実施。
いよいよリリースに向けたテストを始めました。しかしCoreEngineが暴走するという問題が発生。この部分の調査に入りたい。
自身の作業方法で、こまめにcommitできていないのが課題。1commitに複数の修正が入ってます。
みなさまはどのようなタイミングでコミットしているんですかね。
本日の作業
https://github.com/chikin14niwa/hytframework/commit/ee0035bd85758dd32153a1e955e6a80cfb1d6013
2014年6月29日日曜日
6/29 Signalの受信
signalfd。
これを使用するとpollでsignalの受信イベントを待つことができる。
int signalfd(int fd, const sigset_t *mask, int flags);
fdはsignal受信用ファイルディスクリプタ。これはすでにsignal受信用のファイルディスクリプタがある場合に使用され、初めて使用する場合は、-1を入力すること。
maskは signalの受信ルール。詳しくはsigprocmaskを見ること。
flagsはファイルディスクリプタ作成時のルール。
詳細はMan Pageを参照すること。
2014年6月27日金曜日
2014/06/26 パイプのメモ
よって、send/recvは使用できない。
(2)パイプにはread/writeが指定されている。
pipe[0]がread、pipe[1]がwriteである。
今日恥ずかしながら初めて知りました。
少し賢くなりました。
2014年6月25日水曜日
2014/06/25 shared_ptr使用のメモ
一時変数をshared_ptrに格納した際、double freeのエラーが発生。
Object obj;
std::shared_ptr<Object> objp = std::shared_ptr<Object>(&obj);
objp = nullptr;
どうもこれを実行すると一時変数のobjを解放してしまう模様。
解決策としてはshared_ptrを新たに生成すること。
Object obj;
std::shared_ptr<Object> objp = std::make_shared<Object>(obj);
objp = nullptr;
shared_ptrはまだまだ勉強する必要があるなと感じさせられたデバッグでした。
2014年6月20日金曜日
2014/06/20 signalの受信
本日は起動後の終了処理を実装。
signalを受信しTerminate関数を呼ぶことに成功。
気になる点は、2点。
・sigusr1受信時に落ちる。
・プロセスのforkに失敗。
2つ目は動作確認を始めてから解決していないので、しっかりと追っていきたい。
本日の作業
https://github.com/chikin14niwa/hytframework/commit/01e0d031d40ff1179415a7bc8044b5dba63baecd
2014年6月17日火曜日
2014/06/17 デバッグ始めました
子プロセスが上手く動作しない原因の解析を開始しました。
原因の一つは単純で、Initialize関数の入力期待値と実際の入力値が異なったから。Extentionの起動関数を変更した際、修正漏れがあったよう。
対策としては、これまではExtention用の設定値のみを入力としていたが、該当のExtentionとExtention以外の設定値を全て渡すように変更。
ようやく点と点がつながってきて面白くなってきました。
本日の作業
https://github.com/chikin14niwa/hytframework/commit/7f8467c7202241d174434779494bef2115501f17
2014年6月16日月曜日
6/15 ようやく
ようやくテストに辿りつけました。
実装にところどころ抜けがあるのは、最初に設計できていないから。そこは勉強のため目をつぶるとして一個ずつ潰していきたい。
まず明日はExtentionがうまく起動していない部分を調査したい。
TestExtentionの動作確認して、TimerExtentionの動作確認終わればリリースしたいと思います。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/3501f11e072a0923d81c7bf18399a9370d33caad
2014年6月10日火曜日
6/10 TestExtentionの実装終了
久しぶりの投稿です。なかなかまとまって時間がとれず、実装・投稿が遅れました。
今回はボチボチの進捗です。まずSocketMonitorの実装とそれに伴うExtentionの修正が終わりました。
コールバック関数の呼び出しは、前回の方針通り実装し、ビルドが通るところまで確認しました。
そしてTestExtentionの実装が終了しました。これでテスト起動ができる状態となりました。
テスト起動実施までにあとやることは、TimerExtentionの実装とmain関数にCtrl+c押下時の挙動の実装。
動作確認次第、リリースしたいと思います。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/21356f8e8c2be0252227bddba75662dbd9d723c0
2014年6月6日金曜日
6/5 方針メモ
家のマシンのデータを同期し忘れたため、作業できず。
そのため昨日、今日は調査を行った。
調査項目は、SocketMonitorのイベント発生時にExtentionへの伝達方法。
std::function+std::bindやInterfaceクラスの作成、boost::signals2+boost::bindの使用を検討。
boost::signals2を使用してみたい気持ちはあるが、今回はstd::function+std::bindを使用。理由は、標準であること+呼び出す関数が複数になることは想定できないため。
この方針で実装してダメならboostを使用しよう。
2014年6月3日火曜日
6/3 コールバック関数の渡し方に悩む
SocketMonitoringの実装が一通り終わり、Extentionの修正を実施。
CoreEngine動作確認のためにも、早く終わらせたいが、設計・実装方針が全く決まらず作業が止まっている。
それはSocketMonitorへのコールバック関数の渡し方。
今回悩んでいるポイントは以下3点。
①コールバック関数には内部変数を使用する必要があり、static化できない。
②std::bindで実現できそうだが、引数に自身のポインタを渡さなければならない。
③rvalue referenceの関係で渡したコールバック関数(std::function)が正しく格納できるか。
このまま突き進むか、I/Fを作るか、別の方法を考えるかが今週の検討事項になりそうです。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/dd6b13a4faa23d226688da4c04173d815180b1ce
6/2 ソケットの監視
現在書き直しを最小限にすべく、ソケットを監視するクラスを実装中。
少し工夫した点はpollfdへの登録方法。これが吉と出るか凶と出るかはこれから検証。
日記を書きながら、コールバックのエラーチェックをしていないので実装する必要があることに気づいた。
これが終わればTestExtentionに戻れそう。
SocketMonitoringクラスはいろいろな場所で使うので、しっかり使って枯らしたい。
これは開発とは別件ですが、今の私の環境はタブがスペース2つなのでgithubにアップするとレイアウトが崩れてしまう。
タブ変換ツールを次のリリース時には作りたい。
本日の作業:
https://github.com/chikin14niwa/hytframework/commit/3835a4960391b6f625808fcb5773757bbf210d0e
2014年6月1日日曜日
5/31 メイン関数の修正開始
これからExtention実装するたびに毎回実装するのは面倒臭いなと。
ということで、ExtentionクラスのRunメソッドの修正を開始。
同時にSocketMonitoringというクラスを使用し、
登録しているソケットの状態が変化したら通知またはコールバック関数を呼び出す仕組みを検討中。
今日は進捗がほぼないので、ソースのアップロードはなし。
2014年5月31日土曜日
5/29,30 ようやくテストフェーズにいけそうです。
早くも3日坊主になるのかと自分でも思ったが、なんとか4日目に突入した。
この2日分の作業は、下記4点
(1)dlsym関数の戻り値の不正を修正。
(2)CoreEngineとExtentionの通信部分の見直し。
(3)共通関数の括り出し。
(4)TestExtentionの実装着手
(1)は、関数ポインタは引数までちゃんと指定してあげなければいけないことを知らなかった。
1つ勉強になった。(次使う機会は今のところなさそう。c++はstd::function使用すれば解決できそうですし。)
(2)はpipeを引数で渡すのをやめました。 Extentionクラスでなく、ExtentionInterfaceに持たせることで、Extentionクラスがすっきりした気がします。(もう少し見直しは必要そうですが。)
(3)はタイプ量削減のため。これは機会を見つけて実施していきたい。
今のところはerrnoが何を意味しているか表示する関数のみ。
(4)はよく考えればLogExtentionよりも早くとりかかるべきだった。
これができればCoreEngineの実装の確認ができる。1つ1つ取り組む癖を付けなければいけない。
LogExtentionを実装したのは、ほぼ出来上がっていたLog部分を移植したかっただけなのだが急ぎすぎた。
明日の予定はTestExtentiionの実装。
これができれば、Ver0.0.3としてCoreEngineまでをリリースすることにする。
ドキュメントも少し書きたい。
昨日、本日の作業:
https://github.com/chikin14niwa/hytframework/commit/4c4abb15091da8a5effbc45ce9f7b080a130b0be
https://github.com/chikin14niwa/hytframework/commit/927c24900695ab8168d0baef51f385550ae6e26c
2014年5月27日火曜日
2014/05/27 dl巻数
本日の開発は、ExtentionをロードするExtebtionManagerの実装。
dl関数は使用したことがなく、dlsym関数の戻り値と変数の型が合わないエラーが発生中。
明日はこれを調べる。
直近の予定:
dlsym関数の戻り値と変数の型が合わない問題の対処。
動的ライブラリの読み込みの動作確認。
次のリリース予定:
LogExtention実装後
本日のコミット:
https://github.com/chikin14niwa/hytframework/commit/77fb52c14492e786e31531300ae325c019d0ffb0
2014/5/26 初投稿
・hytfwの根幹となるMainEngineの開発。
CoreEngineはExtention(後述)との通信を行うエンジン。
Extentionとの通信は、Extention -> CoreEngineがメッセージキュー、 CoreEngine -> Extentionがパイプである。
Extentionは動的ライブラリで読み込みが可能で現在動的ライブラリの読み込み部分を実装中。
その他、通信部分・設定ファイルの読み込み部分は一通り実装済み。(未テスト)
Extention・・・CoreEngineに接続されるモジュール。
動的ライブラリから読み込まれ、子プロセスを生成する。
・Extentionの一つLogExtentionの開発。
LogExtentionはログの書き出し用Extention。
Loggerクラスを使用して書き出す。各プロセスからは直接メッセージキューから送信される。
今後については明日以降にご説明できれば。
それでは。
本日のコミット:
https://github.com/chikin14niwa/hytframework/commit/c3edfe286aae0c897faca15c98e04748b58bf252
ごあいさつ
このブログは自身が開発しているhytfwの開発日誌です。
自身の考え方や勉強したこと、リリースノートなどを書いていきたいと思います。
目標は毎日の更新。(もちろん開発も)
できるように日々精進していきたいと思います。
簡単に現在のプロジェクトの概要を説明させていただきたいと思います。
プロジェクト名:hytframework
URL:https://github.com/chikin14niwa/hytframework
プロジェクトの目標:以下の3点を目標とする。
・新たな技術を容易に試験できるフレームワークを目指す。
・綺麗な設計・実装を目指し可読性・再利用性の高いフレームワークを目指す。
・ Webシステムの公開
リポジトリ運用ルール:
・master 現行の最新版
・develop 次期リリース用の段階リリース
・unstable 開発中のリポジトリ。このリポジトリに毎日pushすることを目標とする。
現在提供済みの機能:
JSONライブラリの提供。
特徴:[key]で子要素へアクセス可能。
example
hfw::json::Object obj;
obj.Parse("{\"Key\":\"Value\"}";
cout << obj["key"] << endl;