DBに保存されている日時から有効期限などを求めるような場合、SQLで計算後の日時でまとめてしまいたいケースに遭遇しました。調べてみたらPostgreSQLなら簡単にできるらしい。PostgreSQLって日時操作が強いんですね。
select created_at + interval '1 year' from user
DBに保存されている日時から有効期限などを求めるような場合、SQLで計算後の日時でまとめてしまいたいケースに遭遇しました。調べてみたらPostgreSQLなら簡単にできるらしい。PostgreSQLって日時操作が強いんですね。
select created_at + interval '1 year' from user
会社のWebサービスがRailsでPostgreSQLを使っているのですが、DBで保存されているタイムスタンプのタイムゾーンがよく分からず小一時間調べて複雑だったのでメモ。
config.active_record.default_timezone = :local
config.time_zone = 'Tokyo'
application.rbのconfig.time_zoneはRuby on Railsのタイムゾーンで理解しやすいのですが、config.active_record.default_timezoneの認識を間違っていてハマってしまいました。config.active_record.default_timezoneはActiveRecordがDBの読み書きに使用するタイムゾーンと理解すれば良いようです。このため、DBにタイムゾーンを設定していてもRails側はconfig.active_record.default_timezoneの設定したタイムゾーンで時間を取り扱います。そしてここを:localにしたとき、それはDBの設定を使うという意味ではなく、サーバーの設定を使うという意味です。Herokuを使っているならHeroku、DockerならDockerのタイムゾーンになるわけですね。
show timezone;
Postgreにログインして上記のコマンドで設定しているタイムゾーンを確認できます。UTCでした。
$ heroku run bash
$ date
Herokuにログインしてbashでタイムゾーンを確認できます。JSTでした。
というわけで、まとめると設定は下記の通りになります。
つまり、WebサービスはJSTで動いているということになります。ActiveRecordはJSTで時間を読み書きし、Ruby on RailsもJSTで取り扱います。しかしPostgreSQLは時刻をUTCで保存していると思っています。これは気持ち悪いですね…。なんでこんな設定にしてしまっているんだろう…。
WindowsやAndroidは暗号ライブラリが豊富にあるので困らないのですが、iOSのSwiftだと暗号ライブラリが少なくとても大変です。有志が様々なライブラリを作ってはいるのですが、例えば3DESだと対応しているライブラリは皆無です。結局iOSに標準で入っているCommonCryptoというC言語のライブラリを使うのが最も安全という話になります。今回はCommonCryptoをSwiftで使うのに苦労したので、その使用方法を書き残しておきます。
ググると様々な方法が出てくるのですが、Xcode9では失敗しました。結論から言うと、まずアプリディレクトリ(TestAppというアプリならTestAppディレクトリ)の中にCommonCryptoというディレクトリを作成します。そしてその中にmodule.mapというファイルを作って、中に下記のように書いておきます。
module CommonCrypto { header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h" export * }
どうもこのheaderで指定する場所がXcodeのバージョンによって違うみたい?そんな勝手に変えられたら分からないですよねえ…。だからググっても動かないわけです。ちなみにXcode10ではどうなってるか調べてないです。すみません。
あとはimportすれば呼び出せるはずです。
import CommonCrypto
辛いですねえ。
テスト仕様書を書いてくれと言われてもそのフォーマットは多種多様なものがあります。IPAなどの機関がフォーマットを定義していることもないため、新卒の新人でも渡されたテスト仕様書のフォーマットを見て「こんなフォーマットで良いのか…?」と戸惑う人もいるのではないでしょうか(実際僕がそうでした)。今回は試行錯誤して独自にテスト仕様書のフォーマットを固めてきたので、テスト仕様書の書き方とフォーマットについて公開したいと思います。
国内のテスト仕様書の多くはExcelで書かれているのではないかと思います(Googleスプレッドシートを含めて)。そのExcelファイルでもテストの内容によって書き方は変わってきます。
今回はシナリオテストに焦点を当てます。ちなみに単体テストはユニットテストとして開発者(プログラマー)が自動化して品質を担保している必要があるもので、本来は仕様書は不要なはずです。回帰テストも回帰テストの仕様書があるケースや、今まで発生した不具合を再度チェックするなど会社や組織によってやり方は様々でフォーマットや下記型定義は難しいです。
iOSアプリ開発で、デザインの問題で一部の画面だけ回転を禁止にする必要が生じました。この一部の画面だけ回転を禁止するというのはUX的に問題があるのはそうなのですが、同時にAppleとしても推奨していないことのような気がします。案の定、iOS9でクラッシュするという不具合を作ってしまったので、今回はその原因と対策についてまとめます。
VirtualBoxのUbuntu上でRuby on Rails開発環境を構築したのは良いのですが、Rails ServerにホストOSのWindowsやスマホからアクセスするのに苦戦してしまったので忘れないうちにメモ書きしておきます。
VirtualBoxのネットワーク設定を開きます。
ポートフォワーディングをクリックします。
ホストポートを適当な数字にします。
Windows10にRuby on Rails開発環境を自宅に構築したので忘れないうちにメモ書きしておきます。
最初はWindows上に構築しようと思ったのですが、もともとWindowsアプリ開発環境を整えているのでカオスになるのが嫌だなと思ってやめました。また、調べてみるとインストールが必要なものが多くて、それだけでOSを初期化したい衝動が後々に出てきても嫌だなと思ったのもあります。他にも、
などネガティブな情報が多くて個人的にもあまりオススメしません。
先日はcsharp2nemを使ってNEMのウォレットの情報を取得する方法について書きました。
www.k-karakuri.com
今回はcsharp2nemを使ってXEMやモザイクを送信する方法について書きます。
前回同様、接続先をテストネットかメインネットか指定します。
var connection = new Connection();
connection.SetTestnet();
本番のメインネットの場合はこちら。
var connection = new Connection();
connection.SetMainnet();
外部ライブラリをラップするライブラリを作成して社内で使いまわすということをWindowsやAndroidでは当然のようにやってきたのですが、iOSでは簡単にできない場合があります。それはObjective-Cで書かれたライブラリをSwiftのFrameworkでラップする場合です。
プロジェクトにObjective-Cで書かれたFrameworkを組み込む場合、Bridging Headerを追加して参照できるようにします。Frameworkで同じようにするとエラーが発生してビルドできません。エラーメッセージそのままですが、FrameworkではBridging Headerが使えないようです。
ではどうやって組み込むのかどうか、ググって調べてもObjective-CのFrameworkを修正してビルドし直すという方法ぐらいしか見つかりませんでした。しかし、今回のFrameworkはサードパーティー製でソースコードは手元になく修正はできません。
NEMはRESTFulな思想で開発が容易という特徴がありますが、さらに各言語にライブラリが公開されているので、NEMのブロックチェーンから情報を取得するのが容易になっています。今回はC#向けのライブラリであるcsharp2nemを使ってNEMのウォレットの情報取得を行ってみました。
有志によって開発されGithubで公開されています。
github.com
Nugetで公開されているので、Windowsアプリケーションとして利用する場合はこちらからインストールすると簡単にプロジェクトに導入できます。
www.nuget.org
C#向けなのでUnityで利用することができます。つまり、AndroidやiOS向けに利用することも可能ということです。