月別アーカイブ 7月 2019

takahashi 著者:takahashi

Excelなどで作成した表をMarkdown形式の表に変換できるサイト “Tables Generator”

Markdown記法は手軽にリッチな装飾ができるため、開発者を中心に人気がある記述方法です。しかし、表の記述についてはちょっと不便を感じることがあります。

Markdownでは表を記述する際、1カラムを | | で囲んで表現します。

簡単な表であれば不便を感じることはないのですが、これがカラム数が増えたりしてくると…

写真のデータはなんちゃって個人情報で生成したダミーデータ

画像のようにエディタによっては途中で折り返してしまい、カラムの対応がわかりにくくなります。

また、データの長さがバラバラのものが入ってきても読みづらくなりますし、手動でインデントを直すとしてもデータ数が多いととっても大変です。

またExcelのように、入力完了後にEnterキーやTabキーを押しても別のセルにカーソルが移動してくれたり…といった機能も基本的には使えません。(VSCodeの場合はText Tablesというプラグインを使えばある程度はExcelっぽい操作ができるようになります。)

ということで、表はやっぱりExcelなどでサクッと作って、それをMarkdownに変換してしまった方が楽です。

ExcelからMarkdownに変換するのはいろいろ手段がありそうですが、今回はTables GeneratorMarkdown Tables Generatorを使用します。

まずはExcelで表を作成して、全部コピーします。

次に、 左上のFileから、Paste Table Data をクリックします。

表示されたダイアログに、Excelでコピーした表をそのまま貼り付けます。

貼り付けたらLoadをクリックします。

するとこんな感じで、Markdown用の表を、インデントも揃えた形に一括変換してくれます。
後は右上の”Copy to clipboard”をクリックすればクリップボードに表がコピーされるので、

エディタに貼り付ければOKです。

インデントもいい感じですね。

ということで、Markdownで表をの是る際にお困りの方は是非試してみてください。

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

wi-fiを再接続したらslackが真っ白になり何も表示されなくなった時の話

今回はslackの話です。

自分はwi-fiを自動接続する設定のままノートpcを色々な場所に連れまわしていたのですが、ある日その状態で

slackを開くと一番最初のチャンネルのみなぜか真っ白になって何も表示されなくなってしまいました。

他のチャンネルを試してみたのですが、こちらは至って普通(返信もレスポンスも正常に返ってくる)に

機能します。しかも、普通のブラウザで見るとこちらは正常に動いていることが分かりました。

ますます分からない・・・。

 

実はこれ自体の解決策簡単で、ただpcを再起動するだけでチャンネルを復活させることができます。

後は、wi-fiの自動接続をoffにしてその都度繋げることでこれを防ぐことができます。がまだ具体的な原因が

わかっていません・・・。移動先で仕事をする場合に絡まれたら厄介なので具体的な解決策が見つかりましたら

随時載せていきたいと思います。

wi-fiの自動接続をoffにする方法については、設定ページにてアダプターのオプションを変更する->指定のpcを右クリックで「状態」を

クリック->ワイヤレスのプロパティをクリック->このネットワークが接続範囲内に入ると自動的に接続するのレ点を外す。

 

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

【Laravel】Duskのテストケースを楽に作るChrome拡張Laravel TestToolsの紹介

 DuskはLaravelと密にかかわっている自動ブラウザテストツールです。実際にブラウザを開いて、あるページへ移動できるか、そのページである操作はできるか、操作の結果は想定した通りか、といったテストを自動で行ってくれます。ブラウザを用いる以上しょうがないかもしれませんが実行時間が長いのが玉に瑕です。
Laravel Dusk 5.8 Laravel
 テストコードは例えば次の様に書けます。

    public function testBasicExample()
    {
        $user = factory(User::class)->create([
            'email' => 'taylor@laravel.com',
        ]);

        $this->browse(function ($browser) use ($user) {
            $browser->visit('/login')
                    ->type('email', $user->email)
                    ->type('password', 'secret')
                    ->press('Login')
                    ->assertPathIs('/home');
        });
    }
    /**
     * <a href="https://readouble.com/laravel/5.8/ja/dusk.html">Laravel Dusk 5.8 Laravel</a>から引用
     */

 テストユーザを作成。/loginへ訪れて、name=”email”のinputタグにテストユーザのemailを入力、name=”password”のinputタグに’secret’と入力、Loginと書かれたボタンを押し、押した後のページのアドレスが/homeであることを確かめるコードです。簡単に記述するために相当暗黙知が入っています。慣れれば楽なのですが、慣れるまで具体的にどこの何が何であれば期待した通りに動作するのか、少し戸惑います。Laravel TestToolsは操作の記述を楽にしてくれます。
Laravel TestTools – Chrome ウェブストア
 具体的に何をするかというと操作の記録とコード起こしです。次のgifの様に録画ボタンを押すと動作を記録します。

 書き起こされたコードをコピペするだけで操作分の記述完成です。これでtype()やpress()を記述する際にそう悩む必要がありません。後はassertで確かめるだけです。

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

【Android】LinearLayoutで囲んだページをスクロールさせる方法

