忍者ブログ
日々の研究生活のメモ書きなど
(2010/11/22)
勢いでblogを作成してしまいました。

扱うテーマについては、C言語(たまーにc++も)、gnuplot、Debian、Macなどです
(これから他のジャンルに手を出していく可能性もあります)
メモ書き程度のものですが、同じことで悩んでいる方の役に立てれば幸いです

本業は学生で、物理屋を目指しています


( 2015/11/06 追記)
「bus error」「segmentation fault」で来られた方にはとてもイラっとするブログタイトルで申し訳ありません
bus error はファイルの入出力関連
segmentation fault は配列のindexまわりのエラーである可能性があるので、そこらへんをチェックしてください


( 2018/01/01 追記)
( 2018/01/21 追記)
実は、2017年末に理学博士の学位を取れました〜
2018年1月中旬から某所で研究者(ポスドク)として働きます

つまり、このブログには4回生からD5で理学博士を取得する間の8年間に習得した 知識や経験値がすべて蓄積されている、ということになります(まじか)
ただし、物理に関することはほぼここには書いていないのであくまで計算機やプログラミング言語に関することだけです・・・
あとはgnuplotとかポケモンGOとか







PR
C言語を勉強して使い始めて10年くらい経つけど、この度初めてbool型というのがあることを知りました
boolの存在自体はpythonとか他の言語で知ってたけど、Cにもあるとは・・・・




■ 参考 : stdbool.h

/usr/include/stdbool.hというヘッダーファイルにbool型の値の定義が書いてあるらしい
基本的に
false が 0
true が 1
らしい

手元の環境でファイルを見てみたかったけど、同じ場所にないんだが・・・

bool型を使ったコードをコンパイルするときは --std=gnu99 をつける(--std=c99との違いはわからぬ)




面白い記事を見つけたので貼っとく

■ 参考 :C99 の bool と int の振る舞い





bool型の変数をprintfするときは整数型と同じ%dでいいらしい
無理やり0のときはfalse, 1のときはtrueで出力する方法もあるっちゃーある(以下のリンクを参照)

■ 参考 : c言語のbool型変数の出力変換指定子





pythonの開発環境を整えるパッケージ管理ツール(?)としてよく名前を聞くのが、pipとかvirtualenv
調べてもイマイチわからん・・・
(というか、使いたくないpythonに色々と時間を取られるのが嫌)

今回、minicondaを導入するのは楽という話を聞いたのでやってみた

anacondaというのもよく聞く
minicondaとanacondaの違いは

■ 参考 : AnacondaとMinicondaの比較、どちらで環境構築するべきか


ざっくり中身の充実度っぽい
anacondaはなんでも入ってるけど、その分ファイルサイズが大きい
minicondaは最小限のパッケージなので、追加で必要なものは自分でインストールする必要がある

追加で必要なパッケージのインストールにはyamlというのを使えば楽っぽいので
今回はminicondaで環境を整えてみた
以下、メモ





# Miniconda をダウンロードするスクリプトをダウンロードする

% wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# ダウンロードする
# enterとかyesを打ってると設定が終わる
# 自動的に設定が~/.bashrcに追加される
% bash Miniconda3-latest-Linux-x86_64.sh

# 設定を歳読み込みするために、新しいterminalで作業をする
conda config --add channels conda-forge

# それぞれの業界で詳しい人が配布しているyamlファイルをダウンロードする

# インストールする
% conda env create --file hoge-py37.yaml

# activateする
% conda activate hoge-py37



conda関連で便利そうなコマンドメモ
# インストールされているパッケージ一覧をみる
% conda list

# パッケージをインストールしたいとき
% conda install numpy

# activateする
% conda activate hoge-py37

# yamlファイルを出力
% conda env export > hoge.yaml

このyamlファイルを人と共有すれば、相手にも同じ環境を作れるのでとても便利





コマンドの例
hogeが実行コマンド
valgrind -v -v --error-limit=no --leak-check=full --tool=memcheck --show-reachable=no hoge

出力を記録しておきたいなら@tcsh
valgrind -v -v --error-limit=no --leak-check=full --tool=memcheck --show-reachable=no hoge >& val_err.txt
-vと2回書いてるのはより情報を出力するため

