サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
kaneshin.hateblo.jp
The Go Playground この記事は Go Advent Calendar 2018 8日目の記事です。 はじめに Goで簡単にコードを書いて共有するときはThe Go Playgroundを利用することが多いと思いますが、実は隠れ機能みたいなものがあるので今回はそれを紹介します。 The Go Playground テストコードの実行 https://play.golang.org/ のページを開くと、下記のようにmain関数が用意されたPlaygroundが開きます。これだけだとmain関数をメイン処理として記述しなければならないと思いますが、全くこれ通りでなくても動くことが About に記述されています。 If the program contains tests or examples and no main function, the service runs the
技術書の祭典である技術書典5のために原稿を執筆しました。 techbookfest.org 今回、はじめて参加させてもらいましたが、せっかくの機会なので原稿を二誌執筆しました! エウレ・テクノロギア: Go言語らしくGoコードを実装するための手法と思想 techbookfest.org 「Go言語らしい」というのを少しずつでも言語化して、初級者や中級者の人が「どのようにコードを書くのが正解なのか」と悩むことのない世界にしていければと思っており、最初の一歩として、思想やらエコシステムとしてテスト・ベンチマークの書き方、Goを使う理由の一つとしてあるCLIツールの作り方をベースに書き上げました。 まだまだ書きたいことはありますが、良い内容になったのではないかなと思います。 golang.tokyo: iotaの使い方 techbookfest.org エウレ・テクノロギアの原稿を書き上げた後、
Google App Engine 上で Python の軽量 Web フレームワークである Flask を使うためのチュートリアルです。 TL;DR github.com GAE For Python とにかく、Flask を App Engine で使うためには App Engine の SDK をインストールしておく必要があります。 インストール Download the Google App Engine SDK | App Engine Documentation | Google Cloud Platform 上のリンクにある Google App Engine SDK for Python からインストールすることができます。 Flask on GAE GitHub - GoogleCloudPlatform/appengine-flask-skeleton: A s
golangに限らないんですが、ABテストの振る舞いをちゃんとした設計のもと実装するのって難しいと思っています。 よくあるパターンとしては、Userという構造体があって、それに対してABテストによる振る舞いを変えるように実装をすることかと思います。 User type User struct { ID int Name string } 関数を生やす あまり考えずに関数を作っていく方針 func (u User) IsFoo() bool { return u.ID%10 == 0 } func (u User) IsBar() bool { return u.ID%10 == 1 } func main() { u := User{ID: 1, Name: "kaneshin"} fmt.Println(u.IsFoo()) fmt.Println(u.IsBar()) } コード:ht
この記事は Clojure Advent Calendar 2016 の19日目の記事です。 Clojure を一度も使ったことが無かったのですが、少しは触ってみようと思い、今回 Clojure Advent Calendar 2016 に参加させてもらいました。 書くにあたり、凝ったことなんて全くできるはずもないので、自分らしい記事を書こうと思います。プログラミングには熟れており、これから初めて Clojure 触ってみる人の足がかりになるような記事になればと思います。 環境整備〜開発 とにかく、開発するなら Clojure を実行できなければダメだろうということで、Docker コンテナのイメージを使って楽に環境整備することに決めました。 Docker container https://hub.docker.com/r/library/clojure/ ここにあるコンテナイメージを
この記事は Google Cloud Platform(1) Advent Calendar 2016 の15日目の記事です。 普段は golang をやってるアプリケーションの人っぽい感じになっていますが、他にも色々とやっています。(と、いうアピールをたまにしておかないと) さて、今回は GKE + golang のデプロイ話でもしましょう。結局、golang が絡んでいますね。 準備 Docker をインストールしておき、使用できるようにしましょう。 コンテナイメージの作成・プッシュ プロジェクト構成は下記のようにし、docker ビルドしたイメージを Container Registry にプッシュするようにします。 helloworld/ ├── deployment.yaml ├── Dockerfile ├── main.go └── service.yaml main.go
この記事は 今年の写真 #TYPAC2016 Advent Calendar 2016 の14日目の記事です。 今年も去年と同じCanonの一眼レフのボディはEOS 6DでレンズはEF24-70mm F2.8L II USMで変わらずです。 Canon デジタル一眼レフカメラ EOS 6Dボディ EOS6D 出版社/メーカー: キヤノン発売日: 2012/11/30メディア: Camera クリック: 8回この商品を含むブログ (10件) を見る Canon 標準ズームレンズ EF24-70mm F2.8L II USM フルサイズ対応 出版社/メーカー: キヤノン発売日: 2012/09/06メディア: Camera クリック: 3回この商品を含むブログを見る 新しい望遠レンズが欲しいと思いつつも、そこまでズームをしないので事足りているのですが、今以上のズームができたら世界が広がるんだろ
この記事は Vim Advent Calendar 2016 - Qiita の11日目の記事です。 社内ではVimハラスメントが横行していますが、私自身のVimは毎朝やる最新版ビルドを除いてカスタマイズすることがほぼ無くなりました。 元からハードにカスタマイズはしておらず、 ctrlp あれば十分だなという感じで、たまに .vimrc をいじるのは新しい言語を試すときにシンタックスのプラグインを導入するくらいです。 さて、そんなVimmerの私が「これだけおさえていれば充分」という基本機能を紹介します。 ちなみに、 ctrlp の記事を4年前の Vim Advent Calendar で書いています。 blog.kaneshin.co バッファ Vimにはバッファという機能があり、開いたファイルをVim上で管理されています。バッファを確認するには :buffers か :ls コマンドを
この記事は Git Advent Calendar 2016 - Qiita の8日目の記事です。 スペルチェッカー - aspell スペルチェックをするために aspell というスペルチェッカーを使用します。 インストール on macOS macOS では Homebrew 🍺 を使ってインストールします。 # To install aspell $ brew install aspell # make sure that the aspell has been installed. $ which aspell /usr/local/bin/aspell インストール on Debian Debian しか使っていないものでして… # To install apell $ apt-get install aspell -y # make sure that the aspell
この記事は Firebase Advent Calendar 2016 - Qiita の4日目の記事です。 最近は Golang を用いたサーバサイド開発を専らの仕事としていますが、約2年前はガッツリと iOS アプリ開発を行っていました。そのときから「アプリの振る舞いや見た目、A/Bテストをサーバサイドでどうにかコントロールしたい」と思っていたので、今回はそれを満たすことのできる Firebase Remote Config について紹介しようと思います。 Firebase Remote Config とは Firebase をご存知の方は多いと思いますが、Remote Config は Database, Storage と同じ立ち位置となる Firebase の一つのサービスです。この Remote Config が提供する機能は Firebase 上である値を定義し、その値を i
この記事は Slack Advent Calendar 2016 - Qiita の3日目の記事です。 昨日は Kinoppyd さんの「今そこにあるSlack」でした。 さて、今回、この記事では golang で Slack bot を実装する方法を紹介しようと思います。 世に蔓延る Slack bot これから bot を世に放とうとしている人は、是非、1日目と2日目の記事を読み、事前知識を頭に叩き込んでおくと良いと思います。 Slackで業務チャンネルの平穏を維持するbot、そして人間のトークンをbotに与える話 - Qiita 今そこにあるSlack 基本的に、自身で作成した bot はもちろん好きになると思いますが、人によっては理解不能な bot や、意味不明な場面で反応したりと、「邪魔だな」と思われてしまうことがあります。そのため、bot を開発する人は「謙虚・尊敬・信頼」(T
この記事は Go Advent Calendar 2016 - Qiita の2日目の記事です。 Golang については書きたいことがたくさんあるので、Go Advent Calendar 2016 その4が出てきても良いのではと思っている次第です。(空いていればいつでも書きます) さて、今回、この記事では Golang で書かれた Web アプリケーションのリクエストのユニットテストについて解説しようと思います。 github.com 1. Testing HTTP Handler 検証のために、ただ単に "pong" を返却する pingHandler と、URLクエリから値を取得してそのまま返却する echoHandler の2つを定義します。 ー pingHandler // pingHandler returns just "pong" string. func pingHan
golang の Regexp は初期化の Compile コストがそこそこありますが、実は正規表現のパターンと対象となる文字列によって、初期化コストが無視できる(パターンと文字列に支配される)くらい遅くなります。よく言われる regexp の初期化コスト問題が無視できると言われても、正直、全く嬉しくないですね。 ただ、コーディング中に regexp パッケージを使わなければいけない場面は出てくるため、なるべくコストの掛からない実装を心がけています。 Compile/MustCompile 初期化コストはなくすため、グローバルに保持するようにします。 定義 var re = regexp.MustCompile("[a-z]{3}") func main() { fmt.Println(re.FindAllString("foobarbazqux", -1)) // => [foo bar
Go言語でコマンドラインツールを作るときに入力を受け取るインターフェースでオプションや標準入力で受け付けることはあると思いますが、パイプで渡すことも考慮されているとクールなツールになるなと思っています。 標準入力の受け取り それぞれの実装方法は簡単です。 インタラクティブ var stdin string fmt.Scan(&stdin) fmt.Println(stdin) インタラクティブに標準入力からデータを受け取るには fmt.Scan で入力待ちをします。このとき入力した値が渡した変数に格納されます。 パイプ body, err := ioutil.ReadAll(os.Stdin) fmt.Println(string(body)) パイプで渡ってきたものは os.Stdin というファイルディスクリプタにデータが入っているので、ここから取得します。 インタラクティブかパイプを
net/http パッケージで使用される ListenAndServe 関数は tcp による Listen のため、 UNIX ドメインソケットで Listen するには自前で準備する必要があります。 func (srv *Server) ListenAndServe() error { addr := srv.Addr if addr == "" { addr = ":http" } ln, err := net.Listen("tcp", addr) if err != nil { return err } return srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)}) } src/net/http/server.go - The Go Programming Language UNIX ドメインソケット ソケットファイルの
Generative Programming in Swift // Speaker Deck Generative Programming とは? 生成的プログラミング(英: Generative programming)とは、ジェネリックなクラス、プロトタイプベース、テンプレート、アスペクト、コード生成などの技法を使ってソースコード作成を自動化し、プログラマの生産性を向上させるプログラミングのスタイルである。ソフトウェアコンポーネントなどのコード再利用の技法とも連携して使用される。 自動プログラミング - Wikipedia 会場には Generative Programming を実施した方がほとんどいないようでしたが、 Generics も Compile 時のことを考えれば C++ のテンプレートと似ていて生成的プログラミングの一種となります。なので、知らず知らずのうちに Gen
golang で処理の高速化をするために goroutine/channel を使って並行処理にし、待ち時間を無駄にしないようにするのは言葉で表すのは簡単ですが、実際にパターンとして落としこむためには経験が必要だなと思うので、今回 Dispatcher-Worker として Job Queue を golang で実装する方法を紹介したいと思います。 この記事は mattn さんの Big Sky :: golang の channel を使ったテクニックあれこれ の次のステップとして読むことをオススメします。 mattn.kaoriya.net golang で作成したアプリケーションで多くのリクエストをアプリケーションが送受信する必要がある場合、高速に捌くために並行処理にして非同期化を図る場合を想定しています。 今回は get という関数でHTTPリクエストを実行して取得したデータのサ
homebrewをupgradeかけたら、gitの補完ができなくなった $ git _git:.:26: no such file or directory: /usr/local/share/zsh/site-functions/git-completion.bash (anon):6: command not found: __git_main なので、こうする $ ln -s /usr/local/etc/bash_completion.d/git-completion.bash /usr/local/share/zsh/site-functions/git-completion.bash もしも、site-functionsに_gitがある場合は消したほうがいいらしい。 ref: git completion in zsh doesn't work after #16961
この記事はVim Advent Calendar 2012 の 31 日目の記事です。 2012年も今日で終わりですね。12月は忙しかったので気付いたら年末でした。 最近はXcodeばかりを使用していたのでVimエディタからは離れていましたが、XcodeをVimライクにするプラグインのXVimを使ってました。XVim最高ですね! @jugglershuさんの27日目の記事で知ったのですが、ViciousというXcodeのプラグインもあるらしいです。 でも、私はXVimを使うでしょう。なぜなら、ソースコードが公開されているから。 今度、時間があれば、気になったところを修正してpull requestしたいものです。 さてさて本題です。皆さんはVimを使ってるときに欠かせないプラグインがそれぞれあると思います。 私の場合だとctrlp.vimがそれにあたるプラグインです。 このようなプラグイン
画面をスクロールしたときに、fixedしているヘッダーやナビゲーションに対して、少し透過させるとかっこよくありません? 実装の仕方は scroll されたときの位置を取得し、それに応じて透過させるだけで良いです。 See the Pen rWXoBY by Shintaro Kaneko (@kaneshin) on CodePen. $(document).ready(function() { $(window).scroll(function() { if ($(this).scrollTop() > 0) { $('header').css('opacity', 0.8); } else { $('header').css('opacity', 1); } }); }); これは、window がスクロールされたときに処理をするようにしています。 $(selector).scroll
ちょっと、すごかったのでメモ。久しぶりに目からウロコ 本筋の話(eskk.vimの仕様を"バグ"と言われていたこと)とは、全然違うことなのですが、 日本人プログラマが頻繁に使うバグっていう言葉を品質のプロ snsk さんがキャッチしてくれた @ShougoMatsu だったら尚更バグと言うべきではないです。英語でバグレポートする時だってbugではなくproblemと言うべきです。完全にソフトウェア側の間違いであると断定できる場合以外は、バグという言葉を使うのではなく自分の期待する挙動を伝えてそこから交渉するべきです。 2012-06-10 22:05:04 via web to @ShougoMatsu incidentって言うと良いと思うよ。RT @tyru: @ShougoMatsu だったら尚更バグと言うべきではないです。英語でバグレポートする時だってbugではなくproblemと言
このページを最初にブックマークしてみませんか?
『kaneshin.hateblo.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く