読者です 読者をやめる 読者になる 読者になる

今川館

都内勤務の地味OLです

Goのimageモジュールを使って絵を描く

Goにはimageという画像を処理するライブラリがあるので(やり方を知っていれば)簡単に絵が描ける。 わたしは知見が無く丸一日かかってしまた・・

はじめてのwebアプリ⑤ ユニットテストを追加

この記事のソースコードはこちら ユニットテストを追加する頃合いに 文字列とファイルに対応した文字数カウント機能を作ったところで、これらのユニットテストを作る頃合いになってきた。 また、リクエストを受け取ってレスポンスに書き込むハンドラ関数のテ…

はじめてのwebアプリ④ アップロードファイルの扱い方

ファイルを読み込んで文字数を数える機能を追加する。 bufio.Reader.ReadRune()を使って対処。

はじめてのwebアプリ③ JSONで結果を出力する

はじめてのwebアプリのバグを直したところで、今度はJSONで結果を返す機能も追加してみる。 json.Marshalは構造体の公開フィールドしか出力してくれないので注意。

はじめてのwebアプリ② unicode/utf8で文字数を数える

文字数カウントのwebアプリは、以下のバグがあるので直す。

はじめてのwebアプリ① net/httpのHandleFunc

Goも基本的な構文をだいたい覚えたので簡単なwebアプリを作ってみる。

Pythonでサロゲートペア -- ほっけの逆襲

Pythonで「ほっけ」という漢字をprintに渡すとどうなるか試した。 「ほっけ」はサロゲートペアの文字である。 Python2は寛容に処理してくれるが、Python3は原則としてサロゲートペアを許さないので、エラーオプションに許可するよう指定する。

サロゲートペアの入った文字列を処理する場合の注意点

Goは文字をUnicodeコードポイントで扱い、runeというデータ型を用意している。 unicode/utf8モジュールを使うとサロゲートペアが含まれる文字列でも安全に処理できる。

go installを使え -- QCon London 2016

「2016年版Goのベストプラクティス」という記事を読んでいてgo installを使うことが推奨されていることを知った。

ラベル付きbreak, continue, goto

Goのプログラムを見ていて、何年ぶりか分からないくらい久しぶりにラベル付きbreakを見かけたので、せっかくなので試した。

runtime.MemStatsでメモリ使用量を調べる&pprofモジュール

Goで実行環境のメモリ使用量を調べるときはruntime.MemStatsが使える。 また、pprofモジュールを使うとより視覚的なビューを利用できる。

ポインタが分からない③

ポインタのことがやっと分かってきた感ある

ポインタが分からない②

ポインタのことがどうしても分からないのでまた考えてみたが、単純に「ポインタを使うと同じものを指す」とだけ覚えておけば良いんじゃないかと思うようになった。

ポインタがわからない①

ポインタがわからない。代入と関数を使った場合で色々試して(ちょっとは)理解を深めた。

Goのflagパッケージを使ってサブコマンドを作る