--error-limit はデフォルトだとyes
エラー報告の数を1000くらいで打ち切るオプションなので、これを外してすべてのエラーを出力する

--leak-check=full は必要

--tool=memcheck はvalgrindで使えるツールのうちどれを使うか指定する
このオプションがない場合もデフォルトでmemcheckが選ばれるのでなくてもいい

--show-reachable=no
確保された領域が解放されないままプログラムがabortした場合に検出される? わからん




コンパイル時に CFLAGS="-g -O0" のようにしてコンパイルオプションを追加しておく
-gはデバッグ関連(行番号とか)の情報を実行ファイルに入れておくオプション
-O0は本来-O2とかするところを、最適化しないようにしてコンパイルする
最適化してしまうと、順番とかが実行される変わる可能性があるかららしい

これをしておくと、valgrindのエラー出力の表示に関数名やコードの何行目かが表示されるので、バグ取りがとてもしやすくなる
逆にないと、とてもつらい・・・





ワーニング、エラーメモ

■ Warning: set address range perms: large range
大きいサイズのメモリ確保をしたとき


■ memcheck GC: 1000 nodes, 55 survivors (5.5%)
これは自分のコードには関係なくて、memcheckの性能を示すものらしい
バグ取りには関係ないので無視


■ メモリリークの例
==224793== 704,643,072 bytes in 1 blocks are possibly lost in loss record 1,312 of 1,312
==224793== at 0x4C2BC3C: memalign (vg_replace_malloc.c:857)
==224793== by 0x4C2BD01: posix_memalign (vg_replace_malloc.c:1020)
==224793== by 0x4E47325: HOGE (my_malloc.c:38)
==224793== by 0x4E475A0: HOGE (my_malloc.c:123)
==224793== by 0x4031E2: main (coinc.c:347)
-g -O0を付け加えてコンパイルしてるとこんな感じで情報が出てくる
実際はHOGEとかmy_malloc.cとかは別の名前なので適当に差し替えておきました

valgrindで実行ファイルを動かした場合は、メモリ確保の関数とかが通常のライブラリのではなく
valgrindのライブラリのものが用いられるっぽい
例えばposix_memalignとか


■ メモリの不正アクセスの例
==224793== Invalid read of size 8
==224793== at 0x4121D2: zpk2sos (iir.c:845)
==224793== by 0x4126BE: iir_design_sos (iir.c:1029)
==224793== by 0x404A12: main (coinc.c:509)
==224793== Address 0x187b0e28 is 8 bytes after a block of size 304 alloc'd
==224793== at 0x4C2B955: calloc (vg_replace_malloc.c:711)
==224793== by 0x4117DC: zpk2sos (iir.c:746)
==224793== by 0x4126BE: iir_design_sos (iir.c:1029)


参考になりそうなページ

■ 参考 : Using and understanding the Valgrind core(valgrindの公式ドキュメント)

■ 参考 : Valgrindの結果の見方、日本語訳、など役に立つことまとめ

■ 参考 : Valgrindの使い方







ちょっと関係ないけど、もし動的メモリを2回freeしてしまうとエラーになる

このエラーの箇所を探すコツを↓の記事で見かけたのでメモ

■ 参考 : double freeバグのデバッグ.



実行ファイルに対して、以下のコマンドを実行するとコマンドのバイナリファイルがどういう順で何を実行するのか見える
逆アセンブルとかいうらしい(なにかに使えるかもしれないのでメモ)
objdump -D a.out | more











branch一覧をみる
git branch -a
masterブランチに戻る
git checkout master

hogeというbranchを作成してそのbranchに移動する
git checkout -b hoge

fooというbranchを元に、hogeというbranchを作成するとき
git checkout -b hoge origin/foo


hogeというbranchを本家のリポジトリに登録する
git push -u origin hoge

hogeというローカルブランチを削除する
git branch -d hoge

hogeというリモートブランチを削除する
ただ、これをしても他のユーザーの環境では表示が消えないらしい、どうしても消したいときは
git fetch -p
git push --delete origin hoge







■ 参考 : 3.5 Git のブランチ機能 - リモートブランチ

