タグ

programmingに関するakasataのブックマーク (195)

  • 開発者が知るべきキャッシュ設計でよく遭遇する問題

    はじめに 分散システムの設計および開発において、キャッシュはパフォーマンス向上のための非常に重要な要素です。頻繁にアクセスされるデータをキャッシュすることで、アクセス速度が遅いデータベースへのアクセスを削減し、データへの迅速なアクセスを可能にします。これにより、システムの全体的な効率とパフォーマンスが向上します。 しかし、キャッシュは慎重に設計しないとむしろパフォーマンス上のデメリットになるケースが存在します。 この記事ではよく遭遇するキャッシュ設計の問題とその回避策について解説します。 Cache penetration DBに存在しない値を検索したときに、DBから返された空の結果をキャッシュしない場合に発生するシナリオです。 このシナリオではDBに存在しない値を繰り返し検索することにより、その値がキャッシュされていないため検索ごとにDBへのアクセスが必要になってしまいます。 存在しない

    開発者が知るべきキャッシュ設計でよく遭遇する問題
  • アイヌ語仮名「ㇷ゚」に対する正規表現の罠

    導入 アイヌ語は日語と異なり、閉音節(子音で終わる音節)も存在するので、表記の際音素文字であるラテン文字なら、そのまま p, t, k, m, n, s, r などの子音文字を後ろの付ければ良いわけなので、アイヌ語ローマ字表記では、何も問題が生じない。しかし、元々開音節言語である日語に特化したカタカナのような仮名文字で表記する際、鼻音 n は「ン」でなんとかなる(実はそれでもまずい事になっているけどここでは割愛する)が、p, t, k, m, n, s, r, h はどうしようもないので、特殊の捨て仮名(小書き仮名文字)を利用することになっている。 具体的には以下のような特殊仮名文字(通称 アイヌ語仮名)である。 ㇷ゚ -p ッ -t ㇰ -k ㇺ -m ㇱ -s ㇻ -(a)r, ㇼ -(i)r, ㇽ -(u)r, ㇾ -(e)r, ㇿ -(o)r お分かり頂けただろうか… 問題 r

    アイヌ語仮名「ㇷ゚」に対する正規表現の罠
  • ソフトウェア設計についての原則や法則についてまとめてみた

    ソフトウェア設計について、YAGNIやSOLIDなど多くの原則・法則があることが知られていますが、その解釈にはぶれが存在することが多いです。そこで、特に有名なものあるいは有用と感じることが多いものをいくつかピックアップして、その解釈やトレードオフについてまとめてみました。 注意としては、SOLIDが入ってることからわかる通り、主にOOPに関する文脈になります。また、各原則の定義については概ね知っている前提で書いているのであまり初学者向けの記事ではないかもしれませんのでご承知おきください。 YAGNI(You ain't gonna need it.) YAGNIは、予測による実装が実際に役立つことは少ないという経験則から生まれた原則です。 一般にオーバーエンジニアリングが利益をもたらすケースは限定的で、どちらかというとプロジェクトに害を与えることが多いとされています。YAGNIは日々状況の

    ソフトウェア設計についての原則や法則についてまとめてみた
  • ハーバード大のプログラミング講座を日本語化 無料で学べる「CS50.jp」公開

    米ハーバード大が無償公開しているプログラミング入門講座を日語に訳したWebサイト「CS50.jp」が公開された。プログラミング教育ベンチャーのLABOTが、「コロナ禍などで大学のキャンパスの環境が不安定になる中、多くの学ぶ意欲がある学生に、良質な教材に母語でアクセスしてほしい」と翻訳作業を進めてきたという。 公開したのは、ハーバード大コンピューターサイエンス学部のデビッド・J・マラン教授が、無料オンライン教育サービス「edX」で公開している人気講座「CS50」のうち、コンピュータサイエンス入門と、PythonJavaScriptを使ったプログラミング講座を日語訳したもの。YouTubeの英語教材とあわせ、日語のテキストで学べる。 CS50は、非営利で再配布・改変可能なクリエイティブ・コモンズライセンス(CC BY-NC-SA 4.0)で公開されており、非営利なら改編や再配布が可能だ

    ハーバード大のプログラミング講座を日本語化 無料で学べる「CS50.jp」公開
  • マイクロソフト発のオープンソース言語「TypeScript」、生みの親が語る開発当初や背景

    今やTypeScriptはウェブアプリ開発時に最初に検討される言語となっているが、開発が始まった2010年頃は、まだオープンソースに恐れを抱いていたMicrosoft文化のなかで、ゆっくりと歩を進めていく必要があった。 TypeScriptの共同創案者であり、デンマークのソフトウェアエンジニアであるとともにMicrosoftのテクニカルフェローも務めているAnders Hejlsberg氏は米ZDNetに対して、Steve Ballmer氏が同社の最高経営責任者(CEO)だった2010年に、JavaScript開発者の心をつかむ唯一の道はオープンソース戦略だという決断をチームが下した際のことを語ってくれた。 Ballmer氏は2001年に、LinuxMicrosoftの知的財産すべてを脅かす「ガン」だと発言しており、Microsoftの幹部らは2010年時点でも、オープンソースが依然とし

    マイクロソフト発のオープンソース言語「TypeScript」、生みの親が語る開発当初や背景
  • 「Unity」の有料学習リソース“Unity Learn Premium”がすべてのユーザーに無償開放/業界で必要とされる3DやVR/AR、AIの専門知識を広く・深く学べる

    「Unity」の有料学習リソース“Unity Learn Premium”がすべてのユーザーに無償開放/業界で必要とされる3DやVR/AR、AIの専門知識を広く・深く学べる
  • 【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ

    システム開発の世界において「技術的負債Technical Debt)」は繰り返し話題になり、しばしば炎上しています。 技術的負債という概念の生みの親は Ward Cunningham (ウォード・カニンガム)です。彼は 1992 年にオブジェクト指向プログラミングの国際カンファレンス OOPSLA '92 の Experience Report でコードの初回リリースを負債に例えました("Shipping first time code is like going into debt")。 Ward Cunningham はソフトウェアの世界に多くの貢献を果たしてきました。Wiki の発明者であり、XP と TDD の父 Kent Beck の師匠のような存在であり、建築の世界の「パタン・ランゲージ」を Kent Beck と共にソフトウェアに輸入した人であり、「アジャイルソフトウェア開

    【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ
  • ソースコードブランチ管理のパターン - Martin Fowler's Bliki (ja)

    https://martinfowler.com/articles/branching-patterns.html 最新のソース管理システムには、ソースコードのブランチを簡単に作成できる強力なツールが用意されています。しかし、最終的にはこれらのブランチをマージしなければならず、多くのチームは混み合ったブランチに対処するのに膨大な時間を費やしています。複数の開発者の作業をインテグレーションし、番リリースまでの道筋を整理することに集中して、チームが効果的にブランチを利用できるようにするためのパターンがいくつかあります。全体的なテーマとしては、ブランチを頻繁にインテグレーションし、最小限の労力で番環境に展開できる健全なメインラインを作ることに注力すべきだということです。 ベースパターン ソースブランチング ✣ メインライン ✣ 健全なブランチ ✣ インテグレーションパターン メインラインイン

  • SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜 - Qiita

    SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜JavaScriptRailsJWT認証React SPAのログイン周りについて、「これがベストプラクティスだ!」という情報があまり見当たらないので、様々な可能性を模索してみました。 いろいろな状況が想定され、今回記載する内容に考慮の漏れや不備などがありましたら是非コメントでご指摘いただきたいです!特に「おすすめ度:○」と記載しているものに対しての批判をどしどしお待ちしております! この記事でおすすめしているものであっても、ご自身の責任で十分な検討・検証の上で選択されてください。 前提 想定しているAPIは、 ログイン外のAPIにはPOST/PUT/DELETEのものがなく、GETのみ GETのAPIにはDBを更新するなどの操作がない とし、そのためログイン外では

    SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜 - Qiita
  • Serverless Components はオレたちの未来を劇的にスケールさせるか - Qiita

    Serverless.inc 社より、Serverless Components がついに GA されました。 近年のアプリケーション開発では、いくつかの SaaS を組み合わせることで超高速に開発を行うことができます。例えば「認証は Auth0、ホスティングは Netlify、バックエンド APIAWS Lambda を使用する」といった具合です。このように複数のサービスを組み合わせることで、Undifferentiated Heavy Lifting な作業を排除できます。開発者は価値を生み出すビジネスロジックにのみ集中できるようになるのです。 以下はサーバレスアーキテクチャの例です。複数の SaaS を組み合わせて構築しています。 SaaS を組み合わせるだけで、一定の機能群を作り上げることができる時代になりました。しかし、それにしても複雑な管理は残ります。アプリケーション開発

    Serverless Components はオレたちの未来を劇的にスケールさせるか - Qiita
  • 圏論とプログラミング / Category Theory and Programming

    シンポジウム「圏論的世界像からはじまる複合知の展望」@慶応大学 (Jan 25, 2020) http://www.inter.ipc.i.u-tokyo.ac.jp/symposium.html 「圏論とプログラミング」発表スライドメモ - Qiita https://qiita.com/inamiy/items/9af1da1faec22cd968f0 Video: https://www.youtube.com/watch?v=Ua6NE48_-1s

    圏論とプログラミング / Category Theory and Programming
  • テスト駆動開発から証明駆動開発へ #JTF2019 / July Tech Festa 2019

    July Tech Festa 2019 で使用したスライドです。 近年、テストを書く文化は広く普及しており、開発フローにおいて自動テストを組み込むことはもはや常識となりました。しかしよく考えてみると、有限個のテストケースが保証しているのは、所詮「特定の有限個の入力に対する出力」にしか過ぎません。では「あり得る全ての入力」に対してプログラムの性質を保証することは果たして可能でしょうか? この問いに対する答えのひとつが「定理証明」と呼ばれる手法です。定理証明では、数学的な「証明」をプログラム上でエンコードすることにより、真に「全ての入力」を扱うことができます。セッションではこの定理証明を取り上げ、従来のテストとの考え方の違いや具体的な適用方法について、サンプルを交えつつ解説します。 イベント概要:https://2019.techfesta.jp/speakers#A10

    テスト駆動開発から証明駆動開発へ #JTF2019 / July Tech Festa 2019
  • スーパーマリオのジャンプのアルゴリズム - Qiita

    先日、気持ちのいいジャンプを目指してというQiitaの記事を見かけました。記事中では、マリオのジャンプについても触れられています。マリオというと、マリオブラザースやスーパーマリオブラザース等々、色々あるのですが、これはおそらくスーパーマリオブラザースの事だと思われます。ジャンプアクションゲームといったらスーマリですね。 そのマリオのジャンプの仕組みは「マリオの速度ベクトルを保存しておいて座標を計算するんじゃなくて~」と書かれていて、別サイトのブログへのリンクが張られています。 マリオのジャンプ実装法とVerlet積分 ただ、この記述については不正確であるという別のブログもあったりします。 マリオの完コピvol.28 ジャンプの解析と修正 ホントのところはどうなんでしょうか?世界で最も有名なゲームジャンプがどのように処理されているのか気になったので調べてみることにしました。 原典にあたる

    スーパーマリオのジャンプのアルゴリズム - Qiita
  • Rustはこうやって勉強するといいんじゃないか、という一例 - Qiita

    前置き これはRustを学びたいけどどうやって勉強しようかという人向けの記事です。 自分の経験からここ先に読んどきゃよかったとか、ここ読んどけばもっと楽だったとかそんなのをいろいろまとめてあります。もう一度Rustを学び直すならどうするかなー、と考えながら書きました。なお大半が英語の資料です。 英語か・・・と思った方はyukiさんのRust を始めるための資料集もどうぞ。 対象はRubyPythonなどの高レベル言語をすでに習得してる人。 前準備 Rustの主な特徴を知っておきましょう。Rustは他の言語にない考え方や特徴が多いので先に知っておくと良いです。とりあえずinto_rust() : screencasts for learning Rustを全部見ましょう 基礎知識の習得 The Bookと呼ばれる公式の入門書があります。まずこれを読みましょう。日語訳もありますが英語版のほ

    Rustはこうやって勉強するといいんじゃないか、という一例 - Qiita
  • プログラマーのための圏論(上) - bitterharvest’s diary

    『プログラマのための圏論』はこれまでの分をまとめてPDFファイルにしました。参考にしてください。

    プログラマーのための圏論(上) - bitterharvest’s diary
  • [速報]「Kotlin」がAndroidの正式な開発言語に。開発元のJetBrainsとGoogleが「Kotlin財団」の設立も計画。Google I/O 2017

    [速報]「Kotlin」がAndroidの正式な開発言語に。開発元のJetBrainsGoogleが「Kotlin財団」の設立も計画。Google I/O 2017 Googleが5月17日(日時間5月18日未明)から開催中の年次イベント「Google I/O 2017」。初日の基調講演では、新サービス「Google Lens」の紹介や「Google Home」の日発売、「Cloud TPU」や「TensorFlow Lite」の発表、新興国向けのエントリクラスとなる「Android Go」の発表などが相次いで行われました。 しかしその中でも会場からもっとも大きな歓声があがったであろうと思われるのが、プログラミング言語の「Kotlin」がAndroidの正式な開発言語になると発表されたときでした。 「Kotlinは完全にAndroidのランタイムと互換性があり、既存のコードとも相互運

    [速報]「Kotlin」がAndroidの正式な開発言語に。開発元のJetBrainsとGoogleが「Kotlin財団」の設立も計画。Google I/O 2017
    akasata
    akasata 2017/05/18
    ふむふむ
  • null安全でない言語は、もはやレガシー言語だ - Qiita

    これらは、表中の「リプレース対象言語」に挙げたように、多くのメジャー言語に対する代替手段でもあります。 Java の代わりには Kotlin や Ceylon が、 JavaScript には TypeScript や Flow が、 Objective-C には Swift が、そして PHP には Hack があります。 Python は自身に null 安全 を取り込みました。 Crystal は直接 Ruby と連携して使えるわけではありませんが、 Ruby 風の null 安全 な言語です。 RustC++ の代替を目指して開発され、 Firefox の一部で C++ のコードを置き換えるのに使われています [^100] 。 null が引き起こしてきた数々の問題を考えると、僕は、 null 安全 は GC (やその他の安全なメモリ管理手法)に匹敵するプログラミング言語の進

    null安全でない言語は、もはやレガシー言語だ - Qiita
    akasata
    akasata 2016/11/08
    Rubyはnilを扱う手段は豊富だけど、静的型チェックが難しい。yarv2llvmとかソフトタイピングな型推論もあったけど、言語に何らか制約を加えないと難しそうなので、サブセットで対応する方向になってるんだろうか
  • オブザーバーパターンから始めるRxSwift入門 - Qiita

    はじめに Rx とは C# 発祥の Reactive Extensions のことで、様々な言語に移植されています。RxSwift は Rx の Swift 版です。 様々な言語に移植されているのは、それだけ有用だからです。しかし Rx は有用である一方で学習コストが高く、導入の敷居が高いとみなされがちです。 ネットで Rx について検索すると、Reactive とは・・・関数指向うんたら・・・と、そりゃオブジェクト指向プログラマにはとっつきにくそうに感じるわな、と思うものが多いです。 ここではオブジェクト指向設計で一般的に利用されるオブザーバーパターンを置き換えるところから、Rx の利用方法を解説してみます。 以下のようにシリーズになっていますが、この記事の内容だけでも十分役に立つと思います。 オブザーバーパターンから始めるRxSwift入門 RxSwift入門(2) 非同期処理してみる

    オブザーバーパターンから始めるRxSwift入門 - Qiita
    akasata
    akasata 2016/07/07
    どこかのタイミングでRx触ってみたいが・・・
  • 筋の悪いコードレビュー - yashiganiの英傑になるまで死ねない日記

    たまにコードレビューのしかたを紹介するエントリーを目にすることがある。その中でも反響があるものは実際によくまとまっており、なるほどと感心することもよくある。しかし、中にはコーディングスタイルやイディオム、ちょっとしたテクニックを使うように目を光らせるように助言されているものがある。誤解を恐れずに書くと、それらのトピックは無視できるようなものばかりであり、そのような指摘ばかりつけるのはあまり褒められたものではないなと感じる。これは私自身にも言えることだが、瑣末ことを指摘しすぎてしまうあまり、質的な議論が霞んでしまうことがままある。レビュイーにとって、指摘が学びになることは確かに存在するのだが、コードレビューの目的はあるべき実装を議論するものであり、老婆心からそれを繰り返すことは必ずしも良いレビューとは言えない。 では、当に良いコードレビューとはなにか。それは、コーディングスタイルのような

    筋の悪いコードレビュー - yashiganiの英傑になるまで死ねない日記
    akasata
    akasata 2016/07/07
    ふむふむ
  • 論理削除がデータを汚している - jfluteの日記

    ベクトルの違うデータ まあ、それは事実。 ただ、履歴をそのまま残したいということも事実。 いちいち削除履歴テーブルなんて作ってられないのも事実。 ※ここでの論理削除は、復活する論理削除じゃなく、物理削除の代わりとして履歴のための論理削除を指します。(復活する論理削除って、そもそも削除とは言えないって気も...) 来、論理削除されたデータって... そのテーブルの定義するデータとはベクトルの違うデータ である考えます。 でも、わざわざ削除されたデータを保持するテーブルを作ると、それはそれで面倒なのでそのまま同じテーブルに持ったままにする。その方が扱いが簡単なことが多いから。削除フラグを true にするだけで済むから。 個人的には、業務上重要なテーブルに関しては、しっかりと「削除履歴テーブル」を用意して、体のテーブルには常に有効なデータだけがある状態の方が、データメンテもプログラムも遥か

    論理削除がデータを汚している - jfluteの日記
    akasata
    akasata 2015/03/02
    たしかにフラグで(日時入れるやり方でも)論理削除入れるとだいたい後悔してる気がするな。。。