月別アーカイブ 12月 2018

asaba 著者:asaba

【chrome】知っていると得する””の使い方

今日は脱線します・・・!

 

ダブルクォーテーション ”” プログラミングでは主に文字列を扱いたい時に使用しますが、chromeではこいつで検索ワードを

囲むことでその囲った文字に該当するページのみを検索できるようになります。

 

スクショだとこんな感じになります。

 

ダブルクォーテーションで囲む前ですが、検索ワードがバラされて「javaで覚える」というワードを含んだサイトを

拾うことができませんでした。この状態ではお眼鏡に適ったサイトを見つけるのは難しそうです。

 

次は、ダブルクォーテーションで「javaで覚える」を囲った時のスクショです。

 

かなりすっきりしましたねw画像の通りですが、囲った中での文字しか検索されないので目当てのサイトが見つけやすくなったと

思います。

自分はよく○○空白○○でワードを検索していますが、関係ないサイトや意図した内容とは的外れなサイトも一緒に出てきて

しまいいつもめんどくさいなと思っていたのですごく助かりました。

特にプログラミングにおいて検索は必須のツールなので使い慣れればコーディング速度と効率を改善させることができるので

覚えていて損はないと思います。

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

duskによるテストの開始時、終了時にLaravel内で定義してある関数を用いる

 Laravel内で共通のことですがクラス中で用いる初期化関数__construct()が上手く働かないことがあります。これに陥る原因としてLaravel内でクラスを呼び出した時、まだインスタンス化されていないクラスに関わる関数を呼び出すというものがあります。Laravelの組み込み関数や定義したEloquentによる関数、プロパティは便利ですが__construct()内では使えません。duskも同様です。
 Laravel内で用いられているクラスはこれを解決するために、前処理が終わった後、本処理が始まる前に呼び出される関数をboot,setupなどといった名前で定義しています。__construct()の次にboot()が走り、boot()の次にコントローラなどの本処理が走るといった具合です。duskではsetUp()という名前で定義されています。このsetUp()関数内でテストに使うデータを定義すると幾分かすんなりとテストを記述できます。例えば次です。

    /**
     * @inheritDoc
     */
    protected function setUp()
    {
        parent::setUp();
        // テストに用いる編集対象の管理者を指定、インスタンス化
        $admin_key = static::$admin_key ?? Admins::inRandomOrder()->first()->getKey();
        $this->admin = Admins::findOrFail($admin_key);
    }

 あらかじめ特定の管理者を対象にするならばその管理者を、そうでないならばランダムに選んだ管理者を対象にして様々なテストに用います。
 開始に対応するように終了時にフックされる関数もあります。dusk内ではtearDownとされています。あるテストが終わるたびにtearDown関数が呼ばれているため、ブラウザテストの完全終了を待たずともあるテストケースの失敗とそれを解決するための情報を得る記述をすることが出来ます。tests/DuskTestCase.phpを継承することで各テストケースがブラウザ上で走るため、tests/DuskTestCase内に次の様に記述するのが良いでしょう。DuskTestCaseより深く潜るとvendorの領域に入ってしまいます。

    /**
     * @inheritDoc
     */
    protected function tearDown()
    {
        parent::tearDown();
        if ($this->hasFailed()) {
            dump('failed in ' . static::class . '::' . $this->getName() . '. test case instance is');
            $test_class_data = (new \Illuminate\Support\Collection($this))->filter(function ($value, $key) {
                return !strpos($key, 'PHPUnit');// 2、3000行程になるPHPUnit自体の情報を削除
            });
            dump($test_class_data);
        }
    }
  • この記事いいね! (0)
takahashi 著者:takahashi

CentOS7にIPFSをセットアップしてみる

以前記事でご紹介したIPFSですが、今回は実際に自分の持っているCentOSの環境にIPFS環境一式をインストールしてみました。

今回はそのやり方についてご紹介したいと思います。

まず、IPFSの動作にはgo言語の動作環境が必要になりますのでインストールします。

sudo yum -y install go
または
sudo yum -y install golang

次にIPFSをインストールするために必要な環境を整えます。
/usr/local/
ディレクトリにgo言語周りのパッケージをインストールする場所を作成します。

sudo mkdir -p /usr/local/go

次にパスを通します。

sudo vi /etc/profile

を実行し、一番下の行に次の記述を追記します。

PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/local/go
export GOBIN=$GOPATH/bin

一度ログイン中の端末からログアウトし、再度ログインします。

次に下記のコマンドを実行します。