に面白いことが書いてあったのでメモ
“origin” は特別なものではない
Git の “master” ブランチがその他のブランチと何ら変わらないものであるのと同様に、 “origin” もその他のサーバーと何ら変わりはありません。 “master” ブランチがよく使われている理由は、ただ単に git init がデフォルトで作るブランチ名がそうだからというだけのことでした。 同様に “origin” も、git clone を実行するときのデフォルトのリモート名です。 たとえば git clone -o booyah などと実行すると、デフォルトのリモートブランチは booyah/master になります。

へぇ〜






関連記事

■ 過去記事 : 【condor】について調べたのでメモ





condorは1つのジョブを走らせて、それを見届けてくれる
DAGmanはcondorの拡張版みたいなものっぽい

ジョブA, B, Cと3つのジョブを走らせるとして、
Aが終わったらBを、Bが終わったらCを走らせる
みたいなそれぞれのジョブを関連付けて走らせることができる

詳しくは↓にある図を見てもらうとすぐに分かるかと
■ 参考 : Workflow management with DAGMan


ジョブA→B→CみたいなのはLinear型と呼ばれるらしい
上記のページのDAGman用サブミットファイルは
######DAG file######
##### Define Jobs ###
##### JOB JobName JobDescriptionFile
JOB A0 namd_run_job0.submit
JOB A1 namd_run_job1.submit
JOB A2 namd_run_job2.submit
JOB A3 namd_run_job3.submit

##### Relationship between Jobs ###
##### PARENT JobName CHILD JobName
PARENT A0 CHILD A1
PARENT A1 CHILD A2
PARENT A2 CHILD A3
みたいな感じ

最初にジョブの名前とそれぞれのサブミットファイルを定義
その後でジョブの関連を書くっぽい



あとはジョブA〜Cの前後にプリプロセスとポストプロセスを走らせることもできるらしい
######DAG file######
##### Define Jobs ###
##### JOB JobName JobDescriptionFile
JOB A0 namd_run_job0.submit
JOB A1 namd_run_job1.submit
JOB A2 namd_run_job2.submit
JOB A3 namd_run_job3.submit

##### Relationship between Jobs ###
##### PARENT JobName CHILD JobName
PARENT A0 CHILD A1
PARENT A1 CHILD A2
PARENT A2 CHILD A3

##### PRE or POST processing of a job
##### SCRIPT PRE/POST JobName ProcessScript
SCRIPT PRE A0 pre-script-temperature.sh
SCRIPT POST A3 post-script-energy.sh

シェルスクリプトになってるけど、ファイルの入出力があるならすべて絶対パスで書く必要がありそう


他の例として、
Aが終わったらBとCを走らせる
BとCが終わったら、Dを走らせるとかしたい場合は

■ 参考 : Node Job Submit File Contents
# File name: diamond.dag
#
JOB A diamond_job.condor
JOB B diamond_job.condor
JOB C diamond_job.condor
JOB D diamond_job.condor
PARENT A CHILD B C
PARENT B C CHILD D





再帰的にファイルの全文検索をしたいディレクトリに移動してgrep-findを実行する
C-x C-f hoge
M-x grep-find

下のような表示がミニバーに出るので、そのまま検索したい言葉を入力する(この例ではsomething)
Run find (like this): find . -type f -exec grep -nH -e something {} +

たぶんこれは新しい機能ではなくて、findとgrepを組み合わせたコマンドのエイリアスみたいなものか
それにしても便利・・・
findとgrepの組み合わせは覚えられなくて毎回調べてたので











前記事で書いたツールの中で非常に多岐に渡るオプションを取り回す必要があった
具体的にはプロットタイプ1~9に対して、プロットの範囲[xmin, xmax][ymin, ymax]
全部で36個ある・・・
もしプロットタイプが増えたらさらに増える

これを全部関数の引数にして渡すのはやばすぎる!!!

と数ヶ月前の自分も思ったらしく、どう実装したかというと
xmin, xmax, ymin, ymaxを全部のプロットタイプで同じものを採用するという・・・

プロットの範囲を辞書型のリストにしておけば、関数の引数に渡すのは1つで済むから楽じゃね?
と思い至ったのでそれを実装してみた
この記事は辞書型のメモ

