アルパカログ

プログラミングとマネジメントの話題がメインです。時々エモいのも書きます。

プログラミング

HTMLに画像データを埋め込む「Data URIスキーム」の使い方

HTMLで画像を表示したいときはタグのsrc属性に画像のソースURLを指定するのが一般的です。しかしData URIスキームを使えば、src属性に画像そのもの(バイナリ)を埋め込むことができます。このエントリでは、Data URIスキームを使ってタグのsrc属性に画像バ…

Elixir エラーハンドリング構文try~catchとtry~rescueの違い

エラーハンドリング構文と言えばJavaScriptでは try~catch, Rubyでは begin~rescue, Pythonでは try~except があります。そう、多くの言語でエラーハンドリング構文は1つです。しかしElixirには2種類のエラーハンドリング構文があります(!?)。いったいどんな…

Go言語 配列とスライスの宣言方法(array/slice)

Go言語(Golang)には固定長の配列(array)と、可変長のスライス(slice)があります。このエントリでは配列とスライスの宣言方法についてまとめています。

Go言語 スライスとスライスのポインタで気を付けたい宣言と要素追加の方法

Go言語に限らずポインタが存在する言語では「ポインタなのか?値なのか?」ということに常に気を配る必要があります。さらにスライスになると「中身がポインタなのか?」「容れ物がポインタなのか?」「どちらもポインタなのか?」というように、注意すべき…

続々・CODE COMPLETE 〜美しいコードを書くために〜

前回は主に防御的プログラミング、変数、例外について書いた。今回は主に数値、浮動小数点数、文字列などプリミティブなデータを扱う際の注意点とステートメントについてまとめる。

続・CODE COMPLETE 〜美しいコードを書くために〜

前回の記事では主に名付け、クラスと関数、抽象化と継承について書いた。今回は防御的プログラミングと例外、変数についてまとめる。

CODE COMPLETE 〜美しいコードを書くために〜

新しい技術に触れるたび、というより、必要になるたび検索して知識をツギハギして補ってきたが、最近は本格的に知識不足を実感するようになってきた。いろいろ忘れてもいるし、一度基礎から学び直さなくてはということで、美しいコードを書くという初心に返…

勉強会「実践クリーンアーキテクチャ」参加記

5連休初日に開催されたオンライン勉強会「実践クリーンアーキテクチャ」に参加しました。 nrs-seminar.connpass.com 私は最近仕事でクリーンアーキテクチャを採用したプロジェクトに関わるようになったのですが、いろいろ調べてみても概念的な話が多くいまい…

ポケモン剣盾のバトルシミュレーターを書いた

ポケットモンスターソード&シールドを発売以来ずっと遊んでいて、対人戦(シングルバトル)でいろいろ試したいなーと思ったので、2月3月の可処分時間のほとんどを開発に突っ込んで作った。権利まわりが怖いのでデータやソースコードは公開していない。 シミ…

RubyとPythonで仮引数のデフォルト値がオブジェクトのとき挙動が違う

仮引数のデフォルト値は、Rubyではメソッドが呼ばれたときに作られ、Pythonではメソッドが定義されたときに作られているように見える。 業務ではRubyを書いていて、プライベートでPythonを書いていてハマったのでメモ。最後の hoge2.foo に注目してみてくだ…

Rails6エンジンでアセットパイプラインを使う

Ruby on Rails 6 のエンジンでアセットパイプラインを使う設定方法をメモしておきます。 エンジンは以前は Mountable Engine と呼ばれていたと記憶していますが、今では単に「エンジン」と呼ぶようです。 エンジンについては下記チュートリアルを参照してく…

Rails6エンジンでFactoryBotを使う

Rails6のエンジンでFactoryBotを使うための設定をメモしておきます。 エンジンについては下記チュートリアルを参照してください。以下、エンジン名はチュートリアルで登場する Blorgh を使って説明します。 Rails エンジン入門 - Railsガイド

GitHub Actions(YAML)でTerraform plan/applyを自動化する

GitHub Actions のワークフロー設定ファイルは、以前はHCL形式でしたが最近YAML形式に変わったようです。なので、YAMLの例がまだあまり出てきません。 個人で使っているAWSリソースをTerraform化して、GitHub Actionsで自動化したのでその方法を紹介したいと…

2種類のページングについて書きました

会社のブログで2種類のページングについて記事を書きました。よかったらご覧になってください。 medium.com

EctoでIDリストを指定して取得するときのメモ

