月別アーカイブ 9月 2018

著者:杉浦

正規表現で行に文字列を含むことのNOT,AND,OR

 正規表現のlookaheadは文字列を消費しません。^(?=.*hoge)で行全体を先頭からlookaheadできます。この二つを用いることで、ある文字列を行に含む、含まないの組み合わせを正規表現で自由に作ることが出来ます。基本パーツは次の四つです。

^(?=.*hoge).*$ hogeを含む行
^(?!.*hoge).*$ hogeを含まない行 not A
^(?=.*hoge)(?=.*fuga).*$ hogeとfugaを含む行 A and B
^((?=.*hoge)|(?=.*fuga)).*$ hogeかfugaを含む行 A or B

 hoge,fugaにはそれぞれのかっことその中身を当てはめられます。これらを組み合わせて、好きに長い検索ができます。ABとBCの組み合わせかCDを含み、DEかCAを含まない行ならば((AB and BC) or CD) and not (DE and CA)であり、
^((?=.*AB)(?=.*BC)|(?=.*CD))(?!.*(?=.*DE)(?=.*CA)).*$

となります。

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

【android Java】初心者向け・Linearlayoutの使い方

今日は、androidstudioのレイアウトについて気づいたことを備忘録に残したいと思います。

今回はLinearlayoutの使い方をメインに綴ります。

お題の主役であるLinearLayoutは、ある部品を等しく一直線に並べたいと思ったときによく用いられます。Layoutの中でも最も使用頻度が高く汎用性のあるレイアウトといっていいでしょう。htmlでいうdivの役割と似ていますね。

使い方は、シンプルで一直線に並べたい部品を中に囲むだけ。下記のように書くだけです。

例えば、ボタン三つを横一列で中心に表示したい時は
android:orientation="horizontal"
android:layout_gravity="center"

と<Linearlayout内でプロパティを決めます。
Designタグを見て下記のようになっていれば成功です。

これだけならすごく簡単ですね。

複数の部品を決まった場所にそれぞれ配置したいとなってくるとRalativelayoutを使う必要がありますが、簡単なアプリを作ってみたいというかたはまずはLinearlayoutから触ってみてください。他にもTablelayoutやGridlayoutなど様々な特徴を持ったレイアウトがありますが、使う機会があったらまたやんわりと紹介していきたいと思います。

 

 

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

下位ディレクトリでの RewriteRule off と認証

Apache 2.2 へ変更して検証をしているのですが悩んでいた所が解決したので、メモがてら残します。

ドキュメントルート (/htdocs/) に .htaccess を設置し WordPress 用の RewriteRule を入れ込んでいて、下位ディレクトリの .htaccess で AuthType Basic を指定した場合、どうしても 404 エラーとなる状況でした。

本来であれば基本認証ダイアログを表示し、認証通過した場合のみサブディレクトリ内のページを表示してほしかったのですが、認証ダイアログは出ず、そのまま WordPress の 404 ページが表示されてしまう形です。

調査の結果、ErrorDocument 401 /error/401.html と指定しているにもかかわらず、401 ファイルが存在せず 404 となり、そもそも認証ができていませんでした。

基本認証を要求するサブディレクトリではAuthType Basic 関連行とは別に ErrorDocument 401 も指定。これです。

ErrorDocument 401 "Unauthorized Access"
RewriteRule Off

かなり前からのアルアルですが、またハマったので再度書きます。

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

【android Java】document already exists at the specified project location

また新規プロジェクトを作る時のネタになります。

最近あるアプリを作りたくて新しくemptyのアクティビティを作った時のお話です。かなり初歩的なエラーを踏んでしまい、その戒めを込めて綴っていきます。

その時のエラー時の画像です。

黄色い三角マークで、document already exists at the specified project locationと表記されているエラー。これは新しくプロジェクトを作る時に、ディレクトリのフォルダ名を明記していないときに起こります。

後ろに/(スラッシュ)とフォルダ名(何でもいい)をつければ正常にプロジェクトが出来上がります。いじるところは赤く囲ってあるところだけ。

原因は、document直下でgradleやideaなどがまとまったフォルダにないと後にビルドするときに見つけることができずnot foundになってしまうためです。