(一応約2年前にpythonの本を1から全部読んで、そのときのメモに辞書型のことは書いてあった
読んでみたら、こいつ全然辞書型わかってねーなー・・・と笑ってしまった)








■ 参考 : とっても便利なPythonの辞書型について覚え書き
# 空の辞書を作成、これに追加していく
dic_range = {}
dic_range["xmin_plottype1"] = 0
dic_range["xmax_plottype1"] = 5
dic_range["ymin_plottype1"] = 10
dic_range["ymax_plottype1"] = 40
みたいな感じ
これをplottypeの分だけ全部回して、さらに例外処理もすればOK


辞書の要素を取り出すときは辞書にキーを代入すればOK
xmin = dic_range["xmin_plottype1"]
本当は辞書のキーに取り出したい要素のものがあるか調べたほうが安全だと思う
if "xmin_plottype1" in dic_range.keys():
 xmin = dic_range["xmin_plottype1"]
else:
# なんかデフォルトの代入するとか
 xmin = ...
ただ今回は事前に例外処理はしてるので、キーがxmin_plottype1の要素には何かしらの値が入ってるのでしなくても大丈夫












前にも出た記憶はあるけどなぜか記事にしてなかったのでメモ

原因は簡単で、自分が定義した関数の引数の順番がまずいという話
引数の順番で、デフォルト値付きの引数は一番うしろに固めて置かないといけない
def func(a, b=100, c)

みたいなのがだめ
def func(a, c, b=100)
はOK


■ 参考 : python3 SyntaxError: non-default argument follows default argumentはなぜ起こるのか













cgiからpythonを動かして色々とやるツールを少し前からちょこちょこ作ってる
その中で不特定多数のユーザーが走らせたコマンドを記録したくなった
いつ走らせたか、どんなオプションを使ったか
これをログに残しておく

そこで走らせた日付を知りたい

■ 参考 : Pythonで現在時刻・日付・日時を取得

import datetime
d_today = datetime.date.today()
print(d_today)
# 2019-02-04

とか
時間入りで日付を知りたいときはnowを使う

dt_now = datetime.datetime.now()

print(dt_now)
# 2019-02-04 21:04:15.412854


取得した日付をファイルに書き込むときはこれを文字列に変換すればOK
file.write(str(today) + "\n")







これまではc-x h で全体選択をして
M-x replace-stringで文字の置換をやってた

これだと一気に全部の文字置換をできて便利だけど、逐一確認しながら置換をやりたいときが出てきた
(9年くらいやっててこれが初めてだったらしい、というのもアナログな人間なので、手で全部やればええんちゃん? って思って実際やってみてそれが原因でバグるという。それが私です)


■ 参考 : 文字列検索・置換

調べてみたらめちゃくちゃ簡単で M-% でいける
自分の場合Metaはoptionキーで%はシフトキーと5を同時押し (すぐに忘れそう・・・)

置換モードに入ったら
Query-replace:
と下のミニバーに表示されるので、置換元を入力してエンター
Query-replace int with:
と表示されるので、置換先を入力してエンター

これで最初の候補に移動するので、そこで
y か space: 置換する
n : 置換しない
enter : 終了






(記事を書いた後で)

2013年にすでにこのコマンドを使った形跡があったw
やっぱり記憶から消えてるやん・・・


■ 過去記事 : 【Emacs】文字の置換










ln -s /home/foo/hoge.txt .

みたいな感じで、fooさんが作ったhoge.txtを間借りして使ってた
ただ、hoge.txtは頻繁に更新されるし、安定して動くversionを自分のリポジトリに追加しておくと
あとでトラブったときに復旧が楽

で、このhoge.txtをgitに追加しようとすると、シンボリックリンクのまま追加されてしまう
自分がやってほしいのはリンク先まで見に行ってその内容をgitにアップしてほしいのだが・・・
そういうオプションがあると思って調べてみたがなさそう


■ 参考 : symbolic link - シンボリックリンクされたフォルダにgitコミットファイルを作成するにはどうすればよいですか


■ 参考 : version control - Gitはシンボリックリンクをどのように処理しますか?

gitの代わりにGitBSLRというコマンドをインストールして使うとかファイルの場所をgit内に移すとかが提案されてる


