2019年9月23日月曜日
python タイマーを考える
トルネードとwebsoketと利用したアプリ
問題点としては、
・WebSocketは、ある時間で通信が切断されるモヨウ(5分ぐらいかな)
サーバー(トルネードで処理)側で、ある時間で切断して対応したが、いまいち。
どうするかだが。
問題はクライアントで勝手に着られると、サーバーはその事を知ることができない。
やはり、あれか!
定期的にクライアントから、意味のないメッセージを送る(使用中ですよ!)
これにより、勝手には切れないはず。
まぁ、ポーリング(監視)があるけど、ホスト側から送ろうか?
これなら、クライアントで切られてもサーバーで後処理ができる。
いや、クライアントからがいいなぁ。
何故ならクライアントが勝手にきれたら
キーボード、マウス入力がなくなったら、おくらない!
WebSocketの基本!
---------------------------------------------------------------------------------
ws = new WebSocket("wss://~URL~:ポート番号/識別子");
※トルネードの場合は、識別子で振り分けられる
app = Application([
#(r"/", MainHandler),
(r"/file", FileHandler),
(r"/識別子", EchoHandler)
])
// socket open ws.onopen = function(){ ... }; // message受信 ws.onmessage = function(msg){ ... }; // 通信終了時・切断時 ws.onclose = function(){...}; // メッセージ送信 $("#btn").click(function(){... ws.send(message); };
---------------------------------------------------------------------------------
◆以下で、定期的に接続をチェックするようにしたい
#!/usr/bin/python3
from threading import Timer
class RepeatedTimer(Timer):
def __init__(self, interval, function, args=[], kwargs={}):
Timer.__init__(self, interval, self.run, args, kwargs)
self.thread = None
self.function = function
def run(self):
self.thread = Timer(self.interval, self.run)
self.thread.start()
self.function(*self.args, **self.kwargs)
def cancel(self):
if self.thread is not None:
self.thread.cancel()
self.thread.join()
del self.thread
if __name__=='__main__':
import time
def hello(message):
hello.counter += 1
print(message, hello.counter)
hello.counter = 0
for i in range(3):
t = RepeatedTimer(0.5, hello, ["Hello"])
t.start()
time.sleep(5)
t.cancel()
print("Done.")
hello.counter = 0
◆参考元
https://ja.stackoverflow.com/questions/24508/python%E3%81%AEthreading-timer%E3%81%A7%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E5%87%A6%E7%90%86%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB
2019年9月22日日曜日
ドキュメント npdb.VNCパスワードの変更
◆VNCパスワードの変更 npdb.py
243 if msgID == "INIT":
244 print "INIT", self.no
245 cmd = "/var/www/html/netpdb/chgPW.sh " + str( self.no + 1 ) + " 00590" + str( self.no + 1 )
246 st = subprocess.call( cmd.split() )
247 return
◆スクリプトchgPW.sh
パラ1 接続番号 1~
パラ2 パスワード(接続ポートの前にゼロが2コ)
1 #!/bin/sh
2
3 uer='/etc/passwd_vnc'
4 pw=koba1234
5 pw=$2
6
7 expect -c "
8 spawn vncpasswd /etc/passwd_vnc$1
9 expect \"Password:\"
10 send \"${pw}\n\"
11 expect \"Verify:\"
12 send \"${pw}\n\"
13 expect "
14
※コマンドを表示される文言ごとに値を入力されたごとくセットするやり方
expect
spawan
send
expect
send
JavaScript キーボードのイベントを取得
プログラム上で、何かキーが入力されたか事を知りたかった!!!
keydownのイベントが広範囲で取得できるので、今回はこれが一番!
addEventListener
キーイベントは、
keydown,keypress,keyup
があります。
ポイント
-----------------------------------------------------------------------------
document.addEventListener('keydown', (event) => {
var keyName = event.key;
console.log(`keydown:${keyName}`);
});
-----------------------------------------------------------------------------
コーディング
---------------------------------------------------------------
<!DOCTYPE html><html> <head>
<script>
document.addEventListener('keydown', (event) => {
var keyName = event.key; console.log(`keydown:${keyName}`); if( keyName=="Shift") console.log("SHT") if( keyName=="Escape") console.log("*ESC") }); </script>
</head> <body> </body></html>
---------------------------------------------------------------結果
---------------------------------------------------------------
new.html?1569104105087:8 keydown:ArrowUp
new.html?1569104105087:8 keydown:ArrowDown
new.html?1569104105087:8 keydown:Shift
new.html?1569104105087:10 SHT
new.html?1569104105087:8 keydown:Escape
new.html?1569104105087:11 *ESC
---------------------------------------------------------------
リンク元
https://techacademy.jp/magazine/19613
ソース
<!DOCTYPE html>
<html>
<head>
<script>
document.addEventListener('keydown', (event) => {
var keyName = event.key;
if (event.ctrlKey) {
console.log(`keydown:Ctrl + ${keyName}`);
} else if (event.shiftKey) {
console.log(`keydown:Shift + ${keyName}`);
} else {
console.log(`keydown:${keyName}`);
}
});
document.addEventListener('keypress', (event) => {
var keyName = event.key;
if (event.ctrlKey) {
console.log(`keypress:Ctrl + ${keyName}`);
} else if (event.shiftKey) {
console.log(`keypress:Shift + ${keyName}`);
} else {
console.log(`keypress:${keyName}`);
}
});
</script>
</head>
<body>
</body>
</html>
結果
new.html?1569103019592:13 keydown:F12
new.html?1569103019592:13 keydown:j
new.html?1569103019592:25 keypress:j
new.html?1569103019592:13 keydown:k
new.html?1569103019592:25 keypress:k
new.html?1569103019592:13 keydown:p
new.html?1569103019592:25 keypress:p
new.html?1569103019592:13 keydown:p
new.html?1569103019592:25 keypress:p
new.html?1569103019592:13 keydown:p
new.html?1569103019592:25 keypress:p
new.html?1569103019592:13 keydown:ArrowUp
new.html?1569103019592:13 keydown:ArrowLeft
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:13 keydown:ArrowUp
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:13 keydown:ArrowLeft
new.html?1569103019592:13 keydown:ArrowUp
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:13 keydown:ArrowLeft
new.html?1569103019592:13 keydown:ArrowUp
4new.html?1569103019592:13 keydown:ArrowLeft
2new.html?1569103019592:11 keydown:Shift + Shift
3new.html?1569103019592:9 keydown:Ctrl + Control
new.html?1569103019592:13 keydown:f
new.html?1569103019592:25 keypress:f
18new.html?1569103019592:9 keydown:Ctrl + Control
new.html?1569103019592:13 keydown:ArrowUp
2new.html?1569103019592:9 keydown:Ctrl + Control
new.html?1569103019592:13 keydown:
new.html?1569103019592:25 keypress:
new.html?1569103019592:13 keydown:ArrowUp
2new.html?1569103019592:13 keydown:ArrowDown
2new.html?1569103019592:13 keydown:ArrowUp
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowLeft
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowLeft
new.html?1569103019592:13 keydown:p
new.html?1569103019592:25 keypress:p
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowLeft
3new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:13 keydown:ArrowUp
new.html?1569103019592:13 keydown:ArrowLeft
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:ArrowDown
new.html?1569103019592:9 keydown:Ctrl + Control
new.html?1569103019592:11 keydown:Shift + Shift
new.html?1569103019592:13 keydown:p
new.html?1569103019592:25 keypress:p
new.html?1569103019592:13 keydown:Tab
new.html?1569103019592:13 keydown:q
new.html?1569103019592:25 keypress:q
new.html?1569103019592:13 keydown:Escape
new.html?1569103019592:13 keydown:v
new.html?1569103019592:25 keypress:v
new.html?1569103019592:13 keydown:b
new.html?1569103019592:25 keypress:b
2new.html?1569103019592:13 keydown:Escape
new.html?1569103019592:13 keydown:Tab
new.html?1569103019592:13 keydown:Escape
2new.html?1569103019592:13 keydown:Tab
2new.html?1569103019592:13 keydown:Alt
new.html?1569103019592:13 keydown:Zenkaku
new.html?1569103019592:13 keydown:NonConvert
new.html?1569103019592:13 keydown:Hiragana
new.html?1569103019592:13 keydown:Convert
2new.html?1569103019592:11 keydown:Shift + Shift
new.html?1569103019592:13 keydown:ArrowUp
new.html?1569103019592:13 keydown:p
new.html?1569103019592:25 keypress:p
new.html?1569103019592:13 keydown:ArrowRight
new.html?1569103019592:13 keydown:Tab
2019年9月15日日曜日
あなたのページをもっとユーザーに満足してもらうため
netED
あなたのホームページからリンクが簡単にできますよ。
対象のサイトは以下でしょう。
プログラムの解説
プログラム開発関係のページ
初心者の為のプログラミング
あなたのページをもっとユーザーに満足してもらうためにも、是非
このサイトの機能のご利用を検討してみてください。
■netEDとは?
ネット上のエディターです。
特徴ちしては、実行内容がすぐに反映されることです。
■netEDリンク機能とは?
あなたのホームページから、指定されたソースコード(文章)等を、netEDに表示させます。
実行結果の表示や、編集がすぐにできます。
ネット上のエディターです。
特徴ちしては、実行内容がすぐに反映されることです。
■netEDリンク機能とは?
あなたのホームページから、指定されたソースコード(文章)等を、netEDに表示させます。
実行結果の表示や、編集がすぐにできます。
■実際のコーディング例
例)
<script> dispLinkID( "関数", "ID3" ); </script>
■コーディングについて
<link rel="stylesheet" href="//net.programming.jp/ed/insEd.css">- textareaをIDを指定して作成
- そのIDを引数にして、dispLinkID関数を呼べばOK
ヘッドタグ内で、以下を指定してくださいね
<script src="//net.programming.jp/ed/insEd2.js"></script>
例)
<script> dispLinkID( "関数", "ID3" ); </script>
php 関数
関数の種類
内部関数(ビルトイン関数)
ー>すぐに利用できる関数
ユーザー定義関数
自分で作成できる関数
ー>関数のオンラインリファレンス
関数とは何か?
ある処理を行ってくれるもの
例えば、今日の日付を求めたい
画面に表示させたい
文字列の長さを求めたい
関数の定義と呼び出し
引数の種類
引数の値渡しと参照(レファレンス)渡し
デフォルト引数
文字列操作
部分抜き出し
▼ substr();
$s = 'abcdef';
$t = substr($s, 2); // "cdef" 0から数えて2番目以降
$t = substr($s, 0, 2); // "ab" 0から数えて0番目から2文字長
▼ mb_substr();
マルチバイト対応の文字列の部分抜き出し
$s = 'マルチバイト';
mb_internal_encoding("SJIS-win");
$t = mb_substr($s, 0, 3); // "マルチ" 0から数えて0番目から3文字長
$t = mb_substr($s, 0, 3, "UTF-8"); // 直接文字コード指定
文字列結合演算子
$s = $head . $tail; // 連結した値を代入
$t = $head;
$t .= $tail; // 末尾に付加
変数の展開
$s = "$head$tail";
$t = "A{$head}B{$tail}C"; // 変数名の境目が曖昧になる場合にはカッコでくくる
探索(サーチ,マッチ)
▼ strpos()
if (strpos("abcdef", "c") !== false) { // 見つかった位置(0番目から)を返す
echo "見つかりました!";
}
置換
▼ str_replace()
$s = "abcabcabc";
$t = str_replace('a', 'A', $s); // "AbcAbcAbc"
分割
▼ explode()とimplode()
$s = 'This is a pen.';
list($one, $two, $three, $four) = explode(" ", $s); // "This" "is" "a" "pen."
list($one, $two, $three) = explode(" ", $s, 3); // "This" "is" "a pen."
list(,,$three) = explode(" ", $s); // "a"
echo implode(" ", array($one, $two, $three, $four)); // "This is a pen."
$array = explode(" ", $s);
if ($i=count($array)) echo "{$i}個に分割"; // 4
echo implode($array); // "Thisisapen."
echo implode("-", $array); // "This-is-a-pen."
文字チェック
▼ strlen()
$s = "This is a pen.";
echo strlen($s); // 14
ctype系関数
ctype_digit()関数は数値が渡されると偽となる。これも真と見なすのはis_numeric()関数になる。その他似たようなものとして整数型かどうかをチェックするis_int()関数がある。
渡した文字列をチェックする関数
// [a-zA-Z0-9]の範囲
if (ctype_alnum('001abc')) echo '英数字です。';
// [a-zA-Z]の範囲
if (ctype_alpha('Abcdef')) echo '英字です。';
// [0-9]の範囲
if (ctype_digit('001009')) echo '数字です。';
// [a-z]の範囲
if (ctype_lower('abcdef')) echo '英小文字です。';
// [A-Z]の範囲
if (ctype_upper('ABCDEF')) echo '英大文字です。';
// [\x20\t\v\r\n\f]の範囲
if (ctype_space(" ")) echo '空白文字です。';
// [a-fA-F0-9]の範囲
if (ctype_xdigit("00ff9c")) echo '16進文字です。';
strtok()
文字列をトークンに分割する。
$s = "This is a pen.";
$t = strtok($s, " \n\t"); // 最初だけ文字列を渡す。空白文字で割る
while ($t !== false) {
echo $t,"<br />
\n";
$t = strtok(" \n\t");
}
内部関数(ビルトイン関数)
ー>すぐに利用できる関数
ユーザー定義関数
自分で作成できる関数
ー>関数のオンラインリファレンス
関数とは何か?
ある処理を行ってくれるもの
例えば、今日の日付を求めたい
画面に表示させたい
文字列の長さを求めたい
関数の定義と呼び出し
引数の種類
引数の値渡しと参照(レファレンス)渡し
デフォルト引数
文字列操作
部分抜き出し
▼ substr();
$s = 'abcdef';
$t = substr($s, 2); // "cdef" 0から数えて2番目以降
$t = substr($s, 0, 2); // "ab" 0から数えて0番目から2文字長
▼ mb_substr();
マルチバイト対応の文字列の部分抜き出し
$s = 'マルチバイト';
mb_internal_encoding("SJIS-win");
$t = mb_substr($s, 0, 3); // "マルチ" 0から数えて0番目から3文字長
$t = mb_substr($s, 0, 3, "UTF-8"); // 直接文字コード指定
文字列結合演算子
$s = $head . $tail; // 連結した値を代入
$t = $head;
$t .= $tail; // 末尾に付加
変数の展開
$s = "$head$tail";
$t = "A{$head}B{$tail}C"; // 変数名の境目が曖昧になる場合にはカッコでくくる
探索(サーチ,マッチ)
▼ strpos()
if (strpos("abcdef", "c") !== false) { // 見つかった位置(0番目から)を返す
echo "見つかりました!";
}
置換
▼ str_replace()
$s = "abcabcabc";
$t = str_replace('a', 'A', $s); // "AbcAbcAbc"
分割
▼ explode()とimplode()
$s = 'This is a pen.';
list($one, $two, $three, $four) = explode(" ", $s); // "This" "is" "a" "pen."
list($one, $two, $three) = explode(" ", $s, 3); // "This" "is" "a pen."
list(,,$three) = explode(" ", $s); // "a"
echo implode(" ", array($one, $two, $three, $four)); // "This is a pen."
$array = explode(" ", $s);
if ($i=count($array)) echo "{$i}個に分割"; // 4
echo implode($array); // "Thisisapen."
echo implode("-", $array); // "This-is-a-pen."
文字チェック
▼ strlen()
$s = "This is a pen.";
echo strlen($s); // 14
ctype系関数
ctype_digit()関数は数値が渡されると偽となる。これも真と見なすのはis_numeric()関数になる。その他似たようなものとして整数型かどうかをチェックするis_int()関数がある。
渡した文字列をチェックする関数
// [a-zA-Z0-9]の範囲
if (ctype_alnum('001abc')) echo '英数字です。';
// [a-zA-Z]の範囲
if (ctype_alpha('Abcdef')) echo '英字です。';
// [0-9]の範囲
if (ctype_digit('001009')) echo '数字です。';
// [a-z]の範囲
if (ctype_lower('abcdef')) echo '英小文字です。';
// [A-Z]の範囲
if (ctype_upper('ABCDEF')) echo '英大文字です。';
// [\x20\t\v\r\n\f]の範囲
if (ctype_space(" ")) echo '空白文字です。';
// [a-fA-F0-9]の範囲
if (ctype_xdigit("00ff9c")) echo '16進文字です。';
strtok()
文字列をトークンに分割する。
$s = "This is a pen.";
$t = strtok($s, " \n\t"); // 最初だけ文字列を渡す。空白文字で割る
while ($t !== false) {
echo $t,"<br />
\n";
$t = strtok(" \n\t");
}
MySQLコマンドラインツール
MySQLのコマンドラインツールの起動方法
以下の通りにすれば、パスワード入力がらくになります。
バッチやシェルにしておけばすぐに起動が可能です!
mysql -uroot -pパスワード
次にバージョンの確認方法です
mysql --version
>>最初にバージョン確認
koba@koba-desktop:~$ mysql --version
mysql Ver 14.14 Distrib 5.7.18, for Linux (i686) using EditLine wrapper
koba@koba-desktop:~$
>>これは、パスワードの入力が発生するので
>>mysql -uroot -pパスワードとする
無事にmysqlコマンドのプロンプトが出てきました!
以下の通りにすれば、パスワード入力がらくになります。
バッチやシェルにしておけばすぐに起動が可能です!
mysql -uroot -pパスワード
mysql --version
>>最初にバージョン確認
koba@koba-desktop:~$ mysql --version
mysql Ver 14.14 Distrib 5.7.18, for Linux (i686) using EditLine wrapper
koba@koba-desktop:~$
>>これは、パスワードの入力が発生するので
>>mysql -uroot -pパスワードとする
koba@koba-desktop:~$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
無事にmysqlコマンドのプロンプトが出てきました!
自分の為のプログラムドキュメント
netED
netEDにリンクする。
ソースの指定のやり方
script src
link rel="stylesheet"
dispLinkID
のJavaScriptで関数を書きますよ。
例)
<script> dispLinkID( "関数", "ID3" ); </script>
ソース
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<script src="//net.programming.jp/ed/insEd2.js"></script>
<link rel="stylesheet" href="//net.programming.jp/ed/insEd.css">
<style type="text/css">
a {
text-decoration: underline;
color: green;
cursor:pointer
}
</style>
</head>
<body>
<textarea id="ID1" style="display:none">
document.write("hello");
var i;
for( i=0; i< 10; i++){
document.write( i );
}
</textarea>
<script>
//---------------------------------------------------------- start
fileUrl = 'http://localhost/~koba/sensei/1dayJS-src.html';
fileName = 'sample.js';
insMode = false;
dispLinkID( "テンプレート", "ID1", insMode );
fileName = '';
</script>
</body>
</html>
netED
netEDにリンクする。
ソースの指定のやり方
script src
link rel="stylesheet"
dispLinkID
のJavaScriptで関数を書きますよ。
- <script src="//net.programming.jp/ed/insEd2.js"></script>
<link rel="stylesheet" href="//net.programming.jp/ed/insEd.css">
■コーディングについて
<link rel="stylesheet" href="//net.programming.jp/ed/insEd.css">- textareaをIDを指定して作成
- そのIDを引数にして、dispLinkID関数を呼べばOK
ヘッドタグ内で、以下を指定してくださいね
<script src="//net.programming.jp/ed/insEd2.js"></script>
例)
<script> dispLinkID( "関数", "ID3" ); </script>
ソース
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<script src="//net.programming.jp/ed/insEd2.js"></script>
<link rel="stylesheet" href="//net.programming.jp/ed/insEd.css">
<style type="text/css">
a {
text-decoration: underline;
color: green;
cursor:pointer
}
</style>
</head>
<body>
<textarea id="ID1" style="display:none">
document.write("hello");
var i;
for( i=0; i< 10; i++){
document.write( i );
}
</textarea>
<script>
//---------------------------------------------------------- start
fileUrl = 'http://localhost/~koba/sensei/1dayJS-src.html';
fileName = 'sample.js';
insMode = false;
dispLinkID( "テンプレート", "ID1", insMode );
fileName = '';
</script>
</body>
</html>
netED (パネルの説明)
netEDのドキュメント
- 新規ファイルの作成
- ファイルの修正
- ファイル削除
- ファイル名の変更
- 実行方法
●新規ファイルの作成
newボタンをクリックします
ファイル名が表示されるのを確認、変更したい場合は名前を変更します。
●実行方法
RUNボタンをクリック、結果がパネル3に表示されますよ
RUNボタンをクリック、結果がパネル3に表示されますよ
ドキュメントの構成
- 機能の必要最低限の説明を行います
- 実際の利用例(利用3例)
- 違うプログラムでの利用例
■エディターの便利機能
ここでは、ショートカットキーによる便利機能について説明をおこないます。
ctrl+d 行のコピー
ここでは、ショートカットキーによる便利機能について説明をおこないます。
ctrl+d 行のコピー
ctrl+k 行の削除
よく使うSQL文
SELECT文(検索系)のSQL構文
対象テーブルから指定列を検索するSQL構文
1
2
SELECT 取得する列名
FROM 対象となるテーブル;
対象テーブルから複数指定の列を取得するSQL構文
1
2
SELECT 列名① , 列名② , 列名③ , ....
FROM 対象となるテーブル
対象テーブルからすべての列を検索するSQL構文
1
2
SELECT *
FROM 対象となるテーブル;
指定値より大きい値を取得するSQL構文
1
2
3
SELECT 取得する列名
FROM 対象となるテーブル
WHERE 比較対象となる列名 > 比較する値;
特定の文字列を含む行を取得するSQL構文
1
2
3
4
SELECT *
FROM 対象となるテーブル
WHERE 検索条件対象となる列名
LIKE '%特定の文字列%';
‘%’や’_’を含んだ特定の文字列を含む行を取得するSQL構文
1
2
3
4
SELECT *
FROM 対象となるテーブル
WHERE 検索条件対象となる列名
LIKE '%100$%' ESCAPE '$';
比較条件の最小値~最大値に一致した行を取得するSQL構文
1
2
3
4
SELECT *
FROM 対象となるテーブル
WHERE 検索条件対象となる列名
BETWEEN 比較条件の最小値 AND 比較条件の最大値;
列内から特定のデータを取得するSQL構文
1
2
3
SELECT *
FROM 対象となるテーブル
WHERE 検索対象となる列名 IN ('列内で抽出したいデータ①','列内で抽出したいデータ②');
列内から特定のデータ以外を取得するSQL構文
1
2
3
SELECT *
FROM 対象となるテーブル
WHERE 検索対象となる列名 NOT IN ('列内で抽出したいデータ①','列内で抽出したいデータ②');
UPDATE文(更新系)のSQL構文
条件一致したフィールドの指定列の値の更新
1
2
3
UPDATE 対象となるテーブル
SET 更新対象となる列名 = 新しく更新するデータ
WHERE 検索条件対象となる列名 = 検索条件対象となるフィールドの値;
DELETE文(削除系)のSQL構文
対象テーブル自体を削除するSQL構文
1
DROP TABLE 削除するテーブル名;
対象テーブル内の全データを削除するSQL構文
1
2
DELETE FROM 対象となるテーブル;
/* テーブル自体は削除されない */
対象テーブル内の行の削除
1
2
DELETE FROM 対象となるテーブル
WHERE 削除したいデータの対象列 = 削除対象となるデータ;
対象テーブルから0以上の条件にあった行を削除するSQL構文
1
2
DELETE FROM 対象となるテーブル
WHERE 条件の対象となる列名 > 0;
INSERT文(追加系)のSQL構文
テーブル末尾ににデータを追加する
1
2
INSERT INTO 対象となるテーブル
VALUES ('挿入するデータ①' , '挿入するデータ②' ...);
集計関数を使ったSQL構文
主な集計関数を使い出力させる列名を指定するSQL構文
1
2
3
4
5
6
SELECT
SUM('合計値を集計する列名') AS '合計値を出力させる列名',
AVG('平均値を集計する列名') AS '平均値を出力させる列名',
MAX('最大値を集計する列名') AS '最大値を出力させる列名',
MIN('平均値を集計する列名') AS '最小値を出力させる列名'
FROM '対象となるテーブル';
対象テーブルの全ての行数を数えるSQL構文
1
2
SELECT COUNT(*) AS '行数を出力させる列名'
FROM '対象となるテーブル';
対象テーブルの値が’NULL’以外の行数を数えるSQL構文
1
2
SELECT COUNT('行数を取得したい列名') AS '行数を出力させる列名'
FROM '対象となるテーブル';
対象テーブルから指定列を検索するSQL構文
1
2
SELECT 取得する列名
FROM 対象となるテーブル;
対象テーブルから複数指定の列を取得するSQL構文
1
2
SELECT 列名① , 列名② , 列名③ , ....
FROM 対象となるテーブル
対象テーブルからすべての列を検索するSQL構文
1
2
SELECT *
FROM 対象となるテーブル;
指定値より大きい値を取得するSQL構文
1
2
3
SELECT 取得する列名
FROM 対象となるテーブル
WHERE 比較対象となる列名 > 比較する値;
特定の文字列を含む行を取得するSQL構文
1
2
3
4
SELECT *
FROM 対象となるテーブル
WHERE 検索条件対象となる列名
LIKE '%特定の文字列%';
‘%’や’_’を含んだ特定の文字列を含む行を取得するSQL構文
1
2
3
4
SELECT *
FROM 対象となるテーブル
WHERE 検索条件対象となる列名
LIKE '%100$%' ESCAPE '$';
比較条件の最小値~最大値に一致した行を取得するSQL構文
1
2
3
4
SELECT *
FROM 対象となるテーブル
WHERE 検索条件対象となる列名
BETWEEN 比較条件の最小値 AND 比較条件の最大値;
列内から特定のデータを取得するSQL構文
1
2
3
SELECT *
FROM 対象となるテーブル
WHERE 検索対象となる列名 IN ('列内で抽出したいデータ①','列内で抽出したいデータ②');
列内から特定のデータ以外を取得するSQL構文
1
2
3
SELECT *
FROM 対象となるテーブル
WHERE 検索対象となる列名 NOT IN ('列内で抽出したいデータ①','列内で抽出したいデータ②');
UPDATE文(更新系)のSQL構文
条件一致したフィールドの指定列の値の更新
1
2
3
UPDATE 対象となるテーブル
SET 更新対象となる列名 = 新しく更新するデータ
WHERE 検索条件対象となる列名 = 検索条件対象となるフィールドの値;
DELETE文(削除系)のSQL構文
対象テーブル自体を削除するSQL構文
1
DROP TABLE 削除するテーブル名;
対象テーブル内の全データを削除するSQL構文
1
2
DELETE FROM 対象となるテーブル;
/* テーブル自体は削除されない */
対象テーブル内の行の削除
1
2
DELETE FROM 対象となるテーブル
WHERE 削除したいデータの対象列 = 削除対象となるデータ;
対象テーブルから0以上の条件にあった行を削除するSQL構文
1
2
DELETE FROM 対象となるテーブル
WHERE 条件の対象となる列名 > 0;
INSERT文(追加系)のSQL構文
テーブル末尾ににデータを追加する
1
2
INSERT INTO 対象となるテーブル
VALUES ('挿入するデータ①' , '挿入するデータ②' ...);
集計関数を使ったSQL構文
主な集計関数を使い出力させる列名を指定するSQL構文
1
2
3
4
5
6
SELECT
SUM('合計値を集計する列名') AS '合計値を出力させる列名',
AVG('平均値を集計する列名') AS '平均値を出力させる列名',
MAX('最大値を集計する列名') AS '最大値を出力させる列名',
MIN('平均値を集計する列名') AS '最小値を出力させる列名'
FROM '対象となるテーブル';
対象テーブルの全ての行数を数えるSQL構文
1
2
SELECT COUNT(*) AS '行数を出力させる列名'
FROM '対象となるテーブル';
対象テーブルの値が’NULL’以外の行数を数えるSQL構文
1
2
SELECT COUNT('行数を取得したい列名') AS '行数を出力させる列名'
FROM '対象となるテーブル';
オンランデバッガー(npdb)のGUI対応 (vnc でToo many security failures)
オンランデバッガーのnpdb
https://simple-and-useful.net/netpdb/npdb.html
の開発で問題が発生!
◆開発内容
オンラインデバッガーで、GUIが使用できるようにした。
方法は簡単で、VNCを利用。
◆先に対応策
vncconfig -display :5 -set BlacklistTimeout=0 -set BlacklistThreshold=1000000
cd /var/www/html/netpdb
python3.6 ./npdb.py &
◆まとめ
セキュリティの為に、ブラックリストが作成されてしまう為らしい。
ブラックリストをリセットするには、短時間接続を試みないか、VNC Serverソフトウェアを再起動するだけです。
とあるが、こちらが良いのではないだろうか?
vncの設定を変える
vncconfig -display :5 -set BlacklistTimeout=0 -set BlacklistThreshold=1000000
※これは開発途中の場合であり、最後はもとに戻せばよい!
◆◆◆まとめ(結論)
本日同じ事で悩んだ
vnc でToo many security failuresがでたら、
コマンドラインから、以下を打つと大丈夫
-display :5は、問題の画面番号に直すことvncconfig -display :5 -set BlacklistTimeout=0 -set BlacklistThreshold=1000000これで、一応なおるが、再度rebootするとまたでてきた。
vnc でToo many security failuresがでないようにするには、起動時にも上記を書けば良いと思います。
以下は参考です
Too many security failures
Jack RealVNC
- 1 month ago
- Updated
Follow
VNC Server has a 'blacklisting' scheme that blocks an IP address after five unsuccessful connection attempts. This is a security feature to prevent against DOS and Brute Force attacks against your Computer.
The IP address is initially blocked for ten seconds, but this doubles for each unsuccessful attempt thereafter.
A successful connection from an IP address resets the blacklist timeout. This is built in to VNC Server and does not rely on operating system support.
To reset the blacklist, you simply need to not attempt a connection for a short period of time, or restart the VNC Server software.
If you have failed to enter your connection details correctly a large number of times, it's possible they are not correct. Please ensure that you are connecting to the correct VNC Server, and that you are entering the correct username and/or password. If you are unsure as to the username and password required, please see this article for some suggestions: What username and password do I enter when I'm trying to connect to VNC Server?
VNCサーバーには、5回接続に失敗した後にIPアドレスをブロックする「ブラックリスト」方式があります。 これはあなたのコンピュータに対するDOSや総当たり攻撃を防ぐためのセキュリティ機能です。
IPアドレスは最初10秒間ブロックされますが、その後の失敗した試行ごとに2倍になります。
IPアドレスからの接続が成功すると、ブラックリストのタイムアウトがリセットされます。 これはVNCサーバーに組み込まれており、オペレーティングシステムのサポートには依存しません。
接続の詳細を何度も正しく入力できなかった場合は、それらが正しくない可能性があります。 正しいVNCサーバーに接続していること、および正しいユーザー名またはパスワードを入力していることを確認してください。
VNCサーバーのパスワードをリセットするには、こちらの記事を参照してください。
ブラックリストをリセットするには、短時間接続を試みないか、VNC Serverソフトウェアを再起動するだけです。
リンク元
https://help.realvnc.com/hc/en-us/articles/360003563111-Too-many-security-failures
解決は
https://superuser.com/questions/437354/vncserver-too-many-security-failures
pygame
URL
https://algorithm.joho.info/programming/python/pygame-windows-option/
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import *
import sys
def main():
pygame.init() # Pygameの初期化
screen = pygame.display.set_mode((300, 200)) # 大きさ600*500の画面を生成
pygame.display.set_caption("GAME") # タイトルバーに表示する文字
font = pygame.font.Font(None, 55) # フォントの設定(55px)
while (1):
screen.fill((0,0,0)) # 画面を黒色に塗りつぶし
text = font.render("TEST", True, (255,255,255)) # 描画する文字列の設定
screen.blit(text, [20, 100])# 文字列の表示位置
pygame.display.update() # 画面を更新
# イベント処理
for event in pygame.event.get():
if event.type == QUIT: # 閉じるボタンが押されたら終了
pygame.quit() # Pygameの終了(画面閉じられる)
sys.exit()
if __name__ == "__main__":
main()
URL
https://algorithm.joho.info/programming/python/pygame-arrow-keyevent/
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys
def main():
(w,h) = (400,400) # 画面サイズ
(x,y) = (w/2, h/2)
pygame.init() # pygame初期化
pygame.display.set_mode((w, h), 0, 32) # 画面設定
screen = pygame.display.get_surface()
while (1):
# キーイベント処理(キャラクタ画像の移動)
pressed_key = pygame.key.get_pressed()
if pressed_key[K_LEFT]:
x-=1
if pressed_key[K_RIGHT]:
x+=1
if pressed_key[K_UP]:
y-=1
if pressed_key[K_DOWN]:
y+=1
pygame.display.update() # 画面更新
pygame.time.wait(30) # 更新時間間隔
screen.fill((0, 20, 0, 0)) # 画面の背景色
# 円を描画
pygame.draw.circle(screen, (0, 200, 0), (x, y), 5)
# イベント処理
for event in pygame.event.get():
# 画面の閉じるボタンを押したとき
if event.type == QUIT:
pygame.quit()
sys.exit()
# キーを押したとき
if event.type == KEYDOWN:
# ESCキーなら終了
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if __name__ == "__main__":
main()
URL
https://algorithm.joho.info/programming/python/pygame-pong/
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import *
import sys
# ボールの動きを計算
def calc_ball(ball_x, ball_y, ball_vx, ball_vy, bar1_x, bar1_y, bar2_x, bar2_y):
if ball_x <= bar1_x + 10.:
if ball_y >= bar1_y - 7.5 and ball_y <= bar1_y + 42.5:
ball_x = 20.
ball_vx = -ball_vx
if ball_x >= bar2_x - 15.:
if ball_y >= bar2_y - 7.5 and ball_y <= bar2_y + 42.5:
ball_x = 605.
ball_vx = -ball_vx
if ball_x < 5.:
ball_x, ball_y = 320., 232.5
elif ball_x > 620.:
ball_x, ball_y = 307.5, 232.5
if ball_y <= 10.:
ball_vy = -ball_vy
ball_y = 10.
elif ball_y >= 457.5:
ball_vy = -ball_vy
ball_y = 457.5
return ball_x, ball_y, ball_vx, ball_vy
# AIの動きを計算
def calc_ai(ball_x, ball_y, bar2_x, bar2_y):
dy = ball_y - bar2_y
if dy > 80: bar2_y += 20
elif dy > 50: bar2_y += 15
elif dy > 30: bar2_y += 12
elif dy > 10: bar2_y += 8
elif dy < -80: bar2_y -= 20
elif dy < -50: bar2_y -= 15
elif dy < -30: bar2_y -= 12
elif dy < -10: bar2_y -= 8
if bar2_y >= 420.: bar2_y = 420.
elif bar2_y <= 10.: bar2_y = 10.
return bar2_y
# プレイヤーの動き
def calc_player(bar1_y, bar1_dy):
bar1_y += bar1_dy
if bar1_y >= 420.: bar1_y = 420.
elif bar1_y <= 10. : bar1_y = 10.
return bar1_y
# 得点の計算
def calc_score(ball_x, score1, score2):
if ball_x < 5.:
score2 += 1
if ball_x > 620.:
score1 += 1
return score1, score2
# イベント処理
def event(bar1_dy):
for event in pygame.event.get():
if event.type == QUIT: # 閉じるボタンが押されたら終了
pygame.quit()
sys.exit()
if event.type == KEYDOWN: # キーを押したら
if event.key == K_UP:
bar1_dy = -10
elif event.key == K_DOWN:
bar1_dy = 10
elif event.type == KEYUP: # キーを押し終わったら
if event.key == K_UP:
bar1_dy = 0.
elif event.key == K_DOWN:
bar1_dy = 0.
return bar1_dy
def main():
# 各パラメータ
bar1_x, bar1_y = 10. , 215.
bar2_x, bar2_y = 620., 215.
ball_x, ball_y = 307.5, 232.5
bar1_dy, bar2_dy = 0. , 0.
ball_vx, ball_vy = 250., 250.
score1, score2 = 0,0
ball_r = 7
# pygameの設定
pygame.init() # Pygameの初期化
screen = pygame.display.set_mode((640,480),0,32) # 画面の大きさ
pygame.display.set_caption("PONG") # 画面タイトル
clock = pygame.time.Clock()
font = pygame.font.SysFont(None,40) # 画面文字の設定
# 背景の設定
back = pygame.Surface((640,480))
background = back.convert()
screen.fill((0,0,0))
# ボールを打つバーの設定
bar = pygame.Surface((10,50))
bar1 = bar.convert()
bar1.fill((255,255,255))
bar2 = bar.convert()
bar2.fill((255,255,255))
# ボールの設定
circ_sur = pygame.Surface((20,20))
pygame.draw.circle(circ_sur,(255,255,255),(ball_r, ball_r), ball_r)
ball = circ_sur
ball.set_colorkey((0,0,0))
while (1):
# 各オブジェクトの描画
screen.blit(background,(0,0))
pygame.draw.aaline(screen,(255,255,255),(330,5),(330,475)) # 中央線の描画
screen.blit(bar1,(bar1_x,bar1_y)) # プレイヤー側バーの描画
screen.blit(bar2,(bar2_x,bar2_y)) # CPU側バーの描画
screen.blit(ball,(ball_x, ball_y)) # ボールの描画
screen.blit(font.render(str(score1), True,(255,255,255)),(250.,10.))
screen.blit(font.render(str(score2), True,(255,255,255)),(400.,10.))
# プレイヤー側バーの位置
bar1_dy = event(bar1_dy)
bar1_y = calc_player(bar1_y,bar1_dy)
# ボールの移動
time_passed = clock.tick(30)
time_sec = time_passed / 1000.0
ball_x += ball_vx * time_sec
ball_y += ball_vy * time_sec
# 得点の計算
score1, score2 = calc_score(ball_x, score1, score2)
# CPUのバー速度を計算
bar2_y = calc_ai(ball_x, ball_y, bar2_x, bar2_y)
# ボールの速度・位置を計算
ball_x, ball_y, ball_vx, ball_vy = calc_ball(ball_x, ball_y, ball_vx, ball_vy, bar1_x, bar1_y, bar2_x, bar2_y)
pygame.display.update() # 画面を更新
if __name__ == "__main__":
main()
OpenCV インストール
環境は以下です。
windows10
python2.X
Python+OpenCVでカメラキャプチャ
を参考にカメラの画像を表示したかったが、以下のようになりOpenCvの環境がだめ!
ソース参考
import cv2
def capture_camera(mirror=True, size=None):
"""Capture video from camera"""
# カメラをキャプチャする
cap = cv2.VideoCapture(0) # 0はカメラのデバイス番号
while True:
# retは画像を取得成功フラグ
ret, frame = cap.read()
# 鏡のように映るか否か
if mirror is True:
frame = frame[:,::-1]
# フレームをリサイズ
# sizeは例えば(800, 600)
if size is not None and len(size) == 2:
frame = cv2.resize(frame, size)
# フレームを表示する
cv2.imshow('camera capture', frame)
k = cv2.waitKey(1) # 1msec待つ
if k == 27: # ESCキーで終了
break
# キャプチャを解放する
cap.release()
cv2.destroyAllWindows()
$ python >>> capture_camera()
Microsoft Windows [Version 10.0.17763.379]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\user>python
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named cv2
>>> ^D
File "<stdin>", line 1
以下のエラになった
C:\Users\user>python
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
https://opencv.org/releases.htmlよりダウンロードして解凍した。
バージョンは、4.0.1(NGなので)と3.4.5
C:\Users\user\Downloads\opencv\build\python\cv2\python-2.7
のcv2.pydを以下に移動した。
C:\Python27\Lib\site-packages
成功した
Microsoft Windows [Version 10.0.17763.864]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\kobay>python
Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>
登録:
投稿 (Atom)