changeset 46:cf7caa17976c

backup 2021-03-03
author autobackup
date Wed, 03 Mar 2021 00:10:04 +0900
parents 1db60e3a946d
children dd41635fe55b
files user/Itsuki/2021/3-2.md user/matac42/note/2021/03/02.md user/riono210/seminar/202103/0302.md
diffstat 3 files changed, 193 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user/Itsuki/2021/3-2.md	Wed Mar 03 00:10:04 2021 +0900
@@ -0,0 +1,56 @@
+# 進捗報告 
+## 研究目的
+- 当研究室ではOSの信頼性の検証に重きを置いた、GearsOSを開発している。
+    - GearsOSはノーマルレベルとメタレベルを分離して記述が行えるCの拡張言語CbC(Continuation based C)で構成されている。
+- GearsOSは現在開発途上であり、OSとして実際に機能するために開発しなくてはならない機能が残っている。
+- 未実装の機能の一つとしてファイルシステムが挙げられる。
+    - 当研究室では、CbCとは異なるGearという概念を用いて分散処理を記述することができる分散フレームワークChristieを開発している。
+    - GearsOSのファイルシステムをChristieと同様の仕組みを用いて実装したい。
+    - そのためにjavaで構成されているChristieをCbCで構成し直していく。
+- 
+
+> - コンピュータの核となるOSには高い信頼性に加え、拡張性が必要となる。
+>     - OSの信頼性を検証するために定理支援証明(agda)やモデル検査を利用したい。
+>     - プログラムの整合性を検査をメタレベルの計算で行いたい。
+>     - そのためにはノーマルレベルとメタレベルを分離した記述が行える仕組みが必要である。
+> - 当研究室ではノーマルとメタレベルを分離して記述が行えるCの拡張言語CbCを開発している。
+
+
+## 進捗内容
+### GCC_CbCの導入
+- 自分のマシン上にGCCコンパイラを導入した
+    - GCC for MACの場合、コンパイルに時間が1日かかる。
+    - 学科サーバのSingularityで環境が作れるのでそっちでも
+    - homebrewでも行けるが、少し前のやつなので人柱になる可能性ありらしい。
+    - 基本的に以下の手順を実行するだけでOK
+        - https://scrapbox.io/cr-ryukyu/CbCのインストール
+- 代々、環境変数$CBC_COMPILERにパスを紐付けして動かすのが伝統。
+
+### Gears勉強会
+- 清水さんにGears勉強会をしていただきました。
+    - ご教授&ログの記入ありがとうございました。
+        - https://scrapbox.io/cr-ryukyu/CbC勉強会ログ
+    - ターミナルのログも残っているので良ければ(めちゃくちゃ長い)
+        - http://www.cr.ie.u-ryukyu.ac.jp/hg/Members/ikki/CbC_log
+- 例題として読み込んだファイルの指定した文字列のカウントをするコードを作成中。
+    - WordCount問題を勘違いしていた結果こんな感じの問題になりました。
+    - まだ未完成、ある程度自力でやって難しかったらお聞きする感じ。
+
+### Perl
+- perlも読み書きできるように教えていただいた。
+    - PerlのモジュールはCPANに集約されている。
+        - https://metacpan.org
+        - FizzBuzzを書かずに実行できるイカれたモジュールもある
+- 勉強資料はPerl入学式がいいらしい
+    -  https://www.perl-entrance.org
+    -  fireflyのBooksにも良さげな本がある。
+    -  英語だとmodern-perlが無料配布されている。
+
+## その他の報告
+- 就活をぼちぼち開始しました
+    - 某会社fztの面接対策講座を受講した。学歴コンプ爆発
+    - 3/4から琉大がオンラインで合同説明会を開くので手始めにそこから。
+    - 学会発表と両立するので大変そう
+- 焼肉屋のバイトを辞めました
+    - 深夜勤の影響で昼間に起きれなくなったので思い切って辞めた。
+    - 「夜勤はやめとけ」
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user/matac42/note/2021/03/02.md	Wed Mar 03 00:10:04 2021 +0900
@@ -0,0 +1,18 @@
+# memo
+
+トランザクション
+* UNIXのトランザクションはmkdirを使っている?
+* MongoDBとトランザクション
+* トランザクションが重い理由
+    * ロック処理を一箇所でやったりするから
+    * ロックの構成を並列処理
+
+CbCのデバッガ
+
+知見をまとめる場所をまとめたい
+
+GearsOSの書き直し
+* Rust
+* Perl
+
+fireflyの移行
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user/riono210/seminar/202103/0302.md	Wed Mar 03 00:10:04 2021 +0900
@@ -0,0 +1,119 @@
+## 03/02
+
+## 研究目的
+* ゲームの通信方式にはクライアントサーバ方式とp2p方式がある
+* データの安全性やチート対策などでクライアントサーバ方式が主流
+* サーバに接続してマルチプレイなどのデータ同期を実現させているため、低速
+* 高速かつ安全に通信を行たい
+    * 並列分散フレームワークChristieがある
+    * Christieを利用してp2pで通信を行う
+* ゲーム開発で主に使用されているUnityに対応するためにChristieをC#へ書き換えを行う
+
+## ここ1ヶ月の進捗
+* 卒論発表、修論審査お疲れ様でした 
+* ChristieのHelloWorldを動かすために必要なコードを書き切った(1/26)
+    * 案の定動かない
+    * どうもFinishCodeGearが実行されていない
+        * Task周りの問題?
+    * デバッグをしつつ、ChristieのCodegear, Datagearがどう生成されてどういう風に動作しているかコードを追ってみている
+
+
+
+## Christie
+```
+/usr/local/share/dotnet/dotnet /Users/e165729/konoLab/Christie_net/bin/Debug/netcoreapp3.1/Christie_net.dll
+ChristieDaemon, listen: bind to [::1]:10000
+HelloWorldCodeGear Take => 
+HelloWorldCodeGear Take => 
+
+Process finished with exit code 0.
+```
+エラーも出ずに終了してしまう。
+
+
+```c
+public static void Main(string[] args) {
+  CodeGearManager cgm = CreateCgm(10000);
+  cgm.Setup(new HelloWorldCodeGear());
+  cgm.Setup(new FinishHelloWorld());
+  cgm.GetLocalDGM().Put("helloWorld", "hello");
+  cgm.GetLocalDGM().Put("helloWorld", "world");
+    }
+```
+
+```c
+public class HelloWorldCodeGear : CodeGear {
+    [Take] private string helloWorld;
+    
+    public override void Run(CodeGearManager cgm) {
+        Console.WriteLine("HelloWorldCodeGear Take => " +helloWorld);
+        cgm.Setup(new HelloWorldCodeGear());
+        cgm.GetLocalDGM().Put(helloWorld, helloWorld);
+    }
+}
+```
+
+```c
+public class FinishHelloWorld : CodeGear {
+    [Take] private string hello;
+    [Take] private string world;
+
+    public override void Run(CodeGearManager cgm) {
+        Console.WriteLine("fin:" + hello + " " + world);
+        cgm.GetLocalDGM().Finish();
+    }
+}
+```
+
+### 優先度つきTreadPoolについて
+Taskは内部的にThreadPoolを使っている  
+Task生成時にTaskSchedulerを指定できる  
+→TaskSchedulerを継承して自作する
+→内部のwaitQueueの順番を操作することが可能  
+→java版と同じように優先度がつけれそう
+
+
+### リフレクションで死んでしまった
+```c#
+foreach (var field in this.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | 
+                                                       BindingFlags.DeclaredOnly | BindingFlags.Instance)) {
+            if (Attribute.IsDefined(field, typeof(Take))) {
+                SetCommand(CommandType.TAKE, "local", field.Name, new DataGear<object>(field.FieldType));
+            } else if (Attribute.IsDefined(field, typeof(Peek))) {
+                SetCommand(CommandType.PEEK, "local", field.Name, new DataGear<object>(field.FieldType));
+            } else if (Attribute.IsDefined(field, typeof(TakeFrom))) {
+                TakeFrom attri = (TakeFrom) field.GetCustomAttribute(typeof(TakeFrom));
+                SetCommand(CommandType.TAKE, attri.name, field.Name, new DataGear<object>(field.FieldType));
+            } else if (Attribute.IsDefined(field, typeof(PeekFrom))) {
+                PeekFrom attri = (PeekFrom) field.GetCustomAttribute(typeof(PeekFrom));
+                SetCommand(CommandType.PEEK, attri.name, field.Name, new DataGear<object>(field.FieldType));
+            }
+        }
+``` 
+
+`DataGear<object>(field.GetType())`だとtypeがRuntimeTypeになってしまった。  
+fieldのメンバにFieldTypeがあったのでそれを使ったら直った。   
+
+--- 
+### IPAddressが0だと死ぬ
+
+
+```c
+// listen on any address ipv4/ipv6
+            IPHostEntry host = Dns.GetHostEntry("::");
+            IPAddress ipAddress = host.AddressList[0];
+            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, localPort);
+
+            Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
+            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
+            Console.WriteLine("ChristieDaemon, listen: bind to " + localEndPoint);
+            socket.Bind(localEndPoint);
+            socket.Listen((int)SocketOptionName.MaxConnections);
+
+```
+
+`IPHostEntry host = Dns.GetHostEntry("::");`だとダメ  
+`IPHostEntry host = Dns.GetHostEntry("::1");`で一応動いている。  
+
+
+