シンボリックリンクじゃなくて、ハードリンクを貼れば解決する?
と思って
ln /home/foo/hoge.txt .
としてみたけど、なぜかオリジナルのhoge.txtが更新されても手元にhoge.txtは更新されない・・・
ハードリンクは別のアカウントが作ったファイルだと機能しないのか?
それとも何か勘違いしてるのかも

(未解決)







■ 参考 : スラッシュを置換してみる

によると、#を区切り文字に使えばいいらしい
そうすると s/aaa/bbb/g が s#aaa#bbb#g と書ける
aaaの中に/が入ってても動くようになる
echo "/123/" | sed "s#/#abc#g"
abc123abc






■ 参考 : 他大学で非常勤講師をすると確定申告が必要|提出締切は3月15日

によると、「A大学での非常勤講師給与が15万円の場合」は確定申告は不要
ただ、気になるのはこれは2018年の記事ということ・・・
国税局への外部リンクも古くてなくなってるので、念の為裏取りしておく






■ 参考 : No.1900 給与所得者で確定申告が必要な人

国税局のQ&Aがまとめられていた
2か所以上から給与の支払を受けている人で、主たる給与以外の給与の収入金額と給与所得及び退職所得以外の所得の金額の合計額が20万円を超える人

とあるので、非常勤講師の給与が20万円以下なら大丈夫だと思う
自分の場合は (時給) x 2 x 16 なので余裕で大丈夫だった

しかも後期だけなはずなので、まだ3ヶ月分しか給与をもらってないしなおさら大丈夫






■ おまけ

税金に関してのツイートをメモする場所




















ただの自分用のメモなので、合ってるかは保証できません
各自で調べて使ってください


net force : 合力

全微分 : total derivative, total differential

operator : 演算子

保存力 : conservative force

hydrostatic equilibrium : 静水圧平衡
hydrostatic equation : 静水圧方程式

differential equation : 微分方程式









rm(list=ls())

■ 参考 : Rで使わない変数を消す





1. 機内持ち込みできるサイズのスーツケース

使ってる色はロイヤルブルーってやつ
大きさ, 耐久性, 色, 軽さ どれをとっても素晴らしかったです
ちなみに1年前の11月に買って、今年の11月ぶ取っ手の部分がぶっ壊れました
当時キャンペーンで3600円ほどで買えたので元は取れたかなと満足

またおんなじのをリピート購入して使ってるところ

■ 外部リンク : スーツケース【 Sサイズ 】1日~3泊 TS…



2. Twelve South PlugBug Duo

https://coffeepote.tumblr.com/post/189941812138

Macbookの電源アダプタに、USBの充電器を2箇所も増設できるアダプター
壁のコンセントに刺さる部分が日本だけじゃなくて世界中のタイプが同封されてる(タイプA, B, C, BFとか)

前者だけでもお得なのに、後者のおまけのおかげで変換ケーブルなしで海外出張しても
Macbookの電源ケーブルからiPhoneやモバイルバッテリーの充電ができる

無敵である。

自分が買ったときは6400円だったけど、今は7000円になってるっぽい
appleの公式サイトでも取り扱いしてる


■ 外部リンク :
TWELVESOUTH
Twelve South PlugBug Duo MacBook iPad 海外用コンセント対応 拡張電源アダプタ








3. エドウィンのジーンズ

5年くらい(?)履いてたジーンズの股の部分に穴が空いてるのに気づいて新調することに
ジーンズの名前を見てみるとEDWIN
502zと書いてあった

どこで買ったか覚えてねぇ〜

こんなに長く履けるんだから丈夫なんだろう・・・と思って、エドウィンのジーンズを2本ネットで買ってみることに
裾上げは自分で測定して伝えると無料でしてくれるけど
もしサイズが違ってちょんちょんになった場合目も当てられないので
裾上げなしで送ってもらってこっちでやることに (+2500円)

買ったモデルは503と402
どっちも紺色

とても良い買い物をした
もう一生エドウィン買うわ



4. アリメツ

https://coffeepote.tumblr.com/post/189941815838


言わずとしれた蟻抹殺用アイテム
パッケージに「理想的殺蟻剤」と書いてある
実際、そのとおりだから困る

蟻に困った際はこれをベランダに少し垂らしておくと、本当に蟻がいなくなる

