2016年9月1日木曜日

二つの配列を同時にLOOPさせる方法


zipを使う

a_list=['a','b','c','d','e','f','g','h']
for i,a in zip(range(10),a_list):
    print i,a





結果↓

0 a
1 b
2 c
3 d
4 e
5 f
6 g
7 h


2015年5月1日金曜日

vb.netでの画面存在確認


いま自分自身以外で起動している画面の確認する手法として、
2つ説明する。


1) 立ち上がっているプロセスを確認する。
GetProcessesByNameの引数には、名前を指摘する。

Dim hProcesses As System.Diagnostics.Process() = _  System.Diagnostics.Process.GetProcessesByName("hoge")
For Each hProcess As System.Diagnostics.Process In hProcesses
   ' もし見つかった場合に、この中が処理される
Next hProcess


2) プロジェクト名を確認する(生成されたDLLから起動されている場合)。
If Application.OpenForms.Item("hoge") IsNot Nothing Then
    ' もし見つかった場合に、この中が処理される
End If

2015年4月3日金曜日

shell上での並列処理


シェルでのジョブの並列実行 sleepを同時起動し、待ち合わせを行う

sleep 10 &
pid_0=$!
sleep 10 &
pid_1=$!

wait $pid_0
wait $pid_1


シェルでのジョブの並列実行の繰り返し sleepを同時起動し、待ち合わせを行うことを10回繰り返す
for i in `seq 1 10`
do
  echo $i
  sleep 10 &
  pid_0=$!
  sleep 10 &
  pid_1=$!
 
  wait $pid_0
  wait $pid_1
 
done


2015年3月26日木曜日

SSL証明書の作成


よく作るけど、作るたびに調べなおすのでメモ書き。

2048bitのKEY作成
$ openssl genrsa -des3 -out secure.userdomain.com.key 2048
sha256でCSR作成
$ openssl req -new -sha256 -key secure.userdomain.com.key -out secure.userdomain.com.csr
KEYをバックアップ
$ cp secure.userdomain.com.key secure.userdomain.com.key.org
KEYのパスワード設定。これでWEBサーバー起動時にパスワード聞かれずに済む。
$ openssl rsa -in secure.userdomain.com.key -out secure.userdomain.com.key
CRTはどこかのサイトで認証してもら。rapidsslがやすくて後払いで便利

centosからwindowsにリモートログインし、コマンド実行



# wget http://sourceforge.net/projects/winexe/files/latest/download
# tar zxvf winexe-1.00.tar.gz
# cd winexe-1.00/source4/
# ./autogen.sh
# ./configure
# make
# make install

例)centosからwindowsにログインし、vbscriptを実行
$ /usr/local/samba/bin/winexe -U WINUSER%WINPASSWORD //SERVER "cmd.exe /C cd C:\WORKDIR & cscript WORK.vbs" | iconv -f SJIS -t UTF-8



sshでパスワード自動入力

# wget http://sourceforge.net/projects/sshpass/files/latest/download
# tar zxvf sshpass-1.05.tar.gz
# cd sshpass-1.05
# ./configure
# make
# make install

例)sshで別サーバーのプロセス取得
$ sshpass -pPASSWORD ssh USER@SERVER ps ax
例)ファイル転送
$ sshpass -pPASSWORD scp -o StrictHostKeyChecking=no /tmp/test.txt USER@SERVER:/tmp/

/home/USER/.bash_profileに下記追加
alias sshpass='/usr/local/bin/sshpass -pPASSWORD ssh '

使用例)
$ sshpass SERVER

2014年12月25日木曜日

MySQLのテーブル一覧を表示する

忘れがちなため、メモ。

MySQL でデータベースに存在するテーブルの一覧を表示するには、
SQL の SHOW 文を使用します。
> SHOW TABLES FROM データベース名

(参考サイト)
テーブルの一覧を表示する
http://mysql.javarou.com/dat/000393.html

2014年12月9日火曜日

EXCELの日付の差分の求め方


特によく使用するのは、こちら。
=(B2-A2)*1440   2 つの時刻の差を分単位で求めます。
=(B2-A2)*86400  2 つの時刻の差を秒単位で求めます。


開始と終了時刻の差分など、使用する機会が最近多い。


参考サイト : 2 つの時刻間の差分を計算する
http://office.microsoft.com/ja-jp/excel-help/HP010070468.aspx

2014年12月2日火曜日

既存テーブルのオートナンバーの割り振り方(主キー以外をキーにする場合)

SQLServerでオートナンバー列を新たに設定するが、
主キーの順番に自動で割り振られるだけ。

今回の主キー以外の順番(登録日時順とか)で割り振りたい場合には、向いていない。

