サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
yamitzky.hatenablog.com
この記事は Jamstack Advent Calendar 2020 の 23 日目の記事です。 Jamstack なサイトのアーキテクチャ Jamstack の厳密な定義などは一旦置いといて、今回は、次のような構成のサイトについて考えます。あまりわかりやすい図ではないかと思うのですが、上段は非同期アクセス、下段はエンドユーザー(閲覧者)からのリアルタイムアクセスです。 Jamstack構成図 この構成はざっくりいうと、 データは「Headless CMS」と呼ばれる CMS で管理されており、エンドユーザーには見えない エンドユーザーは静的な HTML のみを閲覧する *1 なんらかの方法で、「静的な HTML」は非同期に動的更新される (Webhook や Incremental Static Regeneration など) といった特徴があります。Django や Rails な
この記事はPython Advent Calendar 2020 の7日目の記事です。 今年の PyConJP 2020 では、Python の型ヒントについて登壇させていただきました。 speakerdeck.com 2020 年も終わりかけですから、「もう 2021 年からは Python のデフォルト引数に list 入れてもよくないか?」という提案をしてみたいと思います。 Python のデフォルト引数のアンチパターン Python は引数にデフォルト値(デフォルト引数)を指定することができます。 def generate_zero(x=0): return x zero = generate_zero() print(zero) # 0 print(zero + 1) # 1 print(generate_zero()) # 0 当たり前のように、デフォルト引数に指定した 0 と
NewsDigest ではアプリの BFF として GraphQL を使っていて、ライブラリとしては gqlgen を使ってます。で、なるべく CDN でのキャッシュヒット率を上げたいなぁということで、 gqlgen でできることをプロトタイプしてみました。 github.com 前提として、 Apollo とかは使ってなくて、curl でのコンセプトレベルの検証 僕は Go を書く力が弱い 頭の体操であって、実戦投入したものではない 1: Persisted Query をつかう まず、Persisted Query を使います。 Add File-based Persisted Query · yamitzky/example-gqlgen-cached@5917721 · GitHub Persisted Query は、簡単に言うと、クエリ自体をハッシュ文字列(0123456789
まえがき 今年の PyCon JP 2020 にて「Python 3.9 時代の型安全な Python の極め方」というタイトルで登壇させていただきます。本稿は、発表の補足となる「型ヒントを使って Immutable な Python を実現する方法」について紹介したものです。 Python の型ヒント Python には「型ヒント」という機能があり、型をプログラム内に宣言することができます。 age: int = 28 name: str = 'Bruce Wayne' Python は動的型付き言語であるため、この情報はランタイム(実行時)にはあまり意味がないのですが、 mypy などの型チェックツールをつかうと、型の誤りをチェックすることができます。 def check_batman(name: str) -> bool: return name == 'Bruce Wayne' a
Serverless Framework の新しい機能「Serverless Components」を使って、サーバーレスなアプリケーションを作ってみました。 いくつかつまずくところもあったので、ブログに残します。ちなみに今回作ったアプリケーションは(特に紹介しませんが) Nature Remo の API を監視するアプリケーションです。 github.com また、今回は AWS Lambda やサーバーレス自体は知っている読者を対象にしています。 Serverless Components とは Serverless Framework という、サーバーレスなアプリケーションを作るためのツール/SaaS に新しく搭載された新機能(?)です。今年の4月にGAとなりました。 www.serverless.com Serverless Components は無料で使えますが、GA 版に伴
この記事はNuxt.js Advent Calendar 2018の10日目です。 友人の結婚式の二次会向けのコンテンツとして、 「ニコ生」風に投稿された写真やコメントが流れるシステム を作りました。 動画だとわかりづらいかもなのですが、広いパーティー会場で、リアルタイムにプロジェクターで写しているような感じです。 ユーザーが写真投稿するページや、プロジェクターで写すためのニコ生風ページに Nuxt.js を使っていて、Firebase Hosting 上で SPA としてホスティングしています。デザインは @aixcheck が作ってくれました*1。 つまり、Nuxt と Firebase で作っている、完全にサーバーレスなご祝儀です*2。ちなみにご祝儀ドメインも取得しました。 こちらのシステムのソースコードは、一部を除いてオープンソースにしています。pages や components
背景 サーバーサイドの人がフロントエンドを結構こだわったプロジェクトをやるときに、混乱することが多そうなので、(社内向けに) 自分がいろいろ作ったなかで思ったベストプラクティス(?)を共有する 用語 SPA: Single Page Application. 単一のページ (index.html) で構成されるウェブアプリケーション SSR: Server-Side Rendering. SPA を事前に HTML として描画するやつ JAMstack: ウェブアプリケーション配信の構成で、JAM は JavaScript+API+Markup の略 Vue.js: UI を作るための JavaScript のフレームワーク Nuxt.js: Vue をベースにしたフレームワークみたいなもので、SPA、SSR 、JAMstack にも対応している もう少しちゃんとした説明は、各キーワードで
先月、WEB+DB PRESS vol.105の特集「サーバレス」にJX通信社のメンバーとして寄稿いたしました。 紙面の都合上、泣く泣く削った部分もあったりして、伝えきれなかったところがあります。Twitter 上でもらった質問などもあるので、いくつか補足します。 tech.jxpress.net 紙面では「サーバレス」という表記で統一したのですが、以降は「サーバーレス」という表記を取ります。 サーバーレス特集の意図 サーバーレス特集で特に意識したのは、次の2つです。 「実務」としてはどうあるべきか 「サーバーレス」というものに共通する本質 「実務でどうあるべきか」というのは、「サーバーレスで作る」といっても結局は「システム開発」である、ということです。システム開発であれば、当然チーム開発になりますし、ユニットテストだったり、ローカル環境の整備だったり、監視やCI/CDだったりが担保されて
Coinhiveというスクリプトを設置していただけで逮捕されるという事件が起きていて、マスコミなどでも報道されています。 www.sankei.com マスコミには読者の方に伝わるように伝えるというミッションがあるので、報道の表現が正しい・正しくないという話にはいろいろな立場があり、致し方ない部分があると思います。 しかし、仮想通貨やCoinhiveは、マスコミにとって「対岸の火事」ではなく、メディアのマネタイズに対する解決策となりうる技術 でもあります。報道ベンチャーのメンバーの端くれとして、仮想通貨やCoinhiveの技術がなぜメディアにとって潰されるべきではないのか、Q&A風に伝えたいと思います。 前半は仮想通貨に関する導入から入り、後半でCoinhiveの話をします。 また、個人的なポリシーにより、以降は仮想通貨を”暗号通貨”と呼称します。 報道機関の方に伝わることを目的としている
タイトルは釣りです。 これは「5000兆円持っている」と言っても過言ではないのでは・・・? pic.twitter.com/WpZveC0bin— やみつきー(小笠腹)@75.5kg (@YAMITZKY) 2018年2月12日 こちらのツイートを見てもらえると分かるとおり、僕の資産が約38兆ドル(4,180兆円)相当になった気分になりました。5000兆おがコインという暗号通貨(トークン)を4180兆円で買いたい人がいないので、実質的には5000兆円獲得してません。 経緯 先日、気がついたら社内に「おがコイン」とかいう絵文字ができてました。ティッカーシンボルは「OGA」っぽい。えっ なので、本当に「おがコイン」作ってみるかーと思って、WAVES のブロックチェーン上に 5000兆おがコインを発行してみたという経緯です。 ちなみに何故「ドル」表記がツイートの画像に付いていたかというと、実際に
github.com github.com コンセプト 先行アプリケーションとして awslogs という CLI がある。これを GUI = ブラウザで見れるようにしたもの。なので awslogs-gui、awslogs-api という名前だし、パラメータやデフォルトの挙動は awslogs に倣っている(API の依存ライブラリですらある)。 awslogs-api は awslogs の機能を API として提供していて、 Swagger も用意している。 awlogs-gui は awslogs-api を叩くための SPA として作っている。 CloudWatch Logs 公式管理画面の問題点 いくつか問題点があると思っている。 管理画面の認証:AWSの管理画面が提供する認証方法しか提供していない。例えばイントラネットであればOK、 ベーシック認証、セッション時間を伸ばすなどが
社内専用環境とかで“性善説”に基いて運用できる、短縮URLを作ってみた。 github.com 詳細は README に書いているが、 シンプルなUI 命名もできるし、ランダムな文字列もいける 既存の短縮URLの上書き(性善説だし :) DynamoDBがバックエンドで安い Dockerベース ちなみに、イントラネットに置けるようにしたかったので、サーバーレスにはしてない。 モチベーション Google社の勉強会とかにいくと、貼ってあるポスターに http://go/hoge みたいなリンクがあって(あるよね?)そういう“社内専用短縮URL”を実現したかった。 また、Slackのトピックには文字数制限があるが、どうしても制限を超える長いURLへのリンクを貼りたかったという事情があった。かといって、ここに貼りたかったリンクは社内専用の URL なので bit.ly とかの短縮 URL サービ
k0kubun.hatenablog.com 非常に丁寧に書かれていると思うのですが、少し反論したい部分があるので、記載したいと思います。 GraphQLのキャッシュ効率について クエリをパースしないとキャッシュの可否を判定できないため、HTTPキャッシュが難しい こちらに関して、2つの観点から反論してみたいと思います。 まずに、GraphQL は GET リクエストでも送ることができます。Serving over HTTP | GraphQL によると、http://myapi/graphql?query={me{name}} のような URL の GET リクエストができます。(※そもそも、これ自体は GraphQL の絶対的な制約ではなく、 GraphQL を一般的に HTTP で提供するときのプラクティス、という位置づけです) そして、GraphQL は 1 回のリクエストで送らな
また新しい Docker イメージ作ったので紹介する。 https://hub.docker.com/r/yamitzky/puppeteer-cli Puppeteer とは? github.com Chrome Headless を Node で触るためのライブラリで、URLを見ると分かる通り、 Chrome のチームが出しているものです。 Puppeteer-CLI は? Puppeteer を CLI から動かす、 Docker イメージです。現在は、スクショを撮る機能のみ対応しています。 Chrome Headless そのものを Docker で動かすのに比べてのメリットは、 Docker での連携を前提にしていて、 標準出力にスクショ結果を吐き出すことができる ※Base64エンコードされています CSSを埋め込めるので、日本語フォントとかも行ける 今後の発展性 ※ 現在は未
アジャイルやスクラムとかの文脈で「ニワトリ」と「ブタ」という概念がある。 その言葉自体は結構ググれば出てくると思うんだけど、一つ寓話を引用してみる。要は、「ニワトリとブタ」のプロジェクトメンバーが「ハムエッグ」を作る上で、「ブタ」は自分の身を削っているのに対し、「ニワトリ」は身を削っていないですね、ということ。 ニワトリとブタがいた。 ニワトリは「さあ、レストランでもやろうよ」と言った。 ブタはよく考えてから「レストランの名前は何にしようか」と言った。 ニワトリは答えた。「ハム・エッグさ」。 ブタは言った。「僕は止めておくよ。君は産むだけだけど、僕は切り刻まれるんだよ」 recompile.net ※ 原典は シュエイバー・ビードル共著の「アジャイルソフトウェア開発スクラム」? 原義からずれるかもしれないが、自分は「ブタとニワトリ」をこう解釈している。 ブタ・・・開発チームのメンバーであり
こんなことを書くと怒られそうなんですが、自分の一つのポリシーとして、システムが落ちたり障害が起きたりバグが発生したことについて、基本的に“社内には”謝罪しないことにしています(もちろん例外は度々あります)。 という概念は広まるべきだなと思っていて、紹介したいと思います。 こんなこと言うと、ビジネスサイドの人からは怒られると思うんですけど。。。 前提 自分の勤めるJX通信社は、自社開発している企業であり、ベンチャー企業です。外注はしていません。 自分の立場は、エンジニアですが、固い言葉で言うと中間管理職とも言える立場でもあります(チームリーダーとかっこよく言えるほど職責を果たせているとは思えないので、そういう言い方をします) 理由1:システムは落ちるときは落ちる。バグるときはバグる 最初から諦めていて申し訳ないのですが、まず第一に、システムは落ちるときには落ちます。バグるときはバグります。シ
私達まともなソフトウェアエンジニアは、まともなソフトウェアを作ろうとする。ソフトウェアエンジニアには、アプリのエンジニアだったり、サーバーサイドエンジニア、リサーチエンジニアなども含む。 まともなソフトウェアエンジニアは、テストコードを書く。ドキュメントを書く。CIも整備する。まともなクラス設計を考える。スケールするDB設計をする。ここでは、「まともなソフトウェアエンジニア」を「優秀なエンジニア」と定義し、「テストコードがあり、ドキュメントがあり、CIも整備され・・・」なソフトウェアのことを「まともなソフトウェア」と定義しよう。 つまり、優秀なソフトウェアエンジニアは、まともなソフトウェアを作る(※必要条件)。 まともなソフトウェアを作るのは、時間がかかる。テストコードを書けば、それだけ時間がかかる。クラス設計を議論しても時間がかかる。 なぜ私たちはまともなソフトウェアを作らないといけない
2016年の振り返りと、2017年の抱負とか。 2016年の総括 2016年は、本当に大変な年だった。おわり。 目次 体重キープした件 家出れるようになった件 君の名はまだ見てない件 おうちハックしたい件 今年やった技術とか 今後の方向性とかに悩んでいる件 体重キープした件 大変素晴らしいことに、1年間体重を76kg前後にキープした。毎日体重を計測して、 Twitter のプロフィールに自動反映しているのが効を奏していると思う。オムロンのNFC体重計にスマホをぴっとやると、Twitter のAPIを叩いて変更する仕組み 家出れるようになった件 大変驚くべきことに、何もなくても家出れるようになった。これだけ書くと人間としてやばいっぽいが、休日家でごろごろマンは多いと思う。 引っ越したのが要因として大きい。徒歩圏内に、Wi-fiと電源のある、まあまあ入れるチェーン店のカフェが複数あるのが大事(
Vimにはvim-slimeという便利なプラグインがあり、Vim上で書いているコードを、tmuxやscreen経由で別ペインに転送することができる。 これの何が嬉しいかというと、「左はPythonソースコード」「右はPythonの実行結果」みたいな感じで、書きながら実行できる。↓ RStudioとか使ったことがある人は、便利さがイメージし易いはず。 Download and Install RStudio | RProgramming.net for文の中だけ実行したいとき、iterableなオブジェクトの先頭を仮で入れたいケースがよくある 下記のようなコードを、 array = [1, 2, 3] for i, x in enumerate(array): print(i, x) 下記のように実行したい。 i, x = enumerate(array).next() print(x) V
10月21日(金)に、JX通信社内での勉強会でDockerfileを生産性高く書く方法のLTをした。 この3ヶ月で、公開しているものだけでも8個ぐらいDockerイメージを作ったらしいw ↑のスライドの要旨を言うと、 Dockerfileを書くときはTmuxとSlimeを活用しましょう!ということ。 Dockerfileを書くとき、「全部書く」→「docker build」→「修正」→「docker build」→「修正」→「docker build」みたいなことをやってると、かなり生産性が悪い。処理の途中でエラーが起きたりするし、apt-getしないといけないものが後から出てきたりする。その度に docker build していると、時間がかかってしまう。 そこで、tmuxとslimeを活用して、Dockerfileを一行ごとに検証していくと良いですよという話。 Tmuxは、Screen
Terraformは、インフラ管理をコードで管理するためのツールです。具体的にJXでは、AWSのインフラを管理するのに使っています。「インフラを管理する」というのは、今までだったらAWSのWeb管理画面(コンソール)やらAWS CLIでやっていたような作業を、ソースコード(以下、Terraform設定ファイル)で管理できるようになります。 さて、そんなTerraform設定ファイルの編集ですが、正直に言ってかなり時間がかかります。具体的には、AWSとかのリソース名とか覚えていられないし、変数とかも覚えていられないし、リソースに必須なプロパティとか覚えていられないわけです。それをいちいち調べるのがとても時間かかります。 自分なりにいろいろ試してみて、生産性があがったツールを2つ紹介します。 1. IntelliJ(無料) ひとつ目は、IDEのIntelliJ IDEAです。ScalaとかJa
AWS Lambdaでサーバーレス楽しんでるみなさん。 私の所属するJX通信社では、AWS Lambdaを結構活用しています。Lambdaのデプロイ管理のために、個人的にはApexというツールを使っているので、今回はその紹介をしたいと思います。 apex.run TL; DR Lambda使うならApex使おう Lambdaやってて発生する辛み Lambdaを継続して使ってくると、だいたいこんな辛みがでてきます。 Lambda関数が増えてくるので管理が大変 Lambda関数を更新するために必要なステップが多すぎる Lambda関数を更新するためには、だいたい次の作業が発生してきます。 pip install とか npm install とかして、依存ライブラリをインストール ソースコードと依存ライブラリを一つのzipに梱包 S3にアップロード Lambda関数を更新 必要であれば、エイリ
HTTP通信の機能を持ったプログラムをテストするときに、どこにアクセスするか、迷うことがある。(モックが使えるならそれがいいけど) そんなときにおすすめな、example.comとhttpbinとbadssl.comを紹介してみる。 example.com 名前がそのままだが、example.com はちゃんと動くサイトである。よくサンプル文字列として(例えばメールアドレスとかで)仕込んでたのだが、最近まで本当に生きたサイトだとは知らなかった。 亜種に example.org とか example.netもある。RFC 2606に定義されているそうで、第三者に悪影響が及ばないことを保障することができるとある。Wikipediaにも記事がある。 ただ、あくまで普通のウェブサイトであり、「403をテストしたい」といった特殊なテストには合わない。そんな人にhttpbinをおすすめしたい。 htt
最近(?)ニューラルネット(Neural Network)やらディープラーニング(Deep Learning; 深層学習)やらが流行ってきて、人工知能やらシンギュラリティやら言われるようになって、その中でよく言われるのが「ディープラーニングは人間の脳を模倣してる」とか「特徴量を選ばずに学習できる」とか、そんなことが言われるわけです。 けど、そういったキーワードが一人歩きして、「人工知能は危険だ」論とか、人工知能に対する過剰な期待論がはびこってしまっている気がする。そこで言いたいのが「ディープラーニングは人間の脳を模倣している」と言ってしまうのをやめましょう、という話。 ニューラルネットワークが「人間の脳を模倣」してる話 まず最初に、「ニューラルネットワークが人間の脳を模倣してる」論が、あながち間違ってないよ、ということを話しておきたい。あながち間違ってないんだけど、それでもやめたほうが良い
賢い読者はお気づきだと思いますが、このページの情報は2年前ぐらいの記事です。古いのでオススメしません。Docker for mac とかない時代っぽい時期の個人的なメモです 今更ながらDocker始めてみた。モチベーションとしては、Sparkとか試すために、手元に仮想環境がほしいから。なので、Immutable Infrastructureとか、KubernetesとかPackerはもちろん、Dockerfileとかにも踏み込まず、Dockerを始めてみる Docker始めるにあたり読んだ記事 15分で分か(った気になれ)るDocker "Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する いまさら聞けないDocker入門(2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方 (1/3) - @IT Do
Googleが先日「TensorFlow」という機械学習ライブラリを発表していて、話題になっています。 さっそく今日社内で紹介LTしてきました。 「社内」のエンジニアの話で言うと、機械学習の会社ではないので、機械学習とかDeep Learningとかには深掘りして話していないです。もちろん、機械学習ライブラリとかも知らない、けど、「なんかGoogleからディープラーニングをOSSで出したって話題になっているぞ」っていう感じの人向けに話しています。 TensorFlowをざっくりLTしてみた from Mitsuki Ogasawara 公式チュートリアルをちょっとだけ逸脱した線形回帰をやってみたサンプルもあります。 ちゃんと自動で微分できてます。 github.com このライブラリ、結構良いなあと思うのは、Googleが使っているという実績力かなと思います。公開初日に「Googleのプロ
(2015/8/29追記) 最初に代案だけ書いておくと、(メールで送る程度の秘匿性のものは)「Proself」みたいな別プロトコルを使う、です。 メールパスワードでは、パスワードに規約をつけることもできません。 また、この話は企業等においてのルール化の話です。 ファイルをZIPで暗号化し、まずZIPをメールで送り、しばらくして別メールで8文字程度の乱数パスワードを送るという謎のプロトコルが日本企業で流行っているが、ZIPのパスワードは総当たりでかなり高速に解析できるし、そもそもパスワードをメールで送っているので効果が疑問。— Daiyuu Nobori (@dnobori) June 17, 2013 もう何年前のネタなんだろうという感じでもあるのですが、2015年現在もこの慣習はなくなっていないように感じます。 実際社会人になってからも、残念なことに一度言われたことがありますし(受け売り
TheanoというPython用のライブラリがあります。 ちょっと勉強したので、チュートリアルを日本語に翻訳しつつ、使い方とかを紹介します。 Theanoとは まずはじめにTheanoとは、について。 Theanoはおそらく「テアノ」と読むのが多分正しいです。ピタゴラス(Pythagoras)の妻です。PythonとPythagorasをかけてるっぽいです。 何ができるかというと、簡単に言えば、行列演算ができます。以下の特徴を持っています(公式サイトより抜粋) 実行スピードの最適化: Theano は g++などを使って式をコンパイルし、CPUやGPU操作に変換します(つまり、pure Pythonなコードよりも速い) symbolicな微分: Theano は勾配を計算するために自動的にsymbolic graphsを組み立てます(訳注:つまり微分に便利だということ) 安定な数値計算のた
word2vecでさんざん遊んだ皆さん、こんにちは。 今日は、word2vecの元になった論文の元になった論文の先行研究になっている論文「A Neural Probabilistic Language Model(Yoshua Bengio)」の紹介です。 word2vecは、単語の素性で足し算・引き算ができたり、単語の類推(アナロジー)ができたり、単語の素性の面白さが注目されています。とは言え、ニューラルネットによる言語モデルは、別に単語の素性で遊ぶために作られたわけではありません。 ということで、ニューラルネットによる言語モデルの本家(?)である「確率的ニューラル言語モデル(Bengio先生)」の論文から、「そもそも何を目的にモデリングしているのか」「なぜニューラル言語モデルが必要なのか」というあたりを、紹介したいと思います(主にIntroductionの部分、ということになります。)
次のページ
このページを最初にブックマークしてみませんか?
『病みつきエンジニアブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く