タグ

設計に関するma7eのブックマーク (19)

  • SEだが正直noteのやらかしを見てほっとしている

    https://twitter.com/clockmaker/status/1294213347898843136 これ見たけどやらかしが低レベルすぎやしないか、ヒューマンエラーのレベルじゃないだろ とりあえずRails触れますって奴ととりあえずNuxt触れますって奴がガチャガチャやった結果にしか見えねえよ API設計が無茶苦茶だし、コードレビューもろくに実施されてねえだろうし、試験の観点はどうなってんだよって話だろ やっぱ優秀なエンジニアなんてどこにもいねえんだな、安心して寝るわ

    SEだが正直noteのやらかしを見てほっとしている
  • 他人のコードや設計を見て1番これはあり得ないだろと思う実装はありますか?

    回答 (9件中の1件目) qmailという、極端にバグが少なく、安全で高速なSMTPのサーバーがあります。いまはシェアを落としていますが、数年間放置しておいても安定して長期間動くので、まだまだ現在も使われています。 the Internet's MTA of choice このCソースはすごいですよ。putsやprintf, fopenなどの標準Cライブラリの関数は安全ではないという理由で使わず、すべてsubstdioという、stdioのサブセットを独自実装しています。こんなことは普通はしないですね。 作者のDJB氏は、プログラムは全部のパターンをテストできなければならない。全部の...

    他人のコードや設計を見て1番これはあり得ないだろと思う実装はありますか?
    ma7e
    ma7e 2019/10/08
  • SQLアンチパターンもりもりDBを設計しよう! - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 概要 名著SQLアンチパターンを読み終えたので、それの復習のために悍ましいデータベースを作ろうと思った。 まず前半では、SQLアンチパターンを意図的に盛り込み、目も当てられない酷い設計をします。 そのあとリファクタリングを行なったER図に書き直していきます。 なお、真面目に書くと参考書の丸写しになってしまうので、この記事は アンチパターンもりもりのER図を見て嫌悪感を学習し、設計に役立てようという趣向のもと、詳しい説明は省きます。 とても良いなので読んでください。 想定するシステムの概要と状況 目的において適切かはわかりませんが、とり

    SQLアンチパターンもりもりDBを設計しよう! - Qiita
  • ひどいコードをメンテしてきたからこそ実感する、良いコードや良い設計の大切さ - give IT a try

    はじめに 先日、社内で「良いコードの書き方やお作法、プログラミングの原則って、どうやったら身に付くんだろうねえ?」という話になりました。 もちろん、「を読んで勉強する」っていのも勉強法のひとつなんですが、そもそも、もっと強烈なモチベーションがないと、必死になって良いコードの書き方やプログラミングの原則って勉強できないのでは?なんて思ったりします。 強烈なモチベーションというのは、たとえば、 いったい何なん!?このスパゲティコードは!!! なんでこんなコードを俺がメンテしなきゃあかんの!!?? あ~、もう最悪や!!俺はこんなコード、絶対に書かへんぞ!!!! っていうぐらいのモチベーションです。 というか、これは単純に僕のケースですね、はい。 幸い、ソニックガーデンに入ってからは、周りのプログラマがみんなちゃんとしているので、そんな思いをすることはほぼなくなりましたが、前職、前々職ではそんな

    ひどいコードをメンテしてきたからこそ実感する、良いコードや良い設計の大切さ - give IT a try
  • コードを書く際の指針として見返すサイトまとめ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    コードを書く際の指針として見返すサイトまとめ - Qiita
  • String非推奨の勧め - minghaiの日記

    Javaプログラムにおいて,クラスを作ることを厭う人たちが多い. そのような人たちの多くはデータを桁数依存にて構造が存在する文字列にして扱うことを好む. しかしJavaにおいてStringを解析することは多くの例外の原因となり,ひいてはシステム障害の原因となることが多い. またStringの演算は重く,Stringはメモリ消費量が多い. この文章では,Java利用システムにおいてStringの濫用を戒め,適切な型の利用と適切なクラス設計を行うことを勧める.*1 Stringの問題 多発する例外 Stringを利用することにより発生する例外には次のものがある. NullPointerException StringIndexOutOfBoundsException IndexOutOfBoundsException IllegalArgumentException UnsupportedEn

    String非推奨の勧め - minghaiの日記
  • もう保守されない画面遷移図は嫌なので、UI Flow図を簡単にマークダウンぽく書くエディタ作った - Qiita

    はじめに Webサービスやアプリを企画したり、立ち上げたりする際にプロトタイピングツールや、ExcelPowerpoint、Illustraterなどを駆使した謎のファイルで画面遷移図を描くことがある。 こういう図を元に仕様を決めて行って、サービスを作っていくのは以下の点で困る。 画面遷移図が保守されない。 書くのが非常に面倒くさい ユーザーのモチベーションの流れが追いづらく、見た目ばかりに注目してしまうものになりがち マシンリーダブル(ソフトウェアで構造を取り出せない)でない。 このような欠点があってどうにも扱いづらい。 そんなわけで、markdown風のテキストから簡単に画面遷移図を描けないかなとコンパイラを作成し、次にそれをインタラクティブに編集できるエディタを作成した。 UI Flows図について 画面遷移図的なものを書く際に、僕が個人的につかっていた表現方法として、UI Flo

    もう保守されない画面遷移図は嫌なので、UI Flow図を簡単にマークダウンぽく書くエディタ作った - Qiita
  • テスト駆動開発(TDD)はもう終わっているのか? Part 1 | POSTD

    後編を公開しました(2014/10/8) これは、テスト駆動開発(TDD)とTDDがソフトウェア設計に与える影響についてKent Beck、David Heinemeier Hansson、および著者の3人で行った一連のディスカッションの議事録です。 ディスカッションに至った経緯 あるセンセーショナルな発言とブログ記事が発端となり、お互いの見解と経験について理解を深める目的で、話し合いが持たれました。 この会話のきっかけとなったのは、 DavidがRailsConfで行った基調演説です。 彼はRailsコミュニティでTDDおよびユニットテストへの不満を表明しました。 程なくして、彼はいくつかのブログ記事を公開しましたが、そのうちの最初の記事で “TDDは終わった” と宣言したのです。 それから2~3日後、Davidのその後の記事について私がタイプミスの修正を送ったところ、 Davidは彼の

    テスト駆動開発(TDD)はもう終わっているのか? Part 1 | POSTD
  • コード内で「現時刻」を気軽に取得してはいけない | Nekoya press

    日付を扱う処理についていろいろまとめたついでに、わりと簡単なことだけど知らないと落とし穴にハマる系のネタを。 日頃いろいろな処理を書いていて、現時刻を扱うこともは少なくないはずです。ですが、これを適当にやっていると困ることが多々あります。 実行中に「現時刻」を元にした処理がい違う 例えばこんなコード。ログ集計とかやってるイメージです。 class Analyzer(object): def analyze(self): logfile = datetime.datetime.now().strftime('my_log_file.%H') self.save(self.analyze_logfile(logfile)) def save(self, result): now = datetime.datetime.now() self.result[now.hour] = result

  • いま日本人の若手技術者は「ここになぜコンデンサーが必要なのか」を理解せずに、「このコンデンサーを外してはいけない」ということだけを知っているのです。しかし、台湾や中国の技術者は「なぜ必要なのか」をきちんと理解しています。設計する技術力は、いま日本ではなく、台湾や中国にあるのです。

    いま日人の若手技術者は「ここになぜコンデンサーが必要なのか」を理解せずに、「このコンデンサーを外してはいけない」ということだけを知っているのです。しかし、台湾中国技術者は「なぜ必要なのか」をきちんと理解しています。設計する技術力は、いま日ではなく、台湾中国にあるのです。 「エンジニア技術力がすべて」iPhoneを開発するAppleエンジニアが語る、キャリアの作り方 | TechPeople (via leftsidestory) 胸に刺さる. 電子回路にキャパシタ(コンデンサー)をばらまかないといけない理由を理論的に学生に説明することは出来る.どの場所に,どの容量を,というのもある程度理論化は出来る. ただ,あるラインを超えると,大型船の共振を止めるとか,ビルを爆破解体するとか,おなじみの理論+直観+経験(理論化されていないがパタンマッチングによる推測が可能な領域)の世界

    いま日本人の若手技術者は「ここになぜコンデンサーが必要なのか」を理解せずに、「このコンデンサーを外してはいけない」ということだけを知っているのです。しかし、台湾や中国の技術者は「なぜ必要なのか」をきちんと理解しています。設計する技術力は、いま日本ではなく、台湾や中国にあるのです。
  • 基本設計を分担してはいけない - 設計者の発言

    プロジェクトメンバーが無駄に多いのが、日型SIの特徴のひとつである。「工数を人数で割れば工期が出る」と考えることが間違いであることは、ブルックスの著書「人月の神話」によって今から40年前に指摘されている。それにもかかわらず、相変わらず多くのプロジェクトで必要以上の人数が投入されている。 私がとくに不思議に思うのが、基設計を何人もの要員で分担するやり方だ。DB設計と機能設計と業務設計の担当を分けるとか、サブシステム毎に担当を分けるといった体制がしばしば敷かれる。詳細設計の段階でというのならまだわかるが、基設計でそれをやってはいけない。 なぜか。業務システムにはアーキテクチャ(意図された構造)が求められる。そして、そこに含まれる膨大な定義要素は、統一感や一貫性を保ち、かつMECEな形で切り出されなければいけない。複数の要員で分担などすれば、それらの課題が一挙に難しくなる。また、DB構成と

    基本設計を分担してはいけない - 設計者の発言
  • 退職者が極めて少なく、ほとんど定時で帰れるシステム開発会社、その秘密とは。

    何かと長労働時間、低賃金と騒がれがちなソフト開発であるが、優れた会社も数多くある。100名程度の普通のソフト開発会社であっても ・ほとんど定時で帰宅できる ・有休取得率8割 ・残業代100%支給 ・離職率は5%程度 と、まっとうな企業もそれなりに存在する。 では、いわゆる長時間労働、残業代未払い、高離職率の開発会社、いわゆる「ブラックのIT企業」と、彼らのようなIT企業は何が異なるのだろうか。 私の観察では、そういった会社は、以下において優れている。 1.経営者の営業力・交渉力 経営者および役員の営業力が高い。また、プロジェクトの途中での問題には率先して彼らが自ら顧客と交渉する。 このサポート体制のおかげで、技術者のリーダー陣は安心して仕事をできる。また、リーダー陣は経営陣の問題解決を見て、その方法を学ぶので、問題になるプロジェクトが少ない。 2.高いエンドユーザー率 営業力が高いので、全

    退職者が極めて少なく、ほとんど定時で帰れるシステム開発会社、その秘密とは。
    ma7e
    ma7e 2015/10/21
    退職者が極めて少なく、ほとんど定時で帰れるシステム開発会社、その秘密とは。
  • Neverbleed - RSAの秘密鍵演算を別プロセスに分離する話

    機能毎にプロセスを分割し、それらを別個の権限のもとで実行することで、脆弱性があった場合の影響を抑え込むというのは、一定以上の規模をもつプログラムでは、しばしば見られるデザインパターンです。 qmailは、そのような設計がなされたメール配送デーモンとして名高いですし、OpenSSHもまた、認証プロセスと通信プロセスを分離することで、外部との通信を担当するコードにバグがあったとしても、ルート権限が奪われないように設計されています(参照: Privilege Separated OpenSSH)。 一方で、OpenSSLにはそのような権限分離は実装されていません。Heartbleedの際にサーバの秘密鍵が漏洩したのも、秘密鍵の取り扱いと、その他の通信の取り扱いを同一のメモリ空間の中で行っていたからだと考えることができます。 ないのなら、自分で作ればいいじゃない…ということで作りました。それが、N

  • 本当に有意義なエラーメッセージを書くには | POSTD

    想像してください。あなたは今、オフィスにいます。周りとは仕切られた個別スペースです。今週は、近々新たに展開する予定の製品を紹介するために多くの時間を割いてきました。疲れが溜まり、不機嫌ぎみになっています。今はようやく近づいた週末が待ち遠しくて仕方ありません。 しかしその前に、新製品を紹介するホームページがWindows 10で正常に動かくかどうかを試してみなければなりません。あなたは問題ないはずだと信じています。あなたが信頼を寄せているMacには、Windowsを問題なく実行できるソフトもインストールされています。 ソフトを起動してみると、丁寧にもWindowsがポップアップ通知で可能なアップデートがあることを知らせてくれます。もちろんアップデートを開始するため、あなたは了承します。 すると、こんなものを目にするのです。 訳:何かが発生しました。 何かが発生。 新製品の準備のため期限が迫っ

    本当に有意義なエラーメッセージを書くには | POSTD
  • Slerがawsで運用してきた話

    2. 誰? 佐藤 瞬 NRIネットコム株式会社 福島県会津若松市出身 Amazon Web Services パターン別構築・運用ガイド 書きました Facebook https://www.facebook.com/sato.shun.31 3. Amazon Web Services パターン別構築・運用ガイド AWSの中で もっとも分厚いです ※詳しくはこちら JAWS-UG初心者支部 AWS書籍活用術 http://www.slideshare.net/takurosasaki/jawsug- beginnersbook

    Slerがawsで運用してきた話
  • WebAPIリクエスト仕様書としてcurlコマンドのご提案 - Qiita

    WebAPIの仕様を記述する方法はいくつかあると思う。 普通に日語で記述する JSON Hyper-Schema、WADL、RAML、Swaggerなどを使う 仕様書の代わりにプログラムを書く HTTPメッセージそのものを記述しておく でも、文法にばらつきがあったり、読みにくかったり、ツールのセットアップが面倒だったり、どれもイマイチな所があって、手軽な方法が欲しいと思っていた。 何気なくcurlコマンドのオプションを調べていたら、「もうこれでAPIドキュメント扱いにしちゃえばいいんじゃね?」と思えてきたのでメモしておく。 curlコマンドのおさらい curlコマンドはlibcurlの付属コマンドで、最近のUnix系OSなら大抵最初から入っていると思う。コマンドの詳細はmanを読んでいただければ。 cURL - How To Use (マニュアルページ日語訳) curlコマンドのオプシ

    WebAPIリクエスト仕様書としてcurlコマンドのご提案 - Qiita
  • MySQLテーブル設計入門

    行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada

    MySQLテーブル設計入門
  • Re: 論理削除はなぜ「筋が悪い」か - Blog by Sadayuki Furuhashi

    Kazuhoさんの論理削除はなぜ「筋が悪い」かを読んで。 UPDATEが発生しないテーブルならば、削除フラグを使った実装手法でも現在の状態と更新ログを別々に表現でき、結果として効率と過去の情報を参照できるメリットを簡潔に両立できるのではないか、という話。 大前提として全く同意なのだけども、今あるテーブルにdeleted_atを足すだけで、過去のレコードを復旧可能なようにしたい>< みたいに思っちゃった僕のような人間が実際に取るべき実装手法は何か、あるいは、それを想定して今やっておくべきテーブル設計はどういうものか!?というのが最後の疑問。 まずUPDATEがなければ、immutableなマスタ、更新ログ、「現時点のビュー」の3テーブルは、例えば次のようになる(PostgreSQLの場合): -- immutableなマスタ。 create table records ( id serial

    Re: 論理削除はなぜ「筋が悪い」か - Blog by Sadayuki Furuhashi
  • 論理削除はなぜ「筋が悪い」か

    「論理削除が云々について - mike-neckのブログ」を読んで。 データベース設計において、「テーブルの書き換えをするな、immutableなマスタと更新ログによって全てを構成しろ」というこの記事の主張はモデリング論として全く正しい。 だが、残念なことに、ディスクやメモリが貴重な資源だった時代の技術であるRDBは、そのようなモデリングに基づいて設計されたデータベースには必ずしも適していない。 第一の問題は、RDBに対してなされる様々な「更新」(トランザクション)は不定形(どのテーブルをどのように修正するかはアプリケーション依存)だという点。不定形な「更新」を時系列にそってRDBに記録していくのは、設計と並走性の点において困難あるいは煩雑なコーディングが必要になる(というか、そのような「イベント」による「変化」はREDOログに書き、その更新された「状態」をテーブルに反映していくというのが

  • 1