月別アーカイブ 12月 2018

村上 著者:村上

【PHP】文字列からHTMLタグを取り除く「strip_tags」関数

特殊文字を HTMLエンティティに変換する「htmlspecialchars」関数はたまに使いますが、こちらは実はあまり使ったことがなかったので、自分用のメモとしてまとめ。
HTMLタグ や PHPタグ を取り除いてくれる関数「strip_tags」です。

PHPマニュアルはこちららから。

PHP: strip_tags – Manual
http://php.net/manual/ja/function.strip-tags.php

 

使い方…といってもとても簡単で、下記のように、ただ削除したいHTMLタグを含む文字列を引数に入れるだけです。

$result = strip_tags([変換したい文字列]);

上記を実行すると、HTMLタグ等が削除された文字列が、変数 $result に代入されます。

また、第二引数で、削除から除外するタグを指定することもできます。

$result = strip_tags([変換したい文字列], '

<b>');

上記を実行すると、<p>タグ<b>タグ を除いて、HTMLタグやPHPタグを削除してくれます。
なので、文字列の装飾に関するタグは残したいけど、それ以外のタグは削除したい!というときに使えますね。

使い方としては以上です。

なお、HTMLタグは無効にしたいけど、タグが削除されては困る!というときには、htmlspecialchars を使いましょう。
こちらの関数は、<p>文字列</p>&lt;p&gt;文字列&lt;/p&gt; に変換し、HTMLタグを無効にしてくれます。
状況に応じて使い分けてください。
※なお、本当なら &lt; と &gt; の最初のアンパサンドは小文字なのですが、表示の都合上、大文字で記載しています。

 

以上、HTMLタグを削除してくれる「strip_tags」関数についてでした。
まとめるほどでもなかったですが…使用頻度の低い関数はあっという間に忘れてしまうので、いつかの私のためにまとめておきます。

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

【androidJava】EditTextの内容を取得する

グーグル先生で探してもありそうでなかったEditTextの中身の取得方法です。

 


String before_text,new_text;
EditText entry_text


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

  //EditTextを紐付け
  entry_text = findViewById(R.id.getText);

  upLoadBtn.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        edit();
      }
   });
}

  //edit関数定義
  public void edit(){
    new_text = entry_title.getText().toString();
  }

androidの記事は乱雑していて、しかも古い情報が多いので一つ一つ今風な書き方に合わせるのが面倒で苦労しています。

editTextは上記の書き方で問題なく取得できます。

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

PhpStormの何でも屋コマンドAlt+Enter

インテンション・アクション – 公式ヘルプ | PhpStorm
 自分が使っているIDEのPhpStormにはAlt+Enterというとりあえず使おうという意味合いのショートカットキーがあります。Alt+Enterコマンドはカーソルを合わせた場所に合わせた何でも屋の様なコマンドです。操作名はインテンション・アクション、公式の説明はPhpStormの提案を実行する、ととてもふんわりしています。インテンション・アクションはふんわりとした分様々なことを行ってくれます。
 Alt+Enterから実際よく使う動作としてスペルミス、インポート、PHPDoc補完があります。波線が現れたらとりあえずAlt+Enterしてみるぐらいでちょうどいい塩梅で、PhpStormがかくあるべしというコードを教えてくれます。



 PhpStormという名前ですが縁があるくらいの他言語、例えばSQLのコマンドでも同じように有効です。識別子で修飾はスキーマ名やテーブル名を修飾してくれます。

 

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

AWS EC2 でストレージ容量を拡張する方法

急遽テストで使用しているAWS EC2インスタンスのボリューム(EBS)を拡張する必要が出てきたのですが、思ったより簡単にできました。

まず、ダッシュボード上の”ボリューム”をクリックします。

現在使用中のボリュームの一覧が出てくるので、その中から拡張したいボリュームを右クリックし、”ボリュームの変更”をクリックします。

すると下記のようなウインドウが出現。

サイズに拡張後の容量を入力します。