久しぶりに書くといつも忘れるのでメモ。 ActiveRecord users = User.find(user_ids) users = User.where(id: user_ids).all ActiveRecordでは上記のようにidsをそのまま渡すところ、Ectoだと次のように書く。 Ecto users = User |> where([user], user.id i…

【Rails5】link_toにdataとclassを同時に指定する

link_to ヘルパーはRuby on Railsの数ある便利なヘルパーのうちのひとつです。 link_to ヘルパーを使うとリンク先の指定がシンプルになるだけではありません。 POSTやDELETEなどのHTTPメソッドが指定でき、さらに data オプションを指定するだけで confirm …

Ruby on Rails カスタムバリデーションのエラーメッセージをi18nに対応する

Ruby on Railsでは、カスタムバリデーションを使って独自のバリデーションを追加することができます。しかし既存のバリデーションと違い、カスタムバリデーションではi18nによる翻訳を自分で追加しなければなりません。このエントリではRuby on Rails 5にお…

Git 図解でわかるブランチとコミット

最近エンジニアでない人にGitを教える機会があって、Gitの仕組みを省略して必要最低限のコマンドだけ教えたものの、やっぱり全体像を理解しないと扱うのは難しそうだなぁと感じたので、コミットとブランチについて図解して説明していきたいと思います。

Gunicornで先に重い読み込みを済ませておくpreload_appオプション

PythonのWebサーバーGunicornにはワーカーのためにプロセスをフォークする前に、重いファイルをプリロードしておけるオプションがあります。 例えば機械学習のモデルや辞書といったような重いファイルをロードして使うようなアプリケーションでは、ワーカー…

【AngularJS】権限によって表示/非表示を切り替える認可っぽいことをする

AngularJSで権限によって表示したり非表示にしたりといった認可っぽいことをする方法を説明します。 「認可っぽいこと」と言っているのは、データは取得できてしまうものの、非表示にすることでそれらしく見せているためです。ですのでこの方法は、厳密にユ…

【Python3】範囲を限定してインスタンス/クラスメソッドをmockする

Pythonのテストでメソッドをmockするとき、インスタンスメソッドはよくMagicMockを使ってmockしますが、クラスメソッドの場合はmockするとテストケースが終わっても影響が残り続けてしまいます。 これはクラスとインスタンスのライフサイクルの違いによるも…

【AngularFire2】テストでsnapshotChangesをスタブする

Angular.js + Firestoreという構成ではAngularFire2を使うケースが多いと思います。 AngularFire2ではFirestoreからデータ(コレクション)を取得するとき、valueChanges()とsnapshotChanges()の2つの方法があります。 3. Collections in AngularFirestore こ…

GoでサイボウズガルーンのREST APIクライアントを書いた話

以前、ガルーンの予定をSlackからインタラクティブにリスケできるBotを作った話をしました。 このBotを作ったとき、実はガルーンのREST APIのGo向けクライアントがなかったので自作しているのですが、今日はその自作したガルーンREST APIクライアントの話を…

【Python】リストをN分割する

[arr[i::n] for i in range(n)] arr: 分割したいリスト(配列) n: 分割数 >>> arr = [1, 2, 3, 4, 5, 6, 7] >>> n = 3 >>> divided_arr = [arr[i::n] for i in range(n)] >>> divided_arr [[1, 4, 7], [2, 5], [3, 6]]

Slack Botで学ぶPython

Slack Botはプログラミングを学ぶ上でちょうどいい題材です。 例えば、英語のために英語を学ぶのは退屈ですが、海外旅行などで実際に英語を話す体験があるとやる気が出ますよね。 プログラミングも同じように、書いたプログラムが自分の生活をちょっと便利に…

Golangの勉強がてらMTGをリスケするSlack Botを作った

年末年始、Golangの勉強を始めようと思い、SlackからインタラクティブにMTGをリスケできるBotを作ったので、その話をしたいと思います。 github.com

【Python】MFAアカウントでBoto3からAWS SDKを使う

AWS SDK for Python (Boto3) をMFA を設定したアカウントで下記のように普通に使おうとするとエラーになってしまいます。 import boto3 client = boto3.client('sagemaker-runtime') MFA を設定しているアカウントでは、下記のように STS クライアントを使っ…

【Python3】パイプありのシェルコマンドを実行する

Python からシェルコマンドを実行するには subprocess モジュールを使うのが定石かと思います。 パイプありのシェルコマンドの実行方法を調べると、たいてい shell=True として 'command1 | command2' のような文字列を渡す例がよく出てきます。 しかし、こ…

pixela_ex という Pixela の Elixir クライアントを作りました

Pixela という草を生やすサービスがあって、詳しくは作者 a-know さんのブログを見て欲しいのですが、それの API クライアントを Elixir で作りました。 blog.a-know.me github.com

【Elixir】再帰の書き方メモ

Elixir は再帰がすっきり書けてとても気持ちがいいですね。 でも、たましか書かないとすぐに書き方を忘れてしまうのでメモしておきます。