■ 外部リンク :
【 送料無料 】 アリメツ 殺虫剤 アリ 蟻 不害虫 駆除 巣 全滅 殺虫剤



なぜこのアリメツが必要になったかは以下を参考にどうぞ


■ 過去記事 : 【雑記】とあるポスドクのアリ討伐記録 その1



5. コンバース CHUCK TAYLORモデル

ここ10年ほどはずっとコンバースを使ってる
青, 黒, 灰色みたいなクラシックモデルを交互に買って1年ほどで穴が空いて・・・
ってのを繰り返してたけど、新しいモデルを見つけた

■ 外部リンク : CHUCK TAYLOR - CONVERSE


色の種類がとても豊富
インソールがクラシックモデルのものとはちょっと違って弾力性がある
なので、足が少し楽
ただ、分厚いソールなので本来買ってるサイズよりも1つ大きいサイズを買う必要があった




6. 【アサヒ ウィルキンソン タンサン】250ml缶

2019年は家でハイボールをたまに飲むことがあった
そのときに、500mlの炭酸を買って使ってては余って困る・・・
なので、250mlの缶が割と便利でオススメ

ただ、最近は炭酸をそのまま飲むことに何の抵抗もなくなってきたので
500mlを買ってきて余ったら水代わりに飲むのもアリかなと思ってる・・・

まぁ使い切れるサイズなのはかなり便利
スーパーやドンキではめったに見つからないのでネットで買っておくと吉



7. ワールドトリガー

高校のときの友達と上野で飲んでたときに「これまじでオススメやから読め」と言われて買ってみた

面白すぎた・・・

FPSとかTPSのVCありクラン戦をやったことある人には超オススメ
今月21巻が発売されました(発売日に同じ友人と偶然飲んでてその場で電子書籍で注文した。)







ffmpeg -i input.mp3 -vn -af "atempo=1.2" output.mp3

で1.2倍




(Cの話なのでCカテゴリで)




■ 状況
1. ~/local/lib/以下にhogeというライブラリがインストールされている
2. ~/local_foo/lib以下にhogeというライブラリがインストールされている
3. PKG_CONFIG_PATHが~/local/libに通っているのが問題かと思って
PKG_CONFiG_PATHを空にして(unsetenv PKG_CONFiG_PATHしても)
コンパイルオプションに
LDFLAGS = -L/home/myname/local_foo/lib -lhoge
を追記してもダメ
どうやってるのかわからんが勝手に~/local_foo/libにあるhogeライブラリを見つけて来てしまう
ちなみに、実際にリンクされてるライブラリは
ldd [実行ファイル]
で調べられる

Macなら
otool -L [実行ファイル]

今回解決方法がわかったのでメモ

コンパイル時に
LDFLAGS="-L/home/myname/local_foo/lib -Wl,-rpath /home/myname/local_foo/lib"
を追加すればOK
ダブルコーテーションはなくても動いた

コンパイル後にlddでちゃんと正しい方にリンクされていれば成功



■ 参考 : Linux: ライブラリの動的リンクでエラーが出た場合の対処方法







try :
 なんか処理
except :
 エラーが起こったときの対応
って書く

exceptのときに何が起こったのかエラーメッセージを取り出したい
ちなみにexceptのあとにエラーの種類によって細かく処理を分けることも可能
except IOError:
とか



exceptに分岐したときのエラーメッセージを知りたいときはsysかtracebackを使えばいい
import sys
try :
 なんか処理
except :
 print(sys.exc_info())
とか
import traceback
try :
 なんか処理
except :
 traceback.print_exc()
とか

後者のtracebackはなんかうまくいかなかった・・・







■ 参考 : 2. 文字列をリストに変換|split()メソッド
>>> hoge="AAA,BBB,CCC"
>>> hoge.split(",")
['AAA', 'BBB', 'CCC']

みたいな感じ
これで、htmlのフォームから渡されたオプションを区切って、pythonで使える









■ 参考 : クリックすると展開表示する"折りたたみメニュー"を簡単に作る方法


<div onclick="obj=document.getElementById('open').style; obj.display=(obj.display=='none')?'block':'none';">
<a style="cursor: pointer;">▼ クリックで展開</div>


