タグ

ブックマーク / qiita.com (415)

  • Goのエラー処理とpkg/errorsの使い方 - Qiita

    やっぱり自分なりにまとめないと理解した気になれないので、まとめてみることにする。 https://godoc.org/github.com/pkg/errors Golangにおけるエラー処理(おさらい) Goは言語仕様として例外機構(Exception)がない。例外ではなく、複数の戻り値を返せるという特徴を利用し、最後の戻り値をエラーに割り当てるということをする。throwを書きたくなったら代わりにreturnを書くわけだ。 import "fmt" // helloはnameが空だったらエラー扱いにする func hello(name string) (string, error) { if name == "" { return nil, fmt.Errorf("name is invalid") } return fmt.Sprint("hello %v", name) }

    Goのエラー処理とpkg/errorsの使い方 - Qiita
    masudaK
    masudaK 2018/11/13
  • プロジェクトマネジメントに関する読書メモ - Qiita

    はじめに 役職としてPMをやってるわけじゃないのだが、「プロジェクトマネジメント難しすぎでは?」という普遍的な問題にぶちあたった。 具体的には ・見積もりの不確実さ ・職種間でのこぼれタスクがポロポロ出る ・度重なる仕様変更 世間の人はどうやってプロジェクトをマネジメントしてるのか、知りたくて色々読んだメモ スクエニの元CTOの方が書いたスライド 「プロジェクトは基失敗する。なので失敗を早めに検知してどう軌道修正するか考えよう!」というのが目から鱗だった。 ここに全くたどり着けていないが、ひとつの理想形だと思う。 デジタルゲーム技術 開発キーパーソンが語るゲーム産業の未来 https://www.amazon.co.jp/gp/product/B00FOJ0CX2/ref=oh_aui_d_detailpage_o00_?ie=UTF8&psc=1 こちらもスクエニの元CTOの方のイン

    プロジェクトマネジメントに関する読書メモ - Qiita
  • RAII解説 - Qiita

    この記事は初心者 C++er Advent Calendar 2015の21日目の記事です. 昨日はshunonymousさんの「 C++でプログラムの動作を一定時間止める」でした. まるで初心者向けの記事を書けないかのような言われようですが1,氏の期待通り初心者向けの記事を書いたつもりです. 初心者の皆さんがこの記事を読んで初心者から一歩脱してくだされば幸いです. また,マサカリは大歓迎なのでバンバン投げてください. あじぇんだ C++において多用されるRAIIという技法の考え方とメリット・デメリットについて,同様の目的で用いられることのあるGCとの対比も交えつつ紹介していきます. ちなみに私はGCとかJavaとかよく知らない初心者なので,大嘘を書く可能性があります.もし誤った記述を見かけた際には是非コメントを下さい. 初心者向けです. 考え方自体はC++98でさえも通用しますが,コード

    RAII解説 - Qiita
  • 【C++】C++のヘッダインクルード周りの話 その1(includeの目的と分割コンパイルの基礎) - Qiita

    概要 C++のヘッダはインクルードが必要なのか不要なのか判らなかったリ、 順序によってどのような問題が起きるのか判らんけどとりあえず#pragma onceつけとけば問題無いよねとか、 大きな開発の場合初めからちゃんとやっておかないと後々解決しようがない程の問題(コンパイル速度)に発展しかねない危険も孕んでいたりと手軽に利用できる割には闇が深いです。 そこらへんについて自分の知識でまとめてみようと思うので、 間違っていたりこんな考えもあるみたいなのもあったら是非コメントでまさかりを投げてください! 出来る限り初心者の方でも判るように説明する予定です。よく判らないとかあったら言ってくれれば頑張ります。 結構長い解説になりそうなので数回に分けようと思います。 今回は初回なのでとりあえずインクルードの基礎的な知識について解説します。 includeする目的を考える 関数やクラスの宣言はヘッダに書

    【C++】C++のヘッダインクルード周りの話 その1(includeの目的と分割コンパイルの基礎) - Qiita
    masudaK
    masudaK 2018/09/27
  • Visual Studio Code備忘録 - Qiita

    以降では「Visual Studio Code」を「vscode」と略します。 表示しているファイル内のシンボルの一覧を表示する vscodeでは、関数やクラス、メソッド等を「シンボル」として認識します。 以下のキーを押すと、表示しているファイル内のシンボルの一覧が表示されます(関数やクラス、メソッドの一覧が表示されます)。 mac windows 上述のキーを押した後、「:」をタイプすると、シンボルがクラスやメソッド等のカテゴリごとにソートされます。 一覧からシンボルを選択し、Enterキーを押すとそのシンボルに移動します。 シンボル名で検索する 以下のキーを押した後、シンボルの名前の一部をタイプすると、そのタイプした文字列に合致するシンボルをプロジェクト内のファイルの中から検索し、該当するシンボルの一覧が表示されます。 mac windows

    Visual Studio Code備忘録 - Qiita
  • VSCodeの拡張機能 おすすめ(4/13更新) - Qiita

    前書き 特におすすめのものには**をつけてます 内容について : 特に言語に偏らず 一般エディター機能の拡張をまとめています 目次 定番拡張 カーソル拡張 入力サポート拡張 視覚サポート拡張 サイドバー拡張 カスタムビュー拡張 ステータスバー拡張 Markdown拡張 Git拡張 サイト作りの時に便利になる拡張 スニペット あれば便利かもしれない拡張 他サービスとの連携 みため 定番拡張 Visual Studio Code Setting Sync ** by shan khan version : 2.8.2 Gistを使って設定をバックアップします jumpy ** by wmaurer version : 0.3.1 Atomで人気だった拡張のVSCode版です https://marketplace.visualstudio.com/items/wmaurer.vscode-ju

    VSCodeの拡張機能 おすすめ(4/13更新) - Qiita
  • Go言語のInterfaceの考え方、Accept interfaces,return structs - Qiita

    Go言語のInterfaceの考え方、Accept interfaces,return structsGo言語interface Go言語の優れた特徴の一つとして、Interfaceが挙げられることがあります。 Interfaceを持つJavaやC#のような他言語と比べ、GoのInterfaceの言語機能における主な違いは 静的言語のように静的にチェックされるメソッドの羅列を宣言できるinterfaceでありながら ダックタイピングや型アサーションによって動的言語のように柔軟な使い方ができることです。 しかしこれだけでは単に、ケースに合わせて使い分けることができる選択肢を得ただけのように聞こえます。 実際にはGo言語のパッケージ、型システム、そして文化的特徴によってGo言語特有の軽量でシンプル、そして有機的なInterfaceを表現できます。 Go特有でGoらしいGoのInterfaceで

    Go言語のInterfaceの考え方、Accept interfaces,return structs - Qiita
    masudaK
    masudaK 2018/09/24
  • マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita

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

    マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita
  • CircleCI 2.0でのスローテスト(テスト遅い)問題対処法を思いつくだけ書き出す - Qiita

    まえおき スローテストの解消に関して、昨今のCIサービスを考慮した観点で自分なりの手法をまとめてみる。 CIで出来そうなことは可能な限り網羅したつもりだが、他にもあったらコメントか編集リクエストでご指摘いただきたい。 とりあつかうこと・とりあつかわないこと CircleCI 2.0 を前提とする。 1.0はもうすぐ無くなるので対象外 他のCIサービスは今回対象としてないが、一部似たような機能があるかもしれない。 テストフレームワーク固有の話はなるべく排除している サンプルコードがnodeだったりrubyだったりで統一取れてないのはご了承いただきたい。 dockerモードを前提とする。machine: trueでの実行は検証していない 検証してないだけなので、もしかしたら動くものもあるかもしれない CIではなくCD(継続デリバリー)に特化した話は除外する 転用できる部分はあるものの、あまりフ

    CircleCI 2.0でのスローテスト(テスト遅い)問題対処法を思いつくだけ書き出す - Qiita
  • Netflixがカスタマーを誰よりも理解するためのデータ分析プロセス、コンシューマー・サイエンスの紹介 - Qiita

    時間がたつに連れて、私のフォーカスは、「カスタマーが何を言っているのか?」から、「まずはテストしよう!」というコンシューマー・サイエンスの態度に変わりました。私のチームのカスタマーに関するインサイトは向上し、学びの速度も上がり、何がカスタマーを喜ばせるのかについてのある仮説を形成するに至りました。 以下が、コンシューマー・サイエンスとカスタマーオブセッションのために私達が使ったリサーチの手法です。 既存のデータを使って過去と現在のカスタマーの行動を理解する。 私達の作っているものに対してカスタマーがどう反応するのかを聞くために、フォーカス・グループや一対一のインタビューやユーザーテストといったクオリティティブなリサーチをする。 カスタマーがどういった人たちなのかを、デモグラフィック(人口統計学的属性、つまり性別、年齢、住んでいる地域、所得、職業、学歴、家族構成など)、競合する製品の使用度、

    Netflixがカスタマーを誰よりも理解するためのデータ分析プロセス、コンシューマー・サイエンスの紹介 - Qiita
    masudaK
    masudaK 2018/05/03
    いいものを作ることの大切さ
  • Go net/httpパッケージの概要とHTTPクライアント実装例 - Qiita

    Goは標準パッケージが充実しているのが特徴の1つだが、net/httpも例外ではなくHTTPクライアントの処理が簡単に書ける GET 例えばGETでHTTPリクエストを行う処理を実装したい場合、3通りの方法がある http.Get 関数を実行する Client 型の Get(url) メソッドを実行する Client 型の Do(request) メソッドを実行する 単純なアクセスなら1で良い 一番単純な http.Get(url)によるGET url.Values でクエリを組み立てて、Get関数で指定したURLの末尾にEncode結果をパラメータとして付加すればOK url.Valuesはクエリパラメータをkey-value形式で保持する型。ペアを追加するAddや上書きするSet等のメソッドが提供されている 組み立てたクエリはEncodeメソッドを呼び出す事で?key1=value1&

    Go net/httpパッケージの概要とHTTPクライアント実装例 - Qiita
    masudaK
    masudaK 2018/04/15
  • Go http.RoundTripper 実装ガイド - Qiita

    こんにちわ、ワカルのアドベントカレンダー2日目を担当する包です。 最近はGoばかり書いているので、Goネタです。 外部への http アクセスをする時に構造を理解しておくと便利な、http.RoundTripper について書きます。 http.RoundTripper とは Go で、外部にhttpアクセスするときには、 net/http パッケージにある、 http.Client を使います。 また、いろいろなAPIのクライアントライブラリの中でも殆どの場合 http.Client が使われていて、定義は以下のようになっています。(一部コメント省略) type Client struct { // Transport specifies the mechanism by which individual // HTTP requests are made. // If nil, Def

    Go http.RoundTripper 実装ガイド - Qiita
    masudaK
    masudaK 2018/04/15
  • 他人のコミットをgit merge --squashするべきでないのではという話 - Qiita

    最近某OSSに出されたPRが、git merge --squash <branch> でマージされたことにより、コミットのAuthorが書き換えられてしまったことが一部界隈で話題になっていました。この件にはマージを行った人に悪意はなかったようなのですが、gitの理解不足により生じてしまった案件だとすると悲しい話なので一応メモ 何が起きたか コミッターが複数の内容が含まれたPRを送った 管理者はその中の一部の内容だけをマージするために、管理者はgit merge --squashを実施し、コミットを改変した上でmergeを実施した ←これが問題 コードの内容はコミッターのものなのに、Authorだけ管理者にすげ変わってしまいコミッターのモチベを損ねた そもそもsquashするとどうなるの ここに分かりやすくまとまっています。 アジャイルSEを目指すブログ 図で分かるgit-mergeの--f

    他人のコミットをgit merge --squashするべきでないのではという話 - Qiita
    masudaK
    masudaK 2018/04/15
    ケースバイケースだろうけど、お作法考え方の違いもあるし難しい
  • システムで「性別」の情報を扱う前に知っておくべきこと - Qiita

    0は性別に関する情報が得られない場合に使います。性別に関する情報はあるのだけど1とも2とも言えない場合は9を使います。要は「0でもなくて1でも2でもなければ9」です。 これを知っていればMだとかFだとかを議論をせずに済みますね。 国際規格に従うべき理由 国際規格に従うことは色々と利点があります。まず、どうしてそういうコード体系にしたのかを説明しやすいです。また多言語対応する際も規格通りに書けば伝わるはずなので迷わずに済みます。別システムへのデータの移行や、異なるシステム間でのデータの統合もコード体系が同じならラクラクです。もしかしたら別のプロジェクトで書いたコードをそのまま使いまわせるかもしれません。技術者に対するトレーニングも不要です。 対して、わざわざ国際規格に反する実装をする場合は上記のメリットがそのままひっくり返ってデメリットになりはしますが、もちろん、それなりの理由があれば規格と

    システムで「性別」の情報を扱う前に知っておくべきこと - Qiita
  • `dep ensure -vendor-only=true` の使い所 - Qiita

    TL;DR docker buildの高速化。 Gopkg.tomlとGopkg.lockに変更がない場合はキャッシュが利用されてビルドの時間を短縮できる。 FROM golang:1.10 WORKDIR /go/src/github.com/munisystem/test COPY Gopkg.toml Gopkg.lock ./ RUN dep ensure -v -vendor-only=true COPY . . RUN dep ensure -v RUN go build 解説 docker buildのCOPY及びADDのレイヤでキャッシュが効くか否かは対象のfileのhash値によって決まる。 例えばRailsアプリケーションのDockerfileでは以下のような記述が多く見受けられる。 こういったDockerfileを書くことにより、コードベースに変更を加えてもGemfi

    `dep ensure -vendor-only=true` の使い所 - Qiita
    masudaK
    masudaK 2018/04/11
  • [初心者向け] プログラムの計算量を求める方法 - Qiita

    はじめに この記事では、プログラムの計算量を求める方法を説明します。プログラミングの初心者向けに、厳密さよりも分かりやすさを優先して説明していきます。 サンプルコードについて この記事のサンプルコードは、C言語(C99)で記述しています。 計算量とは? 計算量とは、 「そのプログラムがどれくらい速いかを大雑把に表す指標」 です。 もう少し正確に言うと、 「入力サイズの増加に対して、実行時間がどれくらいの割合で増加するかを表す指標」 です。 グラフによる計算量の表現 計算量をグラフで表すと、以下のようになります。 これは、「入力サイズ $n$ が増加するにつれて、実行時間が $n$ に比例して増加する」ということを表しています。 別のグラフも見てみましょう。 これは、「入力サイズ $n$ が増加するにつれて、実行時間が $n^2$ に比例して増加する」ということを表しています。 計算量を求め

    [初心者向け] プログラムの計算量を求める方法 - Qiita
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
    masudaK
    masudaK 2018/04/11
    内容めちゃ濃い。ここまで書かれた記事ってなかなかない。
  • Kubernetes: スケジューラの動作 - Qiita

    Kubernetes で Pod をノードに割り当てるスケジューラ kube-scheduler の動作についてまとめてみました。動作の検証やソースコードの参照は kubernetes v1.9.2 のものを使っています1。 スケジューラのお仕事 Kubernetes のスケジューラの仕事は、新規に Pod が作成されたときに最適なノードを選択して割り当てることです。スケジューラで重要なのは最適なノードをどう選択をするかで、様々なフィルタと優先度付けが実装されています。 スケジューラは kube-scheduler という独立したバイナリになっています。Policy ファイルにより柔軟なカスタマイズが可能で、フィルタや優先度付けの選択や、優先度の重み付け、WebHook による拡張などが可能です。 大雑把な動作は以下のようになります。 新規 Pod が作成される スケジューラは API

    Kubernetes: スケジューラの動作 - Qiita
  • パケットフィルタリング Netfilterの動作と設定 - Qiita

    Netfilterとは CentOSで使用することができるパケットフィルタリングのパッケージ。 ネットワークドライバとカーネルの間でパケットの内容を精査し、設定に応じてパケットを破棄することで不正なパケットの排除を行う。 IPv4, IPv6の両方に対応している。 パケットフィルタリングの流れ パケットフィルタリングの処理はいくつかの順序があり、段階に応じてフィルタリングが行われる Checksum and sanity パケットのチェックサムをチェックし、不正な構造を持ったパケットはここで破棄される。 PreRouting パケットのリダイレクトなど、ネットワークインターフェースから送られてきたパケットのアドレス変換などを行う。 Routing(一般的なネットワークのルーティング処理) パケットのルーティング(宛先に向けて転送)を行う。 Forward(他のマシンに転送する) ネットワー

    パケットフィルタリング Netfilterの動作と設定 - Qiita
  • GKE/Kubernetes でなぜ Pod と通信できるのか - Qiita

    Google によるフルマネージドサービスである GKE では Kubernetes のマスタやノードのことは理解しなくとも KubernetesAPI を使って実現したいことに集中できる。 しかし、番運用をはじめてから「なぜ動いているのかもなぜ動かないのかも分からない」というような状態ではいざという時に困る。 特に Service がどのようにクラスタの外から Pod へのアクセスを提供しているのかはブラックボックスになっていたため、今回は GKE での Service の L3(〜L4) の挙動について Kubernetes の内外を調査した。 (後で図や参照情報へのリンクを追加予定) 図解が出てきたので追加しなかった。 追記(2018年10月5日) Kubernetes Engine の Network Overview が良いのでこちらも読むと良いでしょう。この記事を書いた

    GKE/Kubernetes でなぜ Pod と通信できるのか - Qiita