年別アーカイブ 2018

村上 著者:村上

【Web】APIのテストを簡単に行えるソフト「Postman」が便利

タイトル通り、今回は API のテストを簡単に行えるソフトウェアのご紹介です。
偶然使っている人を知り、便利そうなので探してみました。

ダウンロードはこちらの公式サイトから。

Postman|API Development Environment
https://www.getpostman.com/postman

Windows だけでなく、Mac、Linux の環境でも使えます。

 

起動後のページはこちら。

Request を選択すると、APIのテストを行えます。
というか、私はまだこれしか使ったことがないので、他にどんな機能があるのかを知りません。
少しずつ使っていきたいですね。

APIのテスト画面はこちら。

画面中央やや上にある欄に、テストしたいAPIのURLを入力し、その左隣で GET もしくは POST を選択します。
そして、その下のタブから、APIに渡す値を指定します。
Param や Header、POST の場合は Body もきちんと用意されています。
必要な情報を入力し終えたら、あとは Send ボタンを押すだけ。
そうすると、下の Response エリアに結果が表示されます。

 

以上、APIのテストを簡単に行う方法でした。
API 自体の開発もそうですが、外部サービスが提供している API をいったん試してみたい時とかにも便利ですね!
作業がはかどりそうです。
Web開発者の方は、是非ダウンロードしてみてはいかがでしょうか。

  • この記事いいね! (0)
asaba 著者:asaba

【ios】緊急速報を消す方法 ※非推奨です

今日も脱線気味です、すみません。

緊急災害警報のあのうるさい音を消す方法についてお話します。

少し前に強い台風が浜松を襲ったときに、風や雨音がうるさくとても眠れる状況ではありませんでした。

それだけならまだ耐えられたのですが、極めつけは携帯の緊急災害速報(怒)

何回鳴ったか分かりませんが、筆者を寝不足に陥れた張本人です。よく台風や大雨の時にジリジリ鳴っていますが実はこいつ消せます、簡単に。

まず、設定をタップします。その後に通知という赤いアイコンをタップしてください。

その後に一番下までスライドすると、緊急速報というリストがあります。通常は緑でonになっていると思うので、トグルをタップして

オフにします。たったこれだけで鳴らなくなります。

 

いかがでしたでしょうか。大げさだなと感じる人もいれば万が一の時に備えて鳴るようにしなきゃと心構えを持つ人もいるので

強くはお勧めしません。むしろ止めといた方が今後の為ですはい。