新しいプロジェクトを作る時は、必ずひとまとめにできるようにディレクトリ作成時にフォルダを付け足してあげましょう。

 

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

webページ評価ツールLighthouse

 Lighthouse – Chrome ウェブストア
 Lighthouse によるウェブアプリの監査 | Tools for Web Developers
| Google Developers

 Lighthouseはwebページの評価を行ってくれるツールです。お手軽な使い方は上記リンクのウェブストアからChrome拡張機能としてのLighthouseを導入し使用することです。オプションもコマンドも必要なく、ただ起動するだけで監査を行い、結果を出力します。 Lighthouseの評価は下図の様にPerformance,ProgressiveWebApp,Accessibility,Best Practices,SEOに分かれています。

 それぞれ、Performanceはおおよそ速度、データ量関連に問題が無いか、ProgressiveWebAppはネイティブアプリのようにふるまえるか、Accessibilityはわかりやすさ、Best Practicesは良いとされるやり方をしているか、SEOは検索エンジン最適化がされているか、です。画像の更に下の方には細分化された指摘がいくつもあります。
 Lighthauseの特徴は、googleが奨励しているPWAとしての評価がgoogle自身の規定でできる、という点です。またSEOは大概眉唾物ですが検索エンジン大手のgoogleが提供するツールが評価するSEOですから多少は当てになるでしょう。
 これが高得点ならばよいwebページというわけはないです。PWAは特に顕著でアプリである必要のないページは多々あります。基本的にぱっと見の第一印象がどうか、という点から評価がなされます。ただ高得点のページならば低得点のページよりも快適に使用しやすいのではないでしょうか。
 また、Lighthouseの指摘により今まで知らなかったより良いやり方を知ることもできます。

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

【Windows10】拡張子が「.rar」のファイルを解凍するソフト「RAR Opener」

今日メールで受け取ったファイルが「.rar」というあまり見慣れない拡張子だったので、備忘録もかねてこのファイルの開き方についてです。

まず、rar拡張子について簡単にまとめ。
この「rar」は圧縮ファイル形式の一つで、Windowsでよく使われる「zip」よりも高い圧縮率をほこるとのこと。
圧縮・解凍が高難度であるため、海外では使われることもあるそうですが、日本ではまず使われていないようです。

 

さて、肝心のファイルの解凍方法ですが、私はこちらの「RAR Opener」というソフトを使用しました。
こちらは下記の Microsoft の公式サイトからインストールすることができます。

RAR Opener を入手 – Microsoft Store ja-JP
https://www.microsoft.com/ja-jp/p/rar-opener/9wzdncrdhktr

使い方はとても簡単で、まずソフトを起動すると、下記のようなウィンドウが表示されます。

4つボタンがありますが、主に使うのは上の2つ、「Open RAR」と「RAR → ZIP」くらいだと思います。

Open RAR:RARファイルを解凍する
RAR → ZIP:RARファイルをZIPファイルに変換する

私は今回はファイルの解凍を行いました。
「Open RAR」を押すと、エクスプローラが起動するので、解凍したいRARファイルを選択します。
あとは、解凍が終わるのを待つだけです。
が、ちょっと広告が紛らわしかったりするので、うっかりキャンセルを行わないようにご注意ください。

 

以上、RARファイルの開き方・解凍方法でした。
とりあえず、見慣れないファイル拡張子は調べれば確実に判明するので、遭遇したら調べるくせをつけましょう。

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

SystemctlでSoftEtherVPNをデーモン化する

SoftEtherVPNはたくさんの接続オプションを持っていて、無料のVPNサーバーソフトの中ではおそらく”最もつなげやすい”ソフトではないかなと思います。

そんなSoftEtherVPNですが、Linux版の場合はソースの状態で配布されており、各マシンにダウンロードしてからmakeでビルドする形になっています。
なのでmakeに必要なライブラリさえOS側で用意されていれば、ディストリビューションやアーキテクチャ関係なく使用することができるようになっています。

その関係か、パッケージにはデーモン化のスクリプトは含まれておらず、自力でデーモン化する必要があります。

