弊社協力のクラウドファンディング告知

弊社の案件でいつもご協力頂いているデザイナーが手掛けたエレキギターの真空管エフェクターが、6/11より、マクアケでクラウドファンディング開始決まりました!

制作会社である株式会社Thingsは現在ギターのエフェクター制作がメインですが、
電子機器制作技術を生かして弊社とハード×ソフト一体でのITサービス開発も構想していますのでご期待ください。

http://thingsinc.tokyo/

Dropbox

dropbox-php-sdkの使い方メモ(Dropbox APIをPHPのSDKで利用する)

Lumenと組み合わせてDropboxのAPIを使用する案件があり、
その際に調べたことのメモです。
逐次追加予定。
 
 

SDK

Dropbox API v2には、公式のPHP SDKは無い。
公式で紹介されている有志によるPHP SDKの一つがdropbox-php-sdk
 
 

composerで追加

composer require kunalvarma05/dropbox-php-sdk

 
 

Controllerへの読込と初期化

<?php

namespace App\Http\Controllers;

use Laravel\Lumen\Routing\Controller as BaseController;
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
use Kunnu\Dropbox\DropboxFile;
use Kunnu\Dropbox\Exception;

class IndexController extends BaseController
{
    private $accessToken = /* DropboxのDevelopersで取得したアプリアクセストークン */;
    private $key = /* DropboxのDevelopersで取得したアプリキー */;
    private $secret = /* DropboxのDevelopersで取得したパスワード(App secret) */;
    private $dropbox;
    
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->makeClient();
    }

    public function makeClient()
    {
        $app = new DropboxApp($this->key, $this->secret, $this->accessToken);
        $this->dropbox = new Dropbox($app);
    }

 
 

Webhook

ファイルアップロード

// DropboxFileオブジェクトを生成
$uploadFile = new DropboxFile(/*アップロードしたいローカルファイルのパス*/);
// Dropboxへのアップロード。ファイルのメタデータが返る
$file = $this->dropbox->upload($dropboxFile, /*Dropbox上のアップロード先フォルダ/ファイル名*/, [/*パラメータ*/]);

実際のDropboxAPIv2において叩いているエンドポイントは/files/upload
また、パラメータは以下の内容を配列で設定。
・mode:
  add(default)…別名で保存
  overwrite…強制上書き
  update…指定したrevと一致した場合は上書き、それ以外は別名保存
 
 同名ファイルが存在する場合の上書き設定。
 通常は[“mode” => “add”]のように記述するが、updateの場合のみ[“mode” => [“update” => “rev文字列“]]となる。
 
・autorename:true / false(default)
  同名ファイルが存在した場合、別名ファイルを作成するかどうかの設定。modeと関連する。
 
・client_modified:タイムスタンプ(format=”%Y-%m-%dT%H:%M:%SZ”)、オプション
  ファイルアップロード時の時間をこちらで指定したい場合に設定。
 
・mute:true / false(default)
  共有ユーザに更新通知を送信しないようにするかの設定。
 
・property_groups:オプション
  ファイルに追加するカスタムプロパティのリスト。詳細は割愛。
 
・strict_conflict:true / false(default)
  同名ファイルが存在する場合の挙動を細かく設定する場合のフラグ。詳細は割愛。
 
 

参考

SDKを使ってPHPでDropBoxのAPIを扱う

Lumenの過去バージョンインストール方法

現在のLumenの最新バージョンは5.6(2018/03/26現在)ですが、
バージョン5.5よりシステム要件でPHP7以上を要求されるようになりました。

とはいえ、まだPHP5が要求される状況があるのも事実。
そのため、PHP5でも動く過去バージョン(5.4以前)をインストールしたいときがあります。
意外に検索しても方法が出てこなかったのでメモ。
(ぶっちゃけ、Laravelとほぼ同じですが)

composer create-project --prefer-dist laravel/lumen [プロジェクト名] 5.4

webのSSL標準化は避けられない、という話

