酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発

SHNDコインの現在価格を見ることができるサイト「SHND2JPY」を作りました💪

1万円で1億コイン買えると言われている仮想通貨「StrongHand(SHND、通称:筋肉コイン)」を買いました。ストロングコインって呼ばれていたりもしますね。 何も考えずにネタで買ったのですが、次の日に起きたら価格が5倍になっていて驚きました。どのあたり…

Python3でXPコインの現在価格を取得するSlackbotを作る

本記事ではPython3でXPコインの現在価格を取得するSlackbotを作る方法を紹介します。 これまで社内連絡用にGitterを使っていましたが、Slackに移行するので諸々の処理にbotを使いたいと考えています。ただPython自体がいまいちわかっておらず、少しずつコー…

Python3でSlackbotを作る(準備編)

Slackで動くbotが欲しくなったので、先人たちの知恵をお借りしてPython3でslackbotを作りました。とりあえずはキーワードに対して返事をする程度の基礎部分を実装した感じとなります。 Python3でSlackbotを作る 環境 実行環境はmacOS High Sierraを想定。Hom…

Homebrewを使ってAnsibleをインストールしようとしたら`Error: Your Xcode (9.0) is outdated.`とエラーが発生した

Homebrewを使ってAnsibleをインストールしようとしたらエラーが発生したので解決方法を備忘録として残しておきます。 環境について macOS High Sieera (10.13.1) Homebrew 1.4.0 Ansibleのインストールに失敗する ビルドサーバーに異なるバージョンのXcodeを…

Android Studio 3.0にしてからエミュレータでのアプリ実行ができなくなった[解決済み]

Android Studio 3.0にしてからエミュレータでのアプリ実行ができなる自体に陥りました。過去の設定ファイル等が悪影響を及ぼしているのではないかと疑って試行錯誤していました。 本件は既に解決しております。 結論から書くと、プロジェクトの設定の「Deplo…

iOSでCIFilterを使ってバーコードを生成する

iOS/AndroidアプリでCode128のバーコードを生成する必要がでてきました。iOS 8.0くらいから標準APIだけで二次元コードの読み取りと生成ができるようになっていたようです。 昔からバーコード生成といえばZXingみたいなところがありましたよね。遡って調べて…

ポケモンのお見合い画面を画像解析して選出予想をしたい(1)

ここ最近、ポケモンのシングルレートをやっているのですが負けが続いています。 気晴らしではないのですが、バトル開始前のお見合い画面(選出画面)で相手が見せてきたポケモンをカメラで撮影して簡単に一覧化できないか試してみました。ポケモンの特定までは…

iOS向けAd-Hocビルドバイナリを「インストールできない」と言われた時の対処方法

僕の頭の中でいつも悩むことを明文化してみました。まだ体系化できていないし検証が必要なものも多いです。不足があったり対処方法が間違っているかもしれませんので、その時は教えてくださると嬉しいです。 そもそもUDIDが間違っているかもしれないケース U…

Ad-Hocビルド時に連続したFで始まっているUDIDを貰ったときに気をつけたいこと

久しぶりにXcodeビルドマンとして活動していました。 少し前までは、In-Houseなバイナリばかりビルドしていたので特に意識していなかったのですが、最近Ad-Hocなバイナリをビルドする機会が増えてきました。色んな方のUDIDを頂いてApple Developer Centerに…

Xcode 9 GM SeedでJenkinsのビルドに失敗する

Xcode 9 GM SeedでIn-HouseなアプリをJenkinsでビルドさせるときにエラーが発生しました。 Xcode 9 GM SeedでJenkinsのビルドに失敗するようになってしまった Jenkinsのコンソールログを見ると、Archiveには成功しているけれどExportに失敗しているログでし…

iPhone X シミュレータで上下の黒帯が入ってアプリ領域が欠ける

iPhone X シミュレータで上下の黒帯が入ってアプリ領域が欠ける現象が発生しました。 iPhoneでは互換性を保つための仕組みがあって、例えばiPhone 5が登場した時にアプリを起動すると上下の黒帯が入る現象がありました。4.7インチRetinaディスプレイに対応さ…

Xcode 9 GMでCarthageを使ってインストールしたRealmがビルドエラーになる

Xcode 9 GMをインストールしました。 ikatomo2をビルドしようと試みました。Realmを使っているのですがRealmの部分で下記のようなエラーが発生しました。 /MY_APP/db/Database.swift:10:8: Module compiled with Swift 3.1 cannot be imported in Swift 3.2:…

Xcode 9 GM Seedでcarthage updateを実行したらエラーが発生した

Xcode 9 GMをインストールして、carthage updateを実行したらエラーが発生した。 $ carthage update Carthage requires git 2.3.0 or later. 先に結論を書くと、原因はXcode.appのパッケージの名前を変更していたからでした。 Xcode 9 GMをXcode.appとしてま…

MongoDBが起動しない

MongoDBをbrewでインストールして起動させる MongoDBをbrewでインストールした。 $ brew install mongodb mongoを実行するとデーモンが立ち上がってないのでエラーになる。 $ mongo MongoDB shell version v3.4.6 connecting to: mongodb://127.0.0.1:27017 …

Cloud Functions for Firebaseを使ってhello worldを表示してみた

node.jsに対する苦手意識があるのでCloud Functions for Firebaseを使いながらnode.jsに慣れていきたいと思います。 $ npm install -g firebase-tools インストールができたみたいです。次に作業ディレクトリを作って下図の通りコマンドを実行していきます。…