これでAWS上での手続きは完了で、ボリュームの拡張は行われますが、実際に拡張分の容量を利用できるようにするためにはOS上でパーティションの拡張を行う必要があります。
ありがたいことに、このコマンドはOSを起動したまま実行可能です。

まず、拡張対象のデバイスパスを確認します。

sudo lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  10G  0 disk
└─xvda1 202:1    0   8G  0 part /

今回の目的のディスクはxvda1です。

AmazonLinux2では下記のように行います。

sudo growpart /dev/xvda 1 #パーティションを拡張
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=20967391,end=20971487
sudo xfs_growfs /dev/xvda1 #ファイルシステムを拡張(xfsの場合)
meta-data=/dev/xvda1             isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 2620923
df -h #変更結果を確認
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           493M  516K  493M   1% /run
tmpfs           493M     0  493M   0% /sys/fs/cgroup
/dev/xvda1       10G  7.7G  2.4G  77% /
tmpfs            99M     0   99M   0% /run/user/1000

これで無事拡大されました!

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

【Excel】循環参照の修正方法と循環しているセルの見つけ方

Excelで表などを作成中にたまにやらかした「循環参照」について。
今回の記事では、そのエラー発生原因と修正方法、及び循環参照が発生している箇所の見つけ方についてです。

 

まず循環参照とは何か、についてですが、現在計算中のセル(自分自身)を含めてセルの計算を行ってしまった場合に発生します。
例としては下記のとおり。

D2のセルに、A2~D2 までの合計を求める計算式を入力しようとしています。
この場合、計算結果が表示されるD2のセルが計算式に入ってしまっているのでエラーになります。
こちらは入力ミスや範囲選択ミスによって発生することがほとんどで、今回も計算範囲の選択ミスのために発生しております。
そのため、D2に入力する計算式を、=SUM(A2:D2) から =SUM(A2:C2) に修正しましょう。

 

次に、循環参照をしてしまっているセルの見つけ方について。
今回のように計算式が少なければ特定は簡単ですが、おそらく実際の業務で使っているファイルでは計算が大量に行われているでしょうから、覚えておいて損はないはず。

で、探し方ですが、Excel画面上のリボンメニュー「数式」の中にある、「ワークシート分析」から行えます。
この中に「エラーチェック」という項目があるので、このボタンの右にある▼をクリックすると、循環参照の項目に循環参照になってしまっているセルの一覧が表示されるので、こちらを確認します。
画面イメージは下の画像のとおりです。

循環参照の一覧メニューに「$D$1」と表示されています。

もしくは、Excelの画面の一番下の緑のエリアがあるかと思いますが、循環参照等のエラーがある場合、下の画像のようにその左隅の辺りに「循環参照: D2」とエラーが表示されるので、こちらを確認してもいいかも。

個人的には、こちらの機能の方がよく使いますね。

 

以上、Excelの循環参照とその解決方法でした。
Excelの操作に慣れていないと、範囲指定の時などにミスをして発生することがあるかと思いますが、特に難しいエラーでもないので、淡々と落ち着いて対処してください。

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

Laravelの自動ブラウザテスト機能duskで任意のテストケースのみを実行する

 ブラウザテスト(Laravel Dusk) 5.6 Laravel
 Laravelには自動でブラウザテストを行ってくれるduskという機能があります。それなりの手間がかかり、何度も行わなければならないブラウザ上における手作業を代行してくれる機能です。ブラウザテストなしに複雑な機能を変更の都度テストするのはとてもとても辛いです。
 そのように便利なブラウザテスト機能を行うduskですが、様々な機能を実装するにつれテストが肥大化し総実行時間も長くなります。私的な環境ですが軽い検索機能付きページのテストは1ページ2分ほどで終わります。これに機能の大小、ページ数が加わり総実行時間は10分、20分となります。とてもやっていられないため結果が欲しい一部のテストのみを実行する必要に駆られます。
 duskはPHPUnitの機能の大部分を引き継ぎブラウザテスト用にラッピングされたテストツールです。そしてPHPUnit同様のコマンドラインオプションが備わっており次の様なフィルターパターンによって、任意のクラス、任意のメソッドのテストを実行できます
 