そこで以下の方法を検討した。


↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

1)  ワーク用テーブル「HogeA」を作成する。
※ InsDate(データ登録日時)の昇順で、番号を割り振る。

SELECT 
 PrimaryNo
,InsDate
,ROW_NUMBER() OVER(ORDER BY InsDate ASC) AS sequence
INTO HogeA
FROM MasterA
;


2) 「MasterA」に、デザインからオートナンバー列「sequence(BigInt)」を追加する。
※ このままでは番号は主キーの順番になるだけなので注意!


3) 「MasterA」に、オートナンバー列「sequence」のidentityを「いいえ」にする。


4) 「MasterA」と 1)で作成したテーブルをJOINさせて、再度割り当てる。

UPDATE MasterA
SET MasterA.sequence = HogeA.sequence
FROM MasterA
INNER JOIN HogeA 
 ON MasterA.PrimaryNo = HogeA.PrimaryNo
;


5) 「MasterA」に、オートナンバー列「sequence」のidentityを「はい」に戻す。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


途中のデータを削除しても、
INSERTする際にはきちんと次の値として採番してくれているため、
問題ないと思われる。


以上

2014年12月1日月曜日

SQLServerのDumpが復元できない!?


> 復元さき
SQLServer2005

> 復元もと
SQLServer2014

・・・という状況で復元しようとしたら、
「メディア ファミリが正しい形式ではありません。」
という見慣れないエラーメッセージが発生した。

はじめはデータが壊れているのかと思った。
しかし調査した結果、そうではない。

「下位バージョンでは、バックアップファイルをリストアできません。」
との情報があり。
解決策はスクリプトにデータを出力するとか。

4GBを超えており、どう考えてもお手軽ではない・・・・。

どうしても必要というわけではないため、諦めることにした。

(参考)
http://nusoft.jp/blog/archives/118

2014年11月21日金曜日

カンマ区切りの列を、縦に整形して表示する方法

Kapowでロボットを組む際に、どうしようか考えていた。

特定の文言たちを1列にカンマ区切りで指定する仕様を検討中のため、
いくつ入ってくるかわからない。
それをKapowの変数に格納しなければならないが、それが可変では困る!

Kapowにとっては、ループで何行あろうが関係ないループ処理でできてくれるのが一番いい。

となると、MySQLで勘考してくれるのが一番だと考えた。
その結果が以下である。


SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(NGWord,',',v.n),',',-1) as NGwords
FROM (SELECT NGWord FROM test01) AS c,
               ( SELECT 1 n 
UNION ALL SELECT 2   
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS v
WHERE  LENGTH(NGWord)-LENGTH(REPLACE(NGWord,',',''))+1 >=v.n


test01テーブルに、カンマ区切りの文字列が保持されているNGWordを用意して、
上記SQLを実行させた。
ただし仮にカンマ区切りで13個あったとしても、UNION ALLたちが10個までしかないため、
10個までしか出力されない。

どっちみち仕様として利用者には、「10個までならカンマ区切りで指定可能」と
言ってしまえば運用上問題なし!!

詳細なことは、以下のURLへ飛んでください。
(参考URL)
BAD DB設計に対するSQLパターン応用編1 カンマ区切りのカラムを列(縦方向に分解)Comments
http://d.hatena.ne.jp/IT7C/20130217/1361039857

2014年11月19日水曜日

phpExcelでの画像サイズと、EXCELの印刷時の注意

写真サイズの、Lサイズ(89×127)の場合。
$hoge->setHeight(336.3);
$hoge->setWidth(479.8);

setHeightとsetWidthに対して、
上記のように指定すると、Lサイズで画像がEXCELに出力される。
しかしEXCELの印刷プレビューをすると、少し大きく表示されてしまう。
画像の間隔に余白がない状態だ。
(Microsoftには、シートの状態と印刷プレビューの状態で見え方が異なる状態を早く直して頂きたい・・)
なお、余白はデフォルトのままである。
※ 上下:1.9、左右:1.8、ヘッダ&フッタ:0.8

従って、上記の設定値の95%を設定するが、
これでは確かに印刷プレビューではおさまっているようにみえるが、
最後の3ページ目がなぜか4ページ目にはみでてしまうため、さらに縮小する必要があった。
$hoge->setHeight(319.5);
$hoge->setWidth(455.8);

最終的には、初めの設定値の92%に収まった。
※ 次のページに少し出ない、ぎりぎりのサイズ
$hoge->setHeight(309.4);
$hoge->setWidth(441.4);

さらにEXCELの中身も注意しなければならない。
シート全体を印刷範囲クリアをしたとしても、
以前に編集したことがあれば、その部分まで印刷されてしまう。
つまり3ページで画像が終わりだとしても、空白の状態で4・5ページ目が出力される。
よってそういうときは、該当行をすべて削除してしまえばいい。

2014年11月18日火曜日

phpExcelの画像サイズが統一されない原因について


setHeightとsetWidthで指定をしても、画像が統一されていなかったが、
それはデフォでは、「縦横比を固定する」が効いているからである。
したがって、ソースに
「$hoge->setResizeProportional(false);」
を追加してあげて、固定しないとすれば問題ない。


(参考)
 http://docolog.cocolog-nifty.com/papalog/2012/02/php-phpexcel-f9.html

phpExcelについて


PHPからEXCELを出力するライブラリがあるが、
こちらの注意点を2点列挙する。

(1)
ソースファイルをUTF-8で保存する際に、
BOMを付加させて保存すると、EXCEL出力時にファイルが壊れているとエラーメッセージが表示されて、開くことができない。

(2)
EXCELに貼り付ける画像の縦横を調整する、setWidthAndHeightなどが存在するが、決して指定したどおりに全ての画像がそろってくれるわけではない。
つまり貼り付けるオリジナルの画像の大きさがバラバラだとしたら、出力されたEXCEL内の画像もバラバラだったりする。

2014年8月13日水曜日

javascriptによるtrim処理

ltrim
target = target.replace(/^\s+/, "");

rtrim
target = target.replace(/\s+$/, "");


参考URL
http://blog.enjoitech.jp/article/180

2014年7月14日月曜日

phpExcel 罫線を消す 列番号指定による値セット


罫線を消す 左
$objSheet->getStyleByColumnAndRow(0, 1)->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_NONE);

