ブログ

  • 無人飛行機(ドローン)の飛行許可ゲットしました!!

    無人飛行機(ドローン)の飛行許可ゲットしました!!

    ようやく土俵に上がれた気がします。

    最初、ドローンに惹かれたのは営利目的でした。
    ビジネスチャンスがあるぞ!とネット上の声が大きくて、それならやってみようかと。
    まずはどんなもんかとトイドローンを買ったのが6月中旬。

    念願の!念願のトイドローンがウチにやって来た!! 遊び倒してやるぜ!!

    Hideyuki Motooさん(@mofoo)がシェアした投稿 –

    最初は近所の公園なんかで飛ばしてみたりしてたけど、ドローンについて知れば知るほど、安易に近所の公園で飛ばしちゃいけないと知ったり、200g以上のドローンを福岡市内(人口集中地区)で飛ばすには、航空局からの飛行許可を得なければならないとか、その飛行許可を得るには10時間の飛行実績(訓練?)が必要だとか。

    そんでスクールに行ってみようかと。

    無料相談会に行ってみたのが7月中旬。
    そのスクールで受講することに決めたんだけど、その訓練内容を聞くに、いま持っているドローンだと練習にならないと判明(→高度や位置をセンサーでコントロールしてるため)。センサーがまったくないじゃじゃ馬ドローンを買ったのが8月初旬。

    こんな感じの廃校の体育館で訓練を受けたのが9月の初旬。

    で、こんな感じのジンバル付きドローンを買ったのが10月上旬。

    最初考えていた営利目的のドローンはなりをひそめ、自分の趣味に移行して行くのでした。
    というか、ドローンでのビジネスを専業で考えるのは、考えれば考えるほど難しく、趣味や副業程度がせいぜいだなぁと思いだしたのもこの頃でした。

    航空局からの飛行許可を得るのは、僕個人だけではなく、僕と僕が操縦するドローンのセット。ドローンが無ければ申請すらできません(いやホントはできるみたいなんだけど)。

    で、ようやくそのドローンを購入したので、飛行許可・承認の申請を行ったわけです。

    スクールで申請方法や、実際の申請書類をどう書けばよいかのレクチャーを受けたのでまぁまぁスムースに申請から許可まで進んだんですけど、いまでは昔ほど許可を得るのが難しくないんだそうです。

    ちなみに僕が許可を得たのは、

    • 日本全国150m未満
    • DID地区(人口集中地区上空)

    となっています。
    夜間飛行やイベント上空の許可は取っていません。

    まだビジネスとしてドローンを飛ばすのは難しいと考えています。だって1台しか持ってないから、その1台の調子が悪いともうジ・エンド。おそらく予備機をもう1台程度保有しないと難しそう。または今のMavic Proを予備機として、本丸ドローンとしてPhantom 4 ProとかInspire 2くらいを買いたいところだけど、値段がね……(涙

    まだまだスキルも足りないだろうけど、実績は積んでいきたいので、空撮は承ります。
    スキル不足なので低価格にて!というのは、今後自分に自信がついてきた時に面倒くさそうなので、当面は無料で承ります。
    (ただし交通費だけはなんとか……。)

    ひとまずは、motooさんって人がドローン飛ばせるらしいよ、くらいはお見知りおきください。
    これから徐々に空撮写真やムービーも公開していきます。
    なので、仕事ください m(_ _)m 今後ともよろしくお願いします。

    Special Thanks: 株式会社iZMA

  • 初めてのちゃんとした(?)ドローン。Mavic Pro の初フライトに行ってきた。

    初めてのちゃんとした(?)ドローン。Mavic Pro の初フライトに行ってきた。

    2017年10月5日(木)、DJI社のMavic Pro買いました。

    そこから雨が続き、仕事の進捗も芳しくなく、週末には台風が飛んできて、テストフライトもままならない状態で3週間ほど悶々とした日が続いてたんですが、先週の平日、久しぶりに晴れ、仕事もなんとなくキリが良いタイミングがあったので、14時くらいに退社。

    行ってきました志賀島での初フライト!!

    平日の夕方ということもあり、人もほとんどおらず、滞在時間1時間の間で見かけたのは中国人観光客1組のみ。
    不慣れな初フライトには格好の状況。

    14時に退社してダッシュで帰宅して、バッテリーフル充電にしていなかったので急いで充電。3本のバッテリーを充電するのに1時間超かかったので、実際に現地到着したのは17時チョイ前。
    3本のバッテリーを充電するために使用した無駄な時間のため、日の入りまでに飛ばせる時間はバッテリー1本分という悲しい状況でスタート。

    でもまぁとりあえず1回目に試したかったことはだいたいできました。


    まずはよくある動画。海岸線を走る道路に沿って俯瞰で撮影。


    次はその道路に沿って右へロール。あまりに変化のない映像だったので、後半は徐々に上昇しながら。


    最後はアクティブトラック。自動追尾撮影。
    被写体は自分。ちょうど30〜40m先に奥様が丘サーファー遊びをやっていたのでそこまで向かっていくところ。

    そのあとはまだバッテリーが30%ほど残っていたので、地上付近で8の字を練習してバッテリー低下アラーム。終了。

    初フライトで感じたこと。
    ・あまり高度を上げちゃうと見えなくなる。
    ・操縦、モニタリングしてたら結構わちゃわちゃして、映像の設定、フィルター、ホワイトバランスだの調整する余裕無し。せっかく綺麗な夕日だったのに……。

    次回への課題。
    ・時間に余裕をもって、バッテリー3本分くらいは飛ばしたい。
    ・バッテリー1本目で航路、映像の設定、アングルを決めて、2本目から本番撮影したい。
    ・インテリジェント・フライトを全部試してみたい。アクティブトラックもその1つ。他にも自動撮影的なモードがたくさんある。

    デビューとしては上々だった気がします。

  • Advanced Custom Fields の「関連」「投稿オブジェクト」はとても便利だけど、非公開の記事まで公開されちゃから要注意だよ、という話。

    Advanced Custom Fields プラグイン。
    めっちゃ便利です。
    WordPress案件だと必須だというくらい重宝させていただいています。

    で、その機能の中に「関連」「投稿オブジェクト」というフィールドタイプがあります(両方共似たようなもん)。
    ブログ記事に関連する記事を手動でピックアップして関連付けるという機能です。
    ・シリーズ物の記事の過去記事を関連付けたり。
    ・ブログ記事に、店舗用カスタム投稿を関連付けて、新たな導線を作ったり。
    ・トップページ用のスライダーをオプションページで作成したり。

    で、つい最近、それについて納品先から指摘がありました。
    「非公開記事が出ちゃってるんだけど……。」

    (;・∀・)

    出ますね。
    非公開記事も予約投稿も選択できちゃうし、公開してないのに出ちゃいますね。

    というわけで、こちらの対応はテンプレートファイルからの呼び出し側にてコントロールします。
    なぜ、プラグインの方を改修しないの?という疑問については、予約投稿をしたものも「関連」で選択したいし、という理由です。

    ついでに、非公開記事については、管理者ログイン中には【非公開: 記事タイトル】という感じで出すようにします。
    (通常のループの中と似たようにします)

    以下のスクリプトは、オプションページでトップページ用のおすすめ記事を出す!という例になります。

    <?php
    $articles = get_field( 'acf-pickup-articles', 'option' );
    $current_user = wp_get_current_user()
    ?>
    <?php if ( ! empty( $articles ) ) : ?>
        <ul>
            <?php foreach ( $articles as $article ) : ?>
                <?php if ( 'publish' == $article->post_status || ( 'private' == $article->post_status && is_user_logged_in() && in_array( 'administrator', $current_user->roles ) ) ) : ?>
                    <li>
                        <p class="title">
                            <a href="<?php echo esc_url( get_permalink( $article->ID ) ); ?>">
                                <?php if ( 'private' == $article->post_status && is_user_logged_in() && in_array( 'administrator', $current_user->roles ) ) : ?>
                                    非公開:
                                <?php endif; ?>
                                <?php echo esc_html( $article->post_title ); ?>
                            </a>
                        </p>
                    </li>
                <?php endif; ?>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>

    とっても便利なプラグインはとっても便利だけど、自分が作っていないだけに全仕様を把握して使うわけではありません。
    ちゃんと動く理屈を把握して使いましょうね、という話でした。

  • Dobby水没。1週間乾燥後に無事復活のご報告。

    先週のDobby墜落〜水没事件

    簡易米びつにDobbyを沈めて1週間。
    取り出してみました。

    できるだけ米に密着したほうが良いとの勝手な判断で、ギュッギュッとやったおかげで細かいキズがかなり付いたみたいだけど、なんとか起動!復活しましたよ!!

    米に沈めたのが良かったのか、ただただ1週間放置して乾燥させたのが良かったのかは不明。

    残念ながらバッテリーは復活せず。約6,000〜7,000円のロス。

    今回の教訓「離陸前の点検は入念に」

  • Dobby、離陸直後に墜落。そして水没(涙

    Dobby、離陸直後に墜落。そして水没(涙

    最近、ドローンにハマってまして。

    これに関しては報告しなきゃならないことは山ほどあるんです。
    まぁなんとなく形になってからレポートしようと思ってたんですが……。
    事件が起きてしまったのでご報告します。

    その前段として、福岡市内でのドローン飛行に関する情報。
    200gを超える一般的なドローンは、飛行が禁止されているエリアが多くあります。
    その中でも一番面倒なのが「人口密集地域」。
    基本的に飛ばしちゃいけません。
    福岡市内の公共交通機関で行き来できる地域は、すべて「実行密集地域」で埋め尽くされています。
    ちなみにDJIというドローンメーカーが飛行禁止エリアを公開しています→DJI-安全飛行: 飛行禁止エリア

    ですが、200g未満のミニドローン(トイドローン?)は、航空法の規制対象外なので飛ばすことは「一応」可能です。
    「一応」というのが実は面倒くさくて、航空法的にはOKでも、市の条例だったり、その土地の所有者・管理者に無断で飛ばしちゃダメ!ってのが通例でありまして、結局のところ福岡市内ではほとんど飛ばせるところはないのです。

    でも練習場やテストフライトの場所が近場で欲しいので、あらゆるところに電話しまくって許可してくれるところを探してみたところ……。
    実はすごく近い場所にありました。

    川の上。

    福岡圏内の2級河川以下であれば、河川上は「基本的に自由使用です」との許可をいただきまして。
    んで、いろいろお試しフライトをしてたわけです。

    —– ちなみに余談 —–
    ボクの場合は、ちゃんと管理省庁に連絡して、OKですとの声をいただいた担当部署と担当者、OKいただいた日時をメモってます。このブログを見て「あ、OKなんだ」と思って勝手に飛ばしても、ボクは責任とれません。ちゃんと自分で確認取ってくださいね。
    —– 余談ここまで —–

    で、今日。
    自慢のDobbyを飛ばそうとしたところ、離陸後1〜2秒で「カチっ」という音。コントローラーとなるスマホに「Wifiの接続が切れました」的なメッセージ(具体的なメッセージは忘れた)。
    その直後落下。
    水没。
    俺フリーズ。

    ギリギリ手の届きそうなところに落ちたので、片足を川に突っ込んで(冬じゃなくて良かった)、サルベージ。
    バッテリーを外して、放置。
    俺放心。

    ただちに手持ちのスマホで「ドローン 水没」で検索。
    「とにかく乾かせ」との記事が多く散見。

    スマホが水没した時は「米にぶっこめ」というネットの記事を読んだことがあったことを思い出し、帰りの途中で1番安い2kgの米を購入。
    (ウチの米を使ったら奥さんに怒られる可能性があるので)

    で、こんな感じ。

    もちろんこの上にもなみなみと米を注ぐ。

    今ココ。
    1週間ほど寝かせてみます。
    続報書きます。

    バッテリーはもう死んじゃっただろうなぁ。
    何が原因だったのかなぁ。
    バッテリーが上手く刺さってなかったのかなぁ。
    今となっては謎のまま……。

    後日談。Dobby水没。1週間乾燥後に無事復活のご報告。

  • Twitter API を使ったお仕事を卒業しようかと思います。

    Twitter API を使ったお仕事を卒業しようかと思います。

    Twitter様、Facebook様におかれましては、御社ご提供のAPIを利用したWebキャンペーンのシステム開発などで大変お世話になりました。
    ぼくの周辺には、APIを利用したシステム開発を好んでやる人がいなかったため、ありがたくお仕事として頂戴しておりました。

    時世の流れが、キャンペーンなどにSNSを利用する機会が少なくなったため、ぼくへのお仕事発注の数も少なくなっておりましたが、ありがたいことに先月に2件ほどのお仕事をいただいたので、久方ぶりにAPIをこねくりまわしてゴニョゴニョやっておったのですが。

    残念ながら2案件ともトラブルに見舞われました……。

    その1:画像付きツイートを取得しても、Twitter APIから返ってくるJSONに画像情報が入っていない場合がある

    理由はわかりません。条件もわかりません。

    「画像つきでツイートしたのに、管理画面に表示されませんよ!!」
    今まではなかったことです。もしかしたら気づいていなかっただけかもしれません。たまたま営業さんがそのキャンペーンのテストで画像付きのツイートをしたのに、そのキャンペーンの管理ページで画像が表示されないのです。
    公式ドキュメントによると、画像つきのツイートの場合、mediaとかextended_entitiesとかいうパラメータがついてくるはずなのに、そのデータが取得できないのです。
    もちろんその営業さんがいうとおり、TwitterのWebページを見ると、ちゃんと画像付きでツイートされています。

    謎です。

    APIがちゃんとしたJSONを返してくれない以上、ぼくもそれ以上何もできないのですが、今回は例外的にアレとかソレとかゴニョゴニョして、どうにかこうにか画像を取得することはできましたが、たぶんルール違反なのでここでは説明しません。

    その2:ハッシュタグで検索した結果を取得するにも、検索結果に含まれないツイートが存在する

    理由はわかりません。条件もわかりません。

    ぼくのアカウントでログインしたTwitterのページでハッシュタグ検索した結果と、担当ディレクターさんのアカウントでログインした場合の検索結果が違うんですよね。
    で、クライアントさんのアカウントでログインした場合の検索結果と、APIが返す検索結果が異なると、「バグです」ってなるわけです。
    APIから取得できる検索結果は、Twitterのウィジェットと同じもので、クライアントさんが検索した結果とは違いますよ!って言っても納得してもらえる訳がない。

    てなわけで、Twitter API を使った案件は、もうなんか無理なんじゃないかと。
    てな感じの近況報告でした。

  • 中古スマホを買う時は、必ず事前にSIMロックフリーか確認すべし。

    昨年後半、ウチの奥さんはソフトバンクから FREETEL の乗り換えた。
    もちろん、毎月の携帯代金を節約するため。

    ボクはもう秋頃から FREETEL ユーザーだったし、同じくソフトバンクから FREETEL の乗り換えたくちなので、先輩として、奥さんの乗り換えの付き合った。
    まずは転出願い。
    職場近くのソフトバンクショップへ立ち寄り、奥さんが持ってる使用している iPhone を店員に見せ、FREETEL に乗り換えるから転出させてくれ、あわせてSIMロック解除も頼む、と申し出た。

    店員「この iPhone。SIMロック解除できないですよ。いつごろ買われました??」
    ボク「……、はい??」
    店員「SIMロック解除できるのは、iPhone6s 以降なんですが……。」
    ボク「これ iPhone6s plusでしょ?」
    店員「いやぁ……、いつごろ買われました??」
    奥さん「ちょうど2年前くらいで」
    店員「iPhone6 plusではないでしょうか……。」

    (;・∀・)

    SIMロック非対応の機種でした。
    ひとまずこの日は転出を諦め、どうやってSIMロックフリーのスマホを手に入れるか問題の解決を見つけることになりました。
    自分のことじゃないのでかなり放ったらかしにしてましたが、ウチの奥さんは、ソフマップで中古のiPhone6s plusを買ってきました。

    それから無事、夫婦共々 格安SIM生活が始まったのです。
    ボクにおいては、ほとんど音声通話はしないし、屋外で動画鑑賞する趣味もなかったので、月々2,000円を超えることは無いし、奥さんは仕事柄音声の電話を頻繁にすることはあるけど、それでも3,000〜5,000円という格安生活を送ることができていました。

    つい先週までは……。

    ゴールデンウィークに、小さな、とても小さな問題が発生したのです。
    (さらに…)

  • OSX(El Capitan)で、MAMPのPHPをコマンドラインで実行するのが面倒なので、シンボリックリンクで便利に繋げてみた。

    絶賛MAMP PROユーザーです。(たった59USDで劇的に便利になるのに意外と周りの人が使ってない……)

    で、最近のPHPでの開発となると、コマンドラインでPHPを叩いてテンプレートを作成する!みたいな便利機能が多いです。
    で、絶賛MAMP PROユーザーなので(しつこいw)、OSXのコマンドラインから叩くPHPと、実際にブラウザ経由で走るPHPのバージョンが違ったり、DBに接続する方法が違ったりと面倒なことに直面します。

    今までは、

    $ /Applications/MAMP/bin/php/php5.5.26/bin/php app/console doctrine:generate:entity

    みたいに長々とMAMPのPHPのフルパスを打ってた(なぜ!?)んだけど、いい加減ちゃんとやれよ!と怒られそう(誰に?)なので簡便化してみました、というご報告。

    まず、Googleさんに聞いてみたら、それらしい記事をご紹介いただいたので、そのままやってみたら、Operation not permittedって怒られる。
    なんで?とよくよく見てみたら、その記事の冒頭にちゃんと「怒られた方はこちら」ってちゃんと書いてた。

    ようするにEl Capitanの場合、Rootlessというセキュリティ機能が追加されて、/usr/binへの変更ができないんだそうです。

    先の記事だと「その機能を無効にしちゃおうぜ!」って方法なんだけど、さすがにそれはヤダ。

    というわけで、自分のユーザーディレクトリに各MAMP PHPのバージョンのシンボリックを配置しちゃおうぜ!ってのが本題です。
    (前振りが長くて申し訳ありませんでした)

    (さらに…)

  • Tessel2が届いたので、叫んだらスマホに通知するような簡単なIoT実験をやってみた。

    Tessel2が届いたので、叫んだらスマホに通知するような簡単なIoT実験をやってみた。

    随分前から気になっていたIoT。やらねばやらねばと思っていたけどようやく着手できました。

    2016年3月後半くらいに発売されたTessel2
    まだ日本国内で触ってみた人は少ないみたい。

    スタートガイドを見ながらやれば、なんの障壁もなくセットアップ完了。
    Lチカみたいな軽い通過儀礼もなんなくこなし、あとは何しよっかなぁ〜とか思ってたら、「Webサービス同士を連携できる「IFTTT」と自作IoTデバイスを繋いで生活を便利にしてみた」という記事を見て、なるほどIFTTT経由でスマホに繋げばいいのか、と。

    今回購入したのは、Tessel2本体とAMBIENTモジュール(環境センサー)なので、「わぁ!」って叫んだらIFTTT経由でスマホに通知する、みたいな。

    IFTTTの設定については前述の参考記事に準じて、あとは下記のコードにて。

    var tessel = require( "tessel" );
    var ambientlib = require( "ambient-attx4" );
    var request = require( "request" );
    
    var ambient = ambientlib.use( tessel.port[ "A" ] );
    
    var options = {
        url: 'https://maker.ifttt.com/trigger/{event}/with/key/{Your key}',
        method: 'POST',
        headers: {
            'Content-Type':'application/json'
        },
        json: true,
        form: { "value1": "hoge", "value2": "fuga" }
    }
    
    ambient.on( "ready", function () {
    
        console.info( "Waiting for a sound..." );
    
        ambient.setSoundTrigger( 0.15 );    //「わぁ!」と大きめの声を出せばこの程度
        ambient.on( "sound-trigger", function ( data ) {
            console.log( "Our sound trigger was hit", data );
            
            request( options, function ( error, response, body ) {
                console.log( body );
            });
            
            ambient.clearSoundTrigger();
            setTimeout( function () {
                ambient.setSoundTrigger( 0.15 );
            }, 1000 * 5 );  //一度叫んで5秒程度は再動作させない
        } );
    } );
    
    ambient.on( "error", function ( err ) {
        console.log( err );
    } );

    コードをTessel2にぶっこんだら、「わぁ!」って叫んでスマホに通知。

    IMG_0013

    何事も仕事に絡まない実験は楽しいw

  • WordPressの固定ページで、WP_Queryで記事を取得するもページネーション(the_posts_pagination)がうまく動作しない場合の解決方法。

    ちょいと調べてみたけど、結構その対応手段がネットに公開されていなかったので、ソース調べてみた。

    get_the_posts_pagination() 内で、$GLOBALS['wp_query']->max_num_pages が1以上じゃないと処理をしないのに、固定ページ内で WP_Query を回しても $GLOBALS['wp_query']->max_num_pages には値が入っていないのが原因。

    なので、自分でぶっ込んでやれば良いみたい。

    <?php
    //pagedに値をセットするのを忘れずに!
    $the_query = new WP_Query( array(
      'paged'       => get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1,
      'post_type'   => 'post'
    ) ); ?>
    
    <?php	if ( $the_query->have_posts() ) while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    
    <!--ここで記事を表示-->
    
    <?php	endwhile; ?>
    
    <?php
    //ページネーション表示前に$GLOBALS['wp_query']->max_num_pagesに値をセット
    $GLOBALS['wp_query']->max_num_pages = $the_query->max_num_pages;
    the_posts_pagination();
    wp_reset_postdata();
    ?>

    こんな感じ。(2016年1月28日現在。WordPressのバージョンは4.4.1)