CocoaPodsでインストールしたRealmをCartageで管理するように変更する

もうかれこれRealmを使い出して、はや2年半くらいになります。 Realmは大きなライブラリなのでビルドする度にとても時間がかかっていました。ビルド1回終わるのに7〜8分かかってしまいます*1。 その都度ブーブー言ってたわけなんですけれど、ようやく重い腰…

AndroidでSensorManagerを使って磁気センサー(コンパス)の方位を取得する

コンパスのように磁気センサーを使って磁北を指したい。 LocationServiceはユーザーの利用許諾が必要だったけれど、磁気センサーは特にユーザーに許可を得なくても利用できるようです。 sensorManager = (SensorManager) getActivity().getSystemService(Act…

AndroidでLocationManagerを使って位置情報を取得する

AndroidでLocationManagerを使って位置情報を取得する方法を紹介します。現在、minSdkVersionが19で開発しています。 事前情報 API 19ではFragment#requestPermissionsとFragment#onRequestPermissionsResultが使えない*1ので、一旦パーミッションの許可をFr…

iOSでGoogle AdMobの動画リワード広告を表示する

久しぶりにAdMobを試しています。たまにゲームなどで動画広告を見ると報酬が貰える実装がありますよね。動画リワード広告と呼ぶらしいです。 Google AdMobの動画リワード広告を表示する import UIKit import GoogleMobileAds class TableViewController: UIT…

Postfix(sendmail)で日本語サブジェクトのメールを送信すると文字化けしてしまう

macOSでPostfixを動かしてみました。 前回書いた記事の最後に日本語サブジェクトのメールを送信すると文字化けする件について書きました。 $ echo "本文です" | mail -s "タイトル" メールアドレス homebrewでnkfをインストールしました。 FROM_ADDRESS="ch3…

macOSでPostfix(sendmail)を使ってメールを送信する

macOSには標準でPostfixが入っているようです。設定方法はこちらを参考に設定していきました。 Postfixの設定をおこなう メールアドレスとパスワードを設定する $ sudo vim /etc/postfix/sasl_passwd smtp.gmail.com:587 username@gmail.com:パスワード メー…

iOSとAndroidとで非同期処理を書く

iOSとAndroidの両方を実装する機会が多いです。 Splatoon 2の発売に向けてikatomoの再開発をしています*1。その再開発にあたりiOS版とAndroid版とで処理を揃えたいと考えました。 ikatomo for SplatoonKENJI WADAユーティリティ¥120 処理を揃えるといっても…

「さくらのメールボックス」でカスタムドメインを使用する

証明書取るためだけに「さくらのメールボックス」の契約をしました。 2016年6月にAWS Certificate Managerが発表されて、無料でSSL証明書を発行することができるようになりました。僕もその話を聞いてAWS S3上で構築している静的サイトのSSL対応を試みたこと…

BrightFuturesで非同期処理実行後にクラッシュしてしまう

メモ。 BrightFuturesで非同期処理実行後にクラッシュしてしまう不具合があった。原因がわからず数回試行してみて、下記のメッセージ部分でクラッシュしていることがわかった。 Attempted to completed an Async that is already completed. This could beco…

Realm Javaを使って複数の条件でソート(並べ替え)する

本記事ではRealm Javaを使って複数条件でソートする方法を紹介します。 Realm Swiftでの複数条件のソートしたい場合、「Realm Swiftを使って複数の条件でソート(並べ替え)する - 酢ろぐ!」の記事をご覧ください。 並び替えをする String[] names = { "onlin…

SwiftでUIView.beginAnimations(_: context:)〜UIView.commitAnimations()でアニメーションした場合のアニメーション終了時のイベントを取得する

UIView.beginAnimations(_: context:)〜UIView.commitAnimations()でアニメーションした場合のアニメーション終了時のイベントを取得したいと思いました。 Objective-Cを使った場合には対応方法がよく紹介されているのですが、Swift 3.1を使った書き方が調べ…

Realm JavaでnullableなInt配列のjsonファイルを読み込む

メモ。あとで書き足す(予定)。 問題 Realm Javaではjsonファイルを読み込んでそのままRealmのオブジェクトをすることができます。しかし、intやstringといったプリミティブ型配列の場合にはそのままダイレクトにRealmに格納することができません。 JSON API…

iOSシミュレータで磨りガラスが灰色で表示されてしまう

かなり昔のできごとで、ikatomoの開発途中で詰まったときの話です。はてなブログの下書きに残り続けていたので投稿しちゃいます。 すりガラスが灰色で表示されてしまう… フレンド詳細画面では名前の背景が磨りガラスになっていて、下方向にスクロールすると…

Share Extensionの実装でハマったところ

天どん v1.0の頃にいただいた「Safariからの共有したい」という要望に対応するためにShare Extensionを実装しました。ikatomoでToday Extensionの実装はしたことはありましたが、Share Extensionを実装するのは今回が初めてでした。 Share Extensionというの…

Mastodonにアップロードした写真のExif(特にGPS情報)は保持されてしまうのか?

結論から書くと「Mastodonにアップロードされた写真のExifは保持されず、アップロード時に削除される」です。少なくともデフォルト設定では。 「Tendon for Mastodon」で写真投稿機能を実装しようとしている時に、プライバシー保護のためにExif(GPS情報)を削…