サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
blog.isyumi.net
転職活動しているとよく聞かれるのですが、なんなのでしょうね。この質問。 この二つって対立軸なのでしょうか? 面接で聞かないでほしい 技術寄りと答えると、頭でっかちで会社のことを考えない人だと思われそうです。 かといってビジネス寄りと答えると技術力の低さの言い訳をしている人感が出てしまいます。 どう答えても都合が悪いので、そもそもこの質問をしないでほしいです。 そもそも対立軸でもない 普通に考えて、技術者として雇われているのだから、ビジネスに貢献しようと思ったら技術力はたくさん必要ですよね。 でも技術で貢献しようと思ったら会社のみんなの事とかお客さんの事とか考えますよね。 むしろ逆をこたえるパラドックス 仮にある種の軸があるとして、それを本人に聞くと逆のことを答える気がします。 例えば、とても技術力がある人なら、ビジネススキルを課題に感じることが多いと思います。なので、主観的には「自分はビジ
目的 最近ずっと転職活動をしていました。 もう終わりました。 だんだん自己紹介に慣れてきたので、ブログにも書いてみました。 概要 プログラマー(ソフトウェアエンジニア)28歳。 現在株式会社CURUCURUというレディースゴルフウェアのECサイトの会社で働いています。 7月から次の会社で働くはずです。 職務経歴 子供の頃からプログラミングが得意でした 最初はプログラミング以外の仕事に就きました プログラマーになりました 特技 SPAづくり ドキュメントづくり プログラミングの速さと正確さ モチベーション 誰かの役に立ちたい 職務経歴 幼少期 子供の頃からプログラミングができました。 ひらがなを書けるようになる前にキーボードを打てるようになったそうです。 プログラミングを覚えたという記憶がありません。 多分生まれつきできたんだと思います。 きっと誰の脳にもプログラミング野みたいなものがあるん
最近Clubhouseでいろんな会社さんが採用イベントしてますね。 それ以外にも、色んな機会に各社の人事さんやソフトウェアエンジニアさんから、求職者の気持ちを聞かれます。 せっかくなので、自分はどのような観点で会社を選んでいるかについて書いてみようと思います。 ただし、同業者さんたちに話を聞く限り、僕は結構少数派だと思います。 あまり鵜呑みにしない方がいいかもしれません。 あ、あとあんまり触れないですが給料は重要です。 重視すること 困っているのはだれか その問題に本気で向き合っているか? あまり重視しないこと 使っている技術 そこで自分が何を担当するのか 福利厚生 オフィスの綺麗さ 誰が何に困っているのか 誰が何に困っているのかという問題意識が一番大事だと思います。 これにはいくつかのとらえ方があると思います。 例えば、『社会のこういう属性の人は○○という問題で困っている。だから××とい
こういうWebアプリを作った。 https://famous-song.app/ 本人は企画として面白いと思っている。 せっかくなので、どういう技術で作られているかについて解説する。 概要 まず、認証とRPCは全てFirebaseを使っている。 サーバーサイドはFirebase HostingとCloud Functions。 フロントエンドはTypeScript/React/Redux/typescript-fsaあたりを使った。 投票ページはSPAで、それ以外の結果表示ページはSSRしている。 意図 SSR 最近はSSR不要論も多い気がする。 ただ、フロントエンドでSPAと合流するようなSSRならともかく、ペライチのHTMLを生成するだけならSSRしたほうがロードが速いし実装も楽だと思う(そこに反対する人はいないと思う)。 SSRにはReactのtsxを使った。 tsxを使うと、引数に
好きな技術書ランキングを発表するのが流行ってるらしいので便乗します。 もともとは初心者の時に役に立った技術書とかいうトピックだった気がしますが、この際どうでもいいや。 ジョー・セルコ『プログラマのためのSQL』 この本に書いてあるのはSQLの事ですが、しかしプログラミング全般に役立ちます。 僕がこの本で学んだのは、プログラムは処理ではなくて宣言だという事です。 まず、どのプログラム言語にもその言語を司っている設計思想があります。 だから、それに合わせたコードを書くべきです。 そして、言語にはセマンティクスが用意されています。 ただ漫然と動くコードを書くのではダメなのです。 その言語のセマンティクスを理解し、それを使って自分の意図をコードで表現することもプログラミングの大事な側面です。 ということをこの本が教えてくれました。 GoF『オブジェクト指向における再利用のためのデザインパターン』
結論 型が言えるようになろう。 概要 必要な知識はちゃんとあるはず。それでも、プログラミングが遅い。バグが多い。 そういう人を何人か見た。 その人たちに型が言えないという共通点があると思った。 まず、型が言えないとはどういう状態か説明し、解決策を提案する。 自己紹介 多分本当に速い人。 業務のプログラミングは速い。 AtCoderで容問を速解きするだけなら相当上位。 本題 型が言えないとはどういう状態か 例えば、極単純な電卓アプリの型を考えてほしい。 二つの数値に四則演算をして計算結果を画面に表示するとする。 この際、値域や未入力の状態やゼロ除算の対応やカーソル位置などは全部置いておこう。 この電卓の型を言うならこんな感じだろう。 { input1: number, input2: number, method: "+" | "-" | "*" | "/", output: number,
設計について 自分はソフトウェアの設計を担当している。 ところで、会社によって設計という業務の指す範囲が異なると思う。 ただ『設計をしている』というだけでは、自分の持つスキルが伝えられないのではないかと考えた。 そこで、自分が実際にどのような作業をしているのか、そして、どのような考え方をもってその作業に当たっているのかを記そうと思う。 ここで言うソフトウェアの設計とはビジネスの設計やプロジェクトの設計の話ではない。よって、ビジネスモデルや人員配置というような話ではなく、狭い意味のソフトウェアの設計の話だと思ってほしい。 信念 設計通りに作って動かなかったら設計した人が悪い 設計に解釈の余地があったら設計した人が悪い 設計書と称して何を読み取ればいいのかよくわからないポンチ絵を作って満足している人が多いようだ。 しかも、えてしてそのような人は「上流工程」と呼ばれて、その人の仕事の不出来を下位
取りかかれるのはだいぶ先だと思うけど。 現行のSQLは重大な問題をいくつも抱えている。 だから、新しい文法のSQLが必要だ。 ちょうどDartが新しい文法でJSの世界を救ったように、SQLにも救世主が必要だ。 今の所SQLがRDBを操作する唯一の言語だ。 RDBの背景には集合論を土台にした素晴らしいセマンティクスがある。 しかし、SQLの文法が悪いせいでRDBが扱いにくいものだと思われている。 よくあるイメージとして、これは間違った考えだが、KVSはRDBよりかんたんに扱えると思っている人がいる。 この状況を放置すれば人類は安直にKVSに流されてしまう。 また、RDBは速度に限界があると言われている。 いくつか話題になりやすい理由を上げる SQLのパースが遅い JOINが遅い ロックが遅い 挿入時の整合性確認が遅い 1はバイナリフォーマットを定義するとことで回避するべきだ。 2〜4はシステ
抽象度は上げて落とせ。 僕は正規表現を使わない。 僕はシステム開発の中で正規表現をほとんど使わない。 外部システムから取得したデータを取り込むときに渋々使うくらいだ。 文字列置換もあまりしない。 プログラミングが下手な人が作ったシステムは正規表現や文字列置換が多い気がする。そこで、なぜその人は正規表現を使わなければいけなくなってしまったのか考えることで上達のヒントとしたい。 下手な人の例 例えば、ECサイトを作っているとしよう。商品には値段がある。値札は¥マークと三桁ごとのコンマが振られてた文字列だ。 さて、商品の「カートに入れる」ボタンを押すと「合計金額」が加算される機能を作るとする。 下手な人は、画面の中にある三桁ごとのコンマが振られた文字列を何とかしてintにして変換して、それを足し算して、その結果に3桁ごとのコンマを振って、それを画面に表示しようとする。 それに対して上手な人はそも
不勉強な僕ですが、僕が知っているいくつかの小手先のテクニックをまとめておこうと思う。 誤解しないで欲しいが僕は他人にこの話をすることはほとんど無い。僕があなたの同僚になったとして、いちいち突っ込んでめんどくさい思いをさせることはない。 単にあなたの人生の一助になればという思いである。 というわけで第一弾は純粋関数の割合を最大化しよう、である。 純粋ではない関数には二種類ある ひとつ目は関数の外側の状態に影響を受ける関数だ。 var value = 10; int main(int mul) { return value * mul; } このmain関数は関数の外側にあるvalueという変数を読み取っている。この関数を何回も実行した場合、引数が毎回同じでもvalueの値が違えば違う結果が返る。 もうひとつは関数の外の変数を書き換える関数だ。 var value = 10; int main
ブラウザの画面をもう片方の画面に転送するものを作った。 めっちゃ簡単にWeb上の画面を他の端末に再現するものを作った。 ユーザーテストとかに使えそう。 Android・PCはWebRTCで iPhoneはWebSocketで画面を転送する。 pic.twitter.com/smxdYBwRiE — 弩.net@Coqやっていき (@isyumi_net) December 23, 2018 動機 AWSがWebSocketのリバプロに対応してくれた。 これまでWebSocketでいろいろ作った。楽しかった。しかし、一つ問題があった。WebSocketを使うとインフラ・デプロイの自動化が不可能になる点だ。HTTPと違いユーザーが使っている間はずっと接続が維持される。つまり、ユーザーが一人でも残っていたらサーバーを捨てれないのだ。 そこで、Nginxなどを使って自前でWebSocketリバース
下のコードのように一度変数に値を代入した後に別の値を代入することを再代入という。 例: func main() { i := hoge() i = "iii" log.Print(i) } まず、極力再代入を減らすように心がけよう。再代入を減らすとバグが減るしデバッグの手間も減る。このブログで何度も言ってきたことだが、変数はとにかく早く値を確定させよう。下のコードは悪い例だ。関数の上のほうで定義された途中で書き換えられていることに気づいただろうか。 func main() { i := hoge() a = 3 * 7 b = a % 2 c := fuga(i) if c == 0 { a = functionA(d * c) i = "iii" } for x := 0; x < 10; x ++ { piyo(len(i) * x) } log.Print(i) } このようなコード
君はファンコントローラーを知っているかい? 僕は知りませんでした。 ファンコントローラーとは 電源ユニットとファンの間に接続し、ファンの回転速度を調整するPCパーツ。 ツマミが付いていて、これで回転数を変更できる。 背景 僕は最近グラボの発熱に悩まされていた。特定の重い作業をしている時だけ90℃に達するのだ。これは良くない。 そこで、僕はPCケースファンを数個買ってきて取り付けた。これだけで40℃に下がった。ファンの力は偉大だ。 ところが、また新たなる問題が発生した。ファンがあまりにもうるさいのだ。 パソコンをつけっぱなしで寝る僕にとっては重大な問題だ。 というのも、マザーボードのファンソケットはすでに埋まっていたので電源ユニットから直接給電したのだ。当然、ファンは常時全力投球することになる。もうすこしこう何というか、手心というか。 仕様 そこで色々調べたところ、ファンコントローラーという
mozaic bootcampとは 講義形式のトレーニングです。講師はJxckさんと矢倉さんです。 4/28-5/1の4日間、10:00-17:00の時間のスケジュールでした。 Webの仕様を中心に、Web系開発者が知っておくべきことが詰め込まれていました。 mozaic.fmが4日間朝から夕方まで続く感じです。 場所 一休さんのオフィススペースを貸していただきたました。一休さん本当にありがとうございました。 形式 大雑把に ncコマンドでHTTPを手書きしてexample.comにHTTP Requestしてみる TCPサーバーを立て、そこにブラウザでアクセスして、送られてくるHTTP Requestを見てみる Wiresharkで通信を見てみる 重要なポイントについて仕様を読む Jxckさんから解説がある 仕様に他のオプションが書いてあれば、その動きを試してみる 以上を踏まえて、「〇〇
キャッシュは難しい。そこで安全な設計ができるように考えるべきことをまとめた。 まず、キャッシュにはどのようなものがあるか。 前回のHTTPリクエストの結果をローカルに保存しておき、次回はそこから結果を返す HDDに書き込んだデータをメモリにも保存しておき次回はそこから読み込む RDBで時間がかかるクエリを高頻度で実行する時、あらかじめ別テーブルに集計結果を入れておく 数学のアルゴリズムを書く際に、CPU負荷の高い平方根を先に済ませて結果を連想配列に入れておく このようなものが挙げられるだろう。 本題に入る前にいろいろなタイプのキャッシュを分類をしたい。キャッシュは二種類に分けられる。一つは元データとキャッシュデータが一対一で対応するものだ。キャッシュデータが元データのどの部分をキャッシュしているか明確に答えらえるものとも言える。例えば1万ファイルの中で数ファイルをメモリにも持っているような
文脈 現在のWeb開発現場では Firebase GAE AWS Lambda CDN クラウド型の RDBサービス K8s ホスティングサービス ログ収集サービス 死活監視サービス が使われるようになった。 これを、Webアプリケーション開発者はビジネスロジックの開発のみに集中しそれ以外のめんどくさいことは各クラウドサービスに外出しする流れと総括できるだろう。 (WebアプリにはAndroidアプリやiPhoneアプリも含む) 僕はいま、Webアプリにおける通知もこの仲間に入っていくであろうと予測している。 そのことについて書く 通知とは ここでは以下のものを通知と呼ぶ。 まず、ServiceWorker、iOSのAPNS、AndroidのFCSを使ったプラットフォームのネイティブのサーバーPush型ポップアップ通知機能が挙げられる。 また、Webサービスにありがちなベルマークの右上に未
スマホ用Webアプリづくりには限界がある。 この2ヶ月間、あえてiPhoneからTwitterアプリを消して、ChromeでTweetをしていた。 Twitterのスマホ向けWebアプリはネイティブアプリに比べてあまりにも操作感が悪かった。 Facebookも同様だった。 TwitterとFacebookという、おそらく世界で最も金と時間と技術がかかっていそうなWebアプリでもこの程度の体験になってしまうのかとがっかりした。 そこで、不満点の指摘と提言をしたい。 題材としてTwitterを取り上げるが、決してTwitterの悪口ではない。 むしろ普段スマホ向けWebアプリを作ってる身からすると、この苦労は大変良くわかるし、Twitter Webアプリはすごく良くできていると思う。 だから「世界最高峰の人たちでもこうなるんだぞ、今のWebには色々足りないものがあるんだぞ」ということを言いたい
IF文の中を整理する簡単な方法を紹介しよう。 こういう仕様を考えてほしい。 お客さんがある商品を購入可能か判定したい。購入可能の条件として ログインしているか 在庫があるか 在庫がないなら再入荷可能か お金は足りているか があったとする。購入可能ならTrueを、購入不可能ならFalseとReasonを返してほしい。途中でReturnしないならこういうコードになる。 途中でReturnしないIF文 ネストが深く分岐のルートが追い辛いためリーダビリティが低い。さらに、こういうコードは変更に弱い。ある日急に「お金が足りなく、かつ在庫もなければどんなエラーが出るの? その場合お金が足りてないメッセージを優先して出してほしいんだけど」って言われたとして、対応可能だろうか。 こういうコードはとにかく順番にReturnしていこう。 どんどんReturnしていくIF文 見やすくなったであろう。このコードは
クリーンアーキテクチャの意図の話をする。 具体的な実装の話はしない。 変数の純度 まず、変数の純度という概念を提唱したい。 ある値がどれだけ整理されているかの指標である。 エントロピー、ないし抽象度ということも可能だと思う。 Stringの"1,800"よりintの1800のほうが純度が高い。 JSTとUTCならUTCのほうが純度が高い。 誕生日・現在時刻・年齢や定価・税率・税込価格のように3値の内2値が定まれば第3値が導出できるものは、3つ目を省いた方が純度が高い。 不正値が混じっているかもしれないデータと不正値が混じっていないことを確認したデータなら確認したデータの方が純度が高い。 おおよそRDBの正規化と同じ考え方だ。 純度の高低の見極め方 より汎用的に使いまわせるほうが純度が高い。 A→Bに変換する手間とB→Aに変換する手間を比較して、簡単な方が純度を下げる操作。 より不整合が起こ
僕がモデリング関数と呼んでいる概念の話をしたい。 DBから落としてきたデータをもとにビジネスロジックを書くと、関数の引数が増えすぎてうざくなる経験はないだろうか。 例えばTwitterを作っているとして、AさんがBさんをフォローしているか判定する関数はこうだ。 (followsはFollowテーブルのレコードの配列だ) if(isFollow(toUserID, fromUserID, follows)){ // 処理 } 投稿数が5以上のユーザーをフィルターするのはこうだ。 users = filterPostCount(users, posts, 5); どうも汚い。 オブジェクト指向言語で書く以上こういう風に書きたい。 if(user.isFollow(toUserID)){ // 処理 } users = users.filterPostCount(5); これを実現するためにはそ
あなたはショッピングサイトを運営していたとする。ある日急に担当者から「来週からセールを始めるので13:00になったらこの告知バナーを表示してほしい」と依頼された。しかし、既存のシステムにはセール時にバナーを差し込むようなレイヤーは用意していない。そこで、少々お行儀は悪いがテンプレートに直接<img>タグを差し込むことにした。 void topPage(HttpResponse res) { // ここからセール対応 セールが終わったら消し忘れないで>< var isSale = new DateTime.now().isAfter(new DateTime(2017, 10, 21, 13)); var saleTag = isSale ? "<img src='sale.png'/>" : ""; // ここまでセール対応 res.write(""" <div> <h1>●●ショップへよ
このページを最初にブックマークしてみませんか?
『isyumi_netブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く