タグ

ブックマーク / mattn.kaoriya.net (51)

  • Big Sky :: RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 何も見ずにC++でjsonパーサが書けるか試してみた。 C言語から使えるJSONパーサ、JSMNを試してみた。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、jansson がとても直感的で良い C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」 コメントも扱える高機能な

    Big Sky :: RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」
    Watson
    Watson 2022/03/21
  • Big Sky :: 書評「プログラミング言語大全」

    色々なプログラミング言語の生い立ちや特色、エピソード、それらの言語での FizzBuzz の書き方など、プログラミングを始めたばかりの方が読んで楽しめるだと思います。 僕も昔からプログラミング言語が大好きなので色々なプログラミング言語を触ってきましたし、自作言語もいくらか作ってきました。僕の初めてのプログラミング言語は BASIC でした。シャープの MZ シリーズの高速化が行われ「スーパー MZ」と呼ばれていた MZ-2500 を使い、自作のゲームを作っていました。あの頃のマイコンや BASIC は今と比べるととてもチープで、出来る事も限られていました。しかしそのお陰で僕達パソコン少年達は Z80 という CPU を高速に扱う為にハンドアセンブル(アセンブラが高価すぎて買えないので変換表を見ながらニーモニックを打ち込む事)を覚える事ができました。今から考えると、あれだけコンピュータに真

    Big Sky :: 書評「プログラミング言語大全」
  • Big Sky :: 書評: Visual Studio Code 実践ガイド

    執筆者様に Twitter でお声掛け頂き、発売前ながら献頂く事になりました。執筆された森下様、送付頂いた技術評論社様、ありがとうございました。 Visual Studio Code は登場から色々な機能を取り込みつつ着実にユーザを増やし、統合開発環境としては今や飛ぶ鳥を落とす勢いになった言って良いでしょう。以下は 2019 年の Stackoverflow Survey で公開された有名な開発環境の調査結果です。 僕は普段は Vim というテキストエディタを使っていますが、実は僕は色々なテキストエディタを試します。Emacs も人並み程度使えますし、Visual Studio Code も拡張を自分で書いた事がある程度には使っています。 Search results - mattn | Visual Studio Code , Visual Studio Marketplace ...

    Big Sky :: 書評: Visual Studio Code 実践ガイド
  • Big Sky :: sudo の特権昇格バグはなぜ起こったのか

    « Microsoft Word を Markdown に変換するコマンド「docx2md」を作った。 | Main | VimConf 2019 を終えて » Linuxsudo に root 権限を奪取できるバグが見つかった。 Linuxの「sudo」コマンドにroot権限奪取の脆弱性。ユーザーID処理のバグで制限無効化 - Engadget 日版 この脆弱性は、sudoコマンドのユーザーIDに-1もしくは4294967295を指定すると、誤って0(ゼロ)と認識して処理してしまうというもの。0(ゼロ)はrootのユーザーIDであるため、攻撃者は完全なrootとしてコマンドを実行できることになります。 https://japanese.engadget.com/2019/10/14/linux-sudo-root-id/ 既に Ubuntu 等にはパッチが配布され始めているらしい

    Big Sky :: sudo の特権昇格バグはなぜ起こったのか
  • Big Sky :: 書評「Go言語による並行処理」

    O'Reilly Japan, Inc. 様に献頂きました。ありがとうございます。 そして献頂く際にお声を掛けて頂いた、書の翻訳を担当された ymotongpoo さんにもお礼を申し上げます。ありがとうございます。 書の訳は非常に素晴らしく、とても原文が英文であったとは思えないほど綺麗で、読んでいく中で「原文でどの様に表現されているんだろう」といった引っかかりも無く、とてもスムーズに読み進められました。 Go 言語に関わって随分と長くなってきました。初めて Go を知ってからユーザがどんどん増える様を見る事が出来るのは正直に言って非常に嬉しいです。 ふと Go の魅力は何かと聞かれたら幾つか挙げる事が出来ますが、間違いなく選ぶのが「非同期処理の簡単さ」です。これまで多くの開発者が OS スレッドで実現してきた非同期処理を、Go 言語は少ないイディオムとインテリジェントなランタイムを

    Big Sky :: 書評「Go言語による並行処理」
    Watson
    Watson 2018/10/22
  • Big Sky :: VimConf2017 に参加してきた。

    11/04、#vimconf2017 に参加してきました。 Vim の国際会議として開催される VimConf2017 に kaoriya さんからお誘いを受けたので参加してきました。電源は各席に付いていて、WiFi も完備、LAN ケーブルも繋がるし、会場も綺麗、弁当付き、コーヒー飲み放題、白い恋人、懇親会、LT、当に当に盛沢山で素晴らしい国際会議だったと思います。 Vim, Me and Community haya14busa さんの Vim 人生を振り返り。haya14busa さんがコントリビュートしてきた EasyMotion、そして incsearch.vim というプラグインの機能紹介をしつつ、Vim 体への incsearch の実装を分かりやすく説明してくれました。 僕ら古株 Vimmer には思いつかないアイデアだったと思います。Vim 初心者の方にも伝わる発表

    Big Sky :: VimConf2017 に参加してきた。
    Watson
    Watson 2017/11/06
  • Big Sky :: レーベンシュタイン距離を使ったあいまい grep コマンド「lsdgrep」作ってみた

    元ネタはずいぶんと昔の記事なのだけど。 編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー ■ 編集距離 (Levenshtein Distance) 昨日 最長共通部分列問題 (LCS) について触れました。ついでなので編集距離のアルゴリズムについても整理してみます。 編集距離 (レーベン... http://d.hatena.ne.jp/naoya/20090329/1238307757 思い付きはまったく関係ない所から。 mp3 が数千ファイル入ってるフォルダで何かの手違いで同じ曲が入ってしまう事が結構あって重複取り去る作業してた。ID3が違ってるとMD5も違うのでレーベンシュタインの文字列距離を使ってファイル名が似てるの調べたら422ファイル消せる事が分かった。 — Vim芸人 (@mattn_jp) February 25, 2017 これを

    Big Sky :: レーベンシュタイン距離を使ったあいまい grep コマンド「lsdgrep」作ってみた
  • Big Sky :: Ruby の Array#<< は Array#push よりも速いか

    巷の噂で Ruby の Array#<< が Array#push よりも速いと聞いたので調べてみた。まずはベンチマークを取ってみた。 require 'benchmark' Benchmark.bm 10 do |r| r.report "push" do 8000000.times do; [].push(1); end end r.report "<<" do 8000000.times do; [] <<1; end end end 結果は以下の通り。 user     system      total        real push         1.570000   0.000000   1.570000 (  1.579687) <<           1.280000   0.000000   1.280000 (  1.288951) 確かに Array#<< の

    Big Sky :: Ruby の Array#<< は Array#push よりも速いか
    Watson
    Watson 2017/02/12
  • Big Sky :: Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか

    以前からずっと疑問に思っていた事があった。 ruby の後置 if/unless で条件が偽になった場合でも代入構文が実行されるのはどうしてだろう 例えば以下のコードを irb や pry で実行してみて欲しい。 a = 1 if false 続けて a をタイプする。すると nil が表示される。 僕のこれまでの理解だと後置if/unlessは、ステートメントに作用するのでそのステートメント自体が無効になる、つまり代入自体されなかった事になるという理解だった。ruby のパーサのソースコードを見ても後置ifはステートメントに作用している様だった。 | stmt modifier_if expr_value { /*%%%*/ $$ = new_if($3, remove_begin($1), 0); fixpos($$, $3); /*% $$ = dispatch2(if_mod, $

    Big Sky :: Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか
    Watson
    Watson 2017/02/01
  • Big Sky :: Matz の「言語のしくみ」を読んだ。

    Twitter で「言語のしくみ」読みたいなって呟いたら Matz 人から「献しましょうか」とメンション頂いて即答でお願いしました。ありがとうございます。 ひさびさ紙のを通勤電車の中で立ちながら読んだので手がだるくなりました。なんだか懐かしい感じがしました。 さてこのですが、一言で言うとこんなです。 Ruby のパパこと Matz が雑誌の連載に追われながら試行錯誤して作ったプログラミング言語「Streem」を解説する 聞こえが悪かったらすみません。言いたいのはこの「試行錯誤」がとても良いエッセンスになっている点なのです。実際にはその連載記事をまとめた物に対して、この当時はこの様に考えていたが後になってみると実は良く無かったといった振り返り「タイムマシンコラム」で構成されています。 この連載が1つのに纏められた事でプログラミング言語設計者の葛藤が非常に良く表されているな、そう

    Big Sky :: Matz の「言語のしくみ」を読んだ。
  • Big Sky :: GitHub 等で Markdown に画像を貼る時は代替テキストを意識しようと思った。

    コマンドラインで標準入力をフィルタリングできる peco というソフトウェアがあり僕も開発メンバとして参加させて貰っているのですが、これに興味を持ってくれたとあるユーザから issue が来た。 Textual examples · Issue #349 · peco/peco · GitHub Hello. I use screen readers to interact with the computer, such applications speaks for me what you ... https://github.com/peco/peco/issues/349 こんにちわ。 readme でテキストによる例もしくは画像キャプチャの代替テキストを用意してくれませんか?私は盲目で画像を見ることができない。 僕らはこれまで当然の様に、Markdown で画像を貼る時に ![](

    Big Sky :: GitHub 等で Markdown に画像を貼る時は代替テキストを意識しようと思った。
  • Big Sky :: SSE を使わなくても HTML エスケープはある程度速くできる。

    SSEを使ってHTMLエスケープを高速化してみた - k0kubun's blog 高速なHTMLエスケープをするライブラリを作った ある日HTMLエスケープを速くしたくなって、hescapeというライブラリを作った。 github.com とにかく速いHTMLエスケープがしたい R... http://k0kubun.hatenablog.com/entry/hescape 以前、moznion 氏の petit-html-escaper を勝手に高速化した時の話。 GitHub - moznion/petit-html-escaper: A simple and small escaper for HTML with SSE4.2 function Author moznion ( moznion@gmail.com ) mattn License The MIT License (M

    Big Sky :: SSE を使わなくても HTML エスケープはある程度速くできる。
  • Big Sky :: golang の遅いコードをたった1行で高速化するテクニック

    記事中に間違いがありました。数倍も速くはなりませんでした。確か 1.0X ~ 1.1 倍程度の高速化は得られましたがびっくりするほどの物ではありませんでした。すみません。 そろそろ Go1.7 がリリースされるそうですが、皆さん如何お過ごしですか。Go 界隈の波平こと mattn ですこんにちわ。バカモー(略 Go1.7 ではコンパイラの最適化が行われ、ビルド速度がかなり短縮される様になりました。毎日ビルドしてる僕としては非常に嬉しい機能改善ですね。 さてとてもキャッチ―なタイトルで釣ってしまった訳ですが、気にしたら負けなのでどんどん話を進めます。 var t [256]byte func f(b *[16]byte) { for i, v := range b { b[i] = t[v] } } 例えばこのコードを見て下さい。このコードはココから拝借しました。issue の内容はスコー

    Big Sky :: golang の遅いコードをたった1行で高速化するテクニック
    Watson
    Watson 2016/08/04
  • Big Sky :: golang の channel を使ったテクニックあれこれ

    golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golanggoroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat

    Big Sky :: golang の channel を使ったテクニックあれこれ
    Watson
    Watson 2016/07/06
  • Big Sky :: peco みたいだけど peco と違うコマンドラインセレクタ cho を作った。

    僕はもっぱらコマンドラインで作業するので peco を使う事が多いです。 Big Sky :: Windows のコマンドプロンプトを10倍便利にするコマンド「peco」 Windows ユーザのごく一部には、コマンドプロンプトが無いと生きられない民族がいます。そしてその民族の一部には cygwin や msys bash 等といった、サードパーティなシェル(power... http://mattn.kaoriya.net/software/peco.htm GitHub - mattn/pcd: peco + cd = awesome! README.md pcd peco + cd = awesome! Requirements peco Windows Installation Copy pcd.bat into your fav... https://github.com/mat

    Big Sky :: peco みたいだけど peco と違うコマンドラインセレクタ cho を作った。
    Watson
    Watson 2016/06/03
  • Big Sky :: Windows ユーザは cmd.exe で生きるべき。

    [D] Windowsはターミナルがダメだから使えないってのは過去の話? 基的にはいい感じに見えますが、いくつか問題は発覚してます。 http://blog.drikin.com/2015/01/windows-2.html 僕は Cygwin よりも msys2 が好きです 理由は最後の方に書きます。 cygwin は windows 上に完全な POSIX を提供するのが目的であって、msys2 は native な windows アプリケーションをビルドするのが目的なのでゴールが違うのよね。そして僕は全て cygwin で染められるのが好きじゃ無い。それだけの話です。 — mattn (@mattn_jp) April 10, 2016 もちろん msys2 を POSIX 環境としても使いますが、一番の目的は cmd.exe から Windows ネイティブなアプリケーションを

    Big Sky :: Windows ユーザは cmd.exe で生きるべき。
  • Big Sky :: golang で HTTP を使った処理を4倍速くする

    I think I just made go-github 4x faster in 4 lines of code (and 4hrs). Always make sure you are reusing connections! https://t.co/ORCv1a4prv — Filippo Valsorda (@FiloSottile) March 27, 2016 go-github という、Google が開発している GitHub API ライブラリがあるのですが、今回 filosottile さんがたった4行のコードで実行速度を4倍にするという pull-request を書きました。 いったいどういう事かというと、golang の json.Decoder を使って http.Response.Body から JSON を読み取ると最後の改行(EOF)が読み込まれずに残

    Big Sky :: golang で HTTP を使った処理を4倍速くする
    Watson
    Watson 2016/03/29
  • Big Sky :: コマンドラインから JSON が簡単に作れるツール jo

    « golang で画像アップロードが簡単に出来る go-imageupload を使ってみた。 | Main | SQLite3でカジュアルにズンドコキヨシ » コマンドラインから JSON を扱うツールとしては jq が一般的ですが、例えば ls を実行した結果を JSON の Array にしたいであったり、コマンドライン引数から簡単に Object を作りたいといった場合には一旦考え込まないといけないくらい使い方が難しかったりします。そんな中でひょいと現れたのが jo です。 GitHub - jpmens/jo: JSON output from a shell JSON output from a shell https://github.com/jpmens/jo 作者である jpmens さんがなぜ jo を作るに至ったかをブログに書いています。 Jan-Piet Mens

    Big Sky :: コマンドラインから JSON が簡単に作れるツール jo
  • Big Sky :: GitHub Pages が Jekyll 3.0 になり、ますますブログが書きやすくなった。

    先日、GitHub Pages が Jekyll 3.0 になりました。 GitHub Pages now faster and simpler with Jekyll 3.0 · GitHub GitHub Pages is now running the latest major version of Jekyll, Jekyll 3.0 , and with it, many of th... https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0 速くなったという事でとても喜ばしいのですが、良い事はそれだけではなかった。GitHub Pages を使ってのブログ作成方法については、これまでこのブログでも幾つか紹介して来ました。 Big Sky :: Jekyllで始める簡単ブロ

    Big Sky :: GitHub Pages が Jekyll 3.0 になり、ますますブログが書きやすくなった。
  • Big Sky :: RubyからGoの関数をつかわなくても再帰をやめる → はやい

    RubyからGoの関数をつかう → はやい - Qiita 約20倍はやい!!!!!!すごい!!!!!!!!!!!!!! Go単体での実行に毛が生えた程度になりました!!!!!!!!!!!!!!!!!! もう「Rubyより、ずっとはやい」なんて言わせないぞ!!!!!!!! http://qiita.com/grj_achm/items/679b3f3af2cf377f0f02 def fib(n) return n if n <= 1 fib(n - 1) + fib(n - 2) end puts fib(40) 巷で良く見る fib のコードですね。 $ time ruby fib1.rb 102334155 real    12.692 system  0.031 user    12.651 これを再帰を使わない様に修正すると以下の様になります。 def fib(n) f0, f1

    Big Sky :: RubyからGoの関数をつかわなくても再帰をやめる → はやい
    Watson
    Watson 2015/11/06
    goで再帰呼び出ししないとどうなんだろ( ˘ω˘)