タグ

ブックマーク / qiita.com (198)

  • Rust初心者がRustで全文検索サーバを作ってみた - Qiita

    情報検索・検索エンジン Advent Calendar 2019 の5日目の記事です。このAdvent Calendarを作った@takuya_aさんより、お誘いいただきました。 @minoru_osuka もし余裕あれば12/5の記事お願いします! https://t.co/YIA9tIB4Gj — takuya-a (@takuya_b) December 1, 2019 ということで、仕事とは別で個人的に始めたプロジェクトについて紹介できたらと思います。 私自身はApache Solrを好んで利用しています。 ただ、最近のサーバサイドの技術の移り変わりや、新しい開発言語の登場など、取り巻く環境が変化してきています。それらの習得も踏まえ、使ったことのない開発言語を用いて軽量な全文検索サーバを作り始めるという内容です。 開発した経緯 インフラの変化 ここ数年でインフラは大きく変化しました

    Rust初心者がRustで全文検索サーバを作ってみた - Qiita
    bokuweb
    bokuweb 2019/12/05
    すごい
  • Rustのasync/awaitの特徴4つ - Qiita

    async/awaitの最小限の機能が、 Rust 1.38.0 リリースを目標に準備されています。Rust1.36.0のリリースが2019-07-04で、Rustは6週間ごとにリリースされるので、順調にいけば 2019-09-26 頃にリリースされると思われます。もちろんnightlyではすでに試せます。 さてこのasync/awaitですが、他の言語のasync/awaitと基コンセプトは近いものの、いくつか異なる点があります。個人的には以下のことを把握しておくとよいと思いました。 後置await構文 戻り値型 (内部戻り値型・実装ごとに異なる型) 駆動 (awaitまたはspawnしないと進まない) キャンセル (awaitポイントは中止ポイント) 稿は現象の説明にとどめ、そうなっている理由には基的に言及しませんが、どれもきちんと理由があってそうなっています。その点はご承知おき

    Rustのasync/awaitの特徴4つ - Qiita
    bokuweb
    bokuweb 2019/07/06
  • Rust のエラーまわりの変遷 - Qiita

    Rust LT #6 で発表したスライド Error トレイトについて std::error::Error トレイトとは 2014 年 10 月 にRFC 入りしたトレイト (rfcs#201) Rust 1.0 の半年前 Box<dyn Error> として使うことを想定 Error トレイト こんなの pub trait Error: Debug + Display { fn description(&self) -> &str; fn cause(&self) -> Option<&dyn std::error::Error>; }

    Rust のエラーまわりの変遷 - Qiita
    bokuweb
    bokuweb 2019/07/04
  • Goコンパイラをゼロから作って147日でセルフホストを達成した - Qiita

    Go言語コンパイラをスクラッチから書いてセルフホストを達成しました。 Goコンパイラの実装はほとんど見ずに、ほぼ 8cc というCコンパイラから学んだ知識のみで作りました。 特徴 コンパイルするとアセンブリを吐きます 字句解析・構文解析は手書きです。yacc/lex などのツールは使っていません 標準ライブラリも自作です コード行数はテストをのぞくと 9,152行でした。 セルフホストに必要な機能しかないので、Go言語の全機能は網羅していません。 例えば以下の機能は未実装です。 ガベージコレクション go routineとchannel 浮動小数点 設計 70%くらいは 8cc の設計をそのまま引き継いでいます。 残り25%(map,slice,interface,method,型推論等)が自分のオリジナル、残り5%が9cc、くらいな感じです。 かかった期間 2018/10/7に着手し

    Goコンパイラをゼロから作って147日でセルフホストを達成した - Qiita
    bokuweb
    bokuweb 2019/05/20
    すげえ
  • Rustでテキストエディタを作る - Qiita

    はじめに 最近コンソール上で動くテキストエディタを作ったので、その中で得たノウハウなどを記事にしてみます。 作ったのはこちら https://github.com/hatoo/Accepted (Rust競技プログラミングをするために作ったエディタなので興味のある方は使ってみてください!) ですが、この記事では新たに簡単なテキストエディタを作ってみたいと思います! https://github.com/hatoo/kiro 参考文献 Build Your Own Text Editor この記事で作るもの ターミナル上で動くテキストエディタ 日語対応 モードレス 状態の管理が面倒そうなのでVimとは違いノーマルモード、インサートモードなどのモードがないエディタを作ります 要はターミナル上で動く「メモ帳」です Rawモード 普通にコンソールプログラムを作って動かしているときの様子を思い出

    Rustでテキストエディタを作る - Qiita
    bokuweb
    bokuweb 2018/12/14
  • wasm-bindgenでマンデルブロ集合 - Qiita

    はじめに Rustで生成したWebAssemblyJavaScriptをつなぎ合わせるインタフェースを生成してくれるwasm-bindgenというツールがあります。 wasm-bindgenを使うことで、若干面倒なWebAssembly周りのメモリ操作やデータの受け渡しを楽に行うことができます。 Rustの構造体やメソッドをJavaScriptのクラスとしてラップすることも可能です。 wasm-bindgenのデモとしてマンデルブロ集合を描いてみましょう。 誰もが描いたことがある(?)以下のような図ですね。 稿の完成版+ズーム機能を付け加えたデモを以下で公開しています。 https://ionic-wasm-mandelbrot.likr-lab.com/ また、関連のソースコードはGitHubで公開しています。 https://github.com/likr/ionic-wasm-m

    wasm-bindgenでマンデルブロ集合 - Qiita
    bokuweb
    bokuweb 2018/11/19
  • WebAssembly のベンチマークとバイトコードと Lisp

    はじめに フィボナッチで各種言語をベンチマークを見て、そのページに無いWebAssemblyでベンチマークを取ったらどうなるか試してみました。 あと、バイトコードや Lisp の話も少々。 WebAssembly 版 早速、WebAssembly 版のコードを掲載します。 コードはテキスト形式(.wat)をThe WebAssembly Binary Toolkitを使ってバイナリ形式(.wasm)にコンパイルします。(詳細は検索すると色々出てくるので、そちらを参照してください) これが最善の書き方か全然分かりません…。少なくともちゃんと動いています。 ちなみに、.watは S 式と呼ばれる、Lisp 好きにはたまらない見栄えをしています。 Lisper であれば「読める、読めるぞ!」と言いたくなる事でしょう(笑)。 (module (func $fib (param $n i32) (r

    WebAssembly のベンチマークとバイトコードと Lisp
    bokuweb
    bokuweb 2018/11/12
  • Repositoryパターンのアンチパターン - Qiita

    よく見かけるRepositoryパターンのアンチパターンの紹介と対策です。 Repositoryパターンとは Repositoryパターンとは永続化を隠蔽するためのデザインパターンで、DAO(DataAccessObject)パターンに似ていますが、より高い抽象度でエンティティの操作から永続化ストレージを完全に隠蔽します。 例えばDBコネクションやストレージのパス等はReposiotoryのインターフェースからは隠蔽され、Repositoryのユーザは永続化ストレージが何であるか(例えばMySQLやRedis等)を意識することなく保存や検索の操作を行うことができるようになります。 これによりRepositoryを利用するロジックは業務的な操作に集中できるようになる他、データベースの移行等の永続化層の変更が発生した際にロジックへの影響を切り離すことができるようになります。 // 例) ユーザ

    Repositoryパターンのアンチパターン - Qiita
    bokuweb
    bokuweb 2018/05/19
  • 最近の私的 Golang 開発環境 - Qiita

    あらかじめ予防線を張っておくと Go 言語の開発環境で「これ!」という正解はない。特にチームで開発している場合は,チームの流儀に従うのが最善だと思っている。なので,この記事は「こういうやり方もあるよ」という参考程度に見ていただけるとありがたい。 GOPATH の構造 皆さん御存知の通り,環境変数 GOPATH は Go 言語パッケージや開発環境を指定するものだが,実は複数のパスを指定できる。Windows 環境ならこんな感じにセミコロン(;)で区切って指定する。

    最近の私的 Golang 開発環境 - Qiita
    bokuweb
    bokuweb 2018/01/29
  • Rustでファミコンのスプライトを書き出すツールを書いてみた - Qiita

    はじめに こちらの @bokuweb 氏の記事を見かけて「そういえばエミュレータってどうなっとるんじゃろ?」と気になったので、 「まずはスプライト書き出す簡単なツールだけでも書いてみようかな」 「触り始めたばかりだし、せっかくだからRustでやってみよーっと」 ということでタイトルのとおり 作ったやつ せっかくのRustの勉強なのでいろいろ試したりしてたら最終的にこうなった スプライト吐き出すだけならもっと短いシンプルなコードでよかったなーと サンプルROMから吐き出してみたスプライト 作ってみて 実際に書いてみると「ファミコンのROMってこうなってるのか・・・!」という感慨深いものがある 仕様的な部分は冒頭の @bokuweb 氏の記事や、記事内の参考サイトを見てもらうのがいいのかと Rustで書いてみた感想としては 慣れるまでは大変だけど慣れたらむしろ楽 いろいろと厳密なので、つまらな

    Rustでファミコンのスプライトを書き出すツールを書いてみた - Qiita
    bokuweb
    bokuweb 2018/01/18
  • できる!futures入門 - Qiita

    はじめに futures1 とは、rustにおいて非同期処理を実現するためのライブラリです。非常に強力ですが、結構難易度高いので、使い方のコツとかを書きます。 何が難しいのか 型の追い方 型推論を把握している必要がある 対象者 [required] Result列挙型が実務レベルで使える人。(combinator周りの知識は必要です) [optional] 低レベルな非同期処理をrustで使いたい人。 futures crate触ってみたけど、型に押しつぶされて圧死した挫折した人。 version 大幅な仕様変更は無いと思いますが、将来deprecatedになる可能性はゼロではないので、念の為。 準備 associated type associated typeについては、https://doc.rust-lang.org/book/first-edition/associated-ty

    できる!futures入門 - Qiita
    bokuweb
    bokuweb 2017/12/22
    できる!シリーズだ
  • AssemblyScript の今後 - Qiita

    はい、この記事は WebAssembly Advent Calendar 2017 22日目の記事です。 はじめに この記事では、AssemblyScript (以降 AS) で i18n を実装したみた系の記事を書く予定でしたが間に合わなかったので、急遽、AS の次のバージョン v0.5.0 である AssemblyScript NEXT (以降 AS NEXT) で気になったことについて書きます。 AS について初めてな方は、@chikoskiさんが書いた WebAssembly Advent Calender 2017 のこの記事を読むと大体どんなことができるかどか分かると思うので、そちらを読んでください。 注意事項 言うまでもないですが、AS NEXT はこの記事執筆時点でまだ開発中で、今後変わる可能性があります。 クラス、配列、文字列といった他の言語ではあって当たり前のような言語

    AssemblyScript の今後 - Qiita
    bokuweb
    bokuweb 2017/12/22
  • リモートワークで購入して良かったものベスト3 - Qiita

    こんにちは、元武蔵野勢の@iwashi86です。 リモートワークってみなさん、活用されていますか? エンジニアにとって、F2Fでの仕事は非常に有用ですが、もくもく集中したい時間も多いと思います。そんなときにリモートワークは非常に効果的です。 私は2年以上前から、平均して月の半分程度をリモートワークしています。記事では、リモートワーク時に「買っておいて当に良かったな」、と考える物理的なモノ・ベスト3を紹介します。 1位: (指向性)ヘッドセット / イヤフォンマイク リモートワーク時にも、ちょっとした技術相談や、打合せなどで、WebRTCを利用したビデオチャットによる会議1に参加することがあります。その際、絶対に用意しておくべきなのが、ヘッドセットやイヤフォンマイクです。 これらを用いると、相手に伝える音質が圧倒的に良くなります。ラップトップなどについている標準のマイクを使うと、キーボ

    リモートワークで購入して良かったものベスト3 - Qiita
    bokuweb
    bokuweb 2017/12/22
    やはりヘッドセットのほうがいいのかな。良いのが見つからない
  • わかりやすい画像のdiffを求めて - Qiita

    どうも。フロントエンドエンジニアの @Quramy です。 さて、前回、1日10万枚の画像を検証するためにやったことで書いているとおり、reg-suitという画像に特化した回帰テストツールをメンテしています。 画像回帰テストという文脈において、差分の可視化方法はとても重要なファクターです。なぜなら、画像(=スナップショット)に差分が発生したからといって、それすなわち棄却、というわけではなく、その差分の内容を判断して、意図せぬ変更であれば棄却、意図した変更であればexpectedを更新する必要があります。すなわち、ワークフローに目視による差分のレビューが発生するのです。 そこで、少しだけ異なる2枚の画像について差分を効果的に可視化する、というテーマに向き合ってみました。 主にC++OpenCVでの実装ですが、これらの知識が無くとも読めるよう、コードやAPIへの言及を少なくして、中間画像で説

    わかりやすい画像のdiffを求めて - Qiita
    bokuweb
    bokuweb 2017/12/22
    すごい
  • AVAをブラウザ上で実行するAvaronを作った - Qiita

    この記事は「WACUL Advent Calendar 2017」の20日目です。 WACULでフロントエンドエンジニアをしている@bokuwebと申します。 はじめに みなさんはお気に入りのテスト構成はあるでしょうか。よく耳にするのはjest、AVA、karmaを用いた構成でしょうか。個人的には最近はAVAを使用することが多いのですが、その際の不満を解消するためにモジュールを作った話しを書きたいと思います。 つくったもの AVAとは avajs/ava: Futuristic JavaScript test runner 紹介記事は他にも色々ありますので多くは書きませんが、sindresorhus氏作の、曰く未来型のテストランナーです。若干古いですが以下に日語での記述もあり、なぜAVAなのか?に特徴が記載してあります。 例えばPromiseを使用したテストは以下のように記述できます。同

    AVAをブラウザ上で実行するAvaronを作った - Qiita
    bokuweb
    bokuweb 2017/12/20
  • LayoutTestsから始めるChromiumソースコードリーディング - Qiita

    この記事はChromium Browser Advent Calendar 2017 19日目の記事です。カレンダー参加者にはChromiumコミッタの方たちが並んでいますが、空きがあったのでせっかくならと思い飛び込んでみました。 まえがき 筆者は普段WEBアプリケーションのフロントエンド/サーバーサイドの開発をしています。Chrome内部のアーキテクチャや仕組みについてはアドベントカレンダーの他の記事に詳しく書かれているのでそちらに任せるとして(どの記事も力作なのでまだ全部読み切れていない)、普段WEBフロントエンドを書く人間にとって価値のある情報をまとめるべくこの記事を執筆しました。 Chromiumのコードベースはとても巨大で、何も知らない状態からいきなりコードを読み始めるのはなかなか難しいです。普段利用しているブラウザのAPIがどういう風に実装されているかを探そうすのもコツが要りま

    LayoutTestsから始めるChromiumソースコードリーディング - Qiita
    bokuweb
    bokuweb 2017/12/19
  • 1日10万枚の画像を検証するためにやったこと - Qiita

    お前は今までスクショした画像の枚数を覚えているのか? こんにちは。WACULでフロントエンドエンジニアをしている @Quramy です。 冒頭のやつは書いてみたかっただけです。気にしないでください。ちなみに僕はDIOよりも吉良吉影派です。 11月末に、Node学園祭で Introduction to Visual Regression Testing というLTをさせて頂きました。 この時は大分話題を絞っての発表でしたので、今日は弊社で実施しているフロントエンドの画像回帰テストについて、LTでは割愛した部分も含めてヌルっと書いていこうと思います。 そもそも、WACULのアドベントカレンダーでこのネタを書くのはこれが初めてではありません。 2016年にも、 @bokuweb が コンポーネント/単体テスト単位でのvisual regressionテストを行うためのツールを作った話し で、画像

    1日10万枚の画像を検証するためにやったこと - Qiita
    bokuweb
    bokuweb 2017/12/16
  • dcodeIO/webassembly内のツールチェーンでzlibをビルドしてみる - Qiita

    dcodeIO/webassembly: A minimal toolkit and runtime to produce and run WebAssembly modules.内のツールチェーンを使用してzlibをビルドしてみました。 dcodeIO/webassemblyとは 曰く、実験的でミニマルなツールキットとランタイムを持っていて、cのファイルをwasmにコンパイルして実行できますとのこと。mallocとか最低限欲しいものは入っているので、ちょっとしたプログラムを書きたいがemscripten使うほどでもないときに便利です。 zlibをビルドする サンプルレポジトリを作ったのでgit cloneしてきてビルドします。Windows Subsystem for Linux, macOS High Sierraで動作確認をしています。 $ git clone https://git

    dcodeIO/webassembly内のツールチェーンでzlibをビルドしてみる - Qiita
    bokuweb
    bokuweb 2017/12/01
  • ひとりでCPUとエミュレータとコンパイラを作るのカレンダー | Advent Calendar 2017 - Qiita

    The Qiita Advent Calendar 2017 is supported by the following companies, organizations, and services.

    ひとりでCPUとエミュレータとコンパイラを作るのカレンダー | Advent Calendar 2017 - Qiita
    bokuweb
    bokuweb 2017/11/23
    期待
  • RustでFetch API with Emscripten - Qiita

    extern crate emscripten_sys; extern crate serde_json; use emscripten_sys::{emscripten_fetch_t, emscripten_fetch_attr_t, emscripten_fetch_attr_init, emscripten_fetch, emscripten_fetch_close}; fn body_string(fetch: &emscripten_fetch_t) -> String { let data = unsafe { std::mem::transmute::<*const i8, *mut u8>((*fetch).data) }; let len = (*fetch).totalBytes as usize; let slice = unsafe { std::slice::f

    RustでFetch API with Emscripten - Qiita