タグ

ブックマーク / qiita.com/kawasima (20)

  • 安定性のパターン大全 (とその実装) - Qiita

    Cognitect社のNygardさんが10年ぶりに改訂したRelease It! 2nd Editionがまもなくリリースされます。内容は現在のベータ5版で全て書ききっておられるようなので、是非読んでみてください。 https://pragprog.com/book/mnee2/release-it-second-edition その中から4章の安定性パターンの概要をご紹介し、実際JavaのFailsafeライブラリを使った実装例を示したいと思います。 安定性のパターン Stability Patterns 分散システムや後続をブロッキングしてしまう重い処理は、システム全体がスローダウンしたり、無応答になってしまう危険にさらされています。クラウド時代になって、これらの安定性を保つための設計はより強調されるようになりましたが、わりと昔から様々な工夫がされてきたものでもあります。以下、Rel

    安定性のパターン大全 (とその実装) - Qiita
  • GitHub English Challenge Cheat Sheet - Qiita

    GitHub上の実際のコミットメッセージやIssueのやりとりをみて、チートシート作りました。 共通的なこと コミットメッセージやIssueのタイトルは、主語省略し、1文で書き行末ピリオドは付けない 動詞は現在形・過去形のどちらも同じくらいの頻度で見られるが、どちらかに揃える。 コミットメッセージを書く Japanese English

    GitHub English Challenge Cheat Sheet - Qiita
  • 日付FROM-TOのデータを穴埋めする - Qiita

    こんな形のテーブルは、「今日有効な料金設定はどれだっけ?」をとってくるには問題ないですが、月次データ集計などで他のイベントテーブルとジョインして処理しようとすると面倒です。 OracleにはMODEL句というあまり現場で使われているのを見かけない機能があり、これを使うとダミーのView的なものが簡単に作れます。 http://codezine.jp/article/detail/3091 年分のカレンダーは以下のようなSQLで作れます。 SELECT c1 FROM dual MODEL dimension by (1 as rn) MEASURES (sysdate as c1) rules iterate (365) (c1[ITERATION_NUMBER]=SYSDATE-ITERATION_NUMBER) ORDER BY 1

    日付FROM-TOのデータを穴埋めする - Qiita
  • チーム力向上のためのエトセトラ - Qiita

    この半年間、久しぶりに開発チームのマネージャ的な立場もやることになったので、「ふつうの受託開発チームのつくりかた」以来、工夫したことをまとめておきます。「ふつうの受託開発チームのつくりかた」未見のかたはぜひそちらも見てみてください! チームに名前を付ける 私の受け持つチームは伝統的に「ラスカル」の名を付けるようにし、チームのアイデンティティを保つようにしています。チームメンバも当は出来るだけ長く担当してもらいたいのですが、大きなSIerだとそれが難しいこともあります。 通常のプロジェクトチームだと、サブシステム名くらいで呼ばれることでしょう。これは、そのプロジェクトが終わったらチームも終わり、で帰る場所も無くなることを意味しますし、愛着をもって働くことは難しくなります。 メンバが多少入れ替わっても、チームは継続する"モーニング娘。方式"であれば、またいつか戻ってくることもできるし、OBと

    チーム力向上のためのエトセトラ - Qiita
  • マイクロサービス分割におけるモデリングの観点 - Qiita

    マイクロサービスアーキテクチャの5章は、モノリスをどうやって分割していくかが焦点です。サービス間での依存関係をできるだけ断つために、共有データや共有テーブルを避け、分割していくやり方が書かれています。 モデリングの観点からは、記述が不足なところがあって、現場のモデルに照らし合わせて考えることが難しいので、これをもう少し掘り下げて考えてみます。 データモデリングの手法としては、拙作のイミュータブルデータモデルが前提となりますので、未見の方はそちらをまずご参照ください。 エンティティは、リソース系とイベント系の2種類に大別するので、これらの関連の種類で言うと、R-R, E-R, E-Eの3つあります。これを順に分割するとどうなるかを考えます。 これらの呼び方はTM手法に準じます。 http://tmdmaker.osdn.jp/doc/ch08.html リソース-リソース(R-R) 強い依存

    マイクロサービス分割におけるモデリングの観点 - Qiita
  • マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita

    先日、マイクロサービスの呼び出し方として、オーケストレーションとコレオグラフィについて書きましたが、同じく4章では、どうHTMLを組み立てるかという問題が提起されています。 ここもやや難解なので、咀嚼を試みます。 課題設定 次のようなECサイトを考えることにします。そして、4つのマイクロサービスを合成して構成します。 商品カタログサービス ショッピングカートサービス ショップサービス リコメンドサービス API合成 無垢な気持ちで設計すると、各々のマイクロサービスがWeb APIのインタフェースをもち、XMLやJSONを返して、ECサイト側で、テンプレートエンジンなどを用いて、HTMLをレンダリングするという方式になるかと思います。 そして、この形式でマイクロサービスを利用するサイト(アプリケーション)が増えていくと次の図のようになります。 これには、次の3つの欠点があるとされています。

    マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita
  • マイクロサービスアーキテクチャにおけるオーケストレーションとコレオグラフィ - Qiita

    マイクロサービスアーキテクチャの4章にオーケストレーションとコレオグラフィという話があります。 マイクロサービスを使ってアプリケーションを組み立てる側の、サービスの呼び出し方の違いです。 「マイクロサービス的に作ってるよー」というシステムでも、ここに特に疑問を持たず、ふつうにWeb APIたちを呼び、受け取ったデータでHTMLをレンダリングするというオーケストレーション方式で作られているのが多いのではないでしょうか? Sam Newmanは、それだと呼び出されるサービス側がドメインモデル貧血症になりがちで、呼び出す側にロジックが集まっていくことになると、書籍の中で述べています。 いったいどういうことでしょうか? 書籍中の例をちょっと変えて考えてみます。 マイクロサービスアーキテクチャでECサイトを作る(オーケストレーション編) ECサイトをマイクロサービスアーキテクチャで作ることを考えてみ

    マイクロサービスアーキテクチャにおけるオーケストレーションとコレオグラフィ - Qiita
  • 【随時更新】JDK9の非互換ポイント - Qiita

    JDK9でいくつかImcompatibleな問題に直面したので、ここにGitHubのIssueから、各プロダクトで挙がっているJDK9の不具合ポイントをまとめていきます。 java.specification.versionの体系変更 JDK9からは、JEP 223にともない、バージョン番号の表記が変わりました。そして、システムプロパティjava.specification.versionの返す値も従来の「1.8」みたいな値から「9-ea」が返ってくるようになっています。 このため、HibernateValidatorでは、以下の箇所でArrayIndexOutOfRangeExceptionが出てしまっていました。 String[] specificationVersion = System.getProperty( "java.specification.version" ).spli

    【随時更新】JDK9の非互換ポイント - Qiita
  • OptionalとJavaにおけるsomeスレッディングマクロ的なもの - Qiita

    Java8で導入されたOptionalは、その使い方に関していまだベストプラクティスがないように見受けられます。 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 Optional#mapとsomeスレッディングマクロ 私はJavaが言語としてnullを許容しているので、Javaにおいては、頑張ってnullを無くそうとするのではなく、いかにしてnullとうまく付き合っていくかが重要だと考えます。 同様にClojureのプログラムでも、nilが頻繁に出てくるのですが、NullPointerExceptionはあまり発生しません。これは、Clojureネイティブな関数たちにおいては、オブジェクト指向ではないので、nilに対するメソッド呼

    OptionalとJavaにおけるsomeスレッディングマクロ的なもの - Qiita
  • [システム間連携]接続方向を逆転させるとうまくいく - Qiita

    システムAの更新内容を、別のサーバにあるシステムBにも反映させるためにデータ送る、というケースを考えます。 主流はWeb APIかMOMを使う方法かと思います。(俯瞰的な話は、20日目のこざけさんが書いてくれる、はず) しかし、A,B間で同時に一貫性を保たなくても良いケースは、企業間システム連携ではよくあります。 CAP定理でいうところの可用性+分断耐性をとりにいくパターンです。が、最大数秒程度で結果整合性は保ちにいきます。 システム間の接続 非同期ながら、ほぼリアルタイムでデータを反映していくので、応答性の高い接続手段が求められます。だが中間経路をHTTPでないプロトコルを通すハードルが高かったり、ファイヤーウォールなどで長時間接続を切られたりする問題があるので、私はよくWebSocketを使います。 だいたいの構成は以下のようになります。同期エージェント間をWebSocketでつなぎ、

    [システム間連携]接続方向を逆転させるとうまくいく - Qiita
  • 至高のファイルアップロード - Qiita

    システムエンジニアにとって頻出機能のひとつで、要件がモリッとしがちなファイルアップロードについてです。アップロードファイルもただの画像やPDFではなく、ExcelCSVファイルをアップロードして、中身を読み取ってデータベースに格納する、あれを対象とします。 標準的なファイルアップロードでの設計ポイント ファイルのアップロード機能を実装しようとなると、以下のような点の設計を考える必要があります。 同期? 非同期? タイムアウトのリスクがあれば、非同期にする ブラウザのタイムアウト 通信経路(プロキシやファイヤウォール)でのタイムアウト Webサーバのタイムアウト ユーザがレスポンス返ってこないので、処理を中止するリスク 非同期の場合の実行方式 Webサーバ内でスレッドを新規に作る or 別プロセスへ処理をディスパッチする 流量制御のためリクエストをキューイングする Progress 長時間

    至高のファイルアップロード - Qiita
  • 究極のファイルダウンロード - Qiita

    アップロードと比較するとタイトルは釣り気味なのですが、ダウンロードにまつわるパターンをまとめます。 ふつうのダウンロード アップロードほど考えなきゃいけないことは多くないですが、ハマりポイントはいくつかあります。 ファイル名 何も対策せず日語をファイル名にすると、当然のように化けます。

    究極のファイルダウンロード - Qiita
  • Shift_JIS文化からUTF-8への移行ガイド - Qiita

    まだまだ場所によってはShift_JIS文化は根強く、2015年が終わろうとしている現在でも、「ようやく我が社もUnicodeでシステムを作ることを考えるっ!」なんてところは多くあるかと思います。 そんな現場で、これまでJavaでShift_JISでシステム構築してきたSIer向けのUTF-8移行ガイドです。 文字長のチェック 文字長の入力チェックはShift_JISの世界では、半角文字は1バイト、全角文字は2バイトなので、以下のようなチェックロジックになっていたかと思います。 if (inputValue.getBytes("Windows-31j").length > 20) { errors.add("hoge", new ActionMessage("errors.maxlength", "ほげ", 10)); } UTF-8ではそれらの文字は、1バイト~3バイトで表されるので、バ

    Shift_JIS文化からUTF-8への移行ガイド - Qiita
  • Oracle DatabaseでのUnicode設計 - Qiita

    Oracleの場合、それぞれの型に別ののCharsetを指定することが可能です。ふつうにOracleをインストールすると、 NLS_CHARSET=AL32UTF8 NLS_NCHAR_CHARSET=AL16UTF16 になるかと思います。当然ながらNLS_NCHAR_CHARSETには、Unicode系のCharsetしか設定できません。(実際にはNLS_NCHAR_CHARSETに、AL16UTF16以外をセットしたことがないので、それ以外のときにどういう挙動になるか分かってません。) 実際にどの型でどのCharsetを使うかは、以下のSQLで見ることができます。(要sysオブジェクトへの参照権限) SELECT distinct(nls_charset_name(charsetid)) CHARACTERSET, decode(type#,1,decode(charsetform,

    Oracle DatabaseでのUnicode設計 - Qiita
  • セキュリティ監査で文句を言われないHTTPステータスコードの使い分け - Qiita

    最近はハンドリングしくてもいいや的な、入力改ざんで発生するバリデーションエラーをそのまま500のHTTPステータスで返すと、攻撃者が「なんか攻撃成功しちゃいそう」って思っちゃうとかなんとかで、監査的なところから「500はやめろ」って言われることがあります。 一理ある ということで、安易に500を返さない方法を考えてみます。 HTTPステータスコードにあまり馴染みのない方は、こちら…ではなく、こちらをまず読んでください。 HTTPステータスコードの使い分け基礎 400 まず、ユーザの入力値、データの状態によってエラーになるケースは 400 Bad Request とします。エラーメッセージを表示して再入力を促すHTMLページを返す、一般的な入力エラー系の遷移は200 OKを返しても、実用上問題はないかと思います。 ユーザの操作が原因で、サーバ処理がエラーになった場合も400で扱うのはおかしい

    セキュリティ監査で文句を言われないHTTPステータスコードの使い分け - Qiita
  • 業務システムにおけるロールベースアクセス制御 - Qiita

    RBACの基礎 業務システムの権限制御の基形はロールベースアクセスコントロール(RBAC)です。簡単化すると、以下のようなモデルです。 Subject(システムユーザ)は、複数のRole(ロール)を持っている。 Role(ロール)は、Permission(権限)のセットからなる。 Permission(権限)は、オペレーション(許可される操作)のセットからなる 具体的に、Redmineでの例をみてみましょう。 ユーザにはデフォルトで「管理者」「開発者」「報告者」のロールが割当可能である。 「報告者」ロールは、「Add Issues」の権限をもつ。 「Add Issues」の権限をもつユーザは、「Issueの新規作成」ができる。 このモデルをRedmineでは、以下のように表現しています。 Redmineは1人のユーザを、複数のプロジェクトに異なるロールでアサインすることができるので、上記

    業務システムにおけるロールベースアクセス制御 - Qiita
  • Webアプリ開発/テストのお供に『WAITT』 - Qiita

    Tomcat Launcherやtomcat-maven-pluginの融通の効かなさ加減に落胆し、waitt-maven-pluginを作ったわけですが、waitt-maven-pluginもtomcat7固定で環境や用途が限定されてしまっていたので、大幅に手を入れてプラッガブルなWAITTとして生まれ変わらせました。 WAITTとは Webアプリケーションをローカルで動作確認したり、テスト環境用に起動したりするためのMavenプラグインです。 Spring bootでなくても、特別なコードを書かなくても、IDEの有償の機能を使わなくても、Tomcat7/Tomcat8/Jetty9など選択して、Webアプリを起動することができます。jarやwarを作る必要はありません。アプリケーションのクラスパスに何か付け加える必要もありません。 それからWAITTでは、起動したサーバ/アプリケーショ

    Webアプリ開発/テストのお供に『WAITT』 - Qiita
  • 多い日も安心設計 - Qiita

    アプリケーションエンジニアの多くは、眠れない夜を過ごしたことがあるでしょう。特に月に一度の…「月末締めバッチ」の日は。 そんなデータ量の多い日や、初モノのバッチが動く日でも安心して眠れるためのバッチ設計を考えてみます。 ログの設計 まず何はなくともログです。きちんとしたメッセージを出せていれば、専任の人がリカバリ可能にもなるってものです。 Audit用のログなど業務要件の強いものを除いては、だいたい3種類に分けるようにしています。 プログレスログ リカバリログ 例外ログ(調査のため) この分類でファイル単位も分けます。ログを必要とする人が、それぞれ異なるからです。 プログレスログ プログレスログは、特に長時間かかるバッチに対して、現在どのくらいまで処理が出来ているのかを目的として出力します。 トラブル発生時や、大規模移行作業時には、バッチの定期的なモニタリングと報告の必要が出てきます。「あ

    多い日も安心設計 - Qiita
  • underscore.jsでやっていたことは、すべてClojureScriptがやってくれる - Qiita

    id:ayato_pさんのUnderscore.jsがちょっと便利だったので紹介してみる。を読んで思ったのが、Underscore.jsって最近使っていないな、ということでした。 というのも、1年くらい前までは、Underscore + Backboneで素のJavascriptを書いていたのですが、最近はClojureScriptを書くようになったからです。 はじめに ClojureScriptではJavascriptのオブジェクトは直接は使いません。 JavascriptでコレクションというとArrayになりますが、ClojureScriptではSequence,Vector,ListがありJavascriptのArrayとは別物です。 リテラルで、[1,2,3]と書くとVectorを表すことになります。そして","は空白と等価なので[1 2 3]と表現出来ます。 さて、Clojure

    underscore.jsでやっていたことは、すべてClojureScriptがやってくれる - Qiita
  • Light Tableの使い方 (序章) - Qiita

    ちょっと前にkickstarterで20万ドルを集めて話題となったLight TableというIDEですが、順調に開発が進んでいてClojureアプリの開発に十分使えるレベルになっています。 完成したあかつきには、どういうライセンス体系になるのか不明ですが、現状は「Try the alpha」という位置づけで、自由に試してみることができます。 上記サイトから、Mac OSX、Windiws、Linux それぞれパッケージがあるのでダウンロードしてインストールします。 起動するとオシャレ感ただようウィンドウが開きますが、Clojureのコードを動かすために、バックエンドでJarファイルを取りに行ったりするので、プロキシ環境下で使う場合には、環境変数http_proxyとhttps_proxyを設定しておくとよいかと思います。 Clojureを試してみたい場合には、メニューのView -> C

    Light Tableの使い方 (序章) - Qiita
  • 1