罫線を消す 右
$objSheet->getStyleByColumnAndRow(0, 1)->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_NONE);

行列番号指定による値セット
$objSheet->setCellValueByColumnAndRow( $colIndex, $rowIndex, '値');

行列番号じゃなく、AとかBとか指定による値セット
$objSheet->setCellValue( 'B10', '値');

phpExcel セル結合、解除、縮小して全体表示

縮小して全体を表示
setShrinkToFit() … boolean
$objSheet->getStyle( 'B1')->getAlignment()->setShrinkToFit(true);

セルを結合する
$sheet->mergeCells('B10:C21');

セルの結合を解除する
$sheet->unmergeCells('B10:C21');

2014年6月25日水曜日

MySQL:既存テーブルへ外部キーを追加する

<ALTER TABLEによるFOREIGN KEYの設定>

>> MySQL :: MySQL 4.1 リファレンスマニュアル :: 7.5.5.2 FOREIGN KEY 制約

【サンプル1】
-- 既存テーブル
CREATE TABLE `Foo` (
  `a_id` int(11) NOT NULL default '0',
  `b_id` int(11) NOT NULL default '0',
  `name` text,
  PRIMARY KEY  (`a_id`,`b_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8


-- 外部キー追加
ALTER TABLE Bar
ADD FOREIGN KEY (`a_id`, `b_id`)
REFERENCES `Foo` (`a_id`, `b_id`)
ON DELETE CASCADE
ON UPDATE CASCADE;

(メモ)
ON DELETE句やON UPDATE句にCASCADEを指定した場合は、
親テーブルに対して更新を行うと子テーブルで同じ値を持つカラムの値も合わせて更新されます。
また親テーブルに対して削除を行うと子テーブルで同じ値を持つデータが削除されます


-- 外部キー削除
ALTER TABLE Bar DROP FOREIGN KEY `Bar_ibfk_1`;
※ SHOW CREATE TABLE BarをしてFOREIGN KEYに自動的に割り当てられたKEYの名前(`Bar_ibfk_1`みたいなの)を予め調べる



【サンプル2】
-- 「T_02_1」表の「ID」列に対して、「T_01_1」表の「ID」列を外部キーとして設定します。
ALTER TABLE T_02_1 ADD CONSTRAINT FK_02_1A
FOREIGN KEY (ID)
REFERENCES T_01_1(ID);


以上。

2014年6月5日木曜日

WEBサイトのComboBox情報を取得するJavaScript

$('#db-dpt option').each(
function(){
console.log($(this).val() + ',' + $(this).text());
});

- 備考 -
赤RのHighwayBusの検索したい場合。
optionタグのValue値は、Val()で取得する。
Chromeからは、Consoleタブを選択して上記のソースを貼り付ける。

2014年6月2日月曜日

1行書き 不要なファイルを消す



/tmpにある、10分以上経過したファイルを消す。

find /tmp/ -type f -mmin +10 -exec rm {} \;