はてなブックマークアプリ

サクサク読めて、
アプリ限定の機能も多数!

アプリで開く

はてなブックマーク

  • はてなブックマークって?
  • アプリ・拡張の紹介
  • ユーザー登録
  • ログイン
  • Hatena

はてなブックマーク

トップへ戻る

  • 総合
    • 人気
    • 新着
    • IT
    • 最新ガジェット
    • 自然科学
    • 経済・金融
    • おもしろ
    • マンガ
    • ゲーム
    • はてなブログ(総合)
  • 一般
    • 人気
    • 新着
    • 社会ニュース
    • 地域
    • 国際
    • 天気
    • グルメ
    • 映画・音楽
    • スポーツ
    • はてな匿名ダイアリー
    • はてなブログ(一般)
  • 世の中
    • 人気
    • 新着
    • 新型コロナウイルス
    • 働き方
    • 生き方
    • 地域
    • 医療・ヘルス
    • 教育
    • はてな匿名ダイアリー
    • はてなブログ(世の中)
  • 政治と経済
    • 人気
    • 新着
    • 政治
    • 経済・金融
    • 企業
    • 仕事・就職
    • マーケット
    • 国際
    • はてなブログ(政治と経済)
  • 暮らし
    • 人気
    • 新着
    • カルチャー・ライフスタイル
    • ファッション
    • 運動・エクササイズ
    • 結婚・子育て
    • 住まい
    • グルメ
    • 相続
    • はてなブログ(暮らし)
    • 掃除・整理整頓
    • 雑貨
    • 買ってよかったもの
    • 旅行
    • アウトドア
    • 趣味
  • 学び
    • 人気
    • 新着
    • 人文科学
    • 社会科学
    • 自然科学
    • 語学
    • ビジネス・経営学
    • デザイン
    • 法律
    • 本・書評
    • 将棋・囲碁
    • はてなブログ(学び)
  • テクノロジー
    • 人気
    • 新着
    • IT
    • セキュリティ技術
    • はてなブログ(テクノロジー)
    • AI・機械学習
    • プログラミング
    • エンジニア
  • おもしろ
    • 人気
    • 新着
    • まとめ
    • ネタ
    • おもしろ
    • これはすごい
    • かわいい
    • 雑学
    • 癒やし
    • はてなブログ(おもしろ)
  • エンタメ
    • 人気
    • 新着
    • スポーツ
    • 映画
    • 音楽
    • アイドル
    • 芸能
    • お笑い
    • サッカー
    • 話題の動画
    • はてなブログ(エンタメ)
  • アニメとゲーム
    • 人気
    • 新着
    • マンガ
    • Webマンガ
    • ゲーム
    • 任天堂
    • PlayStation
    • アニメ
    • バーチャルYouTuber
    • オタクカルチャー
    • はてなブログ(アニメとゲーム)
    • はてなブログ(ゲーム)
  • おすすめ

    新内閣発足

