俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

DNSやらまとめ ② - CAAレコードについて覚書 -

まぁ、本題はこちらでLet's Encrypt の CAA 周りの設定ですっころんだので覚書。 CAAレコードとは A Certification Authority Authorization (CAA) record is used to specify which certificate authorities (CAs) are allowed to issue certificates for a…

DNSやらまとめ ① - 基礎力編 -

今思い返せば10代からDNS周りで障害を起こしまくっているのに、真剣に勉強しようと思ったことがなかったので一旦ここいらいで整理をば。 ついでに今回はLet's Encrypt の CAA も絡んできててんやわんやだったのでそこも整理してみる。 今回は DNS まわりのみ…

ngx_http_proxy_connect_module を使って forward proxy で SSL 通信を利用可能にする

前提 SSL通信を nginx を利用してプロキシさせようとすると、暗号化された payload が見れないのでアクセス対象の URL にデータ通信を送る事ができない。 そのために HTTP tunnel という技術を利用することになる。 ※ 参考 Nginx as forward proxy for HTTPS…

スプレッド構文の中で、三項演算子を使う

スプレッド構文は式じゃないので以下のようにする必要がある。 { ...obj1, ...(shouldAppend ? obje2 : {}) }

可変の五角形を使って横幅可変の花屋の屋根っぽいCSSを構築するよ

css

要件 花屋の軒に垂れてるピラピラしたやつっぽいデザイン スマホ・PCで表示崩れを起こさないようにレスポンシブデザインで CSSだけで 成果物 iPhone X size PC size ソースコード z-index周りとか適当だけど、製品にしたときはちゃんと書くぞ! <html lang="ja"> <head> <meta charset="UTF-8"> <title>花屋</title> </meta></head></html>

iOS AVAudioSession周りの覚書