いつでもonにそんなもん怖くねーよゆっくり寝たいんだよ(# ゚Д゚)という方は試してみてください、自己責任ですけど。

はい、短いですが今日はこれでおしまいです。まじめな方は今日の記事は見なかったことにして災害に対応できるようにしてくださいね!

それでは!

 

P.S.これだと緊急地震速報も鳴らなくなるのかな・・・?それは怖いけど。

 

 

  • この記事いいね! (0)
著者:杉浦

CRUD機能を持つコントローラ

 CRUDはデータを扱う各機能であるCreate(生成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字をとってまとめた略語です。ざっくばらんに言えばCRUDはデータを操作のに最低限必要な機能のまとめです。4つだけの当たり前の機能をまとめているのは、4つまとめて使うことが多く、どれかの機能が欠けているだけでデータを操作する機能とは呼べないものになってしまうからです。例えば、使用可能な機能を、一般ユーザにはRead機能のみ、管理者ユーザにはCRUD機能全て、と割り当てるのは管理者のみがデータを操作できる機能割り当てと呼ばます。
 コーディングには機能の分割を行うべきという原則があります。機能を関数に分けたり、クラスに分けたりして理解しやすく、間違えにくくするわけです。この分割の定番として、データを表現するモデルとデータを扱うコントローラ、を分割する手法があります。この手法によってコントローラを分割した際、コントローラの中の機能を更に分割していきます。このコントローラの機能の分割の基準としてCRUDを用います。機能をCRUDとしてテンプレートの様に扱うことによって、先述した”データを操作する機能とは呼べない不完全な機能”を作ってしまうことがとても減ります。

  • この記事いいね! (0)
takahashi 著者:takahashi

ついにメールサーバーがハード製品として販売される時代に!? メールサーバー専用ガジェット「Helm」

なんとメールサーバーそのものを個人宅向けの専用デバイスにして販売を開始した企業が現れました。

Helmという製品です。

Helm

誰でも簡単に自分のメールを自分で管理しセキュアに運営できるメールサーバーが作れる「Helm」- Gigazine

ドメインの取得とインターネット回線は必要ですが、その他機器は一切不要で、Helm側のクラウドゲートウェイを利用するので固定IPの割り当ても不要となっています。

Helmのコンセプトは”データのユーザー完全所有化”で、この辺りの思想はownCloudNextCloudに近いものを感じます。

一般的によく使われるフリーのメールサービスは、各サービスの管理をする企業が管理するサーバーにデータが保存されるため、企業によっては自分のメールデータを勝手に閲覧されてしまう可能性もありますし、たとえプライバシーに慎重な企業が管理していてのぞき見の心配はなかったとしても、クラッキングによるデータ流出のリスクから逃れることはできません。

一方Helmは、メールデータはすべてエンドツーエンドで暗号化され、Helm側が一切データの中身を見ることができない仕様になっているとのこと。


※写真は公式サイトをGoogle翻訳で日本語にしたものです。

さらに、端末内の暗号化を解除する唯一の秘密鍵も専用の物理ストレージになっていたり、Helm自体の起動にもセキュアブートが採用されていたりと、データ流出対策にとても気を配った設計になっていることがうかがえます。

ネット上のサービスを利用する場合と違い、いままで自宅サーバー、いわゆるオンプレミスのサーバーを手に入れるためには自力で環境を構築する必要がありました。
もっともそれが醍醐味だったりしたわけですが、最近は同じようなことがハードをそろえなくてもネット上でできるようになったため、こういったサービスを利用する人が増えていきました。

一方でオンプレミスの方は今回のHelmのような、”知識や高価な機器がなくても構築できる”系の機器が増えているような印象がありますし、今後は一般ユーザー向け製品としての路線へ進んでいくのかもしれませんね。

  • この記事いいね! (0)
asaba 著者:asaba

世界のプログラミング教育事情

 

今日は脱線します。

 

2020年度からプログラミング教育が義務化され、今では小学生もパソコンでコードとドンパチする時代に変わりました。

自分が小学生の時は情報の時間なんてなかったし両親のパソコンをいじる度胸もなかったので今の子供たちが羨ましいくらいです(´・ω・`)

今はプログラミングはパソコンとwifiがあればどこでもできる社会になりましたが、世界ではもっと前からプログラミング教育を実施しているみたいです。

例えば、アメリカなんかはプログラミングの授業という概念はなく、与えられた時間とパソコンで好きなサービスやゲームを作ってねと

いうめっちゃフリーダムなカリキュラムがあります。そこにfacebookやgoogleの社員が講師としてやってきたり小学生のプログラミングの

コミュニティが揃っているので、教育という面では全国でも高水準にあると考えられます。

 

it新興国としてインドの教育もなかなかで、まず新卒中途問わず入社した人は会社の提携している大学に入学します。

また海外留学も盛んに行われ、アメリカの大手it企業や日本のメルカリでも多くのインドの方々が活躍しており、国を挙げてit技術の向上を図っているのが分かります。

ヨーロッパでは、スタックオーバーフローで最もユーザー登録が多くマイスターの数が多いロンドンが将来有望なit都市として挙げられています。

フランスやイギリスではプログラマーやシステムエンジニアの賃金が他の職業と比べて高く、ある役所の男性がホームレスの方にお金をあ

げようとしたところ、そんなものよりプログラミングがしたいのでパソコンを買ってくれと懇願されたエピソードが残っているほど憧れて

いる方が多い地域なのです。

日本が腰を上げたのはこれらの地域より10年も後で、it大国の名前を維持するにはアジア諸国の成長が著しい中で取り残されない様に切磋

琢磨していくしかないみたいですね。このご時世自動運転が普及していく世の中で、得意のAI産業を活かしてぜひともアメリカや中国を

ぶち抜いてもらいたいです。

  • この記事いいね! (1)
著者:杉浦

説明や要約を行う変数、関数

 巨大なオブジェクトを扱う時、深い場所にいる子要素を扱うことがままあります。メソッドチェーンによる処理結果を扱う時は深い子要素よりも簡単に、元の意味からかけ離れた式を作れます。例えば、

if line.split(':')[0].strip() == "root":

Dustin Boswell; Trevor Foucher. リーダブルコード (Kindle の位置No.1520). 株式会社オライリー・ジャパン. Kindle 版. 
@if ($experiense->member_id == Auth::user()->id)

です。こういった式をそのまま扱うと、これから先に読み返す時、混乱のもとになります。これを意味の通る変数名にまとめるとコメントもなく、可読性が高まります。変換は例えば、

username = line.split(':')[0].strip()
if username = = "root":

Dustin Boswell; Trevor Foucher. リーダブルコード (Kindle の位置No.1522). 株式会社オライリー・ジャパン. Kindle 版. 
@if (Auth::user()->owns($experiense))
//ここから別のファイル
class User
{
    public function owns($experiense)
    {
        return $this->id === $experiense->member_id;
    }
}

の様にできます。後者の例は別のファイルにロジックを複数用意した方が良かったり、owns()が何度も使われたり、という時に特に役に立ちます。

  • この記事いいね! (0)
takahashi 著者:takahashi

[nginx小ネタ]failed (24: Too many open files)が出た時にまず確認したいこと

今回は、先日のちょっとしたやらかし談をご紹介します。

先日新しくサーバーを構築していて、nginxでバックエンドのApacheへのリバースプロキシを構築していたのですが、途中でこんなエラーに遭遇し、サイトが表示されなくなってしまいました。
logを確認するとこんなメッセージが。

accept4() failed (24: Too many open files)

いろいろ調べたところ、OSファイルディスクリプタ数上限の設定やnginxの制限の設定などを変えると解決するという情報を発見て、sysctl.confやらnginxのコンフィグやらを色々変えたのですが、何度試しても同じエラーが出続けて動作せず。

おかしいなーと思いながらもう一度設定ファイルを見返したところ、あることに気づきました。

バックエンドのApacheでは3003番ポートでListenしていて、nginxの3001番ポート経由でバックエンドのサーバーにつなげさせたかったのですが、設定ファイルには

server {
    listen       3001;
    server_name  node.example.com;

   client_max_body_size 1g;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-Proto \$scheme;


    location / {
        proxy_pass http://localhost:3001; #←!?
    }

}

となっていました。
そう、つまりlocalhostの3003番ポートで動作しているApacheへリバースプロキシさせるはずが、あろうことかnginxが待ち受ける3001番ポート自身をまたリバースプロキシするような設定になってしまっていました。
当然、nginxの待ち受けポートをnginx自身がリバースプロキシしてしまっているので接続が無限にループしてしまい、それが原因でOSの上限を超えてしまっていたというのが今回の原因でした。

すぐに

proxy_pass http://localhost:3003;

に修正したところ、正常にページが表示されるようになりました。

見慣れないエラーが出ると慌ててついいろいろ試してしまいますが、まずは自分の凡ミスを疑ってみることも大事なんだなと思いました(;´∀`)

  • この記事いいね! (0)
村上 著者:村上

【Android】「Only the original thread that created a view hierarchy can touch its views.」の対処法

今日の記事は、Androidアプリ開発中に遭遇したエラーについてです。
修正はそこまで大変ではなかったのですが、使用頻度が低く、忘れそうだったので備忘録としてまとめます。

エラーは「Only the original thread that created a view hierarchy can touch its views.」というもので、こちらはメインスレッド以外で、TextView などの UI を変更しようとすると発生するエラーです。
シンタックスエラーとは違い、ビルドは通ってしまうので要注意ですね。

 

では、早速対処法についてご紹介。
今回参考にさせていただいたサイトはこちらです。

メインスレッド以外でUIを変更する方法 – Accele Biz IT開発技術 調査報告書
http://accelebiz.hatenablog.com/entry/2016/09/01/061934

エラーが発生したコードはこちら。

TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = findViewById(R.id.[ID名]);
    showMessage();
}

private void showMessage(){
    try {
        /* 処理 */
        textView.setText("[表示したい文字列]");
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

一部改変していますが、だいたいこんな感じ。
で、問題は、showMessage() 内の try/catch で指定した、setText() です。
やった事がなかったので知らなかったのですが、このようにメインスレッド以外で UI を操作することはできないようでした。

ですが、対処法もちゃんと用意されていました。
参考サイトそのままですが、Handler を使用して、別スレッドからメインスレッドに処理を依頼する方法です。
具体的には下記のとおりです。

private void showMessage(){
    final Handler mainHandler = new Handler(Looper.getMainLooper());
    try {
        /* 処理 */
        mainHandler.post(() -> {
            textView.setText("[表示したい文字列]");
        });
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

2行目に Handler を宣言し、TextView の操作の記述を mainHandler.post() で囲うだけです。
これを追加したところ、問題なく TextView の操作を行うことができました。

 

以上、TextView などの UI の操作をメインスレッド以外から行う方法でした。
今回の解決策は、例えば何らかの処理を別スレッド&非同期で行っていて、結果が返ってきたタイミングで UI を変更したい、等の場合にも使えるかと思います。
もし、同じエラーでお困りの場合は、是非参考にしていただければと思います。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】プラグイン「cordova-plugin-fcm」のgetTokenでnullが返ってくるときの対処法

現在進行形で格闘中のアプリの修正の中で、解決したものがあったのでそれをご紹介。
タイトル通り、「cordova-plugin-fcm」で端末の一意のトークンを取得する getToken() で、なぜか取得した値が null になる時の対処法です。
他にも同じエラーに悩んでいる人はいたようだったので、ある程度簡単に情報はヒットしました。
で、今回参考にしたサイトはこちら。

getToken() returns ‘null’ only after install・Issues #104・fechanique/cordova-plugin-fcm・GitHub
https://github.com/fechanique/cordova-plugin-fcm/issues/104

 

解決策としましては、もしトークンが取得できなかった場合は、onTokenRefresh() を使って、トークンを再取得しなおす方法が良いとのこと。
実際のコードはこちら。

FCMPlugin.getToken(
    (token) => {
        if(token == null){
            FCMPlugin.onTokenRefresh(function(token){
                // onTokenRefresh() でトークンを取得時の処理
            });
        } else {
            // getToken() でトークンを取得した時の処理
        }
    },
    (err) => {
        // エラー時の処理
    }
);

こんな感じです。
もし、getToken() で取得したトークンが null だったら、onTokenRefresh() でトークンを再取得しています。
現時点では、問題なくトークンが取得できました!
取得できたトークンはデータベースに保存なりして、プッシュ通知の送付に使います。

…が、なぜか今度はプッシュ通知が送れず…。
Androidだと、上記のトークンが取得できない問題もなく、あっさりとプッシュ通知送付まで実装できたのですが、まさかiOSでつまづくとは…。
一難去ってまた一難という感じですが…引き続き頑張ります。

 

ということで、cordova-plugin-fcm プラグインでトークンが取得できない時の対処法でした。
同じことにお困りの方は、是非お試しください。

  • この記事いいね! (0)
著者:杉浦

読みやすい色合いを提案してくれるwebサービスColor Safeの紹介

 Color Safe – accessible web color combinations
 

Empowering designers with beautiful and accessible color palettes based on WCAG Guidelines of text and background contrast ratios.

 Google翻訳:Color SafeはWCAGのテキストと背景のコントラスト比のガイドラインに基づいて、美しく使いやすいカラーパレットをデザイナーに提供します。
 WCAGはWeb Content Accessibility Guidelinesの略称です。要はwebページの見やすさ、読みやすさをよくするためのガイドラインです。
 主な使い方は下の画像の様にパラメータを指定して”GENERATE COLOR PALETTE”でパレットを作成、作成結果から好きな色を選んで色を表す文字列をコピーです。WCAG Standardの項目はAA、AAAの2種類があります。AAは十分読みやすいレベルであり、多くの場合これを達成しているだけで十全です。AAAは特別目立つ、コントラストの強い色の組み合わせです。ヘルプには一部の企業、政府がAAAに準拠しているとあります。
 
 作成した結果、文字が十分に目立つ色が並びます。各色をクリックして見栄えチェック、色を表現する文字列の出力が出来ます。

  • この記事いいね! (0)