go get -u -d github.com/ipfs/go-ipfs #ipfsソースを入手
cd $GOPATH/src/github.com/ipfs/go-ipfs #ipfsソースダウンロード先へ移動
sudo su - #"sudo  -s"でやると/etc/profileでexportした環境変数が消失するため
make install #ipfsをビルド
exit #rootユーザーからログアウト

するとIPFSパッケージがビルドされ、$GOPATH/binへインストールされます。

ビルドが完了したら、ipfsコマンドが利用できるか確認します。

ipfs --help

下記のような表示がされたらインストールは成功しています。

USAGE
  ipfs - Global p2p merkle-dag filesystem.

SYNOPSIS
  ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...

OPTIONS

  -c,              --config   string - Path to the configuration file to use.
  -D,              --debug    bool   - Operate in debug mode.
  --help                      bool   - Show the full command help text.
  -h                          bool   - Show a short version of the command help text.
  -L,              --local    bool   - Run the command locally, instead of using the daemon. DEPRECATED: use --offline.
  --offline                   bool   - Run the command offline.
  --api                       string - Use a specific API instance (defaults to /ip4/127.0.0.1/tcp/5001).
  --enc,           --encoding string - The encoding type the output should be encoded with (json, xml, or text). Default: text.
  --stream-channels           bool   - Stream channel output.
  --timeout                   string - Set a global timeout on the command.

SUBCOMMANDS
  BASIC COMMANDS
    init          Initialize ipfs local configuration
    add <path>    Add a file to IPFS
    cat <ref>     Show IPFS object data
    get <ref>     Download IPFS objects
    ls <ref>      List links from an object
    refs <ref>    List hashes of links from an object
  
  DATA STRUCTURE COMMANDS
    block         Interact with raw blocks in the datastore
    object        Interact with raw dag nodes
    files         Interact with objects as if they were a unix filesystem
    dag           Interact with IPLD documents (experimental)
  
  ADVANCED COMMANDS
    daemon        Start a long-running daemon process
    mount         Mount an IPFS read-only mountpoint
    resolve       Resolve any type of name
    name          Publish and resolve IPNS names
    key           Create and list IPNS name keypairs
    dns           Resolve DNS links
    pin           Pin objects to local storage
    repo          Manipulate the IPFS repository
    stats         Various operational stats
    p2p           Libp2p stream mounting
    filestore     Manage the filestore (experimental)
  
  NETWORK COMMANDS
    id            Show info about IPFS peers
    bootstrap     Add or remove bootstrap peers
    swarm         Manage connections to the p2p network
    dht           Query the DHT for values or peers
    ping          Measure the latency of a connection
    diag          Print diagnostics
  
  TOOL COMMANDS
    config        Manage configuration
    version       Show ipfs version information
    update        Download and apply go-ipfs updates
    commands      List all available commands
    cid           Convert and discover properties of CIDs
  
  Use 'ipfs <command> --help' to learn more about each command.
  
  ipfs uses a repository in the local file system. By default, the repo is
  located at ~/.ipfs. To change the repo location, set the $IPFS_PATH
  environment variable:
  
    export IPFS_PATH=/path/to/ipfsrepo
  
  EXIT STATUS
  
  The CLI will exit with one of the following values:
  
  0     Successful execution.
  1     Failed executions.

  Use 'ipfs <subcmd> --help' for more information about each command.

最後に、ipfsを使用するユーザー(ipfsへファイルをアップロード・ダウンロードするユーザー)で下記のコマンドを実行します。

ipfs init

するとipfs上での自ノード専用のキーが発行・保存され、セットアップ完了です。

initializing IPFS node at /ユーザーディレクトリのパス/.ipfs
generating 2048-bit RSA keypair...done
peer identity: 自分のipfsノードのキー
to get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

ファイルのアップロードやアップロードしたファイルを閲覧する方法などはまた後日解説したいと思います。

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

【Excel】参照の対象が見つからない#N/Aエラーかを判断できるIFNA関数

普段、Excelで入力した式がエラーになると思われる時には IFERROR 関数を使って #N/A や #DIV/0! などのエラーが表示されないようにしています。
が、今回、実行した式の結果が #N/A の場合、指定した文字列や数値を表示してくれる IFNA 関数というものを知ったので、簡単にまとめ。
ちなみに、IFERROR 関数を入力しようとした時に、IFNA という関数名を見つけて、これ何だ?となったのが、発見のきっかけです。

なお、#N/Aエラーとは、数式で参照したい対象が見つからないときに表示されるエラーです。
例えば、VLOOKUP 関数を使って、ある範囲で特定のデータを検索し、データが一致した場合、そのデータに対応する値を表示する、という処理を行う際、参照したいデータがその範囲から見つからなかった場合、#N/A エラーになります。

今回参考にさせていただいたサイトはこちらから。