『逆さまにした』

  • 人気
  • 新着
  • すべて
  • Rustの可変長引数関数とHListの話 - 逆さまにした

    3 users

    cipepser.hatenablog.com

    この記事は Rust Advent Calendar 2020 の5日目の記事です。 背景 RFCs#2137にあるようにRustでは、可変長引数関数を直接的に書くことはできません。とはいえ全くできないわけではありません。C言語から可変長引数関数呼び出しを実現するため、stub関数を記述することは可能です。例えば、以下のような関数をRustで実装します。 pub unsafe extern "C" fn func(arg: T, arg2: U, mut args: ...) { // do something } このような関数はuse extern "C"の中で使われ、unsafeを付与する必要があります。 別の実現方法としてはマクロを利用する案もあり、以下のようなマクロで実現できるでしょう。以下はargとarg2を処理し、再帰的に可変長引数に相当するargsを処理する例です。 mac

    • テクノロジー
    • 2020/12/05 09:32
    • メモリをダンプしてRustのsliceとVecを理解する - 逆さまにした

      3 users

      cipepser.hatenablog.com

      タイトルの通りなんですが、RustのsliceやVecがしっくり来ていないので、メモリ上でどのように表現されているのかという観点で理解を深めようと思います。 環境 ❯ cargo version cargo 1.32.0 ❯ rustc --version rustc 1.33.0 また今回の環境ではusizeは8バイト長です。 println!("size of usize: {}", std::mem::size_of::<usize>()); // size of usize: 8 事前準備 メモリ上でどのように表現されているか確認するため、RustのSizedとfatポインタ - 簡潔なQのas_raw_bytesを利用します。 引数xを*const Tでキャストして、生ポインタからstd::mem::size_of_val(x)で得たバイト長を読み出します。 fn as_raw_

      • テクノロジー
      • 2020/02/18 19:28
      • Rust
      • 【Rust】mapとand_thenの違い - 逆さまにした

        3 users

        cipepser.hatenablog.com

        この記事は Rust Advent Calendar 2019 の9日目の記事です。 最近、すごいHaskellを読み終わりました。 HaskellやってからRustに戻ってくるとmapとand_thenの違いがわかってよいな— さいぺ (@cipepser) 2019年10月15日 Rustに戻ってきたので、改めてmapとand_thenの違いを整理したいと思います。モナドで一般化されますが、本記事ではOption型を例に考えます。 環境 ❯ rustup --version rustup 1.20.2 (13979c968 2019-10-16) ❯ cargo version cargo 1.38.0 (23ef9a4ef 2019-08-20) 実装の確認 まずはmapとand_thenがどのように実装されているか見てみましょう。以下は、libcore/option.rsの実装です

        • テクノロジー
        • 2019/12/09 13:07
        • GoでCount-min sketchを実装する - 逆さまにした

          3 users

          cipepser.hatenablog.com

          この記事は Go Advent Calendar 2019 の2日目の記事です。 こんにちは!さいぺです。 サムネのGopherくんは最近趣味で描いたものを、せっかくなので載せました。 オリジナルのThe Go gopher(Gopherくん)は、Renée Frenchによってデザインされました。 さて、以下の動画を見てMiniSketchなるデータ構造があることを知りました。 MinisketchってIBLTを比較してメリデメとかあるんだろうか。そもそもどういうデータ構造使ってるんだろ。 【動画で学ぶブロックチェーン】Bitcoinの新しいTxリレープロトコルの提案 Erlay - 安土 茂亨氏 - YouTube https://t.co/mKB18CmWAF— さいぺ (@cipepser) 2019年11月13日 動画中のMiniSketchでは集合のreconcileまで述べら

          • テクノロジー
          • 2019/12/02 13:18
          • Go1.13のError wrappingを触ってみる - 逆さまにした

            4 users

            cipepser.hatenablog.com

            2019年9月3日にGo 1.13がリリースされました。 リリースノートを見ていて、Error wrappingが気になったので触ってみます。 何はともあれ、ドキュメントを見てみます。 errorsのドキュメントを確認すると、以下4つの関数が存在します。 func As(err error, target interface{}) bool func Is(err, target error) bool func New(text string) error func Unwrap(err error) error Newはただのコンストラクタなのでいいとして、残り3つは挙動を確認します。 Isを使ってみる 順番が前後しますが、Isから見ていきましょう。 Go1.12以前では、以下のような(if err != nil)エラーハンドリングをしていたと思います。 package main im

            • 暮らし
            • 2019/11/18 11:09
            • ルーター自作本を試す環境をnetnsの仮想ネットワークで実現する - 逆さまにした

              4 users

              cipepser.hatenablog.com

              ルーター自作でわかるパケットの流れ/小俣 光之を読みました。 本文にほとんどがソースコードのためひたすら写経しました。 ちなみに後半に差し掛かったあたりで気づいたのですが、サポートページでソースコードは公開されています。 「せっかく書いたのだから動かしたい!」という欲求が生まれたものの、本書に書かれているような物理機器が手元になかったので、netnsで仮想ネットワークを構築しました。 構成 ネットワーク構成図は以下のとおりです。 環境 手元にあった環境のため古いですが、vagrantで立てたlinux環境を使いました。 $ cat /etc/redhat-release CentOS release 6.6 (Final) netnsを使ってネットワークを構築する 基本的にroot権限が必要です。 namespaceを区切る host、RT、NextRouterをnamespaceを区切る

              • テクノロジー
              • 2019/05/14 23:44
              • linux
              • 実践Rust入門を読んだ - 逆さまにした

                44 users

                cipepser.hatenablog.com

                実践Rust入門 言語仕様から開発手法まで, κeen, 河野達也, 小松礼人を読みました。本書の特徴は以下の3つでしょう。 2018 Editionに対応している FFIについて日本語で書かれた書籍 実践 を意識した内容になっている 本記事では、特に3つ目の実践的という観点で感想を述べようと思います。 Rustの言語仕様という観点で言えば、プログラミングRustのほうが網羅性は高いでしょう。 しかし、Rustは入門のハードルがとても高い言語です。1 個人的な経験でいえば、mapやfilterでさえHaskellを勉強していなかったら、とっつきにくかったんじゃないかと思います。他言語の経験が豊富であればまだしも、いきなりRustを始めると挫折してしまうでしょう。 だからこそ、本書のような実践的な入門書は重要だと思います。「あれもこれもやらなきゃいけない」とならずに、実際に利用されるトピック

                • テクノロジー
                • 2019/05/13 22:08
                • rust
                • book
                • あとで読む
                • 入門
                • プログラミング
                • 言語
                • 本
                • Writing A Compiler In Goを読んだ

                  7 users

                  cipepser.hatenablog.com

                  Writing A Compiler In Goを読みました。 本書は、Writing An Interpreter In Go(邦訳:Go言語でつくるインタプリタ)の続編で、前作で開発したプログラミング言語MonkeyのコンパイラとVirtual Machine(以下、VM)を実装する内容となっています。 本書を読む前に、2018年後半にGo言語でつくるインタプリタを読み始めました。 Lexer、Parserを実装し、抽象構文木ASTを構築して、evalする流れを、自分の手でなぞり、ちゃんと動いたときには「Monkeyちゃん」と呼び出すほどに愛着が湧いていました。 これまで「すごそうだけどよくわからない」「いつか挑戦してみたい」と思っていた言語実装を一から自分の手でできたことに感動を覚え、 「Lexerは他にも使えそうだな」と、12月にはGo2 Advent Calendar 2018

                  • テクノロジー
                  • 2019/01/24 12:47
                  • golang
                  • 書評
                  • 書籍
                  • Book
                  • あとで読む
                  • Golangのmapとsliceはどちらが速いのか - 逆さまにした

                    10 users

                    cipepser.hatenablog.com

                    GoのパフォーマンスTipsメモにインデックスアクセスについて、以下のように述べられている。 mapのインデックスアクセスはsliceの数十倍遅い。 100件以下の場合バイナリサーチでsliceから目的の値を探すほうが早い。 100要素超えくらいからmapのアクセス速度一定の恩恵が発揮される。 実際にベンチマークを取ってみる。 測定したいこと 要素数の増加に従って、sliceとmapでインデックスアクセス速度がどのように変わるか sliceから特定の要素を探すとき、mapと性能分岐点になる要素数はいくつか 条件 sliceは[]int型とする sliceの中身はsort済みとする(indexをそのまま要素の値とする) mapはmap[int]int型とする 環境 macOS High Sierra version 10.13.4(17E202) MacBook Pro (Retina, 1

                    • テクノロジー
                    • 2018/12/21 09:54
                    • golang
                    • 165行で実装するProtocol Buffersデコーダ(ミニマム版) - 逆さまにした

                      45 users

                      cipepser.hatenablog.com

                      この記事は Go2 Advent Calendar 2018の11日目の記事です。 今年の後半くらいに Protocol Buffers の仕様を読み始めたら、とてもシンプルかつコンパクトな仕様なのにcompatibilityへの考慮が凄まじくて、2018年後半に書いた記事の大半がProtocol Buffersに関するものでした。 仕様とバイナリを睨めっこしていたら、自分でもバイナリをデコードしたくなったので、実装してみました。 本内容は、あくまでProtocol Buffersの勉強を目的としたもので、仕様には完璧に添っていません。 というか、わかりやすさ(と実装のしやすさ)を優先して、コンパクトな仕様のさらにミニマム版な内容となっています。 当然ですが、実運用する際にはofficialの実装を利用してください。 どこまで実装するか 上述の通り、ミニマム版として、以下を実装範囲とします

                      • テクノロジー
                      • 2018/12/12 08:53
                      • ProtocolBuffers
                      • golang
                      • go
                      • あとで読む
                      • プログラミング
                      • Rustでマルチインターフェースパケットキャプチャを実装する - 逆さまにした

                        13 users

                        cipepser.hatenablog.com

                        この記事は Rust Advent Calendar 2018 の3日目の記事です。 本記事では、タイトルの通り、Rustでマルチインターフェースパケットキャプチャを実装します。 今回の記事で達成したい目標は以下2点です。 Rustでネットワークプログラミングをしたい マルチインターフェースにすることでマルチスレッド対応したい どうやって低レイヤを扱うか Rustでネットワークプログラミングを行うには、libpnetが便利なので、今回はこちらを利用します。libpnetを使えるようCargo.tomlには以下を記載しておきます。 [dependencies] serde = "1.0" serde_derive = "1.0" [dependencies.pnet] version = "0.21.0" アーキテクチャ 今回実装するパケットキャプチャのアーキテクチャは以下です。 I/F1か

                        • テクノロジー
                        • 2018/12/03 11:14
                        • Rust
                        • Network
                        • あとで読む
                        • gRPCでリクエストパラメータのValidation - 逆さまにした

                          6 users

                          cipepser.hatenablog.com

                          goのgRPCで便利ツールを使うで紹介されているGo gRPC MiddlewareとGolang ProtoBuf Validator CompilerでgRPCのvalidationをします。 今回の例では、Userの年齢は負数にならない、電話番号やメールアドレスを正規表現でvalidationするといったことを実装します。 インストール Go gRPC Middlewareのインストール ❯ go get github.com/grpc-ecosystem/go-grpc-middleware Golang ProtoBuf Validator Compilerのインストール ❯ go get github.com/mwitkow/go-proto-validators/protoc-gen-govalidators もとになるサーバとクライアント protobufでgRPCを呼び出

                          • テクノロジー
                          • 2018/10/10 11:28
                          • server
                          • 【nsdi'18論文】Stateless Datacenter Load-balancing with Beamerを読んだ - 逆さまにした

                            4 users

                            cipepser.hatenablog.com

                            2018年4月9日〜11日に開催されていたnsdi'18で Community Awardに選ばれたStateless Datacenter Load-balancing with Beamerの論文を読んだのでメモ書きを残します。 こちらで発表も見れます。 自分の理解の範囲で記載しているので、詳細や正確性を求める方は本論文を読んだほうがいいです。 概要、背景 論文の内容は、タイトルそのままですが、データセンター向けのstatelessなLBを実装したという内容です。このLBの名前がBeamerです。 論文中では、TCPおよびMPTCP(multipath TCP)で実装したことが述べられています。 まずは、LBからサーバへのパケット振り分けについて見ていきましょう。 (本論文Figure 1より引用) インターネットや外部からBorder routerにやってきたパケットに対して、Bor

                            • テクノロジー
                            • 2018/05/13 15:59
                            • サーバ
                            • あとで読む
                            • tracerouteで * (アスタリスク)になる理由 - 逆さまにした

                              6 users

                              cipepser.hatenablog.com

                              背景 「ネットワークがつながらない!」といったトラブルシューティングをしていると、 tracerouteの結果が、以下のように経路の途中で*になる事象によく遭遇します。 今回はIPヘッダやパケットを見比べながら、なぜ*になるのかを見ていきます。 $ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets 1 192.168.43.1 (192.168.43.1) 823.037 ms * 3.936 ms 2 * * * 3 osk004bb01.iij.net (202.32.116.5) 476.654 ms 132.676 ms 120.725 ms 4 osk004ix50.iij.net (58.138.107.218) 119.609 ms osk004ix50.iij.n

                              • テクノロジー
                              • 2018/04/12 09:24
                              • network
                              • あとで読む
                              • Golangのnew()とmake()の違い - 逆さまにした

                                21 users

                                cipepser.hatenablog.com

                                この記事は Go (その3) Advent Calendar 2017 の5日目の記事です。 本記事では、変数の宣言に用いられる組み込み関数new()とmake()の違いについてまとめます。 まとめ さっそくですが、違いを表にまとめます。 new(T) make(T) 対象 任意の型 slice, map, channelのみ 初期化 初期化しない(ゼロ値になる) 初期化する 返り値 *T T 対象と初期化について new()とmake()で、初期化しない/するの違いは、 slice, map, channelが、内部にデータ構造を持つことからきています。 以下にruntimeパッケージで、それぞれ型が定義されている箇所を引用します。 一番理解しやすいのが、sliceです。array(実データ), len, capを初期化してあげる必要があるため、make()が用意されています。 slic

                                • テクノロジー
                                • 2017/12/05 10:25
                                • golang
                                • go
                                • DH鍵交換でもWiresharkでSSL/TLSを復号化したい - 逆さまにした

                                  11 users

                                  cipepser.hatenablog.com

                                  WiresharkでSSL通信の中身を覗いてみる を拝見し、実際に自分の手を動かしてみたのですが、記事内でも触れられているようにDiffie-Hellman(DH) key exchange (および楕円曲線を用いたECDH) では、実際に鍵を送り合うわけではなく、鍵を生成するためのパラメータだけがやり取りされるので、サーバの秘密鍵を持っていても復号できません。 今回はDH鍵交換(以下、DHE)でもWiresharkでSSL/TLSを復号すべく試行錯誤したので、まとめます。 事前の設定内容 VirtualBoxで以下のゲストOSやApacheを立ち上げておきます。 $ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ httpd -v Server version: Apache/2.4.6 (CentOS) Se

                                  • テクノロジー
                                  • 2017/06/16 17:58
                                  • あとで読む
                                  • BloomFilterについて調べてみた - 逆さまにした

                                    3 users

                                    cipepser.hatenablog.com

                                    BloomFilterとは Wikipedia にも記載されていますが、ある要素が集合に属しているかを検査できるフィルタです。 一番最初に思いつく実装としては、こんな感じでしょうか。 集合の先頭から順に要素を比較していく 途中で見つかれば「属している」 最後まで見つからなければ「属していない」 この場合、要素数をNとして、O(N)の計算量が必要ですが、BloomFilterでは、BloomFilterで使用するハッシュ関数の個数をkとして、O(k)で計算ができます。 もちろん、これにはトレードオフがあり、「属している」と判断したものの、 実は「属していなかった」 という偽陽性を許容することで上記のような利点を実現しています。 ※ただしBloomFilterでは、原理的に偽陰性はありません。 詳細はこのあとみていきますが、実際に動かしてみるとわかりやすいので、体験したい方はGUIでポチポチで

                                    • テクノロジー
                                    • 2017/01/28 23:20
                                    • algorithm
                                    • インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門を読んだ - 逆さまにした

                                      4 users

                                      cipepser.hatenablog.com

                                      この本を手にとった理由 友人におすすめされて本屋で手に取ってみたら、自分が今までふわっとしか理解していなかった事柄が網羅されていそうだったので、そのままレジでした。 感想 全体の流れ L1〜L4の物理層・データリンク層・ネットワーク層・トランスポート層について、ネットワークを設計する時に、保守運用のことも考え、気をつけるべきポイントが書かれています。L5〜についても触れられていますがタイトルにも「インフラ」とあるように低めの層がメインです。 筆者が実際に体験した障害を想定しているので、「あぁ、そういう障害が起こり得るのか」って感じながら読めました。 全体を通じて「わかりやすい!」という感想だったので、ざっとネットワーク設計について知りたいという方におすすめです。 序盤〜中盤 基本的な構成は、各層の要素技術の紹介→どうやって設計するか、という流れです。 物理層だと光ケーブルやMDIの規格につ

                                      • テクノロジー
                                      • 2016/01/24 23:11
                                      • tech
                                      • 本
                                      • web

                                      このページはまだ
                                      ブックマークされていません

                                      このページを最初にブックマークしてみませんか?

                                      『逆さまにした』の新着エントリーを見る

                                      キーボードショートカット一覧

                                      j次のブックマーク

                                      k前のブックマーク

                                      lあとで読む

                                      eコメント一覧を開く

                                      oページを開く

                                      はてなブックマーク

                                      • 総合
                                      • 一般
                                      • 世の中
                                      • 政治と経済
                                      • 暮らし
                                      • 学び
                                      • テクノロジー
                                      • エンタメ
                                      • アニメとゲーム
                                      • おもしろ
                                      • アプリ・拡張機能
                                      • 開発ブログ
                                      • ヘルプ
                                      • お問い合わせ
                                      • ガイドライン
                                      • 利用規約
                                      • プライバシーポリシー
                                      • 利用者情報の外部送信について
                                      • ガイドライン
                                      • 利用規約
                                      • プライバシーポリシー
                                      • 利用者情報の外部送信について

                                      公式Twitter

                                      • 公式アカウント
                                      • ホットエントリー

                                      はてなのサービス

                                      • はてなブログ
                                      • はてなブログPro
                                      • 人力検索はてな
                                      • はてなブログ タグ
                                      • はてなニュース
                                      • ソレドコ
                                      • App Storeからダウンロード
                                      • Google Playで手に入れよう
                                      Copyright © 2005-2025 Hatena. All Rights Reserved.
                                      設定を変更しましたx