音声 x 外部ヘッドセット周りで嵌ったのでメモメモ。φ(・・ 基礎知識 44,100 Hz デジタルオーディオにおける一般的なサンプリング周波数。アナログオーディオは一秒間に441000回標本化される。 44,100 Hz - Wikipedia ハード側 iPhoneのスピーカー 通話用スピ…

オンライン英会話(ラングリッチ)を1年続けて IELTS を受けました

こんにちは手段と目的を履き違えることが趣味の @hazumu です。 だーいぶ、書くのが遅れてしまったのですが、去年の1月ぐらいからネット英会話を初めて1年半経ったのでその中間ポイントとしてのまとめと課題を自分なりに整理してみようと思います。 失われた…

iOSのApp内課金でプロダクトIDの作成上限を知りたくなったときに見るページ

プロダクトIDの作成上限を知りたいけどドキュメントが散ってて発見できないそんなあなたにショートカットをプレゼント! App 内課金を設定するためのワークフロー デベロッパアカウント 1 つにつき、アカウント内のすべての App で合計 10,000 個の App 内課…

後方参照を利用した replace メモ

かなり長い間 JavaScript を書いてる気がするのに、replaceで後方参照が使えることを知らなかったので使い方をメモ。 ユースケース 1234567 というハイフン入れ忘れの郵便番号を 123-4567 というハイフンありに修正するケース const postalCode = '1234567'.…

MySQLで特定日からの連続する日付の一覧を作る

MySQLで分析するときに、連続する日付の表を仮想的に組み立てたいときってありますよね。 SET @start_day = '2017-04-01'; SELECT DATE_FORMAT(DATE_ADD(@start_day, INTERVAL tmp.series DAY), '%Y-%m-%d') AS day FROM ( SELECT 0 series FROM DUAL WHERE …

MySQLでのユーザー管理系コマンドまとめ - 追加・権限付与 -

行う機会が少なくてどうしても覚えられないユーザー管理系のコマンドまとめ! ユーザー追加 CREATE USER hazumu パスワード追加 SET PASSWORD FOR hazumu = PASSWORD('パスワード') 権限確認 SHOW GRANTS FOR hazumu SELECT権限を与える GRANT SELECT ON DB…

どこで起こったかわからない unhandledRejection のコールスタックをキャプチャする

すいませんorz... 2017年後半〜2018年前半ブチクソ忙しくて全くブログの更新ができていませんでした!!!!!!! facebookとかではちまちま発言してるのですが、会社でのサービスづくりに熱中しておりこちら側がおろそかになっていました。 そろそろ復活さ…

async/awaitが手になじむまで色々書いてみるよ〜

現在運用中のプロジェクトのNodeのバージョンを7から8にあげたのでPromiseで書いていた箇所を徐々にasync/awaitに置き換えています。 簡単に書ける一方でPromsieに慣れすぎていたため、「これ並列処理になるんだっけ」とか、「てか、これ動く?」見たいなレ…

GAEにデプロイしたRailsからGoogle Cloud SQL に疎通できない時に確認すること

概要 さてさて、去年 Google App Engine に Ruby の runtimeが追加されたことにより、GAE上でRailsを稼働させることが出来るようになりました。 ちょっと時間が空いてしまいましたが絶賛いじり中です。 今日は、GAEに上げたRailsからGoogle Cloud SQLに接続…

UFW (Uncomplicated Firewall) を理解しておく

UFWとは? コマンドラインで簡単に設定出来るfirewall。 Ubuntu 8.04 LTSより新しいバージョンならデフォルトでインストールされているので、Ubuntuを利用している場合はこれを利用してfirewallの設定をするのが一般的。 解説 例えば以下の設定があったとす…

NodeでFCMを利用してAndroidにプッシュ通知を送る

すいません!すいません! めちゃくちゃブログの更新滞っちゃいましたねorz 概要 サーバーサイドのNodeからFCM経由でAndroidアプリにプッシュ通知を送る際の実装メモです。 FCMとは? Firebase Cloud Messagingのことで、Googleが提供するAndroidの通知サー…

ES2015でどこまでクイックソートを短くかけるか

やってみた。 function quick(arr) { if (arr.length === 0) return [] const [pivot, ...tail] = arr return [...quick(tail.filter( x => x <= pivot )), pivot , ...quick(tail.filter( x => x > pivot ))] } const sorted = quick([8, 1, 10, 5, 4, 5, 1…

Twitter APIで取得したプロフィール画像のサイズを変更する

api

Twitter認証でプロフィール画像を引っ張ってきた時にそのサイズを変更したいことって結構ありますよね。 なにも考えなければuserオブジェクトのprofile_image_urlというプロパティから48px x 48pxの画像が取得できます。 画像が小さい ただ、48px x 48px と…

1時間で終わる、圧倒的「確定申告」の方法

10代の頃からウェブサイトの広告収益をちまちま貰っては、確定申告で地獄を見てきたHayatoです。 今回は、最近よく聞かれる確定申告の流れをまとめておこうと思います。 サラリーマンとして普通に働きつつ副業で収入を得ている人が初めての確定申告をすると…

Sirenを使って iOSアプリに強制アップデート実装するよ

ハロー、こんにちは @hazumu です。 iOS App作ってますか? アプリをの開発に置いてサーバー側のAPIとアプリのバージョンを合わせるのって結構だるいですよね。 そんなときはAPIのバージョンをたくさん用意するのも面倒なのでアプリ側に強制アップデートを導…

Homebrewでインストールした MySQL の my.cnf の置き場所と一般ログの設定方法

my.cnf の置き場所 手持ちのMacにHomebrewでMySQLををインストールした場合にどこにmy.cnfを置けばよいか調べたのでメモ。 ただインストールするだけでは、ここ↓には設置されない。 /etc/my.cnf 以下のコマンドを叩いて設定を見る。 mysql --help Default op…

Xcode8.3, Swift 3.1にアップデートしたメモ

概要 先程Xcode のバージョンをアップデートしたのでその時に対応したことのメモです。 いつも通りXVimが起動しない 既にissueが上がっており対応してくれてた人がいるのでその方のリポジトリにあるコードで一旦対応。 本家にマージされたらまた乗り換えよう…

Swiftで左から右にグラデーションがかかるViewを作る

連日のSwiftメモです。 作りたい物 こんな感じで左から右にグラデーションがかかるボタンを作ります。 ソースコード buttonViewがグラデーションをかける対象のViewとなります。 //グラデーションの設定 let gradientLayer = CAGradientLayer() gradientLaye…

Swift で○○秒前みたいにするエクステンション

こんにちは、はやとです。最近はSwiftばっかりやってて楽しいです。 Swift3.0で、SNSでよくある「○○秒前」みたいに表示するエクステンションを書いたので置いておきます。 環境 Swift3.0 extensionで実装 (Dateクラスを拡張) コード Date.swift import Found…

ExpressでGoogle Cloud Storageに画像をアップロードする

やりたきこと Expressで稼働しているWebサービスで画像をGoogle Cloud Storage(以下GCS)にアップロードする サブドメインで画像を閲覧できるようにする 各種バージョン Node 7.x Express 4.x 事前準備 以下は完了している ドメインは取得 Google Cloud DNSの…

【Swift】関数にオプショナルのブロックを渡す

括弧が多くて意味不明になったので一旦メモ。 func execute(completion: (() -> Void)?) { if let unwraped = completion { unwraped() } } execute { print("hoge") // hoge } これだとコンパイルエラー func execute(completion: () -> Void?) { if let un…

Moment.jsを使ってタイムゾーンがEtc/GMTの日付と時刻をAsia/Tokyoに変更する

iOSのIn-App Purchase の Auto-Renewing subscription (自動更新型の購読)を利用した開発では購入処理が走った際や、期限切れの際にAppleから得られるレシートの検証をAppleのサーバーにpostして行う必要があります。 当然ながら有効期限を表すexpires_date …

Vuexを利用せずに親子関係を持たないコンポーネント同士で通信する

しばらくぶりにWebのフロントエンドを書いてるので色々復習を込めて。 ReactやVueなどコンポーネント指向で実装できるフレームワークを利用して開発する際に親子関係を持たないコンポーネント同士で通信をしたい時ってありますよね。 とりわけシングルページ…

iPhoneゲーム、「荻月のゴマビィ」をリリースしました。

あけましておめでとうございます! @hazumu です。 前回 Hayato さんがめっちゃ質の高い記事を書いてたので新年一発目から尻込みしちゃいますね。 さてさてさてさて、一昨年の9月に途中まで作って放置していたゲームを去年の12月に作り込んで12末のAppleの審…

実店舗の売上データで分析する。(タンタンタイガー)

(*)こちらのデータはタンタンタイガーの数値を基にして作成しておりますが、全てのデータ開示は会社の競争上で問題があるため、売上や単価など一部数値を変更しております。個別にご連絡いただければ開示・ご相談を検討します。 あけましておめでとうござい…