2015年6月14日日曜日

Laravel5と郵便番号用ajaxのajaxzip3.js

Laravel5でちょっとしたWebシステムを開発することになった。ちなみに、2014年10月ごろにはLaravel4でWebシステムを開発した。Laravel4とLaravel5はフォルダの配置とデフォルトの設定が随分変わったので、最初かなり戸惑った。
 それはさて置き、 ajaxzip3.jsと郵便番号の話です。フォームに郵便番号を入れると住所欄に住所が入るWEBページがよくあります。自分で作らなければいけないと思い、日本郵便のページから郵便番号のファイルをダウンロードして、簡単なプログラムを書いて、郵便番号のデータをMySQLに取り込んだ。

<2015/6/14追加>
Google Codeがサービス廃止になり、Githubに移行したそうです。私のページも動かなくなったので驚きましたが、理由が分かれば、安心。
Github移行を機にこれまでhttp、httpsで分かれていたURLを一本化したそうです。
今後は、https://ajaxzip3.github.io/ajaxzip3.js に成ります。(http://でも使えるみたいですが、基本はhttps://です。)
今までは、http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js だった。下記の部分もこの部分は読み替えてください。書き換えてください。

その後Javascriptの見本が見たくて、Googleで検索したら、ajaxzip3 と言う、驚異的なページを見つけてしまった。  ajaxzip3.jsを使えば、もう自分で郵便番号を用意する必要はない。ホームページに書くコードも至極簡単だ。ヘッダーの中で下記:
http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.jsを読み込み。
本文のフォームの中に下記のように書く(私が書いたコードで、余分に、class="eisu"とtype="tel"で英数字化、placeholder="453"でグレーの初期値表示、onKeyPress="return submitStop(event)で改行キーでの送信の拒否、を入れている)。データベースを3桁4桁にしているので、入力用フォームも3桁4桁に分けている。
<td>
<input class="eisu" maxlength="3" placeholder="453" onKeyPress="return submitStop(event);" name="zip21" type="tel" value="">
</td><td>
<input class="eisu" maxlength="4" placeholder="0042" onKeyUp="AjaxZip3.zip2addr(zip21,zip22,addr21,addr21);" onKeyPress="return submitStop(event);" name="zip22" type="tel" value="">
</td>
ajaxzip3の動作見本ページはここです。

ajaxzip3のURLを見ると、https://code.google.com/p/ajaxzip3/と、google.comのドメインになっている。ajaxzip3.jsの設置場所も、googlecode.comになっている。Google Project Hostingというページで、オープンソースをGoogleが応援しているようだ。Googleがこのようなことを行っているのははじめて知った。(上に追加で記したように、Google Codeはサービス廃止だそうです。)


LinuxのopenSUSEをインストールして、日本が使える設定をする

Linuxの派生の一つであるopenSUSEを熱心に勧める学生に、2015/5/23土曜日のOSC2015名古屋で出会った。openSUSEの読み方は「オープンスージー」かと思っていたら「オープンスーゼ」だそうだ。ちょっとダサいな。また、openSUSEのoは小文字であり、大文字のOpenSUSEは間違いだそうだ。くれぐれも、openSUSEと書くようにしましょうか。

OSC2015名古屋以来、openSUSEをインストールしようと思っていたが、6月13日土曜日の深夜にやっとインストールした。インストールは簡単だが、日本語が使えるようになるまで、2時間以上掛かった。openSUSEで日本語を使えるまでの手順を書いておきます。

ちなみに、openSUSEのインストールに使ったパソコンはFMV INSPIRON 710m。メモリ1.25GB。XPからWindows7にアップした後、フリーズに近い状態ばかりで使い物にならないので、CentOSでもいれようかと思っていたが、人生初めてのopenSUSEをインストールすることにした。


ではopenSUSEのインストールをはじめます。
1.openSUSEをダウンロード。710mは旧32ビットPC用(64ビット用ではない)

2.isoファイルをDVD-Rに焼く

3.DVDから起動後、インストール最初の頃に、F2ボタンを押して、日本語を選んでインストールを進める

4.インストールの最後の頃に、パスワードの管理システムうんぬんが出てくるけど、一応、自分のIDのときと同じパスワードを入れて設定しておくといい。理由は、後々、無線LANの設定で、このパスワード管理を設定しておけば、PC起動のたびに、無線LANにパスワードを入れる必要がなくなるので、ぜひ、設定しておくことを勧めします。

5.もう一つ、インストールの途中で、無線LANやLANの設定が出てくるが、710mの場合、何もせずに次へ次へ進んで、無線LANは何もしなくても稼動した。

6.openSUSEのインストールが一通り終了して、再起動後、openSUSEにデフォルトで入っているFireFoxとLibreOfficeを使ってみた。

7.残念なことに、openSUSEで日本語が入力出来ない。Googleで検索してそれに従うが、やはり、日本語入力はできない。

8.出来ないけど、とりあえず、必須の日本語環境の設定手順を書いておくと

9.左下緑丸のスタートボタンをクリックし ⇒ コンピュータを選択し ⇒ YaSTを選び ⇒ YaST2コントロールセンターを開き ⇒ システムを選び ⇒ 言語を選び ⇒ 第一言語を日本語に設定する。

10.スタートボタン ⇒ 最上段の検索枠に「ibus」と入れて、ibus設定を開く ⇒ 入力メソッドをクリックし ⇒ 追加ボタンをクリックし ⇒ 日本をを選び ⇒ Mazcを選ぶ(Mazc-jp Layoutではなないので注意) ⇒ 設定を見てみると、「ローマ字入力」「MS-IME(ATOKも使えるとはすごい)」でいいでしょう。

11.ここまで設定すれば、FireFoxやLibreOfficeで日本語が入力できると思ったのに、残念ながら出来ませんでした。

12.それを助けてくれたのがこのページ。openSUSE13.2で日本をを使うための最後の設定
どうするかと言うと、xmlファイルを一つ削除するのだそうだ。ただ、この解説ページは、今はそれをしなくても日本語が使えると書いている。それは間違いで、今もやはり、このxmlファイルを削除しないといけない。

13.スタートボタンから、「ターミナル Konsole」を開き下記の内容を入力
sudo rm /usr/share/ibus/component/kimpanel.xml
[Enter]キーを押下して削除後、ibusを再起動するかopenSUSEを再起動すると日本語入力が可能になる。

14.日本語入力が出来るようになると、上の写真の右上と、右下にあるように、オレンジ色で「あ」と「A」の切り替え表示が現れる。日本語が使えない状態のときは、このオレンジのアイコンがない。このオレンジのアイコンが最初の現れたときは、神様に出会った気がした。

■PCでLinux 使うならどれにするか。個人的には、openSUSEをインストールしてみて、PC用ならopenSUSE, CentOS, Ubuntuの順番だ。サーバーなら、CentOSにする。  以上



2015年4月26日日曜日

Laravel5で複数チェックボックスのバリデーションを行う、required_without_all

Laravel5で開発中に、複数checkboxのvalidationが必要になった。少なくとも一つにチェックをつけているかどうかをバリデーションすることになった。

Laravel5には、そのためピタリなValidation ruleがある。hoge required_without_all:foo,bar,...というvalidation ruleがそれだ。hogeは、hoge以外のcheckboxが全て未チェックなら、チェックされなくてはならない。それは、つまり、少なくとも一つがチェックされていなければならないことと同じになる。

複数checkboxをvalidateするための、Request.php、Controller.php、test.blade.php、testconfirm.blade.phpの実例をご紹介します。

test.blade.php
{!! Form::checkbox('service0', '人間', null) !!}人間<br>
{!! Form::checkbox('service1', 'チンパンジー', null) !!}チンパンジー<br>
{!! Form::checkbox('service2', 'ゴリラ', null) !!}ゴリラ<br>
{!! Form::checkbox('service3', 'オランウータン', null) !!}オランウータン<br>

testconfirm.blade.php
{{ Input::get('service0') }}{!! Form::hidden('service0', Input::get('service0')) !!}
{{ Input::get('service1') }}{!! Form::hidden('service1', Input::get('service1')) !!}
{{ Input::get('service2') }}{!! Form::hidden('service2', Input::get('service2')) !!}
{{ Input::get('service3') }}{!! Form::hidden('service3', Input::get('service3')) !!}
// 戻るボタンで戻ったときに入力値を維持しているようにしている

Request.php
public static function rules() {
    return [
        'service0'=>'required_without_all:service1,service2,service3',
        'zip21'=>'required',
        'zip22'=>'required',
        'addr21'=>'required',
        'name'=>'required',
        'email'=>'required|email|confirmed',
        'content'=>'required'
    ];
}

Controller.php
// checkboxのチェックされなかった項目の特別な処理をする。 入力後、内容はメール送信している。
if(isset($input['service0'])){
    Session::put('service0', $input['service0']);
}else{
    Session::put('service0', '');
}

if(isset($input['service1'])){
    Session::put('service1', $input['service1']);
}else{
    Session::put('service1', '');
}

if(isset($input['service2'])){
    Session::put('service2', $input['service2']);
}else{
    Session::put('service2', '');
}

if(isset($input['service3'])){
    Session::put('service3', $input['service3']);
}else{
    Session::put('service3', '');
}


Laravel5のマニュアル http://laravel.com/docs/5.0/validation#available-validation-rules
 

2015年4月18日土曜日

input type="file"のカーソルを手指型にする

ファイルをアップロードする為の<input type="file" name="hata">は、ボタンにマウスを合わせたとき、カーソルの形状が矢印になる。
Web画面上でクリック可能を示すカーソルは、マウスを合わせたとき手指型が常識だと誰もが思っているだろう。なのに、ファイルアップロードのときのボタンはそうなっていない。

そこで、簡単にカーソルの表示を変える方法です。
cssファイルに、input.tegata { cursor:pointer; }と記述し、上記のhtmlを
<input type="file" class="tegata" name="hata">と書き換える。これで、ファイルをアップロードするときの参照ボタンにマウスを合わせると、カーソルが手指型になる。
ただし、chromeはだめなようです。

カーソルにはその他いろいろな型の指定があります。
cursor:pointer 手指型
cursor:default 矢印型
cursor:crosshair 十字型
cursor:move 移動用型
cursor:aouto  状況に応じて自動選択(初期値)
その他


PHP filter_var関数を使って、ログインをメールでもIDでも可能にする(Laravel5での開発で)

Laravel5で社内のシステムを開発するときに、ログインをメールアドレスでもIDでも出来るようにしたかった。そのとき使ったのが、filter_var関数。フィルタにFILTER_VALIDATE_EMAILを使えば簡単なスクリプトで、メールアドレスでもIDでもログインできるようになる。(ほとんど無いと思うけど特殊なメールアドレスには対応できません)

filter_var関数は、PHP5で使える関数で、指定したフィルタでデータをフィルタリング出来る。フィルタは、例えば、FILTER_VALIDATE_EMAILを使えば、メールの正しい型か否かを判断できる。その他、FILTER_VALIDATE_URL、FILTER_VALIDATE_INT、FILTER_VALIDATE_BOOLEAN、FILTER_VALIDATE_IP等がある。

下記がLaravel5で開発したときの実際のスクリプトです。

public function loginhandle(Request $request)
{
 // formのinputがメールかIDかを判定する。ここでfilter_varが役立つ。
 $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

 $remember = \Input::has('remember');
 if (\Auth::attempt([$field=> $request->input('login'), 'password' => $request->input('password')], $remember))
 {
  $admin = \Auth::user();
  return redirect('admintop');
 }

 return redirect('login')->withErrors(['error'=>'IDかメールアドレスかパスワードが違います']);
}

Laravel5用に書いたhtml部分(少し余分なものも入っているけど)
  {!! Form::open() !!}

    <input type="hidden" name="_token" value="{{ csrf_token() }}">

    {!! Form::label('login', 'メールかID') !!}
    {!! Form::text('login') !!}

    {!! Form::label('password', 'パスワード') !!}
    {!! Form::password('password') !!}

    {!! Form::submit('ログイン') !!}

    {!! Form::label('remember', 'パスワード保存') !!}
    {!! Form::checkbox('remember', '1', true) !!}

  {!! Form::close() !!}

参照:
PHPのドキュメント
楽に検証!値をチェックしてくれるfilter関数
filter_var関数でメールアドレスをバリデーションする



2015年4月5日日曜日

Laravel5利用中に使った「生年月日から年齢を計算する簡単な方法」

Laravel5で開発中に、生年月日から年齢を計算するときに使ったfloor()関数。

// form内のselectボックスで、年、月、日を取得し

$ymd = Request::input('birthy') . Request::input('birthm') . Request::input('birthd');

// $ymdは19880523のような文字列になっている。
// 下の2つのどちらの方法でも年齢が取得できる。今回の開発では、floor()関数を使った。

$nenrei = floor((date('Ymd')-$ymd)/10000); //floor()関数で整数値を取得する
$nenrei = (int)((date('Ymd')-$ymd)/10000); //整数型にキャストする

// floor()関数の動作定義は「最も近い最小の整数値を返す」という動作。引数に負の値を指定する場合にはちょっと注意。floor( -2.55 )は、-3になる。(int)-2.55なら、-2になる。

// floor()関数の同類関数: ceil() は値を切り上げる。round() は整数値に丸める。

/**
(int)の他に使用可能なキャスト
PHP の型キャストは、変換しようとする型を括弧で括り、キャストする変数の前に置く。
------------------------------------------------------------------------------
(int) -> 整数へのキャスト
(bool) -> 論理値へのキャスト
(float) -> floatへのキャスト
(string) -> 文字列へのキャスト
(array) -> 配列へのキャスト
(object) -> オブジェクトへのキャスト
(unset) -> NULLへのキャスト (PHP5)
(binary) -> 2進数へのキャスト(PHP5)
*/


2015年1月13日火曜日

パソコンには、Ubuntu14よりCentOSの方が楽でいい

CentOS7が出たらしいので古いCF-T5にインストールしたいと思った。が、CentOS7からは32ビット版が存在しないので、CF-T5にはインストールできない。入れるつもりになったので、古いバージョンの6.6でもいいと思いインストールした。

実は、2014年に一度このCF-T5にはUbuntu14をインストールした。会社のサーバーはずっとCentOSだったので、CentOSの使い勝手はわかっていたが、世間で評判のUbuntuを触ってみようとインストールしたものだった。

今回、CentOSをサーバーではなく、CentOSをパソコンとしてインストールした。サーバーアプリの代わりに、Officeアプリなどをインストールしただけ。サーバーの設定が不要な分手間が無い。

Ubuntu14とCentOS6.6(CentOS7が最新)を比べると、CentOS6.6の方が、インストールが簡単だ。日本語関連でさえ何もしなくてよい。日本語と英数の切り替えはWindowsと同じでいい。何の手間も無い。

無線LANもWLI-UG-GNMならUSBに差し込むだけでつながる。

動作速度も、Ubuntu14より、CentOS6.6の方が軽快だ。

インストールが簡単、日本語設定が何も必要ない、無線LANは差し込むだけ、動作も軽快、全体の使い勝手もいい。

これほどにいいCentOSをなぜ、日経LinuxなどのLinux系雑誌は、ユーザーに奨めないのだろう。Ubuntuばかり奨める。無知なのか、何か特別な利害関係でもあるのか。

僕は声を大にしていいたい、パソコンにLinuxをインストールするなら、初心者からベテランまでCentOSを使いましょう。楽ですよ、楽。



2014年11月18日火曜日

Laravel4 Migrations Tips

As we read programming books or homepages, we sometimes encounter the confusion because of the different explanations from authers to authers.

Laravel's Migrations is in that case. Let's me explain the best use of migrate:make command.

First, here are three lines for migrate:make command. You will see which is the best way to write seeing the results.

Laravel4 Formal Documentation

1. $ php artisan migrate:make create_users

2. $ php artisan migrate:make create_users --table=users
2-2. $ php artisan migrate:make create_users --table="users" //Double quotations are not required. This line shoud be like upper one.

Sorry, I made a mistake. 3-2 is wrong. 3 is a true line I intended. Originally, I wrote this blog in august.
3. $ php artisan migrate:make create_users --create=users
3-2. $ php artisan migrate:make create_users --create --table=users

The results for each command are like below.

The result for the first command line.
------------------------------
<?php
use Illuminate\Database\Migrations\Migration;
class CreateUsers extends Migration {
/**
* Run the migrations.
*
* @return void
*/
 public function up()
 {
  //
 }
/**
* Reverse the migrations.
*
* @return void
*/
 public function down()
 {
  //
 }
}
-------------------------------


The result for the second command line.
-------------------------------
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsers extends Migration {
/**
* Run the migrations.
*
* @return void
*/
 public function up()
 {
  Schema::table('users', function(Blueprint $table) {
  });
 }
/**
* Run the migrations.
*
* @return void
*/
 public function down()
 {
  Schema::table('users', function(Blueprint $table) {
  });
 }
}
-----------------------------


The result for the last command line.
-----------------------------
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsers extends Migration {
/**
* Run the migrations.
*
* @return void
*/
 public function up()
 {
  Schema::create('users', function(Blueprint $table) {
   $table->increments('id');
   $table->timestamps();
  });
 }
/**
* Reverse the migrations.
*
* @return void
*/
 public function down()
 {
  Schema::drop('users');
 }
}
------------------------------


The last line is the best for us. The migrate:make command make more job for us with the last. It's result makes us saving the coding time with less errors.

2014年11月1日土曜日

画像の歪みを簡単に補正できるGIMPはフリーソフトです

パンフレットなどに使う写真は、建物や機器が菱形(昔、高校の先生がひしがたなどと読むな、りょうけいと読めと言っていた)や台形に写っていると見栄えがよくないという経験を多くの人がしていると思う。

火曜日の朝、お友達の会社から11月5日からの展示会用パンフレットを作ってくれと電話があった。素人写真なので歪みや傾きがひどい。何かいいソフトはないかとググッて、いくつか試した。その中で、GIMPが圧倒的にすばらしかった。

GIMPは昔使ったことがあったが、当時、PhotoShopLE3.5を使っていたので、GIMPを継続して利用することはなかった。

GIMPには画像の歪みを修正する機は以前からあったようだが、現在のGIMPの性能はまったく驚くべきもので、GUIで簡単にあっという間に歪みが修正できる。必要に応じて画像の四隅のどこかを引っ張るだけで四隅が90度の画像ができる。しかも、品質のいいきれいな画像だ。オープンソースソフトウェアの世界はまったくもって賞賛され尊敬されるに値するものだ。

最新のGIMPは起動すると、独立した3つのウィンドウが表示される。真ん中のウィンドウに画像を読み込む。左のウィンドウは各種のツール類がアイコンになって並んでいる。その中の補正用のアイコンをクリックして、中央に表示された画像の四隅を適当に引っ張る。これだけのことです。画像の歪みの補正を考えている人は、絶対にGIMPがお勧めです。

最後に一つ、インストールに関して。GIMPのインストールの前にGTK+をインストールすることと書いているページがあるけど、現在はGIMPをダウンロードしてそれをインストールすればGTK+も自動的にインストールされる。

2014年10月17日金曜日

FedoraCore6のbashをShellshockに対応させる

Shellshockと呼ばれるbashの脆弱性が発表された。今年は、HeartbleedとPoodleのOpenSSLの脆弱性などたて続けにサーバー関連の脆弱性が世界中を駆け巡った。

その他、NASやネット接続電力計、ネット家電などコンピュータ以外の脆弱性もたくさん発表された。2014年は、ネット接続機器の脆弱性元年と言われるに違いない。

さて、bashのShellshockであるが、新しいOS、たとえばCentOS6などは、yum update bashで一発で完了するので、管理者の手間はほとんどかからない。

ところが、FedoraCore6になると、yumでアップデートできるパッチが用意されていない。バージョンアップアップをあきらめている管理者も多いと思う。


そのFedoraCore6のbash3.1をbash3.1.23にアップデートできる方法があるので紹介します。

1.影響を受けるバージョン(3.1はパッチの18までとしているページもある)
  Redhatは、日本のJPCERTと対策済みのバージョンが違う 3.1はここには出ていないけど。

2.bash3.1のパッチの場所。最新パッチをここで確認(2014/10/17現在23が最新)

3.基本的に下記の方法で3.1にパッチをあてて、bash3.1.23にバージョンアップする
(できれば、まずはテストサーバー機で実施してから本番サーバーで行ってください。自己責任)

(1)bash-3.1.tar.gzとパッチファイルをダウンロードする
wget http://ftp.gnu.org/gnu/bash/bash-3.1.tar.gz
wget http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-00{1..9} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{10..19} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{20..23} (一行で続いています)

(2)解凍しパッチを適用する
tar -xvf bash-3.1.tar.gz
cd bash-3.1
find ../bash31-??? -exec /bin/sh -c 'patch -p0 <{}' \;

(3)Configし、 Make、Make Install
./configure --prefix /tmp/bash23 && make && make install

(4)インストールしたbashを起動してみる
/tmp/bash23/bin/bash と、コマンドラインから直接起動する
echo $SHELL を実行すると
/tmp/bash23/bin/bash と表示されるはず(以後、しばらくこのbashが使われる)

(5)bashのバージョンを確認する
echo $BASH $BASH_VERSION
このように表示される: /tmp/bash23/bin/bash 3.1.23(1)-release

(6)Shellshockのテストをしてみる
env X="() { :;} ; echo vulnerable" /bin/bash -c "echo this is a test"
たぶん下のように表示される(/bin/bashと古いままのbashなので)
vulnerable
this is a test

(7)bashを入れ替える
・ tcsh  #念のため、使うシェルを変えておく
・ cd /bin/
・ cp bash bash.old  #念のためバックアップしておく
・ cp /tmp/bash23/bin/bash ./bash
・ exit #これで、/tmp/bash23/bin/bashへ戻る
・ bash #これで、/bin/bashへ切り替わる (/bin/bashとすることになるかも)

覚:shellの切り替え方法
1.コマンドラインで、chsh -s /bin/tcsh等とすると、/etc/passwdの中身が書き換わる。
  書き換わるが、再ログインしないとshellは切り替わらない。
2.コマンドラインで、tcsh等とすると、その時点で使うshellが切り替わる。
  exitで元に戻る。
echo $SHELLを実行してみると、使っているshellがわかる。

注:下記の処理をすることもあるかも
/etc/shellsファイルに/tmp/bash_patched/bin/bashを追加する
echo $PATH パスを通す
PATH=$PATH:/tmp/bash23/bin
export PATH

(8)bashのバージョンを再度確認する
echo $BASH $BASH_VERSION
このように表示される: /bin/bash 3.1.23(1)-release

(9)再度Shellshockのテストをしてみる
env X="() { :;} ; echo vulnerable" /bin/bash -c "echo this is a test"
下のように表示されればOK
bash: warning: x: ignoring function definition attempt (この行はでない時も)
bash: error importing function definition for `x' (この行はでない時も)
this is a test


CentOS6にて、yumでPHPをupdateバージョンアップする方法

CentOS6にデフォルトで付属しているPHPはバージョンが古いのでバージョンアップしたい。が、しかし、yumでPHPをupdateしようとしてもうまくいかない時がある。その対処方法を記しておきます。

基本的には、remiレポジトリepelレポジトリを追加(場合によっては、rpmforgeレポジトリも追加。PHP5.5にはremi-php55レポジトリがあるようです。)して、yum --enablerepo=epel,remi update phpでバージョンアップできる。
しかし、MySQL関連のファイルなどとのバージョンの整合性で、バージョンアップできないとはねられる場合がある。

そのような時は、/etc/yum.repos.d/CentOS-Base.repoのpriority=1が原因の場合がよくある。各申す私もしばらく気づかず悩んだ。CentOS-Base.repoの中の[base][updates][extras]の3つに、priority=1が書かれていたものを、#priority=1とコメントアウトして、yum --enablerepo=epel,remi update phpを実行すると、魔法のごとくPHPがアップデートされた。


2014年10月16日木曜日

HDD完全消去のcipher.exeはWindows7でも使える

cipher.exeは、HDDの空き領域のデータを、復元ソフトで読めないように、完全消去してくれる。Windows2000の時は使っていたが、Windows7でも使えることを知った。しめしめ。
ファイルフォーマットはNTFSのみ。USBでもNTFSでフォーマットできれば、完全削除可能だと思う。

コマンドプロンプト上で、cipher /w:[drive]:\[folder]と打ち込んで行う。個人的には今まで、フォルダーを指定したことはない。(WでもwでもEでもeでもよい)
例としては、cipher /W:E:改行、のように使う。実行すると、下記のように進行していく。
(スタート ⇒ プログラムとファイルの検索、に記述しても実行できる場合あり)

C:\>cipher /W:E:
できるだけ多くのデータを削除するために、CIPHER /W の実行中
はほかのアプリケーションをすべて終了してください。
0x00 に書き込み中
...................... (中略) .............
0xFF に書き込み中
...................... (中略) .............
乱数 に書き込み中
...................... (中略) .............
C:\>

マクロの世界での磁気データパターンの完全消去のためには、このように異なったデータで3回は書き込む必要があるそうで、米国防総省(DOD)などで決められた消去手順になっている。

■完全消去のポイント:cipherは空領域に書き込むので、cipherの実行前に、HDDをNTFSでフォーマットして、HDD全体を空領域にしておく。それによってHDD全体を確実に消去できる。(これを行うには、完全消去したいHDDを外付けか何かにしておく必要がある。OSの入ったCドライブ全体を完全削除はできないから)


2014年10月15日水曜日

パソコン画面の動画キャプチャーソフト

パソコンの画面をいろいろ操作している状況を音声付の動画にしたくて、無料ソフトウェアを使った。いわゆる動画キャプチャーソフト。簡単に利用できるかと思いきや、以外に時間がかかった。

うまくいかなかったのは、説明音声の録音機能。特別難しい設定はなく、ごく常識的な設定で使った。

Bandicamはまったく録音されない。

AG-デスクトップレコーダーもまったく録音されない。

CamStudioは極短いものは録音されたが、役立つ長さの録画になると、最後に保存するときにエンコードができないようなメッセージを出してエラー終了する。

アマレココは、有料のシェアウェアを一緒に入れないと使えないように書いてあるので使わなかった。

4つ目に、BB FlashBack Expressを使った。やっと録音もできた。録画動画は普通に見られる品質だ。やれやれ、Blueberry Software Ltd.さん、タンダコンピュータさんありがとう。

BB FlashBack ExpressのVectorでのDownloadページ



2014年10月2日木曜日

PHPのmb_send_mailが使えなくなったが、QDmailのおかげで助かった

PHPで作った、結果をメール送信するようにしていたシステムで、社内の都合でmb_send_mail()が使えなくなった。困ってネットで探したらQDmailなる、すばらしいモジュールが作られていることがわかった。それを実際にPHPに書いて使ったので、見本として掲載しておきます。

$message =<<<EOM
管理者 または お客 様

問い合わせがありました。または
ありがとうございます。
EOM;


// QDmail使用 今年からメールサーバーがmb_send_mail()でアクセスできなくなったため
require_once('qdmail.php');
require_once('qdsmtp.php'); //こちらは必ずしもrequire_onceしなくてもよいが、この方が何も考え無くてもいいので、とりあえず両方ともrequire_onceしておいた。

$mail = & new Qdmail( 'UTF-8' , 'base64' );
$mail -> smtp(true);

$param = array(
    'host'=>'mail.xxxxx.gr.jp',
    'port'=>25,
    'from'=>'anata@xxxxx.gr.jp',
    'protocol'=>'SMTP',
    'user'=>'anatadesu',
    'pass' => 'pasuwaadodesu',
);

$mail -> smtpServer($param);

//$mail ->to($todata); // 顧客への場合
$mail ->to('kanrisya@xxxxx.gr.jp','赤谷 ゆい'); //管理者の場合
$mail ->subject('問い合わせがありました。');
$mail ->from('anata@xxxxx.gr.jp','株式会社です');
$mail ->text($message);
$return_flag = $mail ->send();


参考 http://qiita.com/tsunet111/items/0ba0e8fc61882c3905c0
他に、上記の各項目の正しい書式の解説ページもあるので探して読んでください。


2014年9月21日日曜日

Windows7, Windows server 2008 R2, Windows XPでネットワーク上のPCが見えない

考えられる原因の第一は、LAN Manager認証レベルがあっていないことが上げられる。

新しいWindowsは、クライアントとして使用する認証プロトコルに、NTLMv2をデフォルトとして使う。古いWindowsはNTLMかLM/NTLMを使うようになっている。ために、見えない。

よって、古いWindowsが混在する場合は、セキュリティレベルが低いプロトコルにあわせることになる。手っ取り早いのは、スタートメニューを開き、ファイル名を指定して実行にregeditを入れて、レジストリエディタを起動し、レジストリを書き換えてやる方法。書き換えた後PCを再起動する。

書き換えるレジストリの内容:
キー     HKLM\SYSTEM\CurrentControlSet\Control\Lsa
値の名称  LmCompatibilityLevel
値の型   DWORD
値の内容  2か1か0にする

上記値の内容についてのコメント:
レジストリに、LmCompatibilityLevelがない場合は、デフォルトの3になっている。NTLMv2プロトコル。
2、1、0とセキュリティが下がっていくので、値の内容を順番に試すか、最初から1で行っておく。

Windows7でスタートメニューにコントロールパネルなど右袖が出なくなった

対処法はいたって簡単だ。
スタートボタンをクリックして、スタートメニューの何もない部分を右クリックし、「プロパティ」を選択する。

「タスクバーとスタートメニューのプロパティ」が表示されるので、「スタートメニュー」タブをクリックし、「カスタマイズ」ボタンをクリックする。

開いたウィンドウの左下に、「既定の設定を使用(D)」があるので、それをクリック。これで、消えていた、コントロールパネルやコンピュータがスタートメニューの右袖に現れる。あとは、必要に応じてもう一度カスタマイズする。


ついでに、カスタマイズひとつ。
「ファイル名を指定して実行」をスタートメニューにに出す方法。
「タスクバーとスタートメニューのプロパティ」を表示し、「スタートメニュー」タブをクリックし、「カスタマイズ」ボタンをクリックするところまで上と同じ方法。
開いたウィンドウの上のほうに「[ファイル名を指定して実行]コマンド」があるのでチェックを入れる。これだけ。


2014年9月20日土曜日

Windows7 Home Premiumを家族の秘密ファイルサーバーにする方法

古いWindows7 Home Premiumが残ったので、パパ、ママ、ゆいの3人でバックアップサーバー兼秘密のファイル基地を作った。その方法を紹介する。ファイルサーバー名はserverとする。

手順:
(1)フォルダを3つ作る。papa、mama、yui。(名称はご自由に)
(2)ユーザーを3つ作る。papa、mama、yui。
(3)3つのフォルダにネットワーク共有設定を施す。
  (下記の記述中、羽田とかの名前が出てきますが、papaと読み替えてください)

  1.papaフォルダを右クリックして、プロパティを開いて、共有タブの「詳細な共有」を開く。(注意:フォルダを右クリックして、プロパティを開いて、共有タブの「共有」は使わないこと。)

  2.このフォルダを共有するにチェックを入れ、追加ボタンをクリックする。

  3.papaのアクセス許可が開く。papaを選択して、許可のフルコントロールをチェックする。papa以外にEveryone等があったら、選択して許可のチェックをすべてはずす。全て外し適用をクリックすると、グループ名またはユーザー名からEveryoneが消える。これで、ネットワークからserverへアクセスすると、papaフォルダはpapaしかアクセスできない。ハッカー野郎にも手出しできない。

  4.次は、serverに直接ログインしたときに、papa以外がpapaフォルダを見えないようにする。papaフォルダを右クリックして、プロパティを開いて、セキュリティタブをクリックする。グループ名またはユーザー名から、アクセスさせたくないユーザー(ここでは、mamaとyuiの2人。一人ずつ)を選んで、編集をクリックして、拒否ををチェックする。OKをクリックする。これで、serverに直接ログインしても、他人からは見えない。

(ただし、管理者になっている人は、serverに直接ログインすれば、何でもできるので、そのあたりは、紳士淑女協定で他の2人のフォルダを勝手に設定しなおして、中を見るようなことはしないようにする。誘惑に負けない人を管理者にすること。だよね。!?)


text入力欄でEnterキーを押してもフォームを送信しないJavascript

ホームページのフォームでtext入力欄を3つ作って、公開したとする。利用者が、最初のtext欄に入力して、Enterキー(リターンキー)を押したとすると、他の2ケ所を入れる前に、意図せずフォームが送信されてしまう。

text入力欄でEnterキーを押してもフォームを送信しない方法と、そのときに同時にエラーメッセージを表示する方法のjavascriptを書いておきますので利用してください。

下記のjavascriptを<head></head>の間にコピーする。function formcheck()がエラーメッセージの表示。function submitStop(e)がEnterキーを押したときの動作を制御して、フォームを送信させないようにする部分。
<table></table>は<body>のformに記述する。


<script type="text/javascript">
<!--
function formcheck(){
var flag = 0;
if(document.formwebtest.secid.value == ""){
flag = 1;
}else if(document.formwebtest.secmail.value == ""){
flag = 1;
}else if(document.formwebtest.secname.value == ""){
flag = 1;
}

if(flag){
window.alert("必須項目が未入力");
return false;
}else{
return true;
}
}


function submitStop(e){
if (!e) var e = window.event;
if(e.keyCode == 13)
return false;
}
// -->
</script>


<table>
<tr>
<td>テキスト1:</td>
<td><input name="secid" value="" type=text size=68 onKeyPress="return submitStop(event);"></td>
</tr>

<tr>
<td>テキスト2:</td>
<td><input name="secmail" value="" type=text size=68 onKeyPress="return submitStop(event);"></td>
</tr>

<tr>
<td>テキスト3:</td>
<td><input name="secname" value="" type=text size=68 onKeyPress="return submitStop(event);"></td>
</tr>
</table>

session_start()はコールする位置(記述する位置)が重要 PHPマニュアル

3月と9月、半年に一度使うプログラムを少し直した。3月に使った後に直しておいて9月に使った。AページからBページへ遷移して、Aページで入力した内容をプログラム処理して、Bページで表示するはずが、表示できなくなった。

調べてみると、スーパーグローバル$_SESSIONの内容が消滅してしまっている。3月に直したときは、直す前のセッションがまだ残っていて、エラーが現出しなかった。正確には、消滅というより、セッションが再開できず$_SESSIONの内容が使えなかった。

3月に直して半年経っているので、直した部分をすぐには思い出せなかった。最初からプログラムの流れを全部追ってみて原因がわかった。

session_start()の記述位置を変えてやらないといけなくなっていた。途中にページをはさんだので、直す前のままのsession_start()の位置では、セッションが再開されなくなっていた。途中に挟んだページにsession_start()を入れ直してやらなければいけなかった。

session_start()の記述位置(コールする位置)に関して、少々間違った記述をしているホームページがよくあるので、正しい認識をここに記しておく。

正しくない認識: session_start()は、<?phpの直後に書く。
<?php
session_start();
// session_start()は<?phpの直後に書く。他のどの記述よりも上に書く。
// ここからプログラムを書く
?>

正しい認識:: クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前に session_start() をコールする必要がある。(通常は、クッキーに基づくセッションを使っている)
つまり、ブラウザに出力する処理でなければ、<?phpとsession_start()の間に、いろいろ記述してもよい。

PHPマニュアル session_start()



2014年9月14日日曜日

iPhoneで写真をスケッチ風に加工するアプリ、Photo Sketch

2,3年前までは写真をスケッチ風に加工する無料アプリは、魅力がなかった。随分変なスケッチ風にしかならなかった。なので、使うことはなかった。


ところが、写真のスケッチ風加工とは無関係のアプリを探していたときに、検索結果の中に「Photo Sketch」という写真のスケッチ風加工アプリが入っていた。説明を読んだら面白そうだったので、インストールしてみた。5月ごろ有料のソフトを入れたが、いまいちの出来だった。それに比べても出来はずっといい。ただ、制作者の名前が、CHEN ZHAOさんなのが少し気になる。今の時代あの国は怖い国だからね。

インターネット上で、photo sketch app iphoneの4単語を入れて検索しても、出てくるのは、無料では「Sketch guru」くらい。Photo Sketchは出てこない。 Sketch Guruは使っていないのでわからないが、Photo Sketchと同じようかと想像する。

iPhoneのApp StoreでPhoto Sketch freeを検索すると、Sketch Cartoon MeというAppも出てくる。感じとしては同じエンジンを使っていそうだが、使い勝手は、僕には、Photo Sketchがいい。見本の写真を出しておきます。2015年から発売になるトヨタの燃料電池車です。この時点で世界に3台しかない内の1台です。人物写真でも同じような感じで加工ができます。