<div id="open" style="display: none; clear: both;">
ここが折りたたまれてるところ
</div>

openと書いてあるIDはそれぞれ一致したものを使う
もしこの折りたたみを1つのhtmlで何個も用意するなら、別のIDを用いること
でないと変な箇所に展開されてしまう・・・











■ 参考 : 【Javascript】追記:input="date"に現在の日付(今日の日付)を設定


■ 参考 : テキストフィールドに現在の時刻を表示する
var date = new Date(); // 現在時刻を取得

var yyyy = date.getFullYear(); // 年だけを取得 getYear()よりもこっちの方がいいらしい
var mm = ("0"+(date.getMonth()+1)).slice(-2);
var dd = ("0"+date.getDate()).slice(-2);

var hour = date.getHours();
var min = date.getMinutes();
var sec = date.getSeconds();

// こっちでも動くのかもしれないけど、未テスト
// document.getElementById("today").value=yyyy+'-'+mm+'-'+dd;

document.form1.date_beg.value = yyyy+'-'+mm+'-'+dd;
document.form1.hour_beg.value = hour;
document.form1.min_beg.value = min;
document.form1.sec_beg.value = sec;

new Date()で現在時刻を取得
そっから必要な要素だけ抜き出してくる
最後にdocument.form1.xxx.value = yyy
でxxxというフォームにyyyという値を代入している






次はこれを現在時刻じゃなくて、3分前の時刻でやってみる
めんどくさいのは
現在時刻が13:02とかだと単純にmin-3をするだけではだめなこと
なので、ちゃんとDateの決まりに従ってやっていく


■ 参考 : [javascript]5分前の日時を取得する

によると、
var now = new Date();
var unix1 = now.getTime() - 5*60*000; // [ms]
var date1 = new Date(uni1);
このあとは上のコードと合流するので省略
みたいな感じ
(単位がミリ秒なので、1000掛ける必要がある)








↓にやりたいことがすべて書いてあった

■ 参考 : GET送信によるパラメータの受け渡し
<script type="text/javascript">
function getdata(){
if(window.location.search){
/* URLの「?」以降のパラメータを変数nに代入 */
var n=window.location.search.substring(1,window.location.search.length);
/* テキストボックスにパラメータを表示 */
document.form3.elements["getpram"].value=n;
}
}
/* オンロード時に実行 */
window.onload=getdata;


取得したパラメータ:


URLの?以下をそのまま全部取ってきてしまうので注意

name="getparam"

name="form3"
を自分の環境に置き換えればそのままで使えるはず

URLから複数のパラメーターを取り出したい場合は、もうちょっと他のこともしないといけないっっぽい





そのうち使うかもしれないのでメモ

■ 参考 : PythonのURLとクエリパラメータのパースまとめ












最初にやってた書き方
error_message = "This is failed. time ( " + str(gps_time +" ) should be smaller than...."
みたいな感じの書き方をしていた
gps_timeがint型だとすると、文字列に変換しないといけないので
str()を使う必要がある

この方法の欠点は、書き方が込みってしまうので
サクッと内容が理解できないこと






後々もっと便利な書き方があると知った

■ 参考 : Python3 文字列中に変数展開したい

print( 'Hello %s!' % 'World' )

area = 3.14 * 5 * 5
print("area is %f" % area )

hoge = 3
foo = 6
print( hogehoge = %d, foo = %f' % (cat, dog) )

って感じで、%を使う
%s : 文字列
%f : 浮動小数点(doubleとかfloat)
%d : 整数
%% : %を表示する
(%x : 16進法、%o : 8進法)

これらの代わりに最後にある変数を代入してくれる
2つ以上変数がある場合は( )で囲ってカンマで区切ればOK









プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST

print "生きてます"
print "コロナのせいで15万くらい損失出してますが、生きてます"

# 最終更新 2020/03/15
カウンター
カウンター カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

とある物理の院生日誌~院生は社会へ旅立った~
(研究室の先輩の個人ブログ)

英語例文を見て自然に英語・英会話を学ぶ
(楠本慶ニさんの個人ページ、様々な情報の密度の高さに感動)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

flickr難民の写真置き場
(20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)

教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定
(阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)


Template "simple02" by Emile*Emilie
忍者ブログ [PR]