サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
mgre.co.jp
ここ最近はずっとAWSのコンソールとイチャコラしてるのですが、弊社がリリースしたEAPが実運用に耐えられるかどうかという負荷テストを行っていた際に珍しい(?)ものが見れました。 EAPは標準構成の場合サーバはAWSのt2系インスタンスで稼働するのですが、このt2系インスタンスというのは普段はあまりCPU使用率が高くなく、ここぞという時に短時間であれば高CPU使用率もこなせるというWebサーバに向いたインスタンスなんですね。 で、JMeterでもりもりと負荷をかけていたところ急にレスポンスが悪くなり、sarコマンドで見ていたサーバリソースに見慣れない物が。 まぁ、タイトルで書いてしまってるんですが、こんな感じですね。 09:09:04 AM CPU %user %nice %system %iowait %steal %idle 09:09:05 AM all 32.35 0.00 0.00
前回のブログで紹介したように、EAP Androidアプリでは半年ほど前から開発言語にKotlinを導入しています。今回は既存プロジェクトのKotlin化について紹介します。 なぜKotlin? Kotlinには以下のメリットがあります。 Null安全などの安定性を向上する仕組み 簡潔な記述力 Javaとの相互運用性 まず安定性の向上についてですが、Kotlinでは言語自体でnull参照を回避することが考慮されているため、コンパイル時に多くのエラーを防止するようになっています。アプリがクラッシュする原因の多くはnull参照なので、この仕組みは大いに安定性の向上に寄与してくれます。 簡潔な記述力について、Kotlinでは文法が洗練されているので、getter/setterなどの冗長な記述をすることなくアプリを開発できます。 加えてラムダ式やコレクション操作、スコープ関数などの、かゆいところに
Androidエンジニアのたなべです。 ランチェスターに入社して4ヶ月が経ち、その間に弊社アプリプラットフォームEAP1.4のリリースを経験させてもらいました。今回は外部からジョインしたときの印象や個人的なふりかえりを兼ねて、EAPのAndroidアプリの技術トピックについて紹介します。 開発言語: Kotlin, Java EAPの最初のコミットは2017年10月です。当時のランチェスターの開発標準として、コードはJavaで記述していました。2018年6月から開発が始まったEAP1.3からは主要言語にKotlinを採用し、新規のコードはKotlinで記述しています。加えて、既存のコードもKotlinへの書き換えを行っています。 EAP以前にはプロダクションコードをKotlinで書くことがありませんでしたが、Kotlinスタートブック(通称:赤べこ本)やKotlinイン・アクションなどを読
【おことわり】 ここで紹介しているアプリ向けのGoogleAnalyticsはすでに終了しています。できそうだけどできないどころか、GoogleAnalytics自体が使えなくなってしまいました。お役に立てずごめんなさい。 弊社のEAPでも標準で実装しているモバイルアプリ向けGoogleAnalytics。無料とは思えないくらい充実した機能を持っていますが、ウェブサイト向けのGoogleAnalyticsに慣れている人からすると「えっ? それできないの?」と思うことがいくつかあります。またアプリ側では計測しようがないデータも「なんで取れないの?」と言われることがままあります。 その中でもよく耳にする内容を、GAIQもウェブ解析士の資格も持ってない、モグリのGoogleAnalytics使いの僕が解説してみたいと思います。詳しい方、もし内容に違っている点など見つけられたら、教えていただけると
carrierwaveでjson等をアップロードする際に日本語が文字化けしてしまったのでcharset等のメタデータを設定するメモ。 Gemfile # Gemfile gem 'carrierwave' gem 'fog', require: 'fog/aws' carrierwaveの設定 # config/initializer/carrierwave.rb CarrierWave.configure do |config| config.storage = :fog config.directory_permissions = 0777 config.fog_credentials = { provider: 'AWS', aws_access_key_id: アクセスキー, aws_secret_access_key: シークレットキー, region: ap-northeast
事前に作りたいキーがはっきりしていればLSIが作成できるが、パーティションキーとの組み合わせに限定される。 GSIなら後から作成可能で、パーティションキー以外での検索要件も満たすことが出来るためRDBの様な柔軟な検索も可能になる。 課金 DynamoDBはプロビジョニングされたスループットに対して課金される。 スループットは読み込み・書き込み用に予約されたキャパシティのみ使用できる。 – 書き込み 1ユニット=1KBあたりのアイテムについて、1秒あたり1回の書き込みが可能 – 読み込み 1ユニット=最大1KBのアイテムに対して、「強い整合性のある読み込み」を1秒あたり1回できる(「結果的に整合性のある読み込み」については1秒あたり2回) ユニット数の計算 必要な容量のユニット数 = 1秒あたりの項目書き込み/書き込み数 * 項目のサイズ(KB切り上げ) (書き込みは読み込みの5倍のユニット
Oculus Riftを見てもPlayStaion VRを見ても『バーチャルボーイ』の苦い思い出しか浮かんでこない昭和世代の篠キチです、こんばんは。 個人的にバーチャルボーイには思い入れがあったりなかったりするんですが、今回はバーチャル繋がりってことでVirtualBoxのネタについて書きたいと思います。(いつも通り) VirtualBoxのゲストOSとネットワーク管理者の静かな戦い VirtualBoxのゲストOSとして開発環境を用意するってのは非常によくある光景だと思いますが、その開発環境に外部からアクセスするのは若干面倒な設定が必要だったりします。 ホストOSとの間で通信するだけならVirtualBoxに用意されているホストオンリーネットワークの機能を利用すると、わりと簡単に設定できて便利ですが、気をつけないと思わぬトラブルを起こしてネットワーク管理者に説教されるハメになりかねません
gem 実装にあたっては以下のgemを使用します。 https://github.com/zaru/webpush https://github.com/rossta/serviceworker-rails VAPIDの生成 インストールしたらプッシュ配信用にpublic_keyとprivate_keyを生成します。 VAPIDについては以下。 http://qiita.com/tomoyukilabs/items/9346eb44b5a48b294762#%E5%85%A8%E4%BD%93%E3%81%AE%E6%B5%81%E3%82%8C 生成したpublic_keyとprivate_keyはdotenv-rails等で環境変数に設定しておきます。 manifest.jsonの宣言 次にmanifest.jsonを宣言します。詳細な仕様は以下。 https://developer.
初めまして、ここではお初にお目にかかります。 2月にランチェスターの仲間入りを果たしました坂口です。 3年目のまだまだなエンジニアですが、それなりにRailsとかかけるようになりたいな ということで先日『【まつもとゆきひろ氏特別講演】若手エンジニアの生存戦略』に行ってきました。 若手エンジニアかどうかはともかく、最近Rubyデビューをした私にとっては、その生みの親であるMatzさんに会えることはこれからのエンジニア人生に良い影響を与える気がしたので行くことにしました。 その中でエンジニアとして生き残るにはアウトプットし続けることが大切だという話があったので、アウトプットの1つとしてそのまとめと感想を。 エンジニアとして生き残るには? (以下メモからのまとめ) パターン認識能力を鍛えろ 『パターン認識とは、失敗体験を素早く解析して同じ過ちを繰り返さない、成功体験であれば同じ成功が繰り返し発生
みなさんこんにちは、意識高い系エンジニアの僕です。 先日1つのサーバで複数のRails環境をサブディレクトリで動かすということをしたのですが、 そのときのメモを公開したいと思います。 対象バージョン Ruby 2.2.2 Rails 4.2.1 CentOS 6.4 Apache 2.2.15 Passenger 5.0.6 Capistrano 3.4.0 Railsのアプリをサブディレクトリで動かす場合、Rails.application.config. relative_url_rootを設定することで実現できます。 relative_url_rootとは Railsにはルートディレクトリを変更できるrelative_url_rootという値があます。 環境変数であるENV[“RAILS_RELATIVE_URL_ROOT”] を設定することでrelative_url_rootに設定
を採用しています。(Keep、Problem、Tryの略です。) 毎週Keep、Problem、Tryについて大きな台紙に付箋を貼り、その台紙を常に見えるように壁に貼るのですが、 見た目が汚い 窓を開けると紙が飛んでいく 貼ったり剥がしたりしているうちに壁紙も剥がれた というよくわからない状況になってきたためKPTをWeb化することにしました。 しかし、Web化するもなにもそもそもそんなツールがあるのか?という不安もあるなかで、実際に探してみるといくつかのサービスが既にありました。 KPTon KPT LOG kpt-it それぞれ試してみたのですが、用途として求めているポイント 複数人で同時に編集し、お互いに参照したい 元々広い紙面上で行っていたため、画面を広く使いたい セキュリティ面も押さえておきたい を考えると少し物足りないものがありました。 そんな時に、たまたまこの記事を発見し、
FirebaseのHTTP APIを使ってPush通知を送るための検証をしたいと思います。 FirebaseでPush通知を送る方法は管理画面から送る方法と、HTTP APIを使う方法があります。 単発であれば管理画面でも良さそうですが、定期的に送るとなった場合はHTTP APIを使う事になると思います。 検証環境 XCode 7.3.1 iOS 8.1以上 Swift 2.2.1 Ruby 2.3.1 送信対象の選択方法 以下の3種類を送信対象にできます。 今回はTopicで送信するパターンを検証します。 対象 説明 HTTP APIの実行には、rubyのfcmというgemを使います。 HTTP APIを実行するためのGemをインストール 以下のコマンドを実行してHTTP APIを実行するためのgemをインストールします。 gem install fcm Topicとは何か Fireba
FirebaseのHTTP APIを使ってPusu通知を送るための検証をしたいと思います。 FirebaseでPush通知を送る方法は管理画面から送る方法と、HTTP APIを使う方法があります。 単発であれば管理画面でも良さそうですが、定期的に送るとなった場合はHTTP APIを使う事になると思います。 検証環境 XCode 7.3.1 iOS 8.1以上 Swift 2.2.1 Ruby 2.3.1 送信対象の選択方法 以下の3種類を送信対象にできます。 今回はDevice Groupに対して送信するパターンを検証します。 対象 説明 HTTP APIの実行には、rubyのfcmというgemを使います。 HTTP APIを実行するためのGemをインストール 以下のコマンドを実行してHTTP APIを実行するためのgemをインストールします。 gem install fcm Device
遅ればせながらなんだかスゴそうなlambdaを使ってみました。 lambdaでS3のイベントを受け取るには同一リージョンに作成する必要がありましたがlambdaは現在東京リージョンで使用可能です。 ですので以下は全てap-northeast-1リージョンに作成します。 まずS3のバケットを作成します。 この時点ではまだlambdaに関する設定はいりません。 次にlambda functionを作成します。 Select blueprintで言語をnode.jsとしてS3-get-objectを選択します。 次にイベントソースを設定します。Event source typeはS3、Bucketは先ほど作成したもの、Event typeはObject created(All)とします。 処理するファイルを限定する場合はPrefixにディレクトリ名、Suffixに拡張子を入れることで特定ディレク
こんにちは。VirtualBox大好きっ娘の篠キチです(おっさん)。 VirtualBox 待望のバージョンアップ みなさんVirtualBoxにVer5が出ましたよ! …3ヶ月以上前に(白目 大好きとか言ってんならもっと早く気づけよ、全然待望してねえじゃんって話ですが、VirtualBox起動したときに新しいバージョンがあるかどうか自動でチェックしにいく仕組みがあるのに、それ経由で通知されたのつい最近だよ。しかも既にVer5.0.8だった。教えろよVirtualBox! 何事も報・連・相だよ、ホウ・レン・ソウ! 相談されても困るけど。 まあ、安定版じゃなかったから案内されなかったんだと思うことにします。 パフォーマンス検証 というわけで、VirtualBoxが4から5になって速くなったりしたのか、3ヶ月以上遅れの速報してみたいと思います。 以前、仮想マシンのイメージをVMWareのVMD
未実装と書いてあるところはヘッダファイルでは以下のようにUnimplementedとなっているものです。 { NSURLRequestUseProtocolCachePolicy = 0, NSURLRequestReloadIgnoringLocalCacheData = 1, NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, NSURLRequestReturnCacheDataElseLoad = 2, NSURLRequestReturnCacheDataDontLoad = 3, NSURLRequestReloadRevalid
例えばAPIと管理画面でリポジトリを分けた場合に、ステージング環境で複数サーバを用意するほどでもないので1台のサーバで複数アプリを動かしたい時のメモ。 Nginx + Unicorn でrailsを動かす想定です。 # /etc/nginx/conf.d/my-app.conf # api server upstream unicorn_api_server { server unix:/tmp/unicorn.api.sock fail_timeout=0; } # admin server upstream unicorn_admin_server { server unix:/tmp/unicorn.admin.sock fail_timeout=0; } server { listen 80; client_max_body_size 4G; server_name stg.sam
lengthの場合、SQLの実行結果の行数をカウントするため、COUNTを使ってカウントするcountやsizeの方が処理は軽くなります。 しかし、countはキャッシュを使わないため、毎回COUNTのSQLを実行してしまいます。 行数のカウントだけであれば、キャッシュの有無で判断してくれるsizeを使ったほうが良さそうです。 ちなみに今のRailsはSQLを遅延実行するようになっているので、たとえば以下の様なSQLが2回発行されるようなコードでも、 pry(main)> clients = Client.all Client Load (0.3ms) SELECT `clients`.* FROM `clients` pry(main)> clients.count (0.3ms) SELECT COUNT(*) FROM `clients` => 5 メソッドチェイン
またしてもVirtualBoxネタです。前回の記事ではVMWareで使われているVMDK形式の仮想マシンイメージを、変換せずにそのままVirtualBoxに読み込ませました。とりあえず動かすだけならこれでいいんですが、なんとなく本来のVirtualBoxの形式と比べたらパフォーマンスが悪いんじゃないか? という気がします。 そこでVMDK形式だった仮想マシンイメージをVDI形式と、あとMicrosoftのVirtual PCで使われているVHD形式に変換してみて、ディスクの読み書きのパフォーマンスに差が出るのか調べてみました。 仮想マシンイメージの変換ですが、これはVirtualBoxに標準で用意されているコマンドを使えば簡単にできます。 ※VirtualBoxに読み込まれている仮想マシンイメージであれば、VirtualBoxのメニューにある「仮想メディアマネージャー」でコピーの機能を使っ
※ この記事は少し古かったんですが、検索経由で来られる方が多いので 2015/11/26 に情報を更新しました。MacOSはEl Capitan(10.11.1)、VMWareFusionは8.0.2、VirtualBoxは5.0.10で再検証し、スクリーンショット等も追加しました。ご参考になれば幸いです 前回はVirtualBoxのホストオンリーネットワーク絡みでDHCPサーバが悪さしてた件を書きましたが、今回もVirtualBox関連ネタです。 VMWare FusionからVirtualBoxへ 個人的にVMWareFusionを長く愛用してきたんですが、会社でVirtualBoxを使う機会が増えてきて、機能的にそれほど遜色ない印象もあったので、自宅のMacをYosemiteにアップデートするタイミングでVirtualBoxに移行してみました。 その際、VirtualBox側に用意さ
こんにちは。しょぼんです。 みなさんもうWindows10のアップデートはお済でしょうか。 大半の開発者の方はお互いの出方がをうかがっている状態だと思うのですが、僕ことマネージャーは、開発環境などというものは持ち合わせていませんので、即アップデートしました。そしてタイトルにもある問題が発生しました。 TortoiseSVNのマーク(アイコンオーバーレイ)が消えてる・・(-_-; リポジトリと差分がなければ緑、差分があれば赤のマークがファイルアイコンの右上に出るアレが消えてしまいました。この状態だとどのファイルが変更済みなのか全くわからなくなってしまいます。(一度commitウィンドウ開けばいいのですが、面倒くさいです) 原因についていつものGoogleに問い合わせたところ、すぐ教えてくれました。 アイコンオーバーレイの設定数には上限があり、Windows10でOneDriveとSkyDri
チーム内の情報共有について 案件の情報など以前はGithubのWikiやBacklogにまとめていたのですが、検索などいろいろと使いにくい部分があるので、巷で使われているようなサービスを導入してみようという事になりました。 esaとQiita Teamを使ってみる 色々なサービスがある中、他の人から名前のあがったQiita Teamと、個人的に気になっていたesa.ioを使ってみました。 印象では、私にはesa.ioのカテゴリ分けがすごくシンプルで探しやすいと感じたので、その時点でesa.ioを積極的に使っていこうと決めてそれを使い始めました。 まだトライアル中(1ヶ月半くらい使いましたました)ですが使い勝手が良いのでそのままesa.ioを使うことにしたいと考えています。 しかし、有料版に移行するからにはそれなりの説明が必要なので改めてQiita Teamとの違いを見てみました。 esa.
はじめに こんにちは。へっぽこエンジニアのkurashitaです。 今回はAWS上のEC2インスタンスにNginxとUnicornをインストールしてRailsアプリケーションをCapistrano でデプロイした時の手順メモです。 なお各用語についてはおググりください。 サーバはAWSのEC2を用意してある前提です。 以下の一連の記事が非常に参考になりました。 http://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde EC2上でのインストール作業 今回はstaging環境として構築します。 EC2に ec2-user で ssh ログインします。 git gitをインストールします。 sudo yum install git 各パッケージ 各パッケージをインストールします。 sudo yum install gcc-c++ glibc
Railsで関連レコード数を集計するには以下の2つの方法があります counter_cache counter_culture 前者のcounter_cacheはRails3からの機能で、以下のように設定することにより関連するテーブルのレコード数を簡単にカウントさせることができます 例えばArticleモデルとCommentモデルの以下の様な親子関係があった場合、 comment.rb class Comment < ActiveRecord::Base belongs_to :article, :counter_cache => true end article.rb class Article < ActiveRecord::Base has_many :comments end Commentが作成されると以下の様なSQLが発行され、関連するArticleのcomments_coun
先日、スマホで撮影した写真をサイトにアップロードした場合、 縦で撮影したものでも横長の画像として保存されてしまう事象が発生しました。 その時の対応方法を忘れないようにまとめておきます。 <なぜ起きるか> スマホで撮影した画像は、撮影時のカメラの向きにかかわらず、横長の状態で保存されています。 そして表示の際にExif情報から撮影時のカメラの向きなどを読み込んだ上で表示をしています。 ですので、サーバーにアップロードする時にはExif情報を元に画像を回転してから保存する必要があるのです。 //PHPでExif情報を取得する方法 $file_name = 'xxx.jpg'; //↓$exif_datas内の Orientationという配列に値がセットされる。 $exif_datas = exif_read_data($file_name); <Orientationの中身> Orienta
「ミライのお仕事」でメグリをご紹介いただきました こんにちは!管理部の橘です。 自分の天職を探す転職情報メディア「ミライのお仕事」さんで、メグリをご紹介いただき...
前回記述したProgressDialogより、今回は進行状況を表示させる場合の設定について説明します。 前回と同様、Runnableインターフェイスを実装し、 クラス変数にプログレスダイアログとスレッドを宣言する。 public class Terms extends Activity implements Runnable { private static ProgressDialog waitDialog; private Thread thread; private boolean isProgressEnd = false; private boolean isErr = false; 任意の処理時にプログレスダイアログの設定・表示を行い、スレッドを実行する。 private void setWait(){ //プログレスダイアログの設定 waitDialog = new Prog
Androidでの開発で、時間がかかる処理を行っている時に処理中であることや進捗状態を示す為にProgressDialogを使用する。 今回はシンプルなくるくる回るタイプのダイアログの設定を説明します。 Handlerを作ったスレッドで実行を可能にする為、Runnableインターフェイスを実装する。 クラス変数にプログレスダイアログとスレッドを宣言する。 public class XXXX extends Activity implements Runnable { private static ProgressDialog waitDialog; private Thread thread; 任意の処理時にプログレスダイアログの設定・表示を行い、スレッドを実行する。 private void AAA(){ // プログレスダイアログを開く処理を呼び出す。 setWait(); } pri
Androidでの開発で、リストビューに項目毎に画像を置くケースでの対応です。 メモリ使用量を抑える為、スクロールさせて実際に必要になったときだけ表示する対処を行う。 ● 読込中と読込完了時の設定 AsyncTaskでバックグラウンド処理を行い、読込中の場合はプログレスバーを表示させる。 ● 画像データのキャッシュの使用 AsyncTaskで一度読み込んだ画像をキャッシュに保持し、スクロールにより再表示する時にwebからの読込を省略する事で負荷を軽減する。 ● 画像データのキャッシュのクリア キャッシュを保持し続けるとメモリ使用量が増える為、リスト画面終了時にキャッシュをクリアする処理を呼び出す。 以上の事を踏まえたソースコードを以下に示します。 画面レイアウト設定用XMLファイル <?xml version="1.0" encoding="utf-8&
次のページ
このページを最初にブックマークしてみませんか?
『TOP - メグリ株式会社』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く