といっても、作業自体は起動スクリプトを/etc/init.dに置いてchkconfigやsystemctlで有効化すだけです。
起動スクリプトはSoftEtherVPNの公式ドキュメントに記載されています。

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

ところが、今回Ubuntu 18.04のサーバーに組み込んだ所、うまく動作せず。
いろいろ調べたところ、SystemdのUnitファイルで動作させる方法があったのでこちらを試してみました。
(※管理者権限が必要です。)

Ubuntu上でSoftEther VPN Server構築 – Qiita

[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
ExecStart=vpnserverがインストールされているパス/vpnserver start
ExecStop=vpnserverがインストールされているパス/vpnserver stop
Type=forking
RestartSec=3s

[Install]
WantedBy=multi-user.target

上記の内容でUnitファイルを作り、下記の場所に保存します。
/etc/systemd/system/vpnserver.service

保存したら次のコマンドを実行します。

systemctl daemon-reload

これで準備は完了いつも通りに起動します。

systemctl start vpnserver

これで起動したかと思います。
自動起動する場合は

systemctl enable vpnserver

も実行しておきます。

Systemdがいまいちわかりづらいのでinit.dを使っていましたが、これならsystemdネイティブでも使えそうです。
init.dスクリプトでうまく起動できない、という方はぜひ試してみてください。

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

【Android Studio】「Compilation failed to complete」エラーの対処法

今回は、Android Studioでアプリ開発時に発生した「Compilation failed to complete」というエラーの対処法です。
対処法といっても、今回のエラー文は「コンパイルが完了しなかった」という、何が原因なのかが全く分からないようなものだったので、具体的なエラー内容を表示させる方法です。

 

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

Android Studioでエラーログを詳細表示する – RE:ENGINES
https://re-engines.com/2017/05/17/android-studioでエラーログを詳細表示する/

詳細なエラー内容の表示方法ですが、まずAndroid Studioの設定を開きます。

で、サイドメニューの Build, Execution, Deployment > Compiler を選択します。
そしてウィンドウの中央辺りにある Command-line Options に「–info」や「–debug」などのオプションを指定します。

記事内で紹介したサイトでは「–debug」と入力していましたが、それ以外で参考にしたサイトでは「–info」と指定していました。
表示内容を見比べていないので分かりませんが、個人的には「–info」を使っています。

 

以上、Android Studioで詳細なエラー内容を表示する方法でした。
今回ご紹介した「Compilation failed to complete」のエラーのように、それ単体ではエラーの内容が分からない時などにご活用ください。

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

google mapのタイムライン機能

 googleはユーザからこれでもかと情報を集めて、その情報をサービスに活かしています。タイムライン機能は自分がいつどこにいたかの情報を見る機能です。
 使い方はgoogle map左上の三みたいなアイコンをクリックして図のタイムラインをクリック。

 主要な点、おそらく遠出した時の点が描かれる画面になります。左上から日付を指定すると下の画像の様に、具体的なルートとかかった時間まで教えてくれます。

 残したくない、消したいという場合は右下のごみ箱から捨てられます。一方でローカルに保存することもできます。このようなデータを使用しているため、googleのナビは同じルートでも個人差を考慮したより正確であろう移動時間を予測してくれます。
 

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

【android Java】Binary XML file line #8: You must supply a layout_width attribute.

android studioで新しくプロジェクトを作ってrayout.xmlを少しいじった後に試しにビルドをしてみたらいきなりエラーがでました。以下がLogcatで出たエラーです。

 

layout_widthと書いてあるので、一番上のschemeが書いてある下あたりでandroid:layout_width=”match_parent”が抜けていて横幅が不明になっているのだと思われます。一緒にheightの方もつけてあげれば無事動くと思います。

少し昔の参考書にありがちなのですが、layout_xml部分が意外と何も書かれていないことが多く、見逃してエラーを出してしまいがちです。一応gitにも出版元のコードが置いてありますが、ほとんど更新されていなく結局自分で手直しせざるを得ません。バージョン変更に伴いandroid studioやgradleの扱いも少し変わってきてるのでこれから勉強する方はできれば2018出版の参考書を購入することをお勧めします。

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