IFNA 関数の使い方~論理関数Excel
https://kokodane.com/kansu_logic_05.htm

 

使い方ですが、それほど複雑ではなく、IFERRORと同じ感覚で使えます。
式の構文は下記のとおり。

=IFNA([実行したい式],[#N/Aエラーだった時に表示する内容])

文の構成はIFERROR関数と同じなので、使い方に困る事は無さそうです。

使い方の例は、こちら。

=IFNA(VLOOKUP([参照データ],[検索範囲],[表示するデータの列番号],false),[エラー時に表示する内容])

上記を実行し、もし VLOOKUP 関数の結果が #N/Aエラーになったら、第二引数で指定した値が表示されます。

 

以上、IFNA 関数の使い方でした。
エラー内容が参照エラーのみだとわかっているときは便利そうですね。
が、個人的には IFERROR 関数の方が、あらゆるエラーの時にも対応してくれるので、汎用性が高いかなと思います。

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

【ios】メールとアーカイブとの違いtips

gmailでアドレスを登録してメールの処理をしている時にどう違うのか疑問に思ったのでメモがてら載せます。

 

アーカイブ:メールを削除しないでトレイから見れなくするだけの機能。見えないけどメール自体は保存されるので

検索をかければ見ることができます。

 

削除:メールをゴミ箱に移動させます。ゴミ箱に移動させたメールは、時間が経つと自動で削除されます。

 

 

アーカイブで非表示にしてもやはり容量は食うので、基本的には削除を使って不要なメールを消していきます。

gmailを使っているとこのアーカイブという機能を見かけますが、残っているのが気持ち悪くて嫌いなので自分は完全に削除

しています。

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

dusk中でwebdriverを呼び出し多彩な操作をする

 Laravelのブラウザテストツールduskは以下の様なコードでdriverメソッドからwebdriverを呼び出すことによってブラウザを動かします。このコードはLaravelのデフォルトに近い形でGoogle Chromeを呼び出しています。

    /**
     * Create the RemoteWebDriver instance.
     * @return \Facebook\WebDriver\Remote\RemoteWebDriver
     */
    protected function driver()
    {
        $options = (new ChromeOptions())->addArguments([
            '--disable-gpu',
            '--headless',
        ]);

        return RemoteWebDriver::create(
            'http://localhost:9515',
            DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options),
            300 * 1000,
            300 * 1000
        );
    }

 通常duskはLaravel\Dusk\Browserクラスからbrowserを操作します。Browserクラスは堅牢であり、クラス中に生やされたプロパティによるブラウザの状態の把握は便利です。Browserクラスは便利ですが、操作に難があります。本当に手打ちの操作を再現するのみならば問題がない程度には操作メソッドが備わってますが、これは手打ちの再現であり手打ちでは膨大な時間がかかる入力をテストする際に面倒が起きます。typeメソッドによる長文入力はこれに見事に引っかかります。
 BrowserクラスはRemoteWebDriverクラスをラッピングしてブラウザ操作を行っています。Browserクラスの下に入っているRemoteWebDriverクラスを直接操作することでより多彩な操作ができます。呼び出し方はいたって簡単次のコードの通り

/** @var Browser $browser */
$web_driver = $browser->driver;

 この$web_driver変数からRemoteWebDriverクラスのメソッドを呼びだすことによってさまざまなことが出来ます。できることの一覧はFacebook\WebDriver\Remote\RemoteWebDriver | php-webdriver APIやvendor/facebook/webdriver/lib/Remote/RemoteWebDriver.phpの中身にあります
 特に便利なメソッドはexecuteScriptとtakeScreenshotです。executeScriptは次の様にjavascriptを実行できます。長文入力の様な手打ちでやっていられない、手打ちの必要が無い操作はこれで肩代わりするによって実行時間の短縮が図れます。

$browser->driver->executeScript('document.querySelector("[name=\"' . $field . '\"]").value = "' . $value . '";');

 takeScreenshotはその名の通りスクリーンショットを取得するメソッドです。Laravelのヘルパ関数によるpath指定を行うことでLaravelプロジェクト内部に任意のタイミングで取得したスクリーンショットを保存できます。

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

WordPressのTumblrインポータ―が何故か動かない。

自分はTumblrとWordpress、二つのブログサイトを持っているのですが、毎回何かブログに書きたいと思った時にどっちに書くべきかを悩んでしまいます。

最近、WordpressがGutenbergをリリースし、Tumblr同様に簡単に記事が書けるようになったこともあり、Tumblrを閉めて移行しようかなと考えました。

WordPressにはプラグインでTumblrに投稿した記事を全自動でWordpressに取り込むプラグインが存在しています。

それならそれに越したことはないとAPIキーとAPIセキュリティキーをここから入手し、Tumblrインポータ―へセット。

インポートしたいブログサイトを指定してインポートをかけたのですが…


こんな感じにローディング状態のまま一つもインポートされず、何時間待っても何ら進展しない状態になってしまいます。

もしかすると、Tumblrの運営で他のサービスへ流れようとしているユーザーを阻止するために敢えてバックアップできないようにしているののかもしれませんね…

他にいい方法ないか探さなきゃな…

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

【Excel】シートの開始ページ数を指定する方法

一般的に使用頻度が高いかというのはさておき、個人的にはたまに使うので覚え書きもかねてまとめ。
今回はExcelのシートの開始ページ数を指定する方法です。

こちらは1シートが複数ページあるシートをまとめて印刷したり、PDFに変換するときに使用しています。
現在、私の取り扱っているExcelファイルは、ページのヘッダーにページ数を表示しているのですが、そのままだとシートが移るたびに、ページ数が1から始まってしまうので、その調整のためです。

指定方法は簡単で、まずページ数を指定したいシートの適当なセルで右クリックして、表示されたメニューから、「ページ設定」選択します。

で、表示されたウィンドウの下の方に「先頭ページ番号」という項目があるので、ここでページ数を指定します。

例えば、前のシートが5ページまであったら、ここには6を指定します。
ページ数が多いとかなり面倒な作業です…。
もっと良い方法はないものか…?
時間があったら、調べてみようと思います。

 

以上、Excelで複数シートを印刷・PDF変換する際に、各シートの開始ページ数を指定する方法でした。
もし、同じことでお悩みの方がいらっしゃいましたら、参考にしてください。

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

【windows10】起動時にデスクトップが表示されない

windowsを起動してパスワードを入力したらデスクトップが表示されずに画面真っ暗になってしまいました。

その前にダメもとで再起動してみました。

やはり真っ暗の状態で表示されやっぱり長い戦いになるのかぁと俯いて落ちこんでいる間になんか復活していました。

他にもバッテリーを切らしたりタスクマネージャーで検証しながら重いアプリ消したりと解決方法は幾度とありますが

困った時は大正義・再起動ですね。

ウィルスバスターの検証とアプリの更新が同じタイミングで起きて本来最初に立ち上がるはずのシステムが邪魔されて

正常に稼働できなかった時に起きるみたいです。

あと、ビデオカードドライバがアップデートされることでも起きるみたいなので、見かけたら削除して再起動をしましょう。

予防ポイントとしては

 

・使っていないアプリはアンインストールしましょう。

 

・ウィルスバスターは複数入れずにどれか一つに絞りましょう。

 

・もし真っ暗になっても大抵は再起動でなんとかなるとポジティブに考えておきましょう。

 

三点ありますが、上記守るだけで大抵のトラブルを回避できるので頭にいれておくと捗ります。

 

参考にさせていただいたサイト

Windows 10 の画面が真っ暗になった場合のチェックポイントと対処方法

サインイン後の画面が真っ暗な時の修復方法

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

LaravelのCRUDテストとfactory

 CRUDの内updateとdeleteは既存データを加工します。この機能をテストするならば、必然データを壊します。この壊すデータの範囲に重要なものが紛れている場合、問題が起こります。私は今日テスト環境の画面確認用管理者アカウントを壊しました。
 update,deleteをテストするために重要なデータをテスト対象とした場合、テスト中止ないし再起動とする方法があります。この方法にはテスト対象とした範囲に重要なデータしか存在しない場合テストを行えないという欠点があります。もう一つ新たにデータを作成し、それに対してupdate,deleteをテストする方法があります。この手法はコード量が増えがちです。Laravelはfactoryという仕組みを用いてコード量の節約、責任の分担をしています。
データベースのテスト 5.6 Laravel#ファクトリの記述
 ファクトリはダミーデータを作成する仕組みでデータベースにテスト用初期データを入れる、データベースのテストに用いるといった使い方が主ですが、更新、削除のテストでもよく働いてくれます。factoryは次の様な記述によって与えるデータを定義します。

/** /database/factories/UserFactory.php */
use Faker\Generator as Faker;

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

 これを定義した場合、次の様にダミーデータをワンライナーで呼び出せます。createはデータベースへの書き込みを実行してインスタンスのCollectionを返し、makeはインスタンスのCollecitonを返します。

// factory(Model::class, 個数)
$user = factory(User::class, 1)->create()->first();
$new_user_data = factory(User::class, 1)->make()->first();

 createは削除と更新用の壊していいデータ、makeは更新用の入力値として便利に使えます。

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