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

  • Go - ひらがな・カタカナの相互変換 - Qiita

    tl;dr ひらがなとカタカナは Unicode で 96 文字ずつある ひらがなとカタカナの Unicode 符号位置は 96 文字ずれている ひらがなの rune に 96 を足せばカタカナになる カタカナの rune に 96 を引けばひらがなになる rune がひらがなかどうかは unicode.In(r, unicode.Hiragana) で判定できる rune がカタカナかどうかは unicode.In(r, unicode.Katakana) で判定できる ひらがなとカタカナの Unicode 符号位置 http://www.unicodemap.org/range/62/Hiragana/ と http://www.unicodemap.org/range/63/Katakana/ が見やすい。 それぞれ 0x3041 と 0x30a1 からはじまる。 実装コード Hir

    Go - ひらがな・カタカナの相互変換 - Qiita
    yoheimuta
    yoheimuta 2018/07/27
  • Go - 複雑な条件のファイル検索・置換を楽にするライブラリ「go-rewrite」を作った - Qiita

    tl;dr 複雑なファイル検索・置換は grep、sed だけでは難しい場合がある そういう場合は コマンドラインツールなどで自作するしかない 検索・置換ルールだけに集中したコーディングをするためのライブラリとして「go-rewrite」 を作った 「go-rewrite」 はディレクトリの再帰的な走査と検索・置換ルールの適用を並列に行う インストール 検索・置換ルール 「go-rewrite」 は Rule インターフェースを定義している。 ライブラリを利用するコマンドラインツールはこのインターフェースを実装するだけでいい。 Filter はファイル名を使って対象のファイルを絞り込むメソッドを表す。 Mapping はファイルのコンテンツを使って新しいコンテンツを生成するメソッドを表す。 Output は新しいコンテンツを利用するメソッドを表す Filter が検索処理、Mapping

    Go - 複雑な条件のファイル検索・置換を楽にするライブラリ「go-rewrite」を作った - Qiita
    yoheimuta
    yoheimuta 2018/07/20
    grep, sed で対応できない置換処理用に。
  • Go - gRPC での認証・認可を Interceptor を使って実装する - Qiita

    tl;dr すべての RPC に共通する処理には gRPC Interceptor を利用する 認証 Interceptor はすべての RPC で同じ処理を行って、認可 Interceptor は gRPC サービスごとに別の処理を行えるようにする 認証に使う Authorization 値は Metadata として送信する 複数の Interceptor をまとめて書くには go-grpc-middleware の chain を使う ここでは簡単のため Unary RPC を前提にまとめる gRPC Interceptor gRPC サーバーはオプションとして UnaryServerInterceptor 型を渡すことができる。UnaryServerInterceptor 型はすべての RPC の実行前後に処理のフックを追加することができるので、いわゆるミドルウェアを実装するために

    Go - gRPC での認証・認可を Interceptor を使って実装する - Qiita
    yoheimuta
    yoheimuta 2018/07/12
    grpc-go の interceptor 利用について。
  • Swift - Protocol の効果的な使い方を具体例で整理する - Qiita

    tl;dr いわゆるインターフェースとして使うことで、複数の実装を切り替えたり、実装のスコープを狭める いわゆる抽象クラスとして使うことで、複数の似た型に共通のメソッドを提供する API クライアントを例に、インターフェースとしての使い方を整理する 複数の住所の型を例に、抽象クラスとしての使い方を整理する インターフェースとして使う プロトコルはインターフェースなので、他の言語におけるインターフェースのように使える。実装をインターフェースに依存させることで次の利点が得られる。 実装を差し替えられるようになる。テスト用実装や一時的な新旧実装の切り替えが可能になる。 呼び出し側にとって必要な API だけに狭めることができる。依存範囲が限定されるのでコードの見通しが良くなる。 抽象クラスとして使う プロトコルは protocol extension を使ってデフォルト実装を追加できるので、他の

    Swift - Protocol の効果的な使い方を具体例で整理する - Qiita
    yoheimuta
    yoheimuta 2018/07/05
    自分で protocol を定義して利用するときの例をまとめた。
  • 【Swift】URLSessionまとめ - Qiita

    経緯 日頃から使っているURLSessionですが、 実際に使っている機能は結構限られており、 いまいち使いこなせていない気がしていました。 そう思ってWWDCの動画を改めて見たり、 あれやこれやとURLSessionについて調べてみたのでまとめたいと思います。 基的にはAppleのドキュメントなどを参考にしています。 URLSession Programming Guide URLセッションプログラミングガイド Advances in Networking Part 2 Optimizing Your App for Today’s Internet Use async/await with URLSession URLローディングシステムとは? HTTPSや自作のプロトコルが使用されているURLから特定されるリソースを非同期で提供するシステム。 これを実現するためにURLSessio

    【Swift】URLSessionまとめ - Qiita
    yoheimuta
    yoheimuta 2018/07/04
  • スマートフォンの入力で「確定・予測変換」をトリガーに処理を実行する - Qiita

    前置き keydownやinputイベントを張っても、端末によって確定や予測変換は発火したりしなかったりします。 タイマーをセットしてvalueを監視する、でこの問題を回避することができますが、今回どうしても確定や予測変換で発火させたい要件があったので調べました。 結論 イベント compositionend を使用する サンプル 使用例 ※jqueryを読み込んでいるものとします。 var $input = $('.input'); $input.on('compositionend', function() { // 確定・予測変換時に処理したいイベント }); var $input = $('.input'); if ('CompositionEvent' in window) { $input.on('compositionend', function() { setTimeout

    スマートフォンの入力で「確定・予測変換」をトリガーに処理を実行する - Qiita
    yoheimuta
    yoheimuta 2018/07/03
  • RxBlockingを使ってObservableのテストを書く - Qiita

    Observableはテストしにくい? 既存のプログラムをいっぱいObservableに書き換えると、テストが死にます。当たり前ですね。 非同期のものをテストしなきゃいけなくなるわけですが、ちょっとわかりにくいです。 そこで、RxBlockingで同期処理に変換してからテストすると、従来コードからの書き換えも少なくて楽です。 ちょっと書く量が多いだけで、通常のテストと同様にかけます Observableをblockして同期処理に変換できます。 実コードには書きたくないですが、テストには楽で良いです。 operator operatorは4つあります https://github.com/ReactiveX/RxSwift/blob/master/RxBlocking/BlockingObservable%2BOperators.swift first() take(1) をテストする時、す

    RxBlockingを使ってObservableのテストを書く - Qiita
    yoheimuta
    yoheimuta 2018/07/01
  • HTML, CSS, JavaScript それぞれのロード時間が First Paint に与える影響を検証して整理する - Qiita

    HTML, CSS, JavaScript それぞれのロード時間が First Paint に与える影響を検証して整理するHTMLCSSJavaScriptGo tl;dr First Paint はウェブページの何らかが描画されたタイミングのこと。これが遅いということは、初回の真っ白な状態が長いということ。 First Paint は Chrome Developer Tool の Audit で簡単に確認できる。 HTML は描画の起点になるので、ロード時間はそのまま First Paint Timing の遅延になる。 CSS は描画に必須なので ロード時間はそのまま First Paint Timing の遅延になる。 JavaScript は同期で読み込むと、ロード時間がそのまま First Paint Timing の遅延になる。 JavaScript は非同期で読み込むと、ロ

    HTML, CSS, JavaScript それぞれのロード時間が First Paint に与える影響を検証して整理する - Qiita
    yoheimuta
    yoheimuta 2018/06/28
    書いた
  • Xcodeでアプリの標準言語を日本語にする方法 - Qiita

    Targets -> Info の、 「Localization native development」でJapanを選択する。 次に同じ画面で、右クリックでメニューを出し、「Add Row」を選ぶ。 keyに Localizations、 items[0]のvalueで、Japanese を選択する ここまでは簡単。 次に、以下の画像のように、Project -> Info にある Localizationsを変更する。GUIで変更できなかったので、エディタで直接変更する。

    Xcodeでアプリの標準言語を日本語にする方法 - Qiita
    yoheimuta
    yoheimuta 2018/06/25
  • Go で JWT を使うユースケースとその実装例 - Qiita

    はじめに JWT{JSON Web Token} は RFC7519 で規定されている、JSON をセキュアにやり取りするための仕様です。特徴は次の通り。 鍵になる文字列(以降 secret )か公開鍵ペアのどちらかを使って署名することで「セキュアにやり取り」できるようにしている。前者は HMAC アルゴリズム、後者は RSA か ECDSA が使われる。 「セキュアにやり取り」の意味はこの JSON が適切な者によって発行されて、改ざんもされていないことが保証されるということ JSON は署名されるだけで暗号化されるわけではないので、中身は誰でも閲覧可能な点に注意が必要 JWT は eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM

    Go で JWT を使うユースケースとその実装例 - Qiita
    yoheimuta
    yoheimuta 2018/06/21
    書いた。
  • 治安の悪い Slack Emoji を作るツールを作った - Qiita

    (治安の悪くない Emoji も作れます) 作ったもの ここで遊べます おもしろいところ GIF アニメのエンコードまですべて js で完結しているので、ありがちな「謎のサーバーに画像アップロードするといい感じに変換してくれる」的なサービスと違って、素性の知れたコードがクライアント側でサクサク動きます。 なにができるの? 画像を 128px x 128px に変形 画像を、 Slack にアップロードできる(現状)最大サイズの 128px x 128px に変形します。 ローカルのファイルから選ぶか、画像の URL を入力できます。アップロードするわけではないので、デカい画像でもサクサクなのがお気に入りです。 変形は 正方形に引き伸ばし(アス比無視) 正方形いっぱいに拡大して、余ったところはトリミング(アス比維持) 正方形に収まるように縮める(アス比維持) から選べます。 テキストから画像

    治安の悪い Slack Emoji を作るツールを作った - Qiita
    yoheimuta
    yoheimuta 2018/06/19
  • Aspect Fill, Aspect Fit, Scale to Fillの違い - Qiita

    Storyboardには画像を表示する際、アスペクト比やサイズを指定して表示方法を変えることができます。 Aspect Ratio = アスペクト比って?簡単に言ってしまえば、画像の縦横比です。 1. Storyboardで画像の用意方法を変える 画像を選んでいるときに、Viewの下のAspect Modeが選択できるようになるので、そこを変更します。 2. それぞれの違い Apiなどで画像を引っ張ってきた場合、どの画像サイズとアスペクト比の画像が来るかさっぱりわかりません。ランダムです。 この場合は最後の、Aspect Fill + Clip to Boundsにチェックを入れる必要があります。 Scale to Fillはアスペクト比を無視して、Bounds(指定した範囲内)に収めようとします。 この場合は横にのびちゃってますね〜。 Aspect Fit はアスペクト比を保ったまま,

    Aspect Fill, Aspect Fit, Scale to Fillの違い - Qiita
    yoheimuta
    yoheimuta 2018/06/18
  • mustache記法について簡単にまとめてみた

    今回の記事ではmustacheの記法について書いていきます。 もともと社内共有用にドキュメントを日語&適当に端折って簡単にまとめてたのですが、せっかくなのでQiitaにも投稿してみることにしました。 mustache is 何 様々な言語で組み合わせて使えるテンプレートエンジンです。 Loopなどロジック地味たことをする構文が存在しないので、Logic-Less templatesと呼ばれています。 タグの記法が{{hoge}}みたいになっていて、 { が口ひげみたいに見えるためmustache(口ひげ)というらしいです。 早速記法について書いていきます。 ドキュメント 英語のドキュメントがあるよ。日語はないよ(´・ω・`) https://mustache.github.io/mustache.5.html デモ これ書き方あってんの?を簡単に確認したい場合は以下のリンクが便利でした

    mustache記法について簡単にまとめてみた
    yoheimuta
    yoheimuta 2018/06/16
  • What’s New in Swift4.2 まとめ - Qiita

    Swift4.2で新しく追加されたものをざっくりまとめました。これからSwift4.2対応するプロジェクトなどがある時に参考程度になれば良いかなと思います。 実施環境 Conditional conformances SE-0143 みなさんSwift4.1で大喜びしたstruct, enum, classへの条件付きプロトコル適合(ある条件下の時のみプロトコルに準拠させる方法)ですが、下記のような動的なキャストやチェックを行うことはできませんでした。Swift4.2ではその実装が完了し、条件付きプロトコル適合が完成したみたいです。 // Swift4.1 protocol Bachelor { func givesRose() } extension Array: Bachelor where Element: Bachelor { func givesRose() { forEach

    What’s New in Swift4.2 まとめ - Qiita
    yoheimuta
    yoheimuta 2018/06/12
  • Goにはディレクトリ構成のスタンダードがあるらしい。 - Qiita

    参考URL 上記リポジトリにはGOプロジェクトでのスタンダードとなるディレクトリ構成の説明が書いてある。一つずつ見ていくことにします。 /cmd 一番メインとなるディレクトリ。このディレクトリの中にアプリケーションのエントリーポイントを作る。 注意点としてはmain.goに多くのことをさせないことである。各処理は基的に後述する/pkgなどで実装していくのでそれをインポートする形を取るべきだとある。 /internal /cmdで作ったエントリポイントで使いたいライブラリをおく。だが、このライブラリは各アプリケーション毎に書かれるものとなるので他のアプリケーションと共有するライブラリは置かない。そうゆうのをおくとすれば、後述の/pkgに置く。

    Goにはディレクトリ構成のスタンダードがあるらしい。 - Qiita
    yoheimuta
    yoheimuta 2018/06/11
  • 契約による設計から見た例外 - Qiita

    正しさは相対的な概念である。 Bertrand Meyer [1] Bertrand Meyer氏は「契約による設計」という概念から例外を導出し、例外の必要性をエレガントに説明しています。また、彼の説明に則れば今までの議論と比べて例外をいくぶんか形式的に扱えるようになります。契約による設計を学ぶ前に、プログラムの正しさについてもう一度考えてみましょう。 プログラムの正しさ あるプログラムが正しいかどうかを判定するにはどのようにすれば良いでしょうか。最も簡単な方法は、あるプログラムの正しさを形式的に定義する事です。より直接的に言えば、あるプログラムの正しさを簡単な論理式で表現します。その論理式が真ならばそのプログラムは正しい。偽ならばそのプログラムは正しくありません。 これだけだと関数の戻り値を検査すれば良いだけのようにも聞こえます。しかし、そう簡単な話ではありません。純粋でない言語の場合、

    契約による設計から見た例外 - Qiita
    yoheimuta
    yoheimuta 2018/06/04
  • 9年前にデザインされた管理画面フォームを改善してみる - Qiita

    概要 社内システムの管理画面のフォームをどうデザインすべきか。 9年前に作られた社内システムの改修作業が舞い込んできたので、まずは管理画面で大量生産するフォームについてググりながら改善案を作ってみました。 ※物をのせると色々角が立つので、大まかなデザインだけ作ってます。ご容赦をば。 既存システムのフォーム 改善案 よいフォームとは 今回参考にしたのは、こちらの記事。 以下の15個のルールを元に考えてみました。 1.フォームは縦一列配置にする 2.ラベルは入力データの上に配置する 3.ラベルと入力データはグループ化する 4.すべて大文字での表記は避ける 5.6項目以下の選択肢はすべて表示する 6.プレースホルダテキストをラベルとして使わない 7.チェックボックスとラジオボタンを縦に配列する 8.CTAに説明を加える 9.エラー表示はインラインで 10.入力途中でのリアルタイムアラート(バリ

    9年前にデザインされた管理画面フォームを改善してみる - Qiita
    yoheimuta
    yoheimuta 2018/06/01
  • Swift 4.1で導入されたConditional Conformanceのインパクト - Qiita

    Swift 4.1 のおける最も大きな変更の一つは Conditional Conformance 1のサポートです。 Conditional Conformance はジェネリクス関連の言語仕様の一つです。 投稿では、 Conditional Conformance とは何か、何がうれしいのか、どのようなことができるようになったのかということを説明します。 Conditional Conformance とは Swift 4.0 まででも、次のようなコードは正しく実行できました。

    Swift 4.1で導入されたConditional Conformanceのインパクト - Qiita
    yoheimuta
    yoheimuta 2018/05/23
  • 2018年Vue.jsを使ってる人には知って欲しいオブジェクトと配列の操作のベストプラクティス - Qiita

    はじめに 基的に Vue は子要素の代入演算子は感知しません。 しかし、Array は公式が公表している、ラップした変更検知メソッドを利用して、操作をすればやりたい事はほぼ全て実現できるでしょう。 これらはAirbnb lint ruleから得られた経験から来た知見です。結構使いやすい。 ; セミコロンを末尾に付けたくない人も多いと思いますが、そこはruleを上書きすればまぁ良いでしょう。 push や pop 程度など、まぁ知ってるでしょうていう軽いのは省いています。 ゴール コンポーネントとストアの記法の統一 配列辺 規定回数繰り返す よく見るairbnb lintで怒られるコード

    2018年Vue.jsを使ってる人には知って欲しいオブジェクトと配列の操作のベストプラクティス - Qiita
    yoheimuta
    yoheimuta 2018/05/23
  • SwiftのLazySequence/LazyCollectionを使ってパフォーマンスを追求しよう - Qiita

    以下のコードでは2通りの方法でIntの配列を作っています。 どちらの方がパフォーマンスが良いでしょうか。 let sequence = stride(from: 0, to: 1000000, by: 1) // パターンA let arrayA = sequence.map({ $0 * ($0 + 2) }).filter({ $0 % 2 == 0 }).map({ $0 + 1 }) // パターンB let lazySeq = sequence.lazy.map({ $0 * ($0 + 2) }).filter({ $0 % 2 == 0 }).map({ $0 + 1 }) let arrayB = Array(lazySeq) arrayA == arrayB // => true 答えは、パターンBの方がパフォーマンスが良いです。 この記事ではその理由を解説します。 お願

    SwiftのLazySequence/LazyCollectionを使ってパフォーマンスを追求しよう - Qiita
    yoheimuta
    yoheimuta 2018/05/23