サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
this.aereal.org
GitHub - aereal/iter: iter provides utility functions about standard iter. 使い方 pkg.go.devを見てもらえるとよい。 Chunkを取り上げると、第一引数を n 個ごとの要素に分割したイテレータを返す。 たとえば一度に最大500個までの引数を受け取るAPIへリクエストを送る処理を実装する場合、送りたい引数リストを500件ずつに分割して送りたい。 そういう時に Chunk を使うとよい。 for chunk := range seq.Chunk(args, 500) { _ = sendRequest(ctx, chunk) } 他に、2つの iter.Seq を引数にとり同じ添字に位置する要素をペアにした iter.Seq2 を返す Zip などもある。 モチベーション Rubyなどにあるような高級なコレクシ
手を動かす人は無条件に偉い 手を動かさない人より手を動かす人のほうが偉い。 たとえもっと上手くやれる人がいたとしても、その能力を適切なタイミングで発揮しなければ能力がないのと一緒。 同様に、自分のほうが上手くやれると思っていても、あなたが実際にその能力を発揮しないのであれば能力は無いのと同じ。 あなたの能力が要求を満たすことはおそらく永遠に来ない ピーターの法則によれば組織に属する人々は、無能を露呈するまで昇進し続ける。 つまり放っておけば自分の能力を越えた仕事が課せられるようになるということ。 これは能力の成長曲線とは関係なしに働く力学と捉えられている。 ということは「○○ができないので××という仕事をやるには時期尚早だ」と思っていても、○○ができるようになるころには最早××は要求されずさらに難しい別の仕事が求められるようになる。 失敗するなら早めに 常に要求が能力を上回るのであれば失敗
トークについて speakerdeck.com 『好きな技術《コト》で、 生きていく技術』という題で話した。技術選択にどんな筋を通すか、技術選択というものを通じて職業人・趣味人としてどういう人生を送るか、という話。 YAPC::Kyoto 2023で聞いたid:ar_tamaさんのあの日ハッカーに憧れた自分が、「ハッカーの呪縛」から解き放たれるまでというトークが良かったこと・それがYAPCのコミュニティに強く受け入れられたことに思うところがあり、今までしたことのない系統の話題を話してみようと思った。 自分にとってとても挑戦的だったのでid:ar_tamaさんにお礼を言うことがYAPC::Hiroshima 2024の目的のひとつだったので、懇親会で無事に果たせてよかった。改めてこの場でもありがとうございます。 2つ前の同じ部屋でid:Songmuさんの「Blogを作り、育み、慈しむ - B
何かをやる上で失敗しないに越したことはないですし、そのリスクはあらかじめ減らせたり排除できると良いのはもちろんですが、どうしたってゼロにはできません。 それが新規事業のような不確実性の高い領域であればなおさらで、正解の見えない世界での判断は少なからず博打の性質を孕むことになります。 ソフトウェアエンジニアとしてそういった場面で判断をする時に、合理性で選択肢を減らしていった後で残った選択肢を選ぶ時の決め手として、自分は「失敗しても何を残せるか」という観点を持ち出します。 正解のない世界で自分を鼓舞するためのある種のまじないのようなものですが、これについて掘り下げてみます。 プレモーテムとは 終わりを意識して始める: プロジェクトのプレモーテムを行う方法 [2022] • Asana プレモーテム (premortem) とはプロジェクトの終了をまず予想し、そこから逆算してリスク要因を見つけた
職業ソフトウェアエンジニアが普段の業務でソフトウェアを作る時は、過不足ないソフトウェア製作を通して試行錯誤を素早くこなして目的に至ることが求められているでしょう。 『リーン・スタートアップ』やアジャイル開発などで説かれている考え方です。 ソフトウェア産業が扱う領域がより高度で複雑になってきたために生じる不確実性とうまく付き合うためのやりかたで、今日では前提とされます。 一方で、それらを支えるソフトウェア技術の幅や深さを広げるためにはどうすれば良いか、必要性は理解されてはいても具体的な実現方法を模索しているという人が多いのではないでしょうか。 ここでは、会社としてどうするかという点から一旦離れ、一個人のソフトウェアエンジニアとしてどうするかという観点で考えをまとめたいと思います。 作りたがりな自分 自分は「作りたがり」な性質で、業務では常にオーバーエンジニアリングに走ってより新しいこと・おも
qron: Cloud Native Cron Alternativeの今 掲題の通りのトークをした。元々YAPC::Kyoto 2020のトークとして採択されていたトピックを2023年版として話すことに。 オンサイトのカンファレンスに参加するのは2019年のbuilderscon以来なので2年半ぶりくらい。 #builderscon tokyo 2019で「自動作曲入門」について話した - Sexually Knowing トークについて speakerdeck.com もともとあったアイデアを必要に駆られて仕事で作ったものの話。 2020年当時はできたてほやほやだったけど2023年はもう運用して数年が経とうとしているので「実際動かしてみてこうだったよ」という話も盛り込んだ。 結果として強気の40分枠で応募し、採択の運びとなった。自分で選んでおいてだけど40分のトークを黙って聞いているの
github.com 背景 仕事でお世話になっているkayac/ecspressoの機能の中にローカルのタスク・サービス定義と現在使われている定義を比較して差分を出力してくれるものがある。 github.com これから加えようとしている差分をプレビューできるだけではなく、たとえばデプロイしようとしているわけでもないのに差分があればローカルの定義が古びていることがわかるのでCIに組み込めると便利。 しかし実際に使おうとすると困る点が見つかった。 たとえばタスク定義にイメージタグを書く際に {{ must_env 'IMAGE_TAG' }} のように環境変数を参照している時に「イメージタグ 以外 に差分がない」ことを確認するのが難しいということ。 理想的には image を無視したJSONの構造を比較して差分が出せると良い。あるいは出力されるdiffをパースして image の差分は無視す
これまで 色んなチームにヘルプで入ってプロジェクトやチームを良い感じにする手伝いをすることが主で、他に基盤サービスを作って運用したり、あとは開発者ブログ編集部をやったりなどなど。 現職での1年半くらいのキャリアにおいてソフトウェアエンジニアリングは高々3割くらいで、あとはプロジェクトやピープルをマネジメントするような仕事が占めていた。 振り返り 前職でもWevoxを使っていて、その当時から振り返ってもありえないくらい低い「自己成長」スコアがここ最近ついていてクソワロタ (真顔) 状態だった。 このままだと退職 or dieしかないと感じたので、上司には「もうしばらくプロジェクトマネジメントはやりたくないでござる 絶対にやりたくないでござる」と上申して新しいチームへの配属を希望した。そしてそれは叶えられた。 Webサービスを作って届ける過程でプロジェクトやピープルをマネジメントすることの必要
シェルスクリプトを書くのをやめる - blog.8-p.info これを見て: 夢の可能性が高くなってきたんですが、Perlのプラグマかなにかで、シェルスクリプトと混在できる……というか、存在しないサブルーチン呼び出しを外部コマンド呼び出しにするやつありませんでしたっけ— aereal / 青木華絵 (@aereal) 2021年9月16日 まじだ... https://t.co/IF6SyBR4o8— Kazuyoshi Kato (@kzys) 2021年9月16日 Shell - run shell commands transparently within perl - metacpan.org use Shell qw(cat ps cp); $passwd = cat('</etc/passwd'); @pslines = ps('-ww'), cp("/etc/passwd"
GitHub - aereal/go-openapi3-validation-middleware: net/http middleware to validate HTTP requests/responses against OpenAPI 3 schema using kin-openapi. kin-openapiというOpenAPI 3定義を読んでリクエスト・レスポンスのバリデーションをしてくれるGoのライブラリがあるんだけど微妙に使い勝手が悪い。 素朴に使おうとするとHTTPハンドラ内でバリデーションに関するコードを書く必要があって関心を分離させるという目的を果たすにはちょっと弱いし、得られたエラーを一貫して取り扱うにはエラーをHTTPレスポンスに加工して返すところまで一気通貫で取り扱いたい。 Goでnet/httpを使ってHTTPサーバを書く時は、RackやPlackのように
大抵の誉め言葉を嬉しいとは感じない。どれもこれも社交辞令に聞こえる。なぜ社交辞令に聞こえるかといえば、着眼点がずれていたり、解像度が低かったりするから。 これも本当にズレている・見えていないだけのこともあれば、当人の認識は的を外していないけれどもそれが言語化する際にスキルが伴わず伝わらないだけということもあろう。 ポジティブ・ネガティブ問わずフィードバックする際に限らず、たとえばタスクひとつ振る際にも背景や要件だけではなく「なぜあなたを指名したか」「これを通してあなたが何を得ると期待しているか」といったことを過不足なく伝えることはこだわり徹底したいことのひとつ。 別に指名の理由が大仰なものと限らず「単に暇そうだったから」ということもあるだろうし、それはそれで良いと思う。その場合は正直にそう伝える *1。でも「他に頼れる人がいないのでお願いしたいと思っている」とそう伝えることはできよう。 大
前回までのあらすじ 転職した: 新しい職場で半年経った 面接を受ける1年前 (2019年初頭) にカジュアル面談に行った時にオフィスを訪れて以来、面接から入社後に至るまで自分は一度も現職のオフィスに踏み入れていない。 転職から入社 転職活動 新しい職場を決めるにあたって重視した点は金沢からの勤務実現に前向きかと同僚となるメンバーが刺激的かどうかの2つ。 これは以下に引くようにこれまでに言及してきた: 数年前に観光で訪れた金沢を歩いてから一目惚れしてしまい、自分がここで生活する想像をするうちに単なる夢想から具体的に実現することを考えはじめた。 これを書いている時点で、株式会社はてなの事業拠点は東京と京都のみであり、在宅勤務は育児や介護、その他会社が認めるに足る理由があるケースのみ認められている。 平時は週数日程度スポットでの在宅勤務はマネージャーと合意した上では認められている。またコロナ禍に
from: 株式会社はてな 退職エントリ to: 株式会社Classi 社の開発者ブログに書いたエントリ 決め手 やっていること・やりたいこと チーム・機能横断の基盤システムの設計と開発 開発者ブログの編集長業 プロダクトチームに出向しての草の根活動 事前の印象と変わらないところ・異なったところ むすび 決め手 転職先を決めるにあたって一緒に働くメンバーから刺激をもらえそうかを一番重視した。 これは抜きん出たタレントを持っているとか輝かしい経歴を持っているかとかではなく: 知的好奇心を持っているか それがよく表出しているか (= アウトプットされているか) ……ということを重視している。 転職ドラフトに参加したり、いろいろな企業を見る中でbuildersconなどのカンファレンスで顔を合わせて話すことがあったid:nkgt_chkonkさんやid:lacolacoさんが所属していることを思
重い仕事・比較的やりたくない仕事・とっかかりが見つからない仕事など、アサインされたけれどどうにもやる気が出ない仕事に出くわすことはしょっちゅうあると思う。 そういう時におすすめしたいのが「誰か一緒にやりませんか」とペアプロ・ペア作業相手を募集すること。 実際に一緒に作業することになれば: 相手の作業時間を確保するので否応なしに向き合うことになる 視野が広がる 単純に他人の目が増える またプレッシャーが減ることで自身の視野も良くなりうる 作業効率が上がる 単純作業がたくさんある場合なんかにはとても助かる また、チームの状況がそれを許さない場合でも: なんか大変そうだなというアラートが届く だいたいアラートを上げるのが苦手な人は顔色を変えないことが多いので、周りからフォローしにくい アラートをあげる心理的障壁が低い 「つらいのでやりたくないです」と言える人はなかなかいないと思うし、言ったとして
blog.sushi.money 僕も最近は正常系から書くことが多いです。こうすると悪い設計に早く気付きやすいという利点があると感じています。 ここでは単体テストのような開発者向けのテストを想定していて、E2Eテストのようなテストでは必ずしも当てはまらないでしょう。 最初にテストを書く時には何も準備がない状態から始まりますが、その時にとても素朴な異常系から始まると整える事前条件が少なく済んで簡単に書けた、という体験になると思います。 そこからインクリメンタルに事前条件を積み重ねて、複雑なメソッドの動作を確かめていきますが、その場合の開発体験はコピペしつつちょっとずつ整えていくという風になり、都度の負担はそれほど高くならないでしょう。 一方、最初に正常系から書く場合、あらゆる事前条件を把握し、それを整えるコードを書く必要があります。 理想的に実装されたメソッドは、どちらの進め方であっても体験
Gitもシェル (zsh) もよく使うコマンドをエイリアスとして設定して任意の入力で呼び出すことができる。 このエイリアスについていくつか派閥があると感じていて、おおまかには: エイリアスをまったく使わない 入力の手間を減らすため極限まで短いエイリアスを使う よく使うコマンド・オプションの組み合わせに説明的な名前をつける ……という派閥に分類できると思う。 自分は3つめの「よく使うコマンド・オプションの組み合わせに説明的な名前をつける」に属する。 短いエイリアスへの苦手意識 衝突しないようエイリアスを管理するのがだるい エイリアスは名前空間を通常のコマンドと共有しているので、それらと衝突しないよう管理しなければいけない。 短い名前を設定しても思い出せない よく使うコマンドなら手癖で打てるだろうけれど、ごくたまにしか使わないコマンドのごく短いエイリアスを思い出せる気がしない。 これはエイリア
id:masawadaとid:side_tanaと一緒にはやいTシャツ屋さんで参加しました。初期スコアが最高スコアでした。察してください。 チームでやった主なこと: New Relicの導入 Web Transactions SQL Logs デプロイ自動化 デプロイするたびにNew Relicのdeploymentsを打つ *1 MySQL 8化n estateのlongitude/latitudeをgeometry型にする ☆searchEstates/searchChairsをやっつける もろもろインデックス貼る アプリ複数台構成へ コミュニケーション Slackで事務連絡、Scrapboxにメモ、Hangoutで会話という体制にした。Hangoutは繋ぎっぱ。 Scrapboxに予選ページを作ってそこで30分ごとのイテレーションで進捗確認と次のタスクを確認した。 1時間だとおよそ8
概要 これまで業務・プライベートの双方でAWS CDK (Cloud Development Kit)というInfrastructure as a CodeツールをDeveloper Previewのころから着目し利用してきたので、その特徴を競合と比較しながら説明します。 概観を掴んでもらうことを目的とするので詳細は外部の公式・非公式のドキュメントへ適宜リンクするかたちをとります。 想定読者 AWS CDKが何かよくわかっていない人 CloudFormationとの違いがわかっていない人 IaCに興味がある人 前提・背景 AWS CDKの特徴を説明するためにIaCの変遷について簡単に言及したく、そのためにはWeb開発におけるインフラの変遷に触れる必要があります。 結論から言うと 現代においてインフラとアプリケーションの境界は非常に曖昧 で、比較的はっきり別れていた時代に定義・設計された I
前職で掲題のような取り組みを提案して始めてみたら予想以上に盛り上がったので書いておく。かなり低コストに始められるので以下に書くような課題感を持つところではおすすめできると思う。 どんな会か 会の名前は「今月のホットトピックス」と銘打った。 前職では毎週木曜日に社内勉強会が開催されており、月始めの枠の一部を借りて30分程度から始めた。 refs. 寿司と勉強会とエンジニア - Hatena Developer Blog 最近チームでやったことの書き出し 聞いてくれ・聞きたいの投票 司会による紹介 ……からなる。 まず書き出しは、ナレッジツール (Scrapbox) におもむろに「2020/8 ホットトピックス」というページを作り、各チームやその他有志といった見出しを置いておく。 このライブラリをアップデートしたとか、バグ報告をしたとか、大小いろいろな情報を書いてくれる。 並行して、ページに箇
github.com というのを書いた。ご利用ください。 スロークエリを解析する時に「このクエリ、アプリのどこから呼んでいるんだろう?」と調べたいことがよくある。 だいたい遅いクエリって長くて複雑だったりするのでいちいち横に縦にスクロールして全容を把握してgrepするのも地味につらい。 ISUCONに向けてほしいねーって話になったので書いた。 PerlでDBIを使っていた時にはDBIx::Tracerを使ったりして実現できていたので、Goでもやりたいと思って書いた。 やっていることは、database/sql/driverのラッパ実装を作っている。仕事は実際のドライバ (go-sql-driver/mysqlとかpqとか) に任せていて再実装ではないからDBへのアクセス部分にまったく不安はないと言っていいと思う。 この実装方法はaws-xray-sdk-goから借用した。Apache Li
退職するにあたって、人事評価とかそういった枠組みをすべて取り払って去る自分に対して言い残したことがあれば伝えてほしいなと思い、自分がどう見えていたかをGoogle Formによるアンケートというかたちで同僚に乞い、ありがたいことにたくさん送ってもらえた。 設問は: 業務上なんらかの形でaerealと関わったことがありますか? あなたは aereal と働くことをどのくらい友人や知人に薦めると思いますか?(仮に自分に似た価値観の友人や知人がいたとしてお答えください) 上記スコアを付けた理由を教えてください。またそのスコアはどうすればもっと改善すると思いますか。 ソフトウェアエンジニアとして見た時、aerealの良い点・望ましくない点・その他感じたことがあれば教えてください 戴いた回答の一部または全部を引用し、ブログなどで外部に公開することを許可しますか?(引用する際には内容から個人を特定でき
scrapit.vercel.app ……というのを作った。 ソースコード: GitHub - aereal/scrapit blog.sushi.money PCのブラウザではこういうブックマークレットでブクマしている一方、Androidで見ている時にぱっとやる方法がなくて、ブラウザのブックマークに入れておき後でPCを開いて丁寧に移すということをしていたけれど面倒だった。 きっかけは忘れたけれどWeb Share Target APIという存在を知って、Webアプリでできるならと思って試してそつなく動いている。半日で完成したので満足。 Web Share Target APIはmanifest.jsonに共有されたら開かれるURLを書いておくと、Androidの共有メニューで選択されたらそのURLが開かれるのでその先はアプリで好きにできる、という仕様。 現時点でのステータスはunoffi
公開しているライブラリほどじゃないにせよ、チームで開発しているTypeScriptで書いたコードにちらほらドキュメンテーションしていきたい。 それESLintで とりあえず今までろくに書いていなかった部分はいまさっき書き足すPull Requestを作ったけれど、今後手を入れる時にもちゃんと書いていってほしい。 で、こういうルールの徹底を人間がレビューで「ドキュメントおねがいします」って言うのは不毛。2020年代にやっていいことではない。 TypeScript/JavaScriptでやろうとなったらESLintでどうにかしたい。eslint-plugin-jsdocがJSDocに関連したルールを提供している。 JSDocはTSDocと基本的なフォーマットは同じで細かいタグのセマンティクスは差異がありそう。 そしてなんとeslint-plugin-jsdocはTypeScriptもサポートし
@types/react-domで `ReactDOM.render` の第2引数 (container) はnullを許容しており、`document.getElementById` の返り値の型に合わせているそう。 しかしランタイムがnullを許容しているわけではなくnullを渡すと実行時例外になる。 TypeScriptを使っているのにこういうことが起きるのはなかなか悲しいので、nullを許容しないより安全なrender代替をexportするライブラリと、ReactDOM.renderを禁止するeslint pluginを作った。 GitHub - aereal/react-type-safe-render: Provides `safeRender` function that is more type-safe version of `ReactDOM.render` with
2020年8月14日付けで退職する運びとなった。 入社が2012年なので勤続丸8年を迎え社内でも古株の方になってきつつある。Web業界にしてはわりと長くいたほうだと思う。 自分自身でもこんなに長く籍を置くとは思っていなかったので驚いている。 退職を決めた理由は主に2つ。 金沢移住 1つめは、現在住んでいる京都を離れて金沢で暮らしたいと考えたから。 数年前に観光で訪れた金沢を歩いてから一目惚れしてしまい、自分がここで生活する想像をするうちに単なる夢想から具体的に実現することを考えはじめた。 これを書いている時点で、株式会社はてなの事業拠点は東京と京都のみであり、在宅勤務は育児や介護、その他会社が認めるに足る理由があるケースのみ認められている。 平時は週数日程度スポットでの在宅勤務はマネージャーと合意した上では認められている。またコロナ禍においては在宅勤務推奨となっている。ただし、継続的にフル
結論: 値がcomma-separated listと定められているヘッダはOK 同じ名前のHTTPヘッダを複数回出力する、とは こういう出力: ... Vary: Accept-Encoding Vary: User-Agent ... 同じ名前のHTTPヘッダを複数回出力すると、受信者はどう振る舞うのか RFCより引用: A sender MUST NOT generate multiple header fields with the same field name in a message unless either the entire field value for that header field is defined as a comma-separated list [i.e., #(values)] or the header field is a well-know
コードを書かない問題解決 ソフトウェアエンジニアとしての価値観とか仕草みたいなのはだいぶid:hitode909さんの影響を受けており、その中でも自分が大きく変わったと思うのは、問題解決の手段としてソフトウェアにこだわりすぎないという視点を手に入れたこと。 自分は本来的にはコードを書くのが大好き人間というかyak shaving大好き人間なので、コードを書きはじめて実現に至るまでのすべての寄り道を楽しいと思う性質だけど、一方、チームや組織という文脈でそれが常に正しくて価値が最大かというとそうではない。 ……ということに気が付かされたのはひとでさんと仕事していて自分がソフトウェアを作るという方法にこだわって悩んでいると「とりあえずスプレッドシートで運用してみませんか」とか提案してもらえることがあり、最初はえーコード書きたいよと思っていたものの実際にやってみるとそれくらいで事足りる頻度の作業だ
github.com 記録するLambdaを作るAWS CDKのリソースライブラリを作った。 いますぐ npm i -S @aereal/cdk-ecs-task-retirement-events-mackerel-annotator ! こういうアノテーションが作られる モチベーションと利点はScrapboxに書いたように: [ECS]のtask停止は[Mackerel]にホストの退役と登録というかたちで通知されるが、その契機となった変化が何なのかがわからない。 [CloudWatch Events]を購読する[Lambda]が、コンテナの停止理由をMackerelのアノテーションとして付与する。 Mackerelのアノテーションはサービス (とロール) に紐付き、揮発していくコンテナより長いライフサイクルで残るため、連続的な変化を追いやすい。 cdk-ecs-task-retirem
下記で紹介している /github deploy というコマンドは2021年4月9日の更新で現行のSlack連携からは削除された。 Removed deploy command and notification support: Today, the functionality provided by deploy command is very limited and doesn't address all the scenarios. We are removing deploy command and notifications support as part of this version. We want to relook at the scenarios and build a more holistic experience that customers need. int
次のページ
このページを最初にブックマークしてみませんか?
『Sexually Knowing』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く