最近、全てのWebページにSSLを入れるべき、という流れが加速していますが、
その原因はエドワード・スノーデンの告発に端を発する、
という記事がありました。
https://employment.en-japan.com/engineerhub/entry/2018/02/14/110000

記事の引用ですが、
スノーデンの告発により、
国家的な規模の予算と通信キャリアの協力がある状況下では、
従来は机上の空論と思われていたような
大規模な攻撃が実際に存在することが分かり、
IETF(Internet Engineering Task Force)が
「RFC7258: 広範囲の盗聴行為は攻撃である」という文書を出し
国家的な広範囲の盗聴行為に対して技術的な対応措置を行うことを明言した、
このことが現在の流れを作っているとのことです。

先日、Firefoxが今後のHTTP対応取りやめを発表しましたが、
http://www.publickey1.jp/blog/18/firefoxhttpscss.html)、
SSL(TLS3)による暗号化は現在まだ破られておらず
対抗策として推奨されています。
最終的にGoogleやMozillaは、
平文のHTTP通信上で使えるブラウザの
機能の廃止を計画しているとのことなので、
これに準じたものと考えられます。

IETFはインターネットのプロトコル(HTML5/CSS3など)
の策定を行う機関でもあり、
ここの決定が インターネットの動向の軸となります。
そのことから、この流れは今後も確実に進むと見られるため、
素直に全てのWebページに対してSSL化を進めたほうがよさそうです。

先週のIT関連ニュースピックアップ(2018/02/11~2018/02/17)

Chromeの悪質広告ブロックが、2018/02/15のChromeアップデートよりいよいよ実装されます。
ITMediaの記事

ブロックされる広告の判定基準は、
オンライン広告改善団体「The Coalition for Better Ads」が
策定する広告基準「Better Ads Standard」に準拠するとのことで、
悪質広告の例は以下のPDFで確認できます。
https://www.betterads.org/wp-content/uploads/2017/03/Full-Descriptions-Desktop-Mobile-Web-Ad-Types.pdf

今後、FirefoxやAppleのsafariなど、ほかのブラウザも追随する可能性があります。
Web制作の側としては、Web広告の出向先に確認を取り、
悪質広告とならないことをチェック、
およびブロックされた場合のどうするかを契約時に取り決めておく必要がありそうです。

先週のIT関連ニュースピックアップ(2018/01/21~2018/01/27)

今週は大雪やインフルエンザなどであまりチェックできていませんが、気になったのは以下のニュース。

これから開発されるFirefoxの新規機能は、HTTPSにしか対応しない。新規のCSSプロパティなども対象

これはつまり、FirefoxはWebサイトやアプリ開発時、テスト環境であってもHTTPS環境下でないと正常に機能や表示を確認することができないということになります。
自分たちのような開発会社では、今後ローカルでの開発環境においてSSLを必ず適用する必要がありそうです。

先週のIT関連ニュースピックアップ(2018/01/14~2018/01/20)

先週は仮想通貨の暴落のニュースの裏で、FinTech周りのニュースが多かった印象です。
先週のIT関連ニュースから、私が気になったものを。

広告収益に依存しないWebメディアの新モデル「Steemit」とは

従来、Webサービスでの収益の柱とされていた広告収入ですが、
スマホの普及やGoogleがChromeにて広告ブロックに舵をきったことなどから、今後少しずつ廃れていくかもしれません。
Steemitは代替手段になりうるのでしょうか。

三菱UFJ、仮想通貨「MUFGコイン」のハッカソン開催

先週、荒れに荒れた仮想通貨相場ですが、これは三菱UFJが独自発行するMUFGコインの話題。
基本的に1円=1MUFGコインで安定させるとされるうえ、メガバンクが自ら発行していて信用性も高そうなのですが、
まさか三菱UFJがハッカソンまでも自ら開催するとは!FinTechも含め、最新技術に熱心ですね。
2月3日に説明会とアイデアソン開催だそうです。

HTML 5.2の新機能・削除された機能、変更された記述ルールのまとめ