例 3.2: フィルターパターンの例

  • --filter 'TestNamespace\\TestCaseClass::testMethod'

  • --filter 'TestNamespace\\TestCaseClass'

  • --filter TestNamespace

  • --filter TestCaseClass

  • --filter testMethod

  • --filter '/::testMethod .*"my named data"/'

  • --filter '/::testMethod .*#5$/'

  • --filter '/::testMethod .*#(5|6|7)$/'

 PHPUnit マニュアル – 第3章 コマンドラインのテストランナーから引用
 これにより何分も待たずに変更の度にテストをかけること、あるテストが通る様なコードを書くことが楽になります。

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

【androidJava】clientオブジェクトの呼び出しで躓く

OkHttpClient()を使ってeditTextで書いた文章を送信する機能を作ったのですが、callオブジェクトがうまく呼べなくて

通信の際にクラッシュしてしまいました。

okhttpの関数群をいったん消して適当に作った他の関数では動いたのでレイアウトとかmanifestら辺は異常なしと判断。

という訳でokHttp周りを調査。

logを辿っても具体的な原因は分かりませんでしたが、粘ってトレースした結果どうやらcallオブジェクトのenqueueでコールバックを設定

することが良くなかったためかと思われます。

ここはOkHttpClient client = new OkHttpClient();で定義したclientオブジェクトでclient.newCall(request).enqueue(new Callback() {})と

定義し直すことで無事解決。

 

失敗例↓


Call call = client.newCall(request);
call.enqueue(new Callback() {

])

 

成功例↓


client.newCall(request).enqueue(new Callback() {})

 

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

【Android】Uriから画像のファイルパスを取得する方法

果たして需要があるかは分かりませんが、私はあったので備忘録としてまとめ。
Anrdoidアプリで、Uriから画像のファイルパスを取得する方法です。
参考にさせていただいたサイトは確かこちら。

ギャラリーからの画像読み込みでエラーが出るときの修正方法|Workpiles
http://workpiles.com/2014/07/android-gallary-intent/

 

実装方法は下記のとおりです。
関数になっているので、このままコピー&ペーストしていただければ動くかと思います。

private String getPictPath(Uri uri) {
    String id = DocumentsContract.getDocumentId(uri);
    String selection = "_id=?";
    String[] selectionArgs = new String[]{id.split(":")[1]};
    File file = null;

    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.MediaColumns.DATA}, selection, selectionArgs, null);

    if (cursor != null && cursor.moveToFirst()) {
        file = new File(cursor.getString(0));
    }
    cursor.close();

    if(file != null){
        return file.getAbsolutePath();
    }
    return null;
}

getPictPath() の引数に、変換したい画像のUriを渡せばOKです。

 

以上、簡単ですが画像のUriからファイルパスを取得する方法でした。
実際に使う機会は多くはないと思いますが、参考にしていただければと思います。

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

Laravelでクエリのロギングを簡単な記述で行う

 ORM(データベースの中身をオブジェクトにマッピングする仕組み)は便利であり、Laravelに入っているEloquent ORMはとてもとても便利で開発を簡単にしてくれます。しかしながらORMを介して記述をしていると実際に発行されているSQL命令がコードから読み取りにくいものになります。グローバルスコープにより暗黙的に条件を追加する、User::create($request->all())だけでINSERTを済ませる、といったことをするならばなおさらです。デバッグのためには実際に発行されているクエリをロギングしたいものです。
 LaravelのDB接続クラスには次のlistenメソッドが備わっており、これを用いることでクエリの発行の度にlistenイベントを発生させます。
 データベース:利用開始 5.6 Laravel#クエリイベントのリッスン

    /**
     * Register a database query listener with the connection.
     * データベースクエリリスナを接続に登録する。
     *
     * @param  \Closure  $callback
     * @return void
     */
    public function listen(Closure $callback)
    {
        if (isset($this->events)) {
            $this->events->listen(Events\QueryExecuted::class, $callback);
        }
    }

 このlistenメソッドに渡す関数にクエリをロギングする関数にし、その記述を上記リンクにある様にアプリケーションサービスの初期処理で呼び出されるapp\Providers\AppServiceProviderのbootメソッドに行います。

