タグ

2019年2月24日のブックマーク (16件)

  • mrubyでC言語でブロックを扱うには

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    mrubyでC言語でブロックを扱うには
    sh19910711
    sh19910711 2019/02/24
    mrb_yield
  • segmentation faultの出たmrubyを楽しくデバッグする方法 - Qiita

    mrubyを使っていてsegmentation faultとか出て困ったことは無いでしょうか。こういう場合にgdbでデバッグするノウハウを書きます。gdbの使い方についてはここでは説明しません。 逆アセンブラ gdbでデバッグするならmrubyのバイトコードの逆アセンブラが必要です。標準ではcodedump関数が用意されていますが、なぜかここで説明するような使い方はできないようです。mrubyのJITで使っているものがここにありますので、コピーしてcodedump.cあたりにでも入れておいてくください。 これを使うと、変数mrbとirepが見えていれば、こんな感じでdisasm_irep関数を呼び出すことで逆アセンブルできます。見えていない場合、gdbのupコマンドで呼び出し元を辿っていて見えるところがあればそこで実行可能です。disasm_irepは値を返さないのでcallを使う方がよさ

    segmentation faultの出たmrubyを楽しくデバッグする方法 - Qiita
  • mrubyで定義したクラスとメソッドをCから呼び出す - AnyType

    mrubyで書いた方がいいところはmrubyで書いてそうじゃないところはCで書く、という開発をするには、Cで定義した関数をRubyから実行させたり、逆にRubyで定義したクラスやメソッドをCから呼び出せるようにする必要があると思った。前者のような実装はmrbgemsを読めばたくさんある一方で、後者の実装は調べたけどあんまりなかった。そこで、先日「Head First C」でCの初歩を学んだことだし、mrubyのソースコードを読みながら後者の「mrubyで定義したクラスとメソッドをCから呼び出す」実装を試行錯誤してみた。 試行錯誤してみてとりあえず動いたというだけで、正しいやり方じゃないかもしれないので、コメントか@naoty_k宛にメッセージをいただけるとありがたいです。また、参照しているmrubyのコミット番号は「9663a7」です。 Rubyのクラスとメソッドを用意 適当にPerson

    mrubyで定義したクラスとメソッドをCから呼び出す - AnyType
    sh19910711
    sh19910711 2019/02/24
    mrb_class_obj_get / 関数名がmrb_class_getに変わってた
  • ツナでもわかるmruby[7回目:mrbgemsの作り方メモ(勉強中)] - Qiita

    ツナでもわかるとかいいつつ、今回はツナではわかりそうもありません...(´ω`;) ここらでmrbgemを作りたかったので、作りつつ調べた事をメモしてます。 ちなみに作ってみたのはmruby-mqttというmrubyでMQTTクライアントを実現する為のライブラリ。といいつつ実はただのpahoのラッパーです。 注意: 勉強しつつ更新していっているので、内容には間違いが有る可能性が高いです。 ディレクトリ構造 ディレクトリは以下のような構造になるようです。 mruby-クラス名/ mrbgem.rake src / クラス名.c [その他のCソースファイル] mrblib / クラス名.rb [その他のmrubyソースファイル] test / [テストファイル]

    ツナでもわかるmruby[7回目:mrbgemsの作り方メモ(勉強中)] - Qiita
  • 24時間一人mrubyハッカソン - Qiita

    mrubyが対象(のひとつ)にしているデバイス系環境では、プログラムを格納するROMには余裕があっても、実行時メモリであるRAMには余裕がないという話をよく聞きます。ROMはフラッシュでメガ単位の容量があっても、RAMは数十KBとかいうケースも珍しくありません。 そこで、12/24から25にかけての24時間で、どれだけメモリ削減できるか一人ハッカソンを開催しました。ぼっち上等。 基戦略 今回のメモリ削減ハックの基となるのは、Cの文字列定数領域はfreeの対象にならないので、mallocした領域にコピーする必要はない、という戦略です。今回は3件の改善を行いますが、いずれもこの戦略を用いています。 static symbol まずは、symbolテーブルのmalloc量を削減しましょう。symbolの登録には mrb_intern(mrb_state *mrb, const char *s

    24時間一人mrubyハッカソン - Qiita
  • mrubyを小さくしたり大きくしたりした話 - スペクトラム

    最近mrubyにコミットしているので自分の活動をまとめます。 mrubyを小さくした話 mrubyでは、文字列の扱いはシンプルにchar*を構造体でラップしていました。 struct RString { MRB_OBJECT_HEADER; mrb_int len; union { mrb_int capa; struct mrb_shared_string *shared; } aux; char *ptr; }; そのため1つの文字列毎に、構造体分と文字列分の2回のmalloc/freeが発生していました。 ここでCRubyのRStringを見てみます。 #define RSTRING_EMBED_LEN_MAX ((int)((sizeof(VALUE)*3)/sizeof(char)-1)) struct RString { struct RBasic basic; union {

    mrubyを小さくしたり大きくしたりした話 - スペクトラム
  • DMM.com - DMMのビッグデータ分析のご紹介 ~Sparkによるリアルタイムレコメンド~

    生tweet 解析結果 ラオウとトキも6個消しで3.75倍って考えると 悪くない ラオウ,トキ,消し,くない やってみて出来た事・ダメだった事 2 手作業で教師データ作成 => 文脈を全然考慮してくれない ⇒それでもゴミが多少乗ってしまう ⇒教師データの作成方法 Spark ハマりどころ 効率が悪い上、途中で心が折れそうだった。 Map#filterKeys and Map#mapValues not serializable Spark ハマりどころ Output Operations on DStreams DStreamのOutput

    DMM.com - DMMのビッグデータ分析のご紹介 ~Sparkによるリアルタイムレコメンド~
  • シュッとふりかえる Ruby 2.0 以降

    Ruby 2.0 以降の変更を駆け足でふりかえります。 5分では足りませんでした。

    シュッとふりかえる Ruby 2.0 以降
  • UIデザインの中心教義:Trygve(1979)~Cooper(2014)

    トゥリグヴィ・リナカウ (Trygve Reenskaug) の論文(1979)に掲載されている、モデル・ビュー・コントローラー(MVC)アーキテクチャの説明図「ユーザーのメンタルモデル」と「ソフトウェア実装モデル」と「ソフトウェア設計モデル」の三者間のギャップが課題であり続けてるんですよね。1979年のMVC登場以来ずっと、2014年の“About Face 3”まで。 The essential purpose of MVC is to bridge the gap between the human user’s mental model and the digital model that exists in the computer. アラン・クーパー (Alan Cooper) のAbout Face 4 (2014)に掲載されている、実装モデル・メンタルモデル・表象モデルの違

    UIデザインの中心教義:Trygve(1979)~Cooper(2014)
  • 整数列圧縮アルゴリズムの最前線 - ny23の日記

    ちょうど二年ぐらい前,機械学習で疎ベクトルの圧縮に情報検索でよく使われる整数列の圧縮技術を使うことを検討したことがあった(オンライン学習でキャッシュを実装してみた - ny23の日記).そのときは,オンラインで圧縮し Disk に保存,圧縮したベクトルは陽にメモリに置かず読む(OS に任せる)という実装で,(Disk IO のオーバーヘッドが大きく)圧縮さえすれば何を使っても大差なしという身も蓋もない結論になった(結局2行で書ける最も単純な Variable byte code を採用). それ以降は整数列圧縮アルゴリズムに関する知識も NewPFD ぐらいで止まっていたのだけど,つい先日,現時点で最速の圧縮アルゴリズムの提案+ここ数年の主な整数列圧縮アルゴリズム(Simple-8b (J. Software Pract. Exper. 2010), VSEncoding (CIKM 20

    整数列圧縮アルゴリズムの最前線 - ny23の日記
  • yohei-y:weblog: CAP と BASE について調べたこと

    時系列で 1990年代後半: Eric Brewer (UCB)が inktomi でいろいろ作る CAPとBASEの基礎ができる http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/ 2000年7月19日: Eric Brewer が PODC (Principles of Distributed Computing) の基調講演で CAP 定理?と BASE を発表 CAP は Brewer 予測として知られるようになる この時点で、inktomiと同等スケールのWebサービスの問題に対処していた人はあまりいなかったのかもしれない 2002年 MIT の Seth Gilbert と Nancy Lynch が CAP を形式化 ここで Brewer の CAP が晴れて定理となった この間、よくわからず 2007年-: eBay の

  • 今更CAP定理で分散データストアの勉強を始めてみた - As a Futurist...

    長くなったので三行でまとめると CAP 定理を素人なりに調べてみた 分散データストアを CAP 定理で俯瞰してみた どのデータストア使うかの決定因子は CAP 定理的な視点の方がインタフェースとかより先 異論は認めるというか、専門知識ゼロなのでもっと正しい理解があればぜひ教えてくださいませ。 はじめに 僕は MySQL 厨なんですが、最近はやれ「MongoDB がいい」だの「HBase 最高」だのとよく聞きます。これら多種多様なデータストアを語る上で、「RDBMS VS NoSQL」みたいに問い合わせ言語の方式やデータ保存形式の違いで語るのは宗教論かなぁと僕は思ってます。単体プロセスのデータストアとしての特徴とか性能とかは正直なんでもいいかなぁと。 思うに、質的に重要なのは MySQL の master-slave&sharding という Web で今までスタンダードに使われてきた分散

    今更CAP定理で分散データストアの勉強を始めてみた - As a Futurist...
  • 2014 年やったこと - Mozc 編 - NyaRuRuが地球にいたころ

    いつもどおりコードが公開されている範囲で. 実は 2013 年にやっていたこと OSS Mozc のアップデートタイミングの関係上,2013年やったこと - Mozc 編 - NyaRuRuが地球にいたころ に載っていなかった内容です.概ね 2013 年末休暇シーズンに余暇としてやっていました. Windows 版での候補ウィンドウのカラー絵文字対応 Mozc チームを離れる直前,休暇シーズンということもあって久しぶりに自分の書きたいコードでも書くかと言うことでやってみたのがこのカラー絵文字対応です. 作業のほとんどは mozc_renderer (独立したプロセスとして動く,候補ウィンドウ表示用プロセス) 内の文字表示処理を DirectWrite に対応させることでした.カラー絵文字専用に追加したコードは数行です. r192 にてリリース. 変更の大半は renderer/win32/

    2014 年やったこと - Mozc 編 - NyaRuRuが地球にいたころ
  • エンジニアのための経営学

    上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...WebSig24/7

    エンジニアのための経営学
  • Linuxで共有ライブラリsoを作ったり使ったりする方法。

    Linuxの場合は共有ライブラリso Linuxだと、共有ライブラリと呼ぶようです。拡張子は、soです。 下記ブログを参考にしました。 gccを用いたCの共有ライブラリの作り方 ライブラリのコードを書く。 簡単なライブラリコードを書きます。hello関数を実行すると、hello worldを出力するだけです #include int hello() { printf("hello world\n"); return 0; } Mac OSXの場合と同じライブラリのコードにしました。これを、dylibexample.cと名づけて保存します。 gccでsoにコンパイルする。 Linuxの場合は、-sharedオプションをつけてコンパイルすると、soファイルが作成できます。 $ gcc -shared -fPIC -o libdylibexample.so dylibexample.c $ ls

    Linuxで共有ライブラリsoを作ったり使ったりする方法。
  • static link について - 兼雑記

    案外、 static link ってわかってないもんです。というかリンカってわかってないもんです。そして案外はまるものです。以下のクイズに答えられるでしょうか。 クイズ1 $ nm main.o # int main() {} 0000000000000000 T main $ nm foo.a # void foo() { bar(); } void baz() {} foo.o: U bar 0000000000000010 T baz 0000000000000000 T foo $ nm bar.a # void bar() {} void baz() {} bar.o: 0000000000000000 T bar 0000000000000006 T baz $ gcc main.o foo.a bar.a最後のコマンドで、何が起きますか? 普通にリンクできる undefine

    static link について - 兼雑記