タグ

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

  • Linuxにおける非同期IOの実装について - Qiita

    はじめに Linux 5.1に新しい非同期IOの仕組みとしてio_uringがマージされてから既に1年以上経ってしまいましたが、これまでのLinuxにおける非同期IOの使い方や実装を見ていきながら、io_uringが登場した背景やLinux AIO(libaio)の問題点をどのように解決しているのかについてまとめました。アプリケーションの書き方については大まかにしか説明していないので、それについてはmanページや別の記事を参照してください。 またIOという範囲が広いのですが、ここではブロックデバイス上のファイルシステムにおける通常ファイルに対するread/writeについて考えています(ネットワークは考えていないのでepollの話はないです)。 前提知識 簡単に前提となる話をおさらいします。 同期IOと非同期IO IOを行うシステムコールとしてすぐに思いつくのはread(2)/write(

    Linuxにおける非同期IOの実装について - Qiita
  • Cocoaでディレクトリ監視 - Qiita

    ディレクトリ監視、つまりファイルのリネーム、移動、削除、作成等々の、 監視を行いたいケースはあると思います。 しかしどうにも使いやすいNSなんちゃらのクラスは見当たりません。 しかし、CベースのAPIならばあるようです。 CoreServicesフレームワークを今回は利用します。 まずはCoreServices.frameworkをライブラリに追加します。 そしてヘッダーはこちらです。 で、メインプログラムなのですが、 1、FSEventStreamCreate 2、FSEventStreamScheduleWithRunLoop 3、FSEventStreamStart の3ステップで可能です。 こちらのAPIを使うのですが、このままだとObjective-cに組み込みにくいため、 ラッパーを作成します。 以下はデリゲートパターンでの実装です。 こういうのを実装する時にはblocksでも

    Cocoaでディレクトリ監視 - Qiita
  • Head of Line Blocking - High Performance Web 2015 - Qiita

    二つの head of line(HOL) blocking Web 周辺のコンテキストで (HOL blocking) と言うと、実際には二つの種類がある。 HTTP での HOL Blocking TCP での HOL Blocking この二つは違うものなので、話す場合は「どの」レイヤでの話なのかは明示したい。 HTTP の HOL Blocking HTTP/1.1 のリクエスト-レスポンスの組は、常に順番を保ち同期的に行われる必要がある。 具体的に 1 つの TCP コネクション上で、 3 つの画像(a.png, b.png, c.png) を取得する場合、 HTTP リクエストは以下のようになる。

    Head of Line Blocking - High Performance Web 2015 - Qiita
  • 環境変数を使用して Xcode のバージョンを切り替える - Qiita

    sudo xcode-select -s /Applications/Xcode.app/Contents/Developer のように Xcode のバージョンを切り替えていたのですが、xcode-select の man ページを見ていたら環境変数 DEVELOPER_DIR で一時的に切り替えられることが書いてありました。 $ xcodebuild -version Xcode 7.3.1 Build version 7D1014 $ DEVELOPER_DIR=/Applications/Xcode-beta.app/Contents/Developer xcodebuild -version Xcode 8.0 Build version 8S201h $ xcodebuild -version Xcode 7.3.1 Build version 7D1014 $ export

    環境変数を使用して Xcode のバージョンを切り替える - Qiita
    syohex
    syohex 2017/06/02
  • Mac OS Xでライブラリの設定変更について - Qiita

    $ otool -L libboost_iostreams-mt.dylib libboost_iostreams-mt.dylib: /opt/local/lib/libboost_iostreams-mt.dylib (compatibility version 0.0.0, current version 0.0.0) /opt/local/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.6) /opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version

    Mac OS Xでライブラリの設定変更について - Qiita
  • iOSで Swiftから暗号化ライブラリを使う - Qiita

    公開鍵暗号をプログラムで扱う方法のまとめシリーズの終盤戦。ようやく実際のプログラム上で公開鍵暗号を使う話に入ります。 対象範囲 暗号化にもいろいろありますが、このシリーズでは、RSAに公開鍵暗号、電子署名だけをターゲットにしています。とはいえ、他の暗号化方式を使いたい方にも有用な情報はあると思います。 基知識 非対称鍵による暗号や署名についての基的な概念の理解を持っている必要があります。最低限以下の知識は必要です。 公開鍵とは何か 秘密鍵とは何か 証明書とは何か 公開鍵暗号は共通鍵暗号と比べてどういう特徴があるか 電子署名とは何か ダイジェスト値、ハッシュ値、ダイジェスト関数、ハッシュ関数とは何か 自信のない方は公開鍵暗号をプログラムで扱う方法のまとめシリーズを最初から読んでみてください。 iOSの暗号化フレームワーク iOSでは Security Frameworkというものが用意さ

    iOSで Swiftから暗号化ライブラリを使う - Qiita
  • DatastoreのプロジェクションクエリをGoon経由で発行してはいけない - Qiita

    GoonはGoogle Cloud Datastoreを読み書きするための薄いラッパーパッケージで、GAE/Go+Datastoreの環境で力を発揮します。詳細は以下の記事が参考になります。 GAE/Goの自動キャッシュ付きDatastoreライブラリGoonを使う - Qiita そんなGoonですが、表題の通りプロジェクションクエリとの相性が良くありません。クエリの種類に応じてfunc (q *Query) Run(c context.Context)とfunc (g *Goon) Run(q *datastore.Query)とをプログラマが使い分ける必要があります。 プロジェクションクエリとは Datastoreはカラム指向のNoSQLで、インデックス機能によるデータのソートやフィルタにも対応しています。また、RDBMSで言うマルチカラムインデックスを作ることもできます(カスタムイ

    DatastoreのプロジェクションクエリをGoon経由で発行してはいけない - Qiita
  • これからC++11を学ぶ君に。生ポとおさらば unique_ptr編 - Qiita

    void hoge(){ char *p = new char[100]; // ここで例外発生したら pはリークしますよ! delete p; } よくある、みつけにくいメモリリークですよね。 ちゃんと try/catch でかこみ finalizeで解放し、例外をthrowし直さないとダメですね 面倒だし、無駄な例外処理が必要になり速度的にも あれですよね。 まずは auto_ptr STLにはauto_ptrというものがあり、スマートポインタとして使われてましたが auto_ptrは deprecated (非推奨、削除予定)なので、 unique_ptr を使いましょう unique_ptrは、昔 boost::scoped_ptrって呼ばれてたやつですね。 ってことで、auto_ptr がダメな理由 #include <iostream> #include <string> #i

    これからC++11を学ぶ君に。生ポとおさらば unique_ptr編 - Qiita
  • Goではじめてみたブラウザの自動操作 - Qiita

    はじめに 面倒なWEBブラウザの定型作業を自動化したくて。 WEBブラウザの自動操作には定番のSeleniumを利用する。 Seleniumは主にウェブブラウザのテストに利用されているが、テスト用途以外でも利用はできる。 なおウェブスクレイピングが目的であれば、scrapeとかgoqueryなどを利用するほうが簡単。 それでもSeleniumを利用するのは、 実際のブラウザが利用できるという点であり、以下のような利点があると思っている。 IEなど特定のブラウザのみをサポートしているサイトの自動操作 ごりごりのJavascriptやFlashを利用されているサイトの自動操作 証跡として画面のスクリーンショットを取得できる 前提知識 WebDriverを介することで、スクリプトとしてJava,C#,Pythonなど多くの言語から利用できる ブラウザごとにWebDriverが用意されており、1つ

    Goではじめてみたブラウザの自動操作 - Qiita
  • 2016年のOSS圧縮ツール選択カタログ - Qiita

    まだgzipで消耗し(略) 2016年、人類が待ち望んでいた、gzipを圧倒するOSS圧縮ツールzstd(Zstandard)がリリースされたにも関わらず、なんかあんまり話題になっていなくて寂しいので、ちょろいかんじの賑やかし比較記事を書きました。圧縮ツールのカタログ的に眺めていただけるかと思います。 はじめに (この記事で言う)圧縮ツールとは何か 圧縮ツールという呼び名は正確ではない(はず)です。平たく言えば、gzipやbzip2、xz、lz4などですが、人によっては、tarの裏側としてしか使ってなくて、聞いたこともないかもしれませんね。そういうときはまずgzipのmanpageとか読んでください。 しかし、そういうツールを何と呼べばいいのかわからないので、ここでは圧縮ツールと呼んでいます。 ややこしいですが、アーカイバではありません。アーカイブとは実態が一つのファイルになっているフォル

    2016年のOSS圧縮ツール選択カタログ - Qiita
  • 「追跡ブランチ」って言うのやめましょう - Qiita

    TL;DR 突然ですがクイズです。「追跡ブランチ (tracking branch)」という言葉の使い方で正しいのはどれだと思いますか? origin/master はリモートリポジトリの master を追跡する追跡ブランチである origin/master はローカルの master に追跡される追跡ブランチである ローカルの master は origin/master を追跡する追跡ブランチである 現在の正解は多分3番です。過去には1番でした。 分からなかった方、分かったけど他人に「追跡ブランチ」と言って伝わるか不安な方。大丈夫です。正確な用語1で言い換えることにしましょう。 origin/master はリモートリポジトリの master を追跡するリモート追跡ブランチ (remote-tracking branch)である origin/master はローカルの master

    「追跡ブランチ」って言うのやめましょう - Qiita
    syohex
    syohex 2017/01/25
    git branch用語
  • 2017年 Perl5 との戦いに生き残るための最高の開発環境を手に入れる - Qiita

    はじめに:これは誰のための記事か? Perl で書かれた比較的大きなスクリプトやプロジェクトを保守する必要のある人. Perl 5 との戦い Perl5 (以下 Perl) といえば一時期 CGI を作るための標準的な技術として Web の開発で利用されたり、テキスト処理用の言語として昔から広く使用されている言語です。 かつてはサーバー上で CGI を動作させるために Perl でなければならない というような状態がありましたが、近年では Ruby on RailsPHP 製のフレームワークなどがサーバー上で普通に利用できるようになっており、かつてのような Perl が必要とされる ようなシチュエーションは減ってきているかと思います。 また、オブジェクト指向プログラミングや関数型プログラミングをサポートする新しい言語が普及してきている現在では、新規の開発に Perl を採用するメリッ

    2017年 Perl5 との戦いに生き残るための最高の開発環境を手に入れる - Qiita
  • HSTS (HTTP Strict Transport Security) の導入 - Qiita

    HTTPで接続した際に、強制的にHTTPSへリダイレクトし、以降のそのドメインへの接続はすべてHTTPSとする機能がHSTS (HTTP Strict Transport Security) である。RFC6797で標準化されている。 これはHTTPヘッダに以下を含むことで実現される。 Strict-Transport-Security:max-age=有効期間秒数;includeSubDomains max-ageではHTTPSで通信する期間を設定する。また、includeSubDomainsを指定することで、サブドメインにもHSTSが適用されるように設定できる。 HSTSのサポートは、2015年6月9日にマイクロソフトがIEへのサポートを追加したことで、すべてのメジャーブラウザにおいてサポートが完了し、HTTPサーバーとしてもApacheを始めとし設定が可能だ。 Apacheの設定 A

    HSTS (HTTP Strict Transport Security) の導入 - Qiita
  • RSA鍵、証明書のファイルフォーマットについて - Qiita

    RSAの公開鍵暗号技術を利用するためには、鍵や証明書のファイルを扱う必要があるため、そのファイルフォーマットについて理解しておく必要があります。 実際、いろんな拡張子が登場するので、それぞれの意味を理解していないとすぐにわけがわからなくなります。そんなときのために備忘録をまとめてみました。 ファイルの拡張子の注意点 .DERと .PEMという拡張子は鍵の中身じゃなくて、エンコーディングを表している デジタル暗号化鍵やデジタル証明書はバイナリデータなのですが、MD5のハッシュ値のような単なる 値 ではなく、データ構造をもっています。.DERや .PEMはそのデータ構造をどういうフォーマットでエンコードしているかを表しています。そのため、.DERや.PEMという拡張子からそのファイルが何を表しているのかはわかりません。暗号化鍵の場合もあるし、証明書の場合もあります。 .DER 鍵や証明書をAS

    RSA鍵、証明書のファイルフォーマットについて - Qiita
  • 簡単な式の評価機を作ってみる #golang - Qiita

    はじめに 皆さんはgoパッケージを使ったことはありますか?私は、GoGo!言いながら、恥ずかしながら、あまりまともに使ったことがありませんでした。最近は、仕事でもAST(抽象構文木)を弄り倒すことがあるので、今回はgoパッケージに触れたいと思います。 ここでは、簡単な四則演算などを評価し、結果を返すREPLを作ってみます。一見難しそうですが、ほとんどgoパッケージの機能を使うので、非常に簡単です。 ASTへパースする まずは入力された文字列をパースし、ASTを生成してみます。ここでは、式の評価なので式単位でパースします。パースには、parser.ParseExprを用います。 たとえば、以下のように使用できます。 expr, err := parser.ParseExpr("1+1") if err != nil { panic(err) } ast.Inspect(expr, func

    簡単な式の評価機を作ってみる #golang - Qiita
    syohex
    syohex 2016/12/12
  • DatastoreからGetした時に余計なPropertyがある場合エラーになるが無視してもいい - Qiita

    タイトルのまんまです。 話の前提として、以下のパッケージを使っているものとします。 google.golang.org/appengine/datastore SDK組み込みの appengine/datastore や Cloud Datastore用の cloud.google.com/go/datastore については言及しませんが、多分似たような設計になってると思うので流用可能なテクではないでしょうか。 モチベーション GAE/J+Slim3とかだとKindのSchemaの変更は大変気軽にできました。 新規追加のプロパティはデフォルト値になりますし、削除したプロパティはインスタンスに変換される時に無視されるからです。 一方、Goは違います。 Entityに存在するプロパティに対応するフィールドがstructにないと、エラーになります。 このため、GAE/Goでは不要になったプロパ

    DatastoreからGetした時に余計なPropertyがある場合エラーになるが無視してもいい - Qiita
  • Ftraceでカーネルの一部の処理を追いかける方法 - Qiita

    ftraceのfunctionトレーサやfunction graphトレーサを使うと、カーネルの関数呼び出し処理を追いかけることができます。 ftraceの諸機能をカーネルで有効にする方法については前回の投稿を参照してください。ただし今回書いている内容は、恐らくFedoraやUbuntuのカーネルではデフォルトで有効になっています。 関数コールトレーサ ftraceにはLinuxカーネル内の関数呼び出しをトレースする関数コールトレーサ・関数コールグラフトレーサをサポートしています。 関数コールトレーサはfunctionを、関数コールグラフトレーサは function_graph を、/sys/kerne/debug/tracing/current_tracerに書き込むだけで利用できます。 これらの関数コール(グラフ)トレーサは、インライン展開されていないすべての関数呼び出しをトレースし、

    Ftraceでカーネルの一部の処理を追いかける方法 - Qiita
  • 新しいマシンやスマフォで Slack の各種チームに入るのが面倒くさい!!!という時 - Qiita

    新しいマシンやスマフォで Slack App で各種チーム(たくさんある)にログインがすこぶる面倒くさい・・・面倒くさい・・・面倒くさい・・・。という経験したことありませんか。私は4回ぐらいあります。1password 使ってるからパスワードもバラバラだしね・・・。 そんなときは https://slack.com/signin/find のページから Find Another Team を押して自分のメールアドレスを入力すると、そのアカウントに紐付いてるすべての Team アカウントにログインできるマジックリンクがメールで送られてくる・・・! あとは各種メーラーで、そのリンクをクリックしていくと、Slack app が立ち上がり自動でそのチームにログインできます。PCでもスマフォでも使えるし、うおー便利、マジックリンクが出来た当初から知っておきたかった・・・!! Register as

    新しいマシンやスマフォで Slack の各種チームに入るのが面倒くさい!!!という時 - Qiita
    syohex
    syohex 2016/09/09
  • トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べた - Qiita

    トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べたAPIOAuthWeb TL;DR HTTP でトークンを利用した認証・認可をする手法として RFC 6750 がある OAuth に限らず、トークンを利用して認証・認可する機構の一部として Authorization: Bearer ヘッダを使うことができる 使い方について詳しくはこの記事の下のほうに書いた 要求 トークンを利用した認証・認可機構を持つ API を作りたい クライアントがトークンを HTTP リクエストに含めて送信し、サーバはトークンを検証してリソースへのアクセスを許可したい Authorization: Bearer トークン ヘッダでトークンを送る API あるよね、ああいうやつ 疑問 Authorization: Bearer ヘッダは OA

    トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べた - Qiita
  • JSON PointerとJSON Patch - Qiita

    AWSAPI Gatewayを試していたところ、API(API Gatewayの)でJSON Patchなるものを使うことになりました。よくわからんちんでしたが、RFCが出ているということなので読んでみました。以下メモ。 RFC JavaScript Object Notation (JSON) Pointer JavaScript Object Notation (JSON) Patch overview JSON PointerはJSOCドキュメント中の位置を表す仕様。XMLのXPathみたいなもの。 ABNFで書くと json-pointer = *( "/" reference-token ) reference-token = *( unescaped / escaped ) unescaped = %x00-2E / %x30-7D / %x7F-10FFFF つまり%x2F

    JSON PointerとJSON Patch - Qiita