class AppServiceProvider extends ServiceProvider
{
    /**
     * アプリケーションサービスの初期処理
     * @return void
     */
    public function boot()
    {
        DB::listen(function (QueryExecuted $query) {
            Log::debug(str_replace_array('?', $query->bindings, $query->sql));// クエリロギングコード
        });
    }
}

 ここからは、コードの細部の説明です。ロギングを行う関数部はLog::debug(ログに残すメッセージ)です。debugレベルのログを/config/logging.phpの設定に従って出力します。デフォルトでは/storage/logs/laravel.logファイルに追記されます。
 ログに残すメッセージはstr_replace_array(‘?’, $query->bindings, $query->sql)です。$query->bindings、$query->sql、str_replace_array(‘?’, $query->bindings, $query->sql)の中身はそれぞれ次の画像の通りです。

 それぞれバインドした値、値を入れる前のクエリ、バインドした値を当てはめたクエリです。str_replace_arrayはLaravelのヘルパ関数の一つです。
 ヘルパ 5.6 Laravel#str_replace_array()
 str_replace_array関数は配列を使い、文字列を指定値へ順番に置き換えます。

str_replace_array('?', $query->bindings, $query->sql)

 このコードは値を入れる前のクエリの中の’?’をバインドした値に順番に置き換えるものということです。
 このコードの注意点としてログをDBに吐き出す設定にしておくと無限ループが起きることです。ログをDBに保存すると、そのDBへの保存をログする動作が走り、またログのログを……と続きます。

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

【iphone】低電力モードって何?

自分はアプリを使わない時やwifi環境外の場所にいるときは常にiphoneを低電力モードにして使っています。

低電力モードとは、iOS 9から使用可能になった節電機能で、iphoneの通常のパフォーマンスと引き換えにバッテリーの消耗を

押さえることで有事に備えることができる便利な機能です。

 

使い方は簡単で、設定アイコンにあるバッテリーボタンを押して低電力モードのトグルをonにするだけで使用可能になります。

 

このモードにしていると、通常の速度でihoneを使っていてもバッテリーの消耗を抑えることができ、半日以上継続して使うことが

できるので旅行とか出張では重宝している方も多いと思われます。

しかし、当然ながらデメリットもございます・・・。

 

まず、アプリのバッググラウンド機能が使えなくなります。

 

ツイッターやヤフーではアプリを閉じている時もリアルタイムで更新し続ける状態のことをバックグラウンド状態といいます。

この機能が使えなくなるということは、使っている時点での最新の情報が獲得できなくなる(通知がこなくなる)のでsnsとは

相性が悪く併用は難しいでしょう。

 

二つ目は、動きの激しいアプリではリロードが遅くなる。

ソーシャルゲームにとってロードが遅くなったり動きがカクつくのは致命的であり、こちらも併用は避けた方が無難でしょう。

 

最後は、ihpneの自動ロックがデフォルトになる。

 

iphoneの自動ロックのデフォルト時間は30秒です。30秒経つと自動でrockされてしまうので、少し幼児があって席を外したりしていると

その度にロック解除しなけれないけくなるので、やはりアプリを使っている時とは併用を避けたほうがいいでしょう。

 

以上が自分が感じた不便だと思った点です。

これらのデメリットをみる感じ、低電力モードの際はiphoneは触るなという厳しめのメッセージなのでしょう。

みなさんも低電力モードを使う時は一度iphoneから離れた生活をしてみてはいかがでしょうか。^^

 

 

 

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