Oh! Yummy!!

プログラミングとか投資のこととかご飯のこととかを書きます。

HTML5ブラウザバリデーション機能でエラーチェック

先日、Webアプリのテスト中に自分で実装していないエラー文が表示され、その原因を探すのに
HTMLソースを読んだりかなりの時間を消費してしまった。

どうやらHTML5からブラウザバリデーション機能というものが導入されたらしく、これが原因で勝手にブラウザが
サブミット時にエラーチェックを行っていたらしい。どうりでHTMLソースをみてもエラーチェック処理が書かれていない
わけだ。

ただ、この機能もうまく使えば自分でエラーチェックをする箇所を減らせすことができそうだ。
型・桁数チェックが主だったので、うまく活用したい。

気をつけなければならないし、自分がドハマリしたのは、2重サブミット防止のために、フラグをもっていて、
フラグが立っているときに再度サブミットボタンがクリックされると警告を出し、falseを返すようにしていた。
このフラグはonloadでリフレッシュされるのだが、ブラウザバリデーション機能でのエラーチェック時には、
サブミットが勝手に中止される(リフレッシュはされない)ので、2重サブミット防止用フラグが立ったままになり、一生サブミット出来なかった。

ブラウザバリデーション機能を無効化にするためには、formタグにnovalidate属性を追加してあげれば良い。

要所、要所で使い分けが必要。。。

pyautoguiでコロンを入力する

pyautoguiというpythonGUI操作自動化モジュールを使用して文字列を入力しようとしたらコロン(:)がアスタリスク(*)になってしまった.
URLとかを入力させたいことも多いので不便.

これは,USキーボード以外で発生する不具合らしいのでモジュールの中身に書き加えて対応した.

以下のページが参考になったのでメモ.

teratail.com

pythonで文字列を適切な数値型に変換する方法

アプリケーションを作成していると,数値が文字列型で渡ってくることは少なくない.
そこで文字列を適切な数値型に変換する方法をメモ.

関数の引数に文字列を取り,まずはfloat型に変換する.ここで変換できない文字列が渡ってきた場合には変換時に例外が発生し,-99999が返る.
次にfloat型の数値をint型に変換して数値を比較する.小数点以下の値も持っていた場合はfloat型を返し,整数値しか持っていない場合にはint型を返すことになる.

pythonで「200.0 == 200」はTrueになる.

以下は実装例.

# 文字列を適切な数値型に変換する
# 数値に変換できない場合には -99999 を返す
# arg: 文字列
# return: 適切な数値型の数値
def to_number(num_str):
    try:
        value = float(num_str)
        if value == int(value):
            return int(value)
        else:
            return value
    except ValueError:
        return -99999

C言語で簡単な関数の書き方(絶対値を求める関数をつくる)

C言語で関数を作ってみる
今更ではあるが一応初心者向けにも書いてるつもりなので...

今回は絶対値を求める関数を自分で作ってみる
int型の関数(戻り値がint型)を作る
void型の関数は戻り値がない

#include<stdio.h>

/***************関数始まり*******************/
int zettaiti(int i){    //関数の名前と引数
	if(i>=0){
		return i;    //入力 i が 0 以上なら i を返す
	}
	else{
		i = i*(-1);
		return i;    //入力 i が 0 よりも小さい場合符号を反転して返す
	}
}
/***************関数おわり*******************/
int main(){
	int i=-2,j;
	j=zettaiti(i);    //関数の呼び出し
	printf("%d\n",j);
    return 0;
}

関数のネーミングに問題があるが今回は気にしない
何でもよいということを強調したかったんです...
他の人がコードを見る場合は名前は重要なので気を付けるべし

processingでマウス位置を取得

今回は少しだけprocessingについて
マウスの位置を取得して
円がマウスを追いかけるサンプル

void setup(){
  size(1200,1000);
}
void draw(){
  ellipse(mouseX,mouseY,50,50);
}

短い!!
直観的に理解しやすい!!!
小さいものは美しい!!!

processingの基本的な関数を列挙

先日、友人とprocessingを始めたという記事を書きましたが、物理現象などのシミュレーションをして遊んでおります。

友人はやや脱落(飽き)気味ですが(笑)。無理矢理巻き込んですまんかったー。


それはともかく簡単に関数を紹介します。

//ウィンドウを表示させる
size(w,h);    //w:x軸方向, h:y軸方向

//背景の色を指定(RGB)
background(r,g,b);

//点を描く
point(x,y);

//円を描く
ellipse(x,y,w,h);

//線を描く
line(x1,y1,x2,y2);

//長方形を描く
rect(x,y,w,h);

//これ以降の図形の枠の色を指定
stroke(r,g,b);

//これ以降の図形の枠を消す
noStroke();

//これ以降の図形の塗りつぶしの色を指定
fill(r,g,b,a);    //aは透過

//これ以降の図形を塗りつぶさない
noFill();

こんな感じでしょうか。引数を変数にして色々できます。


これを読んだ方はぜひ試してみてください。
簡単にインストールできます。本当に。

python コマンドライン引数の利用 sys.argv

大事な報告が...
研究発表が無事に終わりました!!!

そこで、今期書いたスクリプトを見直しました。
感想: 汎用性に乏しい!!
いちいち

$vim sample.py

とかで入力ディレクトリと・出力ディレクトリを書き換えなくちゃいけない
他にも、ちょっとしたパラメータを書き換えるのにも不便である。
vim自体は大変便利ですよ。

今更ではあるがコマンドラインから入出力ディレクトリを指定する方法をメモ!!
今までの手法

import os
indir = "/home/user/indir"
outdir = "/home/user/outdir"

infiles = os.listdir(indir)
for infile in infiles:
    #何かしらの処理

 
コマンドライン引数を用いる場合

import os,sys
dirs = sys.argv
indir = dirs[1]
outdir = dirs[2]

infiles = os.listdir(indir)
for infile in infiles:
    #何かしらの処理

これならコマンドラインから以下を入力すればよいので汎用性が高くなったと言える。

$python sample.py /home/user/indir /home/user/outdir

ちなみに、それぞれの引数はスペースで区切る