更新前のDBの値を取得したい時に使うメソッド
in_database
statusカラムを未提出→提出済みに変更の場合
@order.status #⇒ 提出済み @order.status_in_database #⇒ 未提出
参考サイト
ransackで#Array:〜〜のエラー
問題
配列処理したいが、以下のエラーが発生する。
#[Array:0x00007f55f06941f8](array:0x00007f55f06941f8)
原因
Arrayクラスになっているのが原因
ransackではActiveRecord_Relationクラスにする必要がある。
解決策
where、mapをつかい、Array→ActiveRecord_Relationクラスに変換する
.where(id: items.map{ |item| [item.id](http://item.id/) })
参考サイト
普段ZOOMを利用するエンジニアが、Aroundを使ってみた
「Zoom out.」
パワーワードとともにZOOMに変わるビデオ会議ツールになるか?と、
話題になりつつあるAround。
普段、ZOOMやDiscordなど様々なビデオ会議ツールを使い、
仕事をしているエンジニア視点で使ってみた感想を述べていきます。
良かった点
悪かった点(アップデートの見込みありか?)
- リモートコントロールはキーボード操作のみで、マウス操作ができない。
マウス操作するとアプリが落ちる。。。
まとめ
例えるならば、
zoom + TeamViewer って感じの機能でした。
3月時点では、「まだZOOMでいいかな〜」と思いました。
今後のアップデート次第では、本当にZoom outするかもしれないです!
【Flutter】CupertinoPageRouteで前画面に戻るときだけスワイプ可能にする
やりたいこと
iOSアプリでよく見る、前画面に戻る際にスワイプで戻れるようにしたい。
ただし、前画面に戻る以外の画面遷移はスワイプしないようにする。
解決策
CupertinoPageRouteクラスを作成
※引数がいくつか入っていますが、適宜変更してください
CupertinoPageRouteにDurationを設定
- 次の画面に進む処理を0秒に設定
- クラスを任意の画面遷移処理の部分で呼び出す
// スワイプバック可能にする class MyCupertinoPageRoute<T> extends CupertinoPageRoute<T> { MyCupertinoPageRoute({ WidgetBuilder builder, RouteSettings settings }) : super(builder: builder, settings: settings); // 次の画面に進む処理 @override Duration get transitionDuration => const Duration(seconds: 0); // 前の画面に戻る処理 @override Duration get reverseTransitionDuration => const Duration(seconds: 1); }
実際は全ての画面遷移時にもスワイプしてますが、遷移時間を0秒にすることで
スワイプには見えない処理にすることができました。
もっと良い方法があればぜひ教えて下さい。。。
参考サイト
https://api.flutter.dev/flutter/material/MaterialRouteTransitionMixin/transitionDuration.html
https://medium.com/flutterdevs/page-transitions-in-flutter-5236a8afae92
null byteエラーが発生したときの対処
やりたいこと
①S3から複数のZipファイルを取得
②複数のzipファイルを解凍しディレクトリ形式にする
③最終的に1つのzipファイルにしたい。
起きた問題
①でget_objectしたところ、以下のようになってしまい、②で必要なファイルパスが取得できない状況。
PK\u0003\u0004\u0014\u0000\u0000\u0000\u0000\u0000\xA1\x9AYQ\u0000\u0000\u0000
client = Aws::S3::Client.new( :region => 'ap-northeast-1', :access_key_id => '***', :secret_access_key => '***', ) @orders.each do |order| obj = client.get_object( bucket: "*", key: order.zip_file_name ).body.read Rails.logger.debug obj.inspect #=> PK\u0003\u0004\u0014\u0000\u00.... end
原因
zipファイルの中身はバイナリデータ。
ダウンロードしてきたファイルの中身をobjに参照させている。.body.read
という関数は、zipファイルの中身を参照する関数。なので、当然バイナリがログで出てくる。
解決策
readせずに、rubyzipのopen_buffer
メソッドを使って、zipファイルを開く。
ただ、open_bufferメソッドはrubyzipの公式ドキュメントには載っていない。。。
もっと良いやり方見つけたい。
client = Aws::S3::Client.new( :region => 'ap-northeast-1', :access_key_id => '***', :secret_access_key => '***', ) @orders.each do |order| obj = client.get_object( bucket: "*", key: order.zip_file_name ).body >> readしない! end ## get_objectでopenする Zip::File.open_buffer(obj) do |zip| ~~ end
Railsについて初心者なりに調べてみた
ドキュメント
Ruby on Rails ガイド:体系的に Rails を学ぼう
Railsとは
- Rubyにより構築されたWEBアプリケーションフレームワーク
- MVCアーキテクチャに基づいて構築されている
- 他のフレームワークより少ないコードでアプリケーション開発ができるように考慮されている
- それを実現するためにRailsには制約が多く存在し、慣れるまでは少し窮屈に感じることもあるかも?
Rubyの他フレームワーク
Sinatra
・軽量なフレームワークで簡潔に記述できる、最小限の労力でWebアプリケーションをすばやく作れる。 ・MVCアーキテクチャに基づいた設計ではない。 小規模開発に向き http://sinatrarb.com/
HANAMI
・バージョン1.0が2017年4月にリリースされた比較的新しいフレームワーク。 ・メモリの消費を抑えるために提供されている100以上の安定したAPIを利用できる ・応答速度などで高いパフォーマンスを発揮 長期的なメンテナンスを考え作られている https://hanamirb.org/
Ramaze
・Sinatraと同様にシンプルかつ軽量で柔軟性のあるフレームワーク ・Rubyの書き方をそのまま踏襲できるようになっている http://ramaze.net/
他言語フレームワークとの比較
Web開発フレームワークのシェアと推移
djangoとlaravelがトレンド上昇している。
ruby on rails は2011年以降、下降している。
Ruby on rails のトレンド下降している要因
Twitterが、Ruby on RailsからJavaVMへ移行する理由
Twitterの膨大化したアクセスを、railsで構築されたシステムよりもJavaVMの方が速やかに処理できる。
→大規模システム開発で使われるケースが世界的に減っている。
なぜ一時期、一世を風靡したRuby on railsが、「railsはもう終わった」と言われるようになったのか?
その一部の背景を上記で説明しました。以下は具体的にかかれている記事
ただ日本ではスタートアップ中心に仕事がまだまだたくさんある。
例、Cookpad, Gunosy, 食べログ, Freee, Crowdworks
開発環境
- ローカル
- Virtual Box
- Docker
- Cloud9(AWS)
開発の流れ(ローカル環境)
基本的にMVCモデルの設計に沿って、ファイルを作成する。
参考文献
zipとgzipの違い
Adminerをいじっていてこれなんだ?と疑問に思ったので、さくっとメモしておきます。
zipとは
圧縮ファイルの形式で現在一番ポピュラーなもの
gzipとは
GNU Zipのこと。
GNU(グヌー、[ɡnuː] ( 音声ファイル))とはオペレーティングシステム であり、かつコンピュータソフトウェアの広範囲に渡るコレクションである。 GNUは完全にフリーソフトウェアから構成されている。 GNUは"GNU's Not Unix! "(「GNUはUNIXではない」)の再帰的頭字語である。 wikipediaより https://ja.wikipedia.org/wiki/GNU#:~:text=GNU%EF%BC%88%E3%82%B0%E3%83%8C%E3%83%BC%E3%80%81%5B%C9%A1n,%E7%9A%84%E9%A0%AD%E5%AD%97%E8%AA%9E%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82
それぞれの主な役割
zip
圧縮アーカイバ。
※圧縮アーカイバ = 複数のファイルを一つのファイルにまとめる機能をもつ
gzip
単なる圧縮機能