先日勧告が出された、HTML5.2のまとめ記事。
特に支払い機能(iframeからのPayment Request APIの使用)が注目点でしょうか。

[Objective-C]Viewの一部を切り抜く

a0002_001091_m

現在請け負っているiOSアプリで、画像のトリミング用ガイドとして
画像の上に切り抜く部分のみ透過しているマスクを作る必要があったんですが、
ほとんど情報がなかったのでメモ。

こちらに希望するものがあったのですがSwiftのソースで、
今回Objective-Cで組んでいたのでObjective-Cに書き直してみました。
(今さら、こんなダウンコンバートしたの必要な人いるかな。。。)
オートレイアウトを考えると、画像で作るよりソースで作成できたほうがいいですね。

    UIView *maskView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.view.size.width, self.view.frame.size.height)];

    // くりぬき元レイヤー
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.7f].CGColor;
    layer.bounds = CGRectMake(0, 0, (maskView.frame.size.width), (maskView.frame.size.height));
    layer.position = CGPointMake( (maskView.frame.size.width/2), (maskView.frame.size.height/2) );
    
    // マスクレイヤー
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.bounds = CGRectMake(0, 0, (maskView.frame.size.width), (maskView.frame.size.height));
    
    // 切り抜くサイズでパスを作る
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(20, (maskView.frame.size.height/2-100), (maskView.frame.size.width-40), 200)];
    [path appendPath:[UIBezierPath bezierPathWithRect:maskLayer.bounds]];
    
    // 反転させるため、くりぬき元レイヤーと同じ色を設定
    maskLayer.fillColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.7f].CGColor;
    maskLayer.path = path.CGPath;
    maskLayer.position = CGPointMake( (maskView.frame.size.width/2), (maskView.frame.size.height/2) );
    
    // マスクのルールをeven/oddに設定する
    maskLayer.fillRule = kCAFillRuleEvenOdd;
    layer.mask = maskLayer;
    
    [maskView.layer addSublayer:layer];
    [self.view addSubView:maskView];

iOS9で、ネットビジネスが大きく変わるか?

インターネット
 
 
 
このところ、9/9のイベントにて公開されるであろう、次期iOS「iOS9」で、Safariに搭載されると噂の広告ブロック機能が騒ぎになっています。
 
iPhoneの新OS『iOS 9』は広告ブロック機能でページ表示速度が3.9倍に。通信量も53%削減
 
「iOS 9」のコンテンツブロック機能、広告だけではなくGoogle Analyticsなどアクセス解析ツールもブロックされる可能性
 
「新iPhone」から広告は締め出されるのか
 
幸い、うちには広告収入モデルのビジネスは今のところ一切無く、割とのんびり静観しています。(でも、本当ならWebページ作成のやり方そのものも色々変わってきそうですが。。。)
 
 
 
今はまだ噂の域を出ず、9/9の公式発表を待つばかりなのですが、もし本当に、Webブラウザで自動的に広告をブロックするとしたら、これは驚くべきこと。
 
インターネット黎明期から続くネット広告手法を根底から否定することになり、そのインパクトはiPhoneがかつて成したFlashの排除以上でしょう。
 
もしかすると、これまで自分のプロダクトを利用して金銭の授受が発生する場合、頑なに自分達にもお金が落ちないと許さない姿勢を取ってきたAppleが、ついにネットそのものにまで手を延ばしてきたのかも。。。
 
 
 
個人的には、これがもし本当だったとして、Android OSを持つGoogleの対応が見ものだと思っています。
 
ユーザ側から見れば間違いなくメリットである今回の話。
Androidにも同様の機能を求める声が出るでしょう。
しかし、Googleの大きな収入源のひとつはネット広告であることは周知の事実。
Appleに追従することは、自身の収入源を断つことに他なりません。
 
いままで、ユーザーにも企業にも、割とうまく折り合いがつく道を選んできた感のあるGoogleが、今回、どんな道を選ぶのか。
 
楽しみではあります。