タグ

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

  • Go Web Frameworks 比較 - Qiita

    Go言語にはいろいろなWebフレームワークが存在して、はっきりとしたデファクトスタンダードが決まっていません。 しいて言えば標準パッケージの net/http がデファクトですが、世の中ではそこに機能不足を感じた人たちが多くのフレームワークを開発しています。 そこで、いくつかのフレームワークを取り上げて、簡単なベンチマークと、それぞれのフレームワークでのいわゆるHello Worldの書き方をまとめておきます。 これによって、フレームワーク選びの参考になればと思います。 対象 Bone Echo Gin Gocraft Goji Gorilla Kami Martini Revel、BeegoKochaなど、見かけたが入れていないものがいくつかあります。コマンドでスケルトンを作るもの、net/http の Handler interface を満たさないものは除外しました。 追加してくれ

    Go Web Frameworks 比較 - Qiita
  • Hyに入門してみた - Qiita

    % hy hy 0.11.0 using CPython(default) 2.7.6 on Linux => (print "Hello, World") Hello, World Pythonモジュールを呼び出す まず気になるのはPython標準モジュールや、Pythonの定番ライブラリを呼び出すにはどうすればよいかということなので、試してみます。 datetime.datetimeオブジェクトを取得。

    Hyに入門してみた - Qiita
  • GoのChannelを使いこなせるようになるための手引 - Qiita

    Go使いたくなる理由の一つに、マルチスレッドプログラミング的なものを高速な言語で安全に実装したいというのがある。Goにおいてそれを支えるのが、自前で実装した軽量スレッドといえるgoルーチンと、mutexなどのロックの代わりに使えるChannelという概念だ。 実際に実装するときに、Goルーチンは難しくないが、Channelを使うのは割と知識と経験が必要なのでここでは、Channelについてすこし詳しく書いてみる。 Message Passing まずは理論から。 Goのチャネルなどのロックを使わない方法の並行処理はMessage Passingと呼ばれている。 以下の英語Wikipediaにあるように数学的な理論にもなっているしっかりした枠組み。 ErlangのActor Modelなどもこの仲間。GoのチャネルとActor Modelは、実は、同等の概念で表現方法が違うだけらしい。 (

    GoのChannelを使いこなせるようになるための手引 - Qiita
  • [Elixir]callbackマクロを実装する - Qiita

    現在、Ectoではcallbackマクロはなくなったとのことです。 そのため、マクロの一例としてご覧ください。 Goal マクロの応用パターンを習得する。 Dev-Environment OS: Windows8.1 Erlang: Eshell V6.4, OTP-Version 17.5 Elixir: v1.0.5 Wait a minute マクロで作成されているソースコードでよく見る形をまとめます。 最初にTipsをやります。 内容的に目的が二つ以上になってしまうので、あまり良くはないのですが、 覚えておいた方が進行がスムーズになるので、一緒にやってしまいます。 そんなの知ってるよ!って方は、読み飛ばして下さい。 Index Implement a callback macro |> Map.update/4 |> Kernel.function_exported?/3 & Ke

    [Elixir]callbackマクロを実装する - Qiita
  • Elixir Ecto: 動的にカラム指定で select する - Qiita

    概要 Ecto で動的に必要なカラムを指定する select を実装します。 動機 GraphQL のように取得するフィールドを指定できる API の場合、SQL のクエリーでも取得するカラムを制限した方がデータ転送量などで効率化できそうです。 ※ キャッシュのヒットなどにも影響する可能性もあるので、楽観的な推測が入ってます。 API からの指定によりカラムを選択して SELECT するマクロを作成します。 Ecto.Query.select Ecto でカラムを SELECT するには次のようになります。 feed = RssFeed |> Query.select([f], %{ id: f.id, title: f.title }) |> Query.limit([u], 1) |> Repo.all [f], %{ id: f.id, title: f.title } の部分を動的

    Elixir Ecto: 動的にカラム指定で select する - Qiita
  • オブジェクト指向言語としてGolangをやろうとするとハマること - Qiita

    埋め込み(embedded)に要注意というお話です。あるいは、GolangC++のようなゼロオーバーヘッドを目指していると考えれば腑に落ちるよね、的な。 Goはオブジェクト指向言語っぽく使うことができます。次のような機能を提供しています。 interfaceを使ったコーディング 埋め込み(embedded)を使った実装継承 インタフェースは次のような感じです。 // ポニーは歩ける type Pony interface { Walk() } // アースポニーも歩けるので、Ponyインタフェースに渡せる type EarthPony struct { } func (ep *EarthPony) Walk() { fmt.Println("歩くよ") } インタフェースはメソッド宣言しかかけません。実装は書けません。でも、定義されたメソッドを持てば、それはすべて「これの仲間だ」という感

    オブジェクト指向言語としてGolangをやろうとするとハマること - Qiita
  • Qiita API を使って GitHub 風味のマイページを作ってみる - Qiita

    GitHub 風味の Qiita マイページを作ってみます。 Let's 芝生駆動投稿! ことの始まり GitHub のプロフィールページといえば 芝生 でおなじみですね。 青々としていく芝生をみていると、不思議と Contribution に対するモチベーションも上がるものです。 「この芝生が Qiita にもあれば、もっともっと記事を投稿するに違いない」と漠然に思ったのがことの始まり。 完成イメージ 結論、こんな感じになりました。 そう、ほぼほぼ GitHub です。記事の投稿で草が生えます。 fake_qiita : https://fakeqiita.herokuapp.com/ (Qiita アカウントをお持ちの方は是非お試しください!) ソースコードは GitHub で公開しています。 https://github.com/mserizawa/fake_qiita 主に使うもの

    Qiita API を使って GitHub 風味のマイページを作ってみる - Qiita
  • atomic.Valueの実装に見るGoのポインタの話 - Qiita

    こんにちは、GoAdventCalendarの記事を書き忘れておりましたので急いで書きました。 atomic.Valueとは こちらGo 1.4より追加されました。 Goの公式ドキュメントでは Do not communicate by sharing memory.とよく書かれていますが、複数のGoroutineからひとつの変数を参照・更新するというのは標準パッケージを眺めていても割と頻繁に登場します。 その際にsyncパッケージ等を使い値のrace conditionを解消するのですが、共有する変数への変更処理(mapに新しい値を追加する、など)をよりatomicな形で提供するのがatomic.Valueになります。 使い方はatomic.ValueのExampleを見てみて下さい。 実装を見てみる では何故こういったパッケージを利用する必要があるのか内部実装を見ながら考えてみよう、と

    atomic.Valueの実装に見るGoのポインタの話 - Qiita
    ikeikeikeike
    ikeikeikeike 2015/11/10
    [sync/atomic]
  • Elixir の特徴 - Qiita

    elixir-lang.org のトップページを翻訳しました. 翻訳の誤りなどあればご指摘お待ちしております. Elixir is a dynamic, functional language designed for building scalable and maintainable applications. Elixir はスケールしやすくメンテナンスしやすいアプリケーションを作るための動的な関数型言語です. Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain

    Elixir の特徴 - Qiita
  • Autogradという野郎が乗り込んできたのでガクブルな件 - Qiita

    Autogradという野郎が乗り込んできました。はい、そりゃもういきなり。複雑な確率モデルや損失関数だとしても、パラメータに関する勾配をこれでもかというぐらい簡単に計算できちゃうので、機械学習の世界に大きな影響を与えそうです。現時点では、PythonとTorchでの実装が公開されているようですが、これからJuliaなど他の言語でも実装されていきそうですね。 (補足:この記事を書いたすぐ後にGoogleがTensorFlowなるものを出してきまして、そちらでも自動微分がしっかり実装されてるみたいです〜。機械学習関連のフレームワークは移り変わりが激しいですねー ^^; ) ちなみに始まりはこんな感じでした。 ゆるいですね。 とりあえずチュートリアルやりながら、Python版チュートリアルの前半部分にテキトーな日語訳をつけたので、ここでシェアしておきます。英語が読める方は、僕のヘンテコな日

    Autogradという野郎が乗り込んできたのでガクブルな件 - Qiita
  • importするだけで使えるgolang製kvsのgoleveldb - Qiita

    概要 importするだけで使えるgolang製kvsのboltdb で、インスパイアされて、 golang製kvsのgoleveldbを紹介します。 goleveldbとは goleveldbとは、leveldbgolang portです。(完全に同じかどうかは調べきれてません・・・) levigo等のleveldbラッパーとは違い、native golangで書かれているので、Cのleveldbライブラリを必要とせず、golangでimportするだけで簡単に利用できるのでお手軽です。 個人的には、sqliteの組み込みDBとして利用するような感覚で、組み込み永続化KVSとしての用途が向いているように思います。 leveldbについてはLevelDB入門 (基編)が詳しいですが、そこから特徴を引用させてもらいます。 keyとvalueが任意のバイト列である データはkeyでソートさ

    importするだけで使えるgolang製kvsのgoleveldb - Qiita
  • importするだけで使えるgolang製kvsのboltdb - Qiita

    概要 golang製kvsのboltdbの紹介です。 LMDBgolang portです。(完全に同じではありません) boltdbとは 別プロセスを立てること無くgolangのプログラムからImportするだけで使えるkvsです。 kvsなのでRDBが必要な場合はsqliteのamalgation code等を使うと良いと思います。 単一プロセス内に閉じるシンプルな構造のため、レプリケーション/シャーディング等は機能としてはサポートされていません。 ACID/MVCCをサポートします。 トランザクション writeとreadのトランザクションが別物でreadとwriteは相互にブロックすることはありません。 readは並列実行可能かつ非常に高速です。 writeは常に直列化されるため、デッドロックが起こり得ません。 各goroutineでトランザクションを生成する限りスレッドセーフです

    importするだけで使えるgolang製kvsのboltdb - Qiita
  • golang で string を []byte にキャストしてもメモリコピーが走らない方法を考えてみる - Qiita

    package main import ( "unsafe" ) type foo struct { k int64 v int64 } func main() { f := &foo{3,4} // unsafe.Pointer() で匿名ポインタにして // uintptr() で演算可能にして // +8 バイト(64bit)足して // unsafe.Pointer で匿名ポインタに戻して // そこにはフィールド v があるはずなので *int64 にキャストして // デリファレンスすれば出来上がり *(*int64)(unsafe.Pointer((uintptr(unsafe.Pointer(f))+8))) = 5 // グヒヒ println(f.v) // 5 } 0x001c 00028 (stringbytes2.go:8) LEAL go.string."he

    golang で string を []byte にキャストしてもメモリコピーが走らない方法を考えてみる - Qiita
  • Python3.5で実装されたasync/awaitを使って軽量スレッドの性能ベンチマーク - Qiita

    Python3.5でasync/awaitが追加されていたのでメモリ消費量とコンテキストスイッチのコストの観点でベンチマークを取ってみました。 async/await構文とは 非同期処理やノンブロッキングI/O処理を良い感じに書ける非同期処理のパラダイムにおける最先鋭の構文です。C#に実装されたあと、C++,VB,Node.jsに実装されついにPythonにもやってきた!という感じです。特徴はいままでThreadingで頑張って書いてた非同期処理が、より簡潔により強力に書けるようになります。軽量スレッドとはマイクロスレッド、ファイバーとも呼ばれるもので、「C10K問題」(クライアント1万台問題)と言われるI/O待ちによってクライアント数が多いとハードウェアの性能が生かしきれない問題の解決策の1つです。I/O待ちの際に高速にコンテキストスイッチして他のクライアントを捌くことでハードウェアの性

    Python3.5で実装されたasync/awaitを使って軽量スレッドの性能ベンチマーク - Qiita
  • Google Analytics Real Time Reporting API 事始め - Qiita

    カスタムダッシュボードつくるのに便利なんじゃないかと思って調べてる。 Google Analytics Real Time Reporting APIとは何か What Is The Real Time Reporting API - Overview - Google Analytics — Google Developers You can use the Real Time Reporting API to: Display active viewers of a page and create a sense of urgency for users that are looking at an item with finite inventory. Display the most popular content such as the top 10 active pages.

    Google Analytics Real Time Reporting API 事始め - Qiita
  • Phoenix上でgen_emqttを用いたMQTTのsubscriberを作る - Qiita

    はじめに IoTという言葉が流行し始めて以後、M2M用プロトコルとして、世間のMQTTに対する意識は急上昇の最中にあります。自然と日の目を見るのはMQTTブローカーの存在でしょう。枯れたところではJMS実装のActiveMQから、最近ではerlang実装のemqttやvernemqなど、実に様々なブローカーが世間を賑わせております。 しかしながら、いざ実際にサービスとしてIoTなアプリケーションの開発を考えたとき、ネックとなるのはMQTTブローカーとは別のところにあります。ブローカーは基的にパッケージとなっていて、簡単にインストールできます。管理UIが付属する製品も少なくありません。SaaSサービスを利用するという手もあります。 Publish(端末)側もデータを投げるだけなので、こちらも実装は比較的簡単です。 問題なのは端末を集約するSubscriber(データベース)側です。gem

    Phoenix上でgen_emqttを用いたMQTTのsubscriberを作る - Qiita
  • 最強のSSH踏み台設定 - Qiita

    追記:openssh-7.3 以降なら ProxyJump や -J が使えます ホスト名を + で繋げることで多段Proxy接続も簡単に、がコンセプトだったエントリの設定ですが、OpenSSH 7.3 から ProxyJump という設定が使えるようになったので、使えるなら ProxyJump を使う方が健全だし柔軟で使い勝手も良いのでそちらを覚えて帰ることをオススメします。 使い方は簡単で以下のような感じです。多段も行けるし、踏み台ホスト毎にユーザ名やポート番号を変えることも出来ます。 # 1. bastion.example.jp -> internal.example.jp ssh -J bastion.example.jp internal.example.jp # 2. bastion.example.jp -> internal.example.jp -> super-de

    最強のSSH踏み台設定 - Qiita
  • 米googleの研究者が開発したWord2Vecで自然言語処理(独自データ) - Qiita

    Word2Vec」は、米グーグルの研究者であるトマス・ミコロフ氏らが提案した手法であり、いくつかの問題について従来のアルゴリズムよりも飛躍的な精度向上を可能にした自然言語処理の手法。 Word2Vecは、その名前の表す通り、単語をベクトル化して表現するする定量化手法である。例えば日人が日常的に使う語彙数は数万から数十万といわれるが、Word2Vecでは各単語を200次元くらいの空間内におけるベクトルとして表現する。 その結果、今まで分からなかったり精度を向上するのが難しかった単語同士の類似度や、単語間での加算・減算などができるようになり、単語の「意味」を捉えられるようになった。 というわけで、かなり興味深いないようなので、早速実践してみることにします。 1.環境構築 subversionを使ってWord2Vecのソースコードをcheckoutする。 mkdir ~/word2vec_t

    米googleの研究者が開発したWord2Vecで自然言語処理(独自データ) - Qiita
  • Python3.5の新機能 - Qiita

    はじめに 開発ロードマップ(PEP-478)によると正式リリースが9/13(おそらくUS時間)に予定されているPython 3.5。追加のリリース候補(rc4)が9/9にリリースされたこともあり、多少遅れる可能性もあるが、おそらくは一週間以内にでることであろう。ということで、Python3.5の変更点の日語まとめ + 一言コメントをしてみた。元ネタはこちらの冒頭にある "Summary - Release Highlights"。 なお、Python3.5を試すには、最新のリリース候補をここからダウンロードすればよい。あるいはpyenvを使っている人はpyenv installで簡単に導入できるが、pyenvの最新版v20150901ではrc2までしかサポートされていないのでそれで我慢するか、pyenvをHEADから取ってくる必要がある。homebrewを使っている場合はこんな感じ。 b

    Python3.5の新機能 - Qiita
  • golang で streem を実装した。 - Qiita

    この記事は Go Advent Calendar 2014、16日目の記事です。 はじめに Matz さんが streem という、ストリーム指向言語の開発を始めるらしいです。 まだ文法の設計段階ではあるけど、それなのにかなりの量の pull-req がバンバンと来てて凄いなーと思いつつも「この pull-req 量だと僕には出番無いなー」と思ったので、README.md に書かれているサンプルだけを頼りに streemgolang で実装してみました。 先日はネタで streem のマネをして yacc 定義部分だけ公開していましたが、日ネタが無い中にTLがヒートアップして焦りに焦って勢いで実装してみました。いやはや異様な追い込みを感じます。。。 まずは streem を知る streem は README.md に書かれている通り並列実行を行いつつストリームを処理する言語です。

    golang で streem を実装した。 - Qiita