タグ

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

  • プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話 - Qiita

    プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話ShellScriptBash 普通のプログラミング言語での開発に慣れた人ほどシェルスクリプト、特にBashで戸惑う部分の一つに、i = 0のように空白を開ければエラーになるし、かといってif[$i!=0]のように詰めてもやっぱりエラーになる、という点が挙げられます。書きたい物を思うように書けなくて「なんだよこのクソ言語は!!!」とブチギレる人は少なくないのではないでしょうか。この記事では、そのイライラを解消するポイントをお伝えしようと思います。 以下、特に断り無く「シェルスクリプト」と書いている場合はすべて「Bashのスクリプト」という意味になります。zsh等他のシェルではまた事情が異なりますので、ご注意ください。 (※以前プログラマーの君! 騙されるな! シェルスクリプトはそう書いち

    プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話 - Qiita
    takatoshiono
    takatoshiono 2021/11/17
    完全に理解した
  • Protocol Buffers(proto3)でoptionalをどう扱うか - Qiita

    2021.4.14 追記 proto3で削除されたoptionalですがv3.15(experimentalオプションを利用する場合はv3.12)から正式に実装されたため、それ以降のバージョンを利用する場合は素直にoptionalを利用してもらうのがいいと思います! https://github.com/protocolbuffers/protobuf/releases/tag/v3.15.0 Protocol Buffersはproto3でrequiredとoptionalが削除されました。 そもそも削除された経緯に関しては、@qsonaさんのエントリーにて、分かりやすくまとめて下さっています。 そこで課題になるのが、proto3において各フィールドは全てデフォルト値を持つため、デフォルト値が設定されたフィールドが利用側から 1. 意図的にセットされたデフォルト値と同様の値 2. 存在し

    Protocol Buffers(proto3)でoptionalをどう扱うか - Qiita
  • デッドロック対策 - Qiita

    2PLでもS2PLでもロックを獲得・開放する順序の話を規定しているだけで、そのままカジュアルに走らせると悲惨な問題に直面する。デッドロックである。 Tx1: Write(x) Write(y) Tx2: Write(y) Write(x) という2つのトランザクションは、2PLに沿ってロックを記述すると Tx1: Lock(x) Write(x) Lock(y) Write(y) Unlock(x) Unlock(y) Tx2: Lock(y) Write(y) Lock(x) Write(x) Unlock(y) Unlock(x) このようにLockがそれぞれ書き込みの前に追加される。 この二つのトランザクションが並行して走ると、無事にどちらも完走する場合もあるが、停止して動かなくなることもある。 Tx1: Lock(x) Write(x) Lock(y) Tx2: Lock(y) W

    デッドロック対策 - Qiita
  • 良いコードの書き方 - Qiita

    概要 チームによる継続的開発を前提としたコーディングのガイドライン。 特定の言語を対象としたものではないが、主に静的型付けのオブジェクト指向言語を想定している。 サンプルコードは別段の定めがなければSwiftで記載。 ガイドラインの目的 生産性を高め、メンテナンスコストを下げる バグが生まれづらくする 開発メンバー(特に新規参加者)がコードを理解しやすくする 初心者プログラマー教育 内容の説明 タイトルの頭についた【数字】は重要度。 高いほどシステムに与える影響が大きいが、低いものの方が影響が小さく改修しやすいものが多い。 【5】変数のスコープを小さくする 変わり得る値は複雑さを生み誤解やバグに繋がるため、プログラムは変数が少ないほど問題が生まれづらい。 プログラミングの大原則として、変数は必要最低限を心がけ、むやみに増やさないようにする。 また、変数はスコープや寿命が大きいほど悪影響が

    良いコードの書き方 - Qiita
    takatoshiono
    takatoshiono 2020/01/29
    ガイドラインの目的、共感できる
  • 設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita

    /// <summary>契約金額</summary> public class ContractAmount { public int AmountIncludingTax; public decimal SalesTaxRate; } 当然データの入れ物(以後データクラスと呼称)だけでなく、税込み金額を計算するロジックが必要です。ここであまり設計を考えないと、この手の演算ロジックはデータクラスとは別のクラスに実装されることが多いです。以下のようにControllerに実装されることが多いのではないでしょうか。 /// <summary>契約コントローラー</summary> public class ContractController { private ContractAmount _contractAmount; /// <summary>税込金額を計算する。</summary>

    設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する - Qiita
  • ブラウザ君「ワイはCSSのセレクタを右から読むんや」 - Qiita

    ある日のやめ太郎一家 娘(3歳)「パパ、レンダリング最適化されたCSS書いてる?」 ワイ「なんやレンダリングって」 娘「ブラウザがWebサイトを描画することだよ」 ワイ「ああ、そのレンダリングか」 ワイ「よう知っとるわ」 よめ太郎「(CSS関係で他にどんなレンダリングがあんねん)」 よめ太郎「(また知ったかぶりしとるわ)」 ワイ「ワイはいつも描画速度を意識してCSSセレクタを書いてるで?」 ワイ「例えばWebサイトのヘッダ部分にある、サイト名のところにスタイルをあてる場合で・・・」 ワイ「↑こんな風にセレクタを書いてやるんや」 ワイ「そしたらブラウザ君は」 ブラウザ君「このページの中で、header要素は・・・お、この1つだけやな」 ブラウザ君「ほんで、その中のdiv要素は・・・この1つだけやな」 ブラウザ君「ほんで、更にその中のa要素は・・・この1個だけやな!」 ブラウザ君「特定しやすい

    ブラウザ君「ワイはCSSのセレクタを右から読むんや」 - Qiita
    takatoshiono
    takatoshiono 2019/06/12
    おもしろい
  • 八丈島のホテルで、運用費用0円の伝票システムアプリ作って、業務改善した話。 - Qiita

    ※2019年05月29日作成の記事です。 はじめまして! いつも皆さんの面白い記事を読んで、学んだり励みにしたり楽しんだりしてます!ありがとうございます! このたび東京都八丈島のホテル、リードパーク&リゾート八丈島で伝票システムアプリを作らせてもらいました! このシステムアプリの全機能はブログの記事で動画を交えて説明しています。 (QiitaじゃTwitter経由でしかアップできないため) 全機能説明ページはこちら 謝辞 ホテルの皆様 今回自分がこんな貴重な機会を得られ、最後まで作ることができたのは、寛容で柔軟なホテル支配人・レストランリーダー・スタッフの皆様のお陰だと当に思います。 最初は遅延もあったり、レシート2枚出てきたりしてましたが、毎日使用後に多くのフィードバックを得られたので開発がとても捗りました。 「楽しい!」「今までで1番使いやすい」などの声は当に嬉しいです Fireb

    八丈島のホテルで、運用費用0円の伝票システムアプリ作って、業務改善した話。 - Qiita
    takatoshiono
    takatoshiono 2019/06/06
    すごいなあ
  • GCPで永久無料枠を利用してサービスを立ち上げたときにしたことの備忘録 - Qiita

    はじめに 最近GCPWebサービスを立ち上げたので、そのときに実施したことをメモとして残しておきます。 今回はGCEで Debian + Nginx + Railsで環境を作りました。 ドメイン取得以外は終始無料で進めるための努力をしました。 また、今回はRailsアプリケーションを作成することは目的としていませんので、そこについてはあまり触れません。 やったこと GCEでインスタンスを立ち上げる アカウント作成時に貰える無料トライアル枠とは別に、無料で利用できるリソースがあります。 Always Free と呼ばれていて、GCEの場合は以下の要件を満たすインスタンスのみ永久に無料でインスタンスを立てることができます。 リージョンをus-*1から選択する 1つのf1-micro VM インスタンス 30GB以内 の永続ストレージ ※無料対象リージョンはus-*1のみというご指摘を受けまし

    GCPで永久無料枠を利用してサービスを立ち上げたときにしたことの備忘録 - Qiita
  • 【grpc-gateway】0, false, nullなどの値をJSON出力対象にする - Qiita

    syntax = "proto3"; import "google/protobuf/empty.proto"; import "google/api/annotations.proto"; package proto; service TestService { rpc Test (google.protobuf.Empty) returns (TestMessage) { option (google.api.http) = { get: "/test" }; } } message TestMessage { int32 a = 1; bool b = 2; string c = 3; repeated string d = 4; }

    【grpc-gateway】0, false, nullなどの値をJSON出力対象にする - Qiita
    takatoshiono
    takatoshiono 2019/01/11
    EmitDefaults, jsonpb.Marshalerも参照
  • QRコードを人力で読み取る - Qiita

    QRコードを人力で読み取る QRコードといえば1994年にデンソーが開発した四角いバーコードですが、これ、何も見ずに読めたらかっこよくね? という安易な考えで人力読み取りしてみようと思います 目grepがあるなら目OpenCVもあっていいと思う...うん QRコードの生成 まず人力読み取りするために必要なQRコードを生成していきましょう 今回はGoogle Charts APIQRコード生成を利用していきます。 Reference しかしこのAPIはDeprecatedなのでいつ消えてもおかしくありません... 使用は非推奨です このAPIの使い方は基的にこんな感じです、文字コードを指定しないとデフォルトでUTF-8になります。 https://chart.googleapis.com/chart?cht=qr&chs=<width>x<height>&chl=<data> 今回は"S

    QRコードを人力で読み取る - Qiita
    takatoshiono
    takatoshiono 2019/01/09
    おもしろかった
  • 変更に強いアーキテクチャについてIT業界19年目の僕が超ザックリ説明する - Qiita

    この記事は、設計・アーキテクチャ Advent Calendar 2018 の第7日目の記事である。 はじめに この記事では、IT業界19年目の僕が実践している変更に強いアーキテクチャについて、出来るだけ難しい表現を避け、教科書的なありきたりな内容ではなく現場の肌感覚に近い切り口で「超ザックリ」な解説を試みてみようと思う。 普段自分がよく用いている実装パターンの紹介ともいうべきかも知れない。 この記事で説明すること いざ「変更に強いアーキテクチャとは」とズバリ訊かれても、一概に「これだ!」という答えはない。 プログラミング言語や、フレームワークによっても条件が異なるし、利用可能な技術や開発チームの特性、業務要件や運用要件の特性によっても様々であるし、インフラや開発プロセスまで含めて考えると考慮すべきことは無限にある。 ここでは主にソフトウェアの構造という観点から、"変更に強い" ということ

    変更に強いアーキテクチャについてIT業界19年目の僕が超ザックリ説明する - Qiita
    takatoshiono
    takatoshiono 2019/01/07
    いい。同意
  • 複雑な仕組みと向き合い、会計システムをリプレイスした話 - Qiita

    この記事は、「ランサーズ Advent Calendar 2018」の24日目の記事になります。 前日の記事は、@godgarden の「ランサーズに出戻って1年。担当した開発プロジェクトを振り返る。」でした。 はじめに この記事の目的 今年、ランサーズの会計システムのリプレイスを行ったので、リプレイスに至った背景、どのようなシステムにしたのかを書いていきます。 世の中に技術的なトピックはいろいろ上がってますが、ウェブサービスにおける会計システムの記事はあまりなかったので、こう言った課題に向き合っている方の参考になればと思います。 なぜ会計が必要か どんな事業・サービスにも継続していくには、運営するための利益が必要であり、その売上を管理するためには正しい売上の集計が必要です。このあたりは、どんなスタートアップのサービスでも気にして運営されていると思います。 そして、会社がパブリックになるに

    複雑な仕組みと向き合い、会計システムをリプレイスした話 - Qiita
  • StripeとTwilio Payで電話決済 - Qiita

    2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、記事に記載されている内容は正確ではないことを予めご了承ください。 はじめに この記事は、Stripe Advent Calendar 2018の12月11日分の投稿となります。 すみません、一日遅れてしまいました・・・。 Twilio Payとは Twilio Payとは、今年10月にサンフランシスコで開催されたTwilio年次イベント「SIGNAL」で発表された、音声通話でクレジットカード決済をするための機能です。 皆さんご存知のように、クレジットカード決済システムにおいては、不正利用を防止する観点から非常に厳しいセキュリティ要件があります。現在主流なものとして、「PCI DSS基準」と呼ばれる、国際ペイメントブランド5社(AMEX、Discover、JCB、Master

    StripeとTwilio Payで電話決済 - Qiita
  • JavaScriptの { } を理解する - Qiita

    結果はどうなったでしょうか。 自分が今使っているGoogle Chromeだとこうなりました。 結果は{a: 10}というオブジェクトです。まあ、これは当然ですね。3 + 5と入力すれば実行されて8が返ってくるのですから、{a: 10}というオブジェクトリテラルを書けば{a: 10}というオブジェクトが作られるのは当然です。 ……。 ここで、一部の人は「おいふざけんなよ」と思っているかもしれません。というのも、この例は環境によっては違う結果になるのです。具体的には、Chrome以外2のブラウザのREPL(FirefoxやEdgeなど)が該当します。あと、ts-nodeのREPLも該当するらしいです。これらの環境では、結果は{a: 10}ではなく次のようになります。 オブジェクトを作ったはずなのに結果が10とか意味不明ですね。そもそも、こんな簡単なプログラムで結果が全然違うとか、JavaSc

    JavaScriptの { } を理解する - Qiita
  • Spanner - Qiita

    これまで多くのトランザクションの要素技術を説明してきた。 Googleの公開している論文Spanner: Google's Globally-Distributed Database は公開当初、要求される専門技術の多さからよくわからないと言っている人が多かったが、これまでに説明した要素技術をベースにすると理解しやすい。 Spannerとは 複数のデータセンターに跨ってデータベースの内容を複製し続ける事で高い可用性を実現するという構想は数多くあった。 しかしそれらの分散データベースは実用的な速度を実現しようとすると、データモデルがただのRDBより単純化して使いにくかったりトランザクションをサポートしなかったりと、アプリケーションの一貫性を実現するのが難しい。 現にGoogleの社内でもBigtableなどを用いたアプリケーションは複数あるものの、それぞれでそのデータモデルの上で無理やりトラ

    Spanner - Qiita
    takatoshiono
    takatoshiono 2018/11/08
    一貫性の保証。時刻のズレを保証して実現
  • VSCodeのオススメ拡張機能 24選 (とTipsを少し)

    1. vscode-icons アイコンがついて見やすくなる。 2. GitLens とにかく強い。 「コミット単位でのファイル比較」や「最新のコミット内容とそのコミッター表示」など色々してくれる。 git blameする手間なくなる。 3. Prettier コードのフォーマットは自動でやりましょう! 複数人のこだわりをうんたらするよりも、Prettierに委ねるのが楽。 関連のTipsはここ 4. Git History Git logが見やすい 5. Bracket Pair Colorizer カッコの対応を色付きで表示してくれる。 ものすごく読みやすくなって最高&最高!! なおBeta版ですが、後継となるBracket Pair Colorizer 2も出ています。 6. Settings Sync どこでも同じ設定で使いたい人には便利。 ⇧ + ⌥ + U/D で設定をアップロ

    VSCodeのオススメ拡張機能 24選 (とTipsを少し)
  • 「さようなら ImageMagick」の考察 - Qiita

    はじめに サイボウズさんの ImageMagick の利用をやめる記事について少し思う所を書きます。否定というよりアシストのつもりです。(2018年08月26日投稿) さようなら ImageMagick 自分のスタンスを3行でまとめると、 policy.xml で読み書き出来るファイル形式を絞れば、いうほど怖くはない ただ、ImageMagick に限らずサーバサイドで動かすのは手間と覚悟が要る Yahoobleed の件でコード品質が信用ならないと言われたら、ごめんなさい 「ImageMagick を外した理由」 サイボウズさんのブログでは、2017年の ImageMagick 脆弱性報告数が多いので駄目との事です。 脆弱性 ImageMagick には脆弱性が大量に存在します。 2017 年に報告された ImageMagick の脆弱性は 236 件 でした。 大量にある上にリモートコ

    「さようなら ImageMagick」の考察 - Qiita
  • Go でツール書くときの Makefile 晒す - Qiita

    Go でツール書くときはタスクランナーとして make を使っています。ビルドだけじゃなくて、テストや配布用パッケージ作成も一括して make でやっています。 今回は整理も兼ねて、自分が普段どういう Makefile を使っているのか解剖していきます。 なぜ make を使うのか ビルドフラグ覚えるのが面倒だから、make は (Windows を除く) 大半のプラットフォームに入っていて使いやすいからというのが理由です。script/build みたいにシェルスクリプトを複数用意するのでもまあ良いと思いますが…。大半の Go プロジェクトは Makefile 置いてありますね。 make を使った開発フロー 基的には、リポジトリを git clone / go get -d した後に以下のコマンドを打てばアプリケーションをインストールできるようにしています。 $ cd $GOPATH

    Go でツール書くときの Makefile 晒す - Qiita
  • 2018/07/12 に発生したセキュリティ インシデント (eslint-scope@3.7.2) について - Qiita

    2018 年 7 月 12 日に、ESLint 開発チームが管理する npm パッケージに悪意あるコードが挿入されるセキュリティ インシデントがありました。 ESLint からのアナウンス: https://eslint.org/blog/2018/07/postmortem-for-malicious-package-publishes npm からのアナウンス: https://status.npmjs.org/incidents/dn7c1fgrr7ng 以下の場合に npm install を実行したユーザーの npm アカウントへのログイン情報 (アクセストークン) が盗まれた恐れがあります (盗まれたアクセストークンはすでに無効化されています)。 日時間の 18:49 から 19:25 の約 1 時間のあいだに npm install を実行し、eslint-config-e

    2018/07/12 に発生したセキュリティ インシデント (eslint-scope@3.7.2) について - Qiita
  • protocプラグインとカスタムオプション - Qiita

    以前の記事ではprotocプラグインの書き方を紹介したが、実は1つ問題があった。 実用的なプラグインを書こうとした場合に、しばしば生成時に必要な、ドメイン固有の情報が足りないのである。稿ではそれを補うカスタムオプションの話をする。 ここでもう一度確認しよう。protocのプラグインはProtocol Buffersのスキーマを読んで任意の処理を行える仕組みだ。それはCodeGeneratorRequest内のFileDescriptorProto messageを読み取って任意のバイト列を出力し、出力を受け取ったprotocが指定通りにファイルにバイト列を書き込んでくれる。 ただ、FileDescriptorProtoはprotobufのスキーマ言語の文法をprotobufメッセージとして表現したものに過ぎないから、極めて一般的なデータ構造とサービス定義を表現する能力しか持たない。プログ

    protocプラグインとカスタムオプション - Qiita
    takatoshiono
    takatoshiono 2018/07/05
    option, なるほどなあ