GoでPythonのargparseみたいなサブコマンドを処理したい場合はflag.NewFlagSetというやつを使えば良いらしい。 Goでのやり方はこのページでドン!なんだけど。忘れないようにメモ。 [http://blog.ralch.com/tutorial/golang-subcommands/:title]

ANSIエスケープコードを使ってコンソールアニメーション

『プログラミング言語Go』のスピナー 予約語「go」を使うとメインgoroutineと別のgoroutineで動かせる 『プログラミング言語Go』の「ゴルーチンとチャネル」という章を読んでいて、メインルーチンの処理中にスピナーを回すサンプルコードが出てきたので自分…

Goの乱数&time.Durationの算術演算

乱数はシードを適切に初期化して使わないとランダムな結果を取り出せない。 また、time.Durationを算術演算する処理でまたしてもハマったのでメモしておく。

Goでスリープしようとしてハマった

Goのtime.Sleepの引数はDurationという型で、数を直接引数に取るわけではない点に注意が必要。 0.5秒待機したい場合はtime.Sleep(500 * time.Millisecond)とする。

Visual Studio Codeを使ってGoのコードをデバッグする

Goでデバッガを使いたい場合、gdb, delveといったツールは初心者には操作が難しい。 しかし、Visual Studio CodeのGo拡張機能が無料で利用可能なので、これを使うと便利。 裏でdelveを操作しているので、Visual Studio Code、Go拡張、delveの3つのインストー…

Goでユニットテストの書き方② 実践編

ユニットテストは特定の条件に依存せず、何度やっても同じ結果になるよう作ることが望ましいが、それを守ってテストコードを書くことはなかなか難しい。

Goでユニットテストの書き方① 基礎編

Goのユニットテストはt.Error, t.Errorfというメソッドを使ってアサーションを行う。t.Fail()を呼ばなければ処理は打ち切られず、続行され、t.Errorで行った個別の検証はちゃんと分別整形して出力してくれる。

Goのエラー処理② panicとrecover

Goのrecoverはdeferと一緒に使わないと意味がないことを知った。

Goのエラー処理① エラー処理の基本的な考え方

Goは予期されるエラーはすべてアプリケーション側で手当てし、安易に例外を送出するようなプログラムを書くべきではないらしい。 また、エラーを作るときは、fmt.Errorfが役立つ。

go buildを試しつつGoのパッケージの規則を覚えた

go buildでバイナリを作る go buildコマンドを実行すると、カレントディレクトリからmainパッケージを探してバイナリを作ってくれる。 Githubでの管理を念頭に推奨されるプロジェクト構成 go getでgithub.comから依存ライブラリを取ってくる importで自己な…

Goは関数の戻り値に名前を付けられる / deferの驚き

Goは関数の戻り値に名前をつけられて、defer文と組み合わせると不思議なことが色々できることを学んだ。

Goのベンチマークテストを試した

Goにはベンチマークテストライブラリが付属していて、性能試験を手軽におこなるらしい。結果に表示される数値の読み方がわからなかったので調べた。

GoのBuild Constraints

GoのBuild Constraintsを使ってビルド成果物の内容を変える方法を学んだ。

Goの抽象構文木の利用例を読んだ

Goのastモジュールの利用例を解読するため奮闘中

Goはパッケージトップレベルの関数をreflectで取り出せない

Goはパッケージトップレベルの関数をreflectで取り出せない。すごく難しいことをしないとダメらしい。

Goの日付フォーマットの謎

Goの日付フォーマットは年が「2006」、月が「01」、日が「02」。%Y-%m-%dじゃないし「2016-12-31」もダメ。

Goのファイル・ファイルライクオブジェクトもろもろ

PythonのStringIOはGoでbytes.NewReader、などなど

Goのtype宣言はすごい

Goのtype宣言は関数にも利用できてPythonのデコレータみたいなことをやりたい場合に役に立つことを学んだ。

SQL ServerのIDENTITY値

基本事項 IDENTITY値にはSEED(初期値), INCR(増分)という概念がある。 また、IDENT_????という関数が用意されている(以下) IDENT_CURRENT 現在値 IDENT_SEED 初期値 IDENT_INCR 増分 CREATE TABLE foo ( [ID] INT IDENTITY(25, 2) PRIMARY KEY, [NAME] NVARC…

requestsを使ってInsecurePlatformWarningが出てしまうときの対処

requestsを使っていたらいつの間にかInsecurePlatformWarningという警告が出るようになってしまった。 /home/echizen/pecan/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext obj…

django-pyodbcでselect_for_updateは機能しないので要注意 (2015/4時点)

django-pyodbcはselect_for_updateメソッドを呼び出しても普通のSELECT文を発行する Django1.4以上でモデルマネージャやクエリセットにselect_for_updateというメソッドが使えるけれども、django-pyodbc(=SQLServer)だとこれが使えないので注意が必要。

Pythonのdate, datetimeをisinstanceで調べるとき

Pythonのdatetimeをisinstanceで調べると、date, datetimeの両方にTrueを返すので注意。 >>> from datetime import date, datetime >>> today, now = date.today(), datetime.now() >>> isinstance(today, date) True >>> isinstance(today, datetime) False…

忙しくて余裕が無くなった自分に宛てて

程度の低い人に流されないように 程度の低い人に腹を立てぬこと

SQLServerでランキングを求めるとき -- OVERの使い方(OLAP関数)

「最後に買ったもの」を調べる SQLで「誰が・何を・いつ買った」という買い物データから「その人が最後に買ったもの」を調べようとすると案外難しい。データイメージ PERSON GOODS PURCHASE_DATE +-------+-------+-------------- Tom Orange 2015-2-19 Tom …

SQLServerの文字列と日付の暗黙的型変換

文字列型からDATE/DATETIME型への暗黙的型変換 SQLServerは文字列型の値をDATEやDATETIMEで評価する必要がある場合は暗黙的に型変換を試みる。クエリ1 SELECT MAX(foo) foo FROM ( SELECT '2015-2-13' foo UNION ALL SELECT '2015-2-14' foo UNION ALL SELEC…

JSHintの設定ファイル

JSHintはデフォルトだと全然チェックしない JSLintが鬱陶しいからJSHintを使っている人は多いと思う。 ところが、JSHintはデフォルトだとチェック基準がすごく甘くてチェックとして機能しない。

setup.pyのdependency_linksの書き方

前回の続き 前回の記事でpipコマンドにGithubのリポジトリにsshで接続するURLを指定する方法を紹介した。今度はsetup.pyで非公開プロジェクトを依存パッケージに指定する方法をここにメモしておく。なお、わたしはwheelパッケージの仕様を知らないのでここで…

pipでGithubにssh接続して非公開リポジトリをインストールする

非公開リポジトリのパッケージをインストールするのは難しい 自社のプライベートプロジェクトを別のプロジェクトから利用したい場合、簡単にpipやeasy_installでインストールできず困ることがある。

AnsibleのHost Variablesの使いどころ

Host Variables とは? Inventory — Ansible Documentation [atlanta] host1 http_port=80 maxRequestsPerChild=808 host2 http_port=303 maxRequestsPerChild=909Host Variablesは上記引用の通り、インベントリのホストのセクションに併記する値なのだが、…

Ansibleのハンドラが起動するのはタスクがchangedを返したときだけ

Ansibleのハンドラとは Ansibleのタスクには `notify` という属性を追加してコールバック処理を呼ぶよう設定できる。[roles/nginx/tasks/main.yml] - name: nginx config ensure template: src=my.nginx.conf.j2 dest=/etc/nginx/conf.d/your.conf sudo: yes…

カツヒコまとめ

カツヒコとは? まきやの貴公子。スティッカムの有名人。ゆーきゅーぶのぺーぎはこちら。 https://www.youtube.com/user/katuhikodesuyo/videos?view=0&live_view=500&flow=grid&sort=dd 本名「松崎勝彦」 住所 あらかわくまきや にのぎゅうろくのはき こー…

レガシに負けるな

ニホンのサムライ・デザイナ、ニンジャ・プログラマ、アシガル・コーダから西洋のホーリー・クルセーダーまで、すべてのアヴェンジャー達にこの言葉を捧げる。「レガシに負けるな」 レガシとは何か? レガシとは悪である。 レガシは人間の心の優しさや弱さに…

Djangoのtransaction配下のモジュールはデコレータでありコンテキストマネージャであった!

Djangoでトランザクション制御するときに使うデコレータ Djangoでトランザクション制御するときは、django.db.transaction配下にある commit_on_success commit_manually こういうデコレータを使います。 from django.db import transaction @transaction.co…

Djangoのフォームに入力した値を隠しパラメータで引き継ぐ

確認画面作るのって面倒くさいですよね? 何かのデータの登録画面を作るときに入力画面→確認画面→完了画面 という遷移にすることが多いですよね。 この、「確認画面」てやつは作るの手間がかかって嫌ですよね。 複雑なデータ登録だとセッションとかキャッシ…

何段にも深くなるループを絶対に一段で書く方法

ループの中でループを回す処理は読みにくい 例えば友達が5人いて、サンドイッチが3種類あって、2種類の飲み物を配る処理を作るとします。 こういう場合、for文を何段にもネストするプログラムを書かざるを得ないときがありますよね。 for friend in friends:…

coverage combineコマンドで複数の集計結果を結合する

カバレッジ(網羅率)とは? カバレッジとはテストコードがどれだけテスト対象の内容を網羅しているかを表す割合です。例えば、以下のファイルにはfoo, bar, bazという3つの関数が定義されていますが、これらのすべての内容をテストで実行済みであればカバレッ…