Android アプリを修正中に、LinearLayout で囲った要素をスクロールさせたかったので、その対処法です。
…というか、LinearLayout って要素がいくら増えてもスクロールしない仕様なのですね。
今後もうっかりこの仕様を忘れて「あれ?」となる未来が見えそうなので、忘れないようにしなければ。

今回参考にさせていただいた記事はこちらから。

LinearLayout をスクロールさせる方法(ScrollViewの使用方法) – [サンプルコード/Androidアプリ] ぺんたん info
http://pentan.info/android/app/sample/linear_scroll.html

 

対処方法としましては、スクロールさせたい LinearLayout を ScrollView で囲むだけです。
サンプルコードは下記のとおりです。

<ScrollView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_height="fill_parent"
  android:layout_width="fill_parent">
  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <!-- 表示したい要素 -->

  </LinearLayout>
</ScrollView>

XMLファイルに記述する場合、上記のようにすれば、ページをスクロールすることができます。

なお、参考サイトでは、Activity のファイルで指定する方法についても掲載されておりますので、お好きな方法を採用してください。
個人的には、XML ファイルに追加する方法の方が楽だし分かりやすいと思います。

使用する際の注意点としましては、ScrollView は指定する子要素が 1つでなければいけないということが挙げられます。
なので、複数の要素をスクロールさせたい場合は、LinerLayout などのレイアウト要素を用いて、複数の要素を 1つにまとめる必要があります。

また、上記の方法では縦スクロールが有効になりますが、もし横スクロールを行いたい場合は、ScrollViewHorizontalScrollView に変更してください。

 

以上、Android の LinerLayout をスクロールさせる方法でした。
皆様は、私のようにうっかり仕様を忘れてしまわないようにご注意ください。

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

【Laravel】一プロセス内限定のSQLのキャッシュを作る

 ORMは便利ですが、何度も重複するクエリを発行しがちです。複数のモデルオブジェクトeachしてリレーション先を参照する時は特に危険です。どれくらい重複してるかは
 barryvdh/laravel-debugbar: Laravel Debugbar (Integrates PHP Debug Bar)
 などで調べるのが楽です。duplicatedとuniqueに分けてくれます。

 やり方の方針はクエリが発行される度にそのクエリに対応するキャッシュはあるかチェック、あるならばキャッシュを結果として取得、なければ実際に発行して結果を取得してキャッシュに保存、です。
 一つのクエリに使う場合は次です。

        $key = __FILE__.' '.__FUNCTION__.' '.__LINE__ .' '.$id;
        app()->offsetExists($key) ?: app()->singleton($key, static function () use ($id){
            return Member::where('id',$id)->get();
        });

 コードの場所と引数に関して一意になるキーを設定。クエリの結果をシングルトンに登録することによって、同じ場所が同じ引数で繰り返し呼ばれる際、同じクエリを発行することなく、Laravel内にバインドされたシングルトンを呼ぶようになります。変数なのでプロセスが終わったら揮発します。
 作った後しばらくして気づきましたがarrayドライバ(array型の変数内にキャッシュを保存する機能)でキャッシュ使った方がシンプルですね。
 全体のクエリに使う場合はDBのselect等データ取得時のリスナーに同じ処理を入れます。updateした時のリスナーにキャッシュ消す処理忘れるとバグの元になります。

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

VRoidモバイルで映画”サマーウォーズ”のOZを再現した3D空間が体験できるらしい。

最近、VR用HMDの普及やセンサー類の普及に伴い、バーチャルユーチューバー(Vtuber)や3Dアバター、仮想世界などの界隈が盛り上がってきています。

この流れの中、Pixivが 3Dアバターをより手軽に作成することを可能にするサービス、VRoidを公開しています。

VRoidとは – VRoid

創作にかかわるサイトや支援技術を開発するPixiv社ならではのサービスです。

そんなVRoidのサービスの一つ、VRoidMobileで、映画サマーウォーズの作中で出てくる仮想空間”OZ”のシーンで実際に使用された3Dオブジェクトをつかって遊ぶことができるステージ(?)が公開されているようです。

OZ on VRoid – VRoid

映画で使われた3Dオブジェクトを一般ユーザーが心行くまで見れるというだけでもワクワクですが、さらにそこに自作のアバターを登場されられるというのは、ファンにとってはたまらない内容ではないでしょうか。

最近になって実際にVR周りの技術が盛り上がってきて、映画に出てきたような技術が少しづつ現実になってきているのはとても感慨深いですね。

ちなみに、今日の21時から元ネタとなっているサマーウォーズがノーカットで放送されるようですので、興味のある方は是非。

https://twitter.com/kinro_ntv/status/1151989157608116226?s=20
  • この記事いいね! (0)
村上 著者:村上

【Excel】セルに値が入力されているかを判定する方法

久しぶりに使おうとして関数名を忘れてしまっていたので、備忘録として。
Excel で セルが入力されているか、もしくは空なのかを判定する方法です。
使用するのは「ISBLANK」という関数です。

参考にさせていただいた記事はこちらから。

エクセル ISBLANK 関数:セルが空白か判定する
https://www.tipsfound.com/excel/04isblank

 

関数の使い方自体はとても簡単で、式は下記のとおりです。

=ISBLANK([空判定をしたいセル])

なお、こちらの関数は指定したセルが空だったら TRUE を返し、何か値が入っていたら FALSE を返します。

この関数は IF 関数と一緒に用いることが多いと思います。
例えば、「セルが空だった時」と「空でなかった時」に処理を分けたいときに使えます。

=IF(ISBLANK([空判定をしたいセル]),[セルが空の場合の処理],[セルが空でない場合の処理])

サンプルコードは上記のとおりです。
この書き方を使えば、お店のセールなどでよくあるような「5,000円以上お買い上げで、10% オフ」という処理も簡単に書けます。
…まあ、Excel で実際に行う処理かどうかはわかりませんが…。

 

以上、Excel でセルが空かどうかを判定する方法でした。
私的には、頻繁には使わないけど思い出した時に使う関数だと思っているので、覚えておくと便利だと思います。

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

【Android】「Could not find com.android.tools.build:aapt2:3.4.2-5326820.」エラーの対処法

1年ほど前に開発したアプリを起動した際に遭遇したエラーについてです。
エラーメッセージは「Could not find com.android.tools.build:aapt2:3.4.2-5326820.」というもので、これだけでは意味が分かりません…。
なので、そのまま Google 検索にかけたところ、下記の記事がヒットしました。
若干エラーメッセージが異なりましたが、こちらの対処法で解消できました。

参考にしたサイトはこちら。

[Android]「Could Not Find com.android.tools.buildaapt2:3.2.0-4818971」という謎のエラーが出てビルドできない場合の対処法
https://minpro.net/could-not-find-com-android-tools-buildaapt2

 

こちらの記事によると、Android Studio のバージョンを挙げた時に発生するエラーのようです。
確かに、開発した当時とは Android Studio のバージョンは異なっているはずです。

で、解決方法ですが、build.gradle の中に google() を追加すればOKです。
追加箇所は下記のとおりです。

...
allprojects {
    repositories {
        google()  // こちらを追加
        jcenter()
    }
}
...

あとは、build.gradle を更新したので、Sync Now を実行し、通常通りビルド・実行をします。
私の環境では上記の追加のみで解決できました!

なお、こちらのエラーの原因ですが、参考サイトによると「Android Studio が 3.2 にバージョンアップされたとき、「AAPT2」というツールの提供元が変更されたことが原因」とのことでした。

 

以上、Android Studio にて「Could not find com.android.tools.build:aapt2:3.4.2-5326820.」エラーが発生した時の対処法でした。
参考になれば幸いです。

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

7payの乗っ取りからID連携での対策

Yahoo! ID 連携の方法で、なにか情報がでた様なので引用します。

▼脆弱性のある実装方法
フロントエンドのJavaScriptやiOS,Androidのネイティブアプリで ユーザー識別子(sub)を取得しサーバーサイドへ送信するような実装をしている場合、 ユーザー識別子を送信しログインできてしまうため、不正にログインされる可能性があります。
そのため、上記のような実装は推奨しておりません。

▼推奨する実装方法
フロントエンドのJavaScriptやiOS,Androidのネイティブアプリではユーザー識別子を直接取得するのではなく、 サーバーサイド・アプリケーションで利用されるフロー(Authorization Codeフロー)を用いて認可コードを連携し サーバーサイドでユーザー識別子などの属性情報を取得してください。

https://developer.yahoo.co.jp/changelog/2019-07-18-yconnect.html

7pay を使用していなかったのですが、ログインする際の認証に使用する場合のところだと思います。

最近SNSを使用した認証が増えているので、注意してた実装が必要そうです。

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

突然MyDNS+Let’s Encryptでの証明書取得が不能に。原因はIPv6経由のアクセス。

たまたま自宅のサーバーのSSL証明を確認したら、Let’sEncryptで取得しているSSL証明書の有効期限が1か月を切っていました。

1か月に1回強制更新するように設定してあったのでおかしいなぁと思いつつ調べたところ、どういうわけか自宅サーバーからDNSサーバーへの接続がうまく行かなくなっていました。

自宅のサーバーではLet’s Encryptからワイルドカード証明書を取得しており、その際ドメインを管理しているDDNSのMyDNSと連動させることで自動で取得できるようにしています。
(詳細はこちらの記事をご覧ください。)

サーバーが接続しているインターネット回線はIPv6に対応しているため、SSL証明書を取得する際の接続先としてスクリプトで指定している”www.mydns.jp”への接続もIPv6で接続されるのですが、何故かMyDNSのIPv6アドレスに通信が到達できない状態になっていたのが原因でした。

他にもMyDNSに限らずサーバーからあらゆるドメインへのIPv6アドレス経由での接続ができなくなっているようだったので、どうやら自宅側のIPv6ネットワークがおかしくなってしまっているようでした。

とりあえず、接続先の指定をipv4.mydns.jpに変更してIPv4に固定したところ、問題なく通信できるようになったので、当分はこれでしのげそうです。

何故突然IPv6での接続ができなくなってしまったのかはまだ分かっていないのですが、まだまだ不安定なところがあるのかもしれませんね…

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