サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
blog.ymyzk.com
この記事は CAMPHOR- Advent Calendar 2021 23日目の記事です.22日目の記事は @sanposhiho の「Pod Topology Spread Constraintsのすべて」でした. この記事では,CAMPHOR- 卒業後に Site Reliability Engineer (サイト信頼性エンジニア・SRE) として働いてきた経験をもとに,SRE とはどういう仕事をしているのか,どのようなスキルを利用しているかなどを紹介します.これまで対外的に SRE について文章を書いたことはあまりなかったのですが,SRE の役割はまだまだ広く知られておらず「SRE って結局なに?」と思っている人も多くいるように感じるので,せっかくの機会を生かして自分の経験を書いてみようと思います. 対象読者 主に SRE について興味のある学生やジュニアなエンジニアの方を想定して
この記事は CAMPHOR- Advent Calendar 2020 19日目の記事です.18日目の記事はお休みで,17日目の記事は @sanpo_shiho の「CAMPHOR- VPSのコンテナロギングを支える技術」でした. CAMPHOR- Advent Calendar は2014年に始まった取り組みで,今年で7年目を迎えました.この記事を含め,今日までで7年間で170記事が投稿されています.特にキリがいいというわけではないのですが,CAMPHOR- Advent Calendar を最初に企画した担当として,一度これまでの振り返りをしてみたいと思います.また,自然言語処理等の技術を使って,これまでの記事をより探しやすくする試みについても紹介します. 背景 CAMPHOR- Advent Calendar は 2014 年に開始した企画です.その経緯は最初の記事にも簡単に紹介され
この記事は CAMPHOR- Advent Calendar 2018 20日目の記事です.昨日の記事は @lotz 氏の「“アルゴリズムこうしん”のアルゴリズムをHaskellで実装する」でした. wsgi_lineprof は WSGI ミドルウェアとして実装された Python のラインプロファイラです.この記事では wsgi_lineprof がどのようにして実装されているかを,WSGI や CPython の内部実装の簡単な説明とともに紹介します.プロファイラの実装について興味がある人や,Python 処理系,WSGI の裏側に興味がある人の参考になれば幸いです. wsgi_lineprof とは まず簡単に wsgi_lineprof を紹介します.wsgi_lineprof は上でも述べたように WSGI ミドルウェアとして実装された Python のラインプロファイラです.
この記事では Python 3.7 で採択された PEP 561 Distributing and Packaging Type Information について簡単に解説し,PEP 561 に準拠した,型ヒントを含むパッケージの作成方法について紹介します. PEP 561 以前の型情報の配布事情 PEP 561 以前は主に typeshed を通じて,標準ライブラリ・サードパーティーの型情報が配布されていました.typeshed にはパッケージの開発者が同意したパッケージの型情報しか登録できないという制限や,どのバージョンのパッケージの型情報かという情報が含まれていないという問題,typeshed のメンテナーによるレビューが必要なためスケールしづらいといった問題がありました. 詳細は割愛しますが,PEP 484 の “Storing and distributing stub file
Gmail 経由でメールを送信するように Postfix を設定する方法を紹介します.この方法を使って送ったメールの From は Gmail のアドレスで書き換えられる点に注意して下さい. 環境 今回の検証に利用した環境です. Ubuntu 16.04 (amd64) Postfix 3.1.0 Postfix をインストールする Postfix とテストに使用する mail コマンドをインストールします. sudo apt install postfix bsd-mailx libsasl2-modules 設定中にいくつかの選択肢が表示されるので,Internet with smarthost を選択し,”SMTP relay host” には [smtp.gmail.com]:587 を選択します. Gmail にリレーするための設定 /etc/postfix/sasl_passw
この記事は CAMPHOR- Advent Calendar 2017 の20日目の記事です. Python では pip,Ruby では Bundler,JavaScript (Node.js) では npm と様々なパッケージマネージャが存在します.これらを使うと,パッケージをいい感じにインストールして使えるようにしてくれますが,どのようにしてパッケージがインストールされているのかあまりよく把握していない人もいると思います.また,Ruby では Gemfile や Gemfile.lock, Python では requirements.txt,Node.js では package.json,package-lock.json,yarn.lock といったファイルがパッケージマネージャによって使われていますが,このようなファイルは何のために存在するのか分からない人もいるかと思います.
この記事は CAMPHOR- Advent Calendar 2017 8日目の記事です. 学位論文を書く季節になってきました.論文を書く際にはきちんとバックアップを取っておかなければならないなど,実際の執筆以外でも気を遣わなければならないことが多くあります.この記事では,ソフトウェア開発における継続的インテグレーション (CI) や継続的デリバリー (CD) の考え方を取り入れ,様々なツールを活用することで,論文の執筆に集中できる環境を整備する方法を紹介します. 対象読者 基本的に TeX を使って論文を書く人を想定しています.(Word などで論文を書かざるを得ない環境にいる方には申し訳ない) 目標 この記事では以下のようなものを作っていく方法について説明します. Git と GitHub でバージョン管理 CircleCI でコンパイルやスペルチェックを実行 生成された PDF ファ
この記事は CAMPHOR- Advent Calendar 2017 4日目の記事です. 「ネットワークの調子が悪い」という話をしばしば耳にします.このようなときにとりあえず設定をいじってみたり,機器の電源を入れ直してみたりして問題を解決して,根本的な原因がよく分からないままになることがあると思います.また,「ネットワークの調子が悪いのでなんとかしてくれ」と言ったことをよく人に言われて対応するのですが,実際にネットワークが悪いこともあれば,サービスが落ちていることもあったり,クレームを言っている人が設定を間違っていたりなど原因は様々です. この記事ではネットワークの知識を使って,機器を再起動してしまう前にもう少しまともに原因を究明する方法について紹介します.ネットワークを支えるそれぞれのプロトコルについての説明はよく見られますが,具体的に問題が発生したときに原因を見つける方法が書かれてい
チームMLとして @ishiy1993 と2人で ISUCON7 の本選に出て,学生枠の1位 (全体の7位) になりました.使用した言語は Python で,最終スコアは 19,172 でした.満足のいくスコアではありませんでしたが,我々が今持っている力は出し切れたかなあと思っています. 問題 近いうちに問題の詳細が公開されると思うので簡単にまとめると,今回のお題はクッキークリッカーを複数人でプレイできるようなものでした.通信は基本的に WebSocket で行われるという特徴がありました. 追記: GitHub で参考実装やベンチマーカーを含むリポジトリが公開されました 事前の準備 予選は論文締め切り直後に出場したためあまり準備をせずに参加してしまったのですが,本選では以下のようなことを事前に準備することが出来ました. 開始直後の作業手順書 サーバーセットアップ用のスクリプト ミドルウェ
ジョブスケジューラの Rundeck を Raspberry Pi で動かせるかどうかを実際にインストールして試してみました.また,OpenJDK と Oracle の Java SE でパフォーマンスに顕著な違いが見られたので,簡単にパフォーマンスを評価してみました. 環境 今回の検証に使用した環境を簡単にまとめます. Raspberry Pi 3 Model B Rev 1.2 Raspbian 9.1 (stretch) Rundeck 2.10.0 apt で https://rundeck.bintray.com/rundeck-deb から導入したもの JVM の設定 Rundeck を実行する際に利用する JVM の設定は /etc/rundeck/profile に記述されています.デフォルトの設定は -Xmx1024m -Xms256m -XX:MaxMetaspaceS
チーム ML として @ishiy1993 と ISUCON7 の予選に出て,学生枠で予選を通過しました.やったことと感想を簡単にまとめます.言語は Python で,最終&ベストスコアは 75,346 でした. やったこと 予選前 〜土曜日夕方: ISUCON のことを考えずに論文を書く 土曜日夜 レギュレーションを読んでいくつかのことが気になる 「サーバーは主催者で用意する」→データ破壊しないように注意しないと… 「複数台あるサーバーの役割の変更」→本選のようなサーバー複数台構成か? 多くとも2台くらいか? 「レスポンスJSONが、データとして等価であること」→API がありそう 「例外として、並列度の高い負荷で発生するステータスコード500のエラーとタイムアウトは失格扱いにせず、加点も減点もしない」→失敗で減点されないのは珍しい? GitHub に private repo. を作っ
4/28 をもって株式会社Unimapを退職しました.Unimap は京大マップというサービスの開発・運営を主たる目的として設立された会社 (いわゆるスタートアップ) で,2014年2月に @morishin と創業し,代表取締役を務めていました.京大マップ自体は2012年8月に開発を開始したので,このサービスに約4年8ヶ月携わっていました.この記事では,退職に至った理由とともに,京大マップというサービスのこれまでの話や,学生がサービスを開発・運営して思ったことなどを書きます. 誤解のないように前もって書いておきますが,京大マップは今後も株式会社Unimapが運営を継続します.ユーザーの皆さんには安心してサービスを利用し続けていただけると有難いです. また,この記事は特定の団体や個人を批判する目的で書くものではありません.近しい人たちにこれまでのことを報告することと,これまでサービスを開発
2016年7月にリリースされた Docker 1.12.0 から docker run --sysctl net.core.somaxconn=65535 などとすることによって, コンテナ内のカーネルパラメータを調整できるようになりました. Docker Composeではこのオプションに対応する設定がありませんでしたが, 2017年1月にリリースされた Docker Compose 1.10.0 からカーネルパラメータを設定できるようになったので, 簡単に紹介します. 経緯 Docker Compose からカーネルパラメータを設定できるようにする提案は2016年7月の時点で提案されていましたが, 長らくマージされない状態が続いていました. 12月になってようやくマージされ, 翌年1月の Docker Compose 1.10 のリリースに含まれました. 設定方法 Docker Com
fluent-plugin-bigquery を v0.2.x から v0.3.x にアップデートしたところ, insert errors insert_errors="[#<Google::Apis::BigqueryV2::InsertAllTableDataResponse::InsertError のようなエラーが出て, BigQuery に insert 出来なくなってしまったエラーについてのまとめです. 問題 fluent-plugin-bigquery を v0.3.x にアップデートしたところ, fluentd が次のようなエラーを発生するようになりました. 2016-11-12 17:19:45 +0000 [warn]: insert errors insert_errors="[#<Google::Apis::BigqueryV2::InsertAllTableDat
$latex \LaTeX$ を使って論文等の原稿を書いている際に, 複数人で同時に編集したり, ファイルをコミットし忘れたりした結果, 原稿がきちんとコンパイルできなくなることがあります. この記事では CircleCI を用いて Git でバージョン管理している $latex \LaTeX$ 原稿の継続的インテグレーションを実現する方法を紹介します. 2017/12/8 追記: この記事では CircleCI 1.0 を利用しています.CircleCI 2.0 を使って CI を行う「論文執筆を支える継続的インテグレーション: Git から Amazon S3 まで」という記事を書きましたので,興味のある方はそちらもご覧下さい. 目標 今回は CircleCI で $latex \LaTeX$ の原稿がコンパイルできることをチェックし, artifacts として生成された PDF フ
Django 1.5以降の設定ファイル(settings.py)には, 新たにALLOWED_HOSTSという項目が追加されました. これを設定しない場合, DEBUG=Falseの時は正常に動作しますが, DEBUG=Trueのときは500 Internal Server Errorとなり, アプリケーションが動作しなくなってしまいます. Django 1.5よりも前のプロジェクトをアップデートする際には特に注意が必要です. ALLOWED_HOSTには公開するサイトのドメイン名を記入すれば良いので, www.example.comというサイトを公開する際にはsettings.py内に以下のように記入すればOKです. ALLOWED_HOSTS = ["www.example.com"] ALLOWED_HOSTは後述するセキュリティ上の理由により, FQDNで指定するのが望ましいですが
この記事は CAMPHOR- Advent Calendar 2016 の1日目の記事です. Python の WSGI ミドルウェアとして使えるラインプロファイラ wsgi_lineprof を作成しました. wsgi_lineprof は Django や Pyramid, Flask, Bottle などの WSGI 互換のアプリケーションやフレームワークと組み合わせて利用できるようになっています. 背景 Web アプリケーションを作成する際に, ボトルネックとなっている部分を発見するために, ラインプロファイラは有用です. Ruby での WSGI に対応する Rack には rack-lineprof というライブラリがあり, Rack の middleware として簡単にラインプロファイラを利用できます. ISUCON の参加記事等を見ていると, Ruby ユーザーはこのライ
Merlin は OCaml のための Vim や Emacs から利用可能な補完機能を提供しています. デフォルトの Vim プラグインのインストール方法では, Vim の起動速度に悪影響を与えるため, プラグインマネージャー dein.vim を用いて遅延読み込みする方法を紹介します. Merlin のセットアップ Merlin は OPAM を使うと簡単にインストールできます. opam install merlin Merlin のインストールが完了すると, 次のような Vim のセットアップ手順が表示されます. Quick setup for VIM ------------------- Append this to your .vimrc to add merlin to vim's runtime-path: let g:opamshare = substitute(sys
Homebrew のリポジトリで GC を実行して, リポジトリのサイズを削減できるサブコマンド brew git-gc を作成しました. Homebrew と Git Homebrew 自体や Formula, Tap はすべて Git で管理されています. これらは多くのファイルを含み頻繁にアップデートされるため, リポジトリのサイズが肥大化する傾向にあります. Git リポジトリは GC を実行することで, 一つのパックファイルに圧縮してリポジトリのサイズを削減することが出来ます. GC はリポジトリ内で git gc とすれば実行できるほか, 一定の条件に達すると自動で実行されます. 詳細はこちらが参考になります. Homebrew は複数の Git リポジトリで構成されているため, それぞれのリポジトリで git gc を実行するのは面倒です. brew git-gc は Ho
この記事では既存の iOS アプリを Swift 3 に移行した時に気付いた幾つかの知見について紹介します. 自分自身がまだ iOS 10・Swift 3 について理解が不十分な部分もありますが, 少しでも参考になれば幸いです. 移行作業の前に Xcode 7.3.1 + iOS 9.3 SDK 移行作業を行う前に Xcode 7.3.1 と iOS 9.3 SDK できちんとアプリがビルドできるようにしておきましょう. ライブラリについてもきちんとアップデートしておくと, 後で修正する部分が少なくて済みます. Xcode 8 iOS 10 SDK を用いた開発には, Xcode 8 が必要になります. まずは Xcode をアップデートするところから始めましょう. Swift 2.3 or Swift 3 Xcode 8 + iOS 10 SDK の環境では Swift 2.3 と Sw
パッケージマネージャの Homebrew は tap を用いることで, サードパーティーが提供しているリポジトリの Formulae を利用することが出来ます. この記事では brew tap 用のリポジトリを Travis CI 上でテストする方法について紹介します. brew tap 用のリポジトリの作成 brew tap のためのリポジトリの作成は GitHub 上にリポジトリを作成することで可能です. 一般的には <ユーザー名>/homebrew-<tap 名> という風にリポジトリに名前をつけます. 例えば, ymyzk/homebrew-ymyzk というリポジトリは, brew tap ymyzk/ymyzk とするか, brew install ymyzk/ymyzk/<formula> のようにして利用します. 詳細は公式のマニュアル等を参照してください. 何をテストする
macOS Sierra の前バージョンの OS X El Capitan から System Integrity Protection (SIP) (rootless とも呼ばれる) という機能が導入され, /usr や /System といった重要なディレクトリへの書き込みが制限されています. 通常 /usr/local にインストールされる Homebrew もこの影響を受けるため, これを回避する方法を紹介します. 対応方法 基本的に OS X El Capitan の時と同様です. El Capitan でパーミッションを設定しても, アップデートの際にパーミッションがリセットされるようです. その場合は以下の手順に従い再度パーミッションを設定してください. 2016/7 追記: Sierra から Sierra へのマイナーアップデートではパーミッションの変更作業は不要のようで
Vim で「プログラミング言語の基礎概念」の演習システムの導出を記述するための syntax highlighting である vim-copl を公開しました. 演習システムについて 「プログラミング言語の基礎概念」はプログラミング言語の意味論や型システムについて説明している書籍です. この書籍はオンラインの演習システムも併せて公開されており, 演習問題を実際に解いて導出を入力し, 正しい導出を記述しているか自動採点することができます. この演習システムでは回答を入力する際に, 導出を独自の ASCII 表記で入力します. 判断 $latex \mathcal{J}$ の ASCII 表記を $latex \mathcal{J}^{\flat}$ とすると, 導出 $latex \mathcal{D} \equiv \cfrac{\mathcal{D}_1 \cdots \mathcal
この記事では PEP 484 — Type Hints の更新によって提案されている Python 2 における型ヒントについての情報をまとめます. 型ヒントとは Python 3.5 から導入された型ヒント (Type Hints) はソースコードに型注釈 (型アノテーション) を記述する標準的な方法を定義するものです. この記法は mypy で利用されていたものの影響を強く受けており, Python 3.0 で導入された関数アノテーションを利用します. 型ヒントは次のように記述します: def add(x: int, y: int) -> int: """docstring here""" return x + y Python 3.5 は様々な型を記述するために typing モジュールが追加されました. この typing モジュールは Python 3.5 以前でもバックポートが
この記事では Let’s Encrypt で証明書を発行し, nginx で利用するための設定を紹介します. Nginx をアプリケーションサーバーのためのプロキシとして利用している場合を想定して, Let’s Encrypt のための webroot を別に設定しています. 概要 Let’s Encrypt では様々な方法での認証・証明書のインストール方法がプラグインとして提供されています. Nginx 用のプラグインも開発されていますが, 現時点で experimental となっているようなので, webroot プラグインを利用するのが一般的なようです. この記事では /var/www/letsencrypt に Let’s Encrypt の webroot プラグインによる認証のためのディレクトリを作成し, 以下のようなコマンドで証明書の発行を行えるようにすることを目標とします
Socket.IO を利用する際に, HTTP ヘッダーに認証トークンや Cookie を設定したいというケースがあります. 従来 HTTP ヘッダーを Socket.IO で設定することは難しいとされていましたが, socket.io-client 1.4 以降では extraHeaders を用いて設定できるようになっています. 使い方 クライアント側で Socket.IO の接続を行う際にのオプションに extraHeaders を設定することで, リクエストに追加の HTTP ヘッダーを設定出来ます. var socket = require('socket.io-client')('http://localhost', { extraHeaders: { Authorization: "Bearer authorization_token_here" } }); サーバー側では
この記事は CAMPHOR- Advent Calendar 2015 の9日目の記事です. この記事では Web ページでリンク等をタップした際に, スマートフォンアプリを起動し, 特定の画面を開くことができるディープリンクに関わる技術についてまとめます. これらの技術を利用することで Web ページからスマートフォンアプリへのスムーズな遷移を実現できるようになります. また, アプリがインストールされていない場合も App Store や Google Play からアプリをダウンロード出来るようなものもあります. ディープリンクの基本 ディープリンクの基本的な実現方法は以下のようになっています. iOS・Android アプリはそれぞれ固有の Custom URL Scheme と呼ばれるものを実装します. URL Scheme は myapp:// のような形をしています. mya
より詳細な CPU と命令セットの一覧は Wikipedia の Apple mobile application processors をご覧ください. armv7 に対応したバイナリは armv7s や arm64 アーキテクチャの CPU でも動作します. (例: arm64 リリース以前にリリースされたアプリも, そのまま arm64 のデバイスで利用できる.) これは Apple の arm64 に対応した CPU が armv7 にも対応していることで実現できています. i386 (IA-32) や x86_64 (AMD64 / Intel 64) アーキテクチャは Simulator での実行で利用されています. Xcode での設定 どのアーキテクチャ向けにアプリをビルドするのかについての設定は Xcode の Build Settings で設定することができます. ア
OchaCaml を OS X 環境に Homebrew を使って簡単にインストールできるように, Formula を作成しました. OchaCaml はお茶の水女子大学で開発されている処理系で, Caml Light に限定継続を扱うための control operator (shift/reset) 等を加え拡張したものです. 使い方 Formula は ymyzk/homebrew-ymyzk に置いているので, 以下のようにしてインストールすることができます. brew install ymyzk/ymyzk/ochacaml インストールすると ochacaml コマンドを使って REPL を起動できるようになります. ochacaml 使用例: Formula について この Formula は Caml Light に OchaCaml のパッチを当てる形で実装してます. パ
次のページ
このページを最初にブックマークしてみませんか?
『ymyzk’s blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く