SOFT SKILLSの自分メモ

学習すること ソフトウェアエンジニアは絶えず勉強が必要で(SEに限らずだけれど)、効率的な勉強法が重要となる。 効率よい学習とは、好奇心を持って行動を起こすこと。そして人に教えると知識が補強される。 だから、まず最速で試すポイントまで立つことを意…

Pythonの開発環境 on Emacs

前提 最低限として文法チェック、補完、REPLが使えれば良い。 ipython notebook(Jupyter)は使わない。 (notebookはやっぱり慣れないのと、別にmarkdownは別ファイルに書けば良いし、図もEmacs内に埋め込み表示しなくてREPLでやれば良いように思う。) virtual…

Cmakeのメモ

使い方 CMakeList.txtにMakefileの生成ルールを記述. CMakeLists.txtを用意したディレクトリを指定してcmakeを実行するとMakefileが生成される.後は通常通りにmakeでコンパイル. ただし,cmakeするとCMakeCache.txtやら色々できてディレクトリが汚れるの…

コンテナからの要素削除

c++

ひさしぶりに書くとこんな事も忘れてしまっていた.下記のコードでセグメンテーションフォールトが出た. でも,そもそもremove_ifをこんな時には使うようだ. std::list<int> lis {0,1,2,3,4,5,6,7,8,9}; for (auto itr=lis.begin(); itr!=lis.end(); ++itr) { i</int>…

ポリモルフィズム

c++

目的 オブジェクトによって振る舞いを変える. 方法 子クラスのポインタを親クラスのポインタに代入するのがミソ.(子クラスは親クラスのポインタに代入可能.逆はだめ.) それを使う側は親クラスのポインタを引数なりにして受け取って,親クラスのメソッド…

テンプレートのメモ

c++

基本 型推論 関数テンプレートの場合は型推論されるので,実体化の際に明示的に型を書かなくても良い. クラステンプレートの場合には推論されないので注意. 特殊化 テンプレート関数,テンプレートクラスがある時に特定の型でだけ別の動きをしたい場合には…

二分探索 バイナリサーチ

簡単でかつ効果が高いのでよく使うサーチ. 意外と境界条件でバグりがち.味噌は,右側を配列の外において置く. #include<iostream> #include<vector> using namespace std; int main() { int d, n; cin >> d; cin >> n; vector<int> v(n); for (int i=0; i<n; ++i) cin>>v[i]; int l=0, r=v.siz</n;></int></vector></iostream>…

線形探索と番兵アルゴリズム

番兵アルゴリズムはただの書き方の問題だと思ってたけど,高速化のテクニックだった,という話. forでvectorの要素を回す時に,毎回比較演算が行われるけど,それが勿体無いという場合に,絶対に止まるよに番兵を置いておいて無限ループで回すというのが番…

プロコンと標準入出力

c++

プロコンをかじってみたら,標準入出力で躓いた...ということで,使い方を整理しておく. scanf 空白文字または改行文字を区切りとして,フォーマットに従って変換して変数に取り込む.2つ以上フォーマット指定子を指定すれば一度にその分だけ読み進む.…

C++ファイル分割

c++

またまた久しぶりにC++を書こうとすると,ヘッダファイル,ファイル分割を忘れてしまっていたので,整理. 全般 共通にするものをヘッダに書く(当たり前だけど). 宣言と定義の違いを持つこと.宣言は名前だけ.定義は実態を生成する文. 定義は(普通)は…

実行中プロセスのREPLに接続

メモ 長いシミュレーションなどをサーバ上でプロセスを実行させたまま帰って,あとでミスに気づいて関数を変更したい,などという状況. swankというのがSlimeの機能なのかEmacsの機能なのかSBCL(CL)の機能なのかが良く分からないけど,イメージとしては,SB…

Ltkのメモ

書きかけ 雑記 with-ltkはwishの起動やmainloopの呼び出しとか全部やってくれるマクロ.基本的にltkのプログラミングではこれで全体を囲む.マニュアルでやりたいなら,(start-wish), (mainloop)を実行する. ウィジットのmasterオプションは親ウィジットの…

sbclでスクリプト

実行方法 RubyとかPerlみたいにファイルの先頭に#!/usr/bin/sbcl --scriptを付けて,実行権限を与えてシェルから実行.#!xxxはシェバンっていうらしい.sbcl 1.0.22から使えるようになった..ただし,~/.sbclrcを読み込まないので注意. scriptオプションを…

tcl/tk

GUIは使わないのですぐ忘れる.tkを使う最低限のメモをまとめておく. tclメモ データは全て文字列として扱われる.数値の場合は読み込まれてから数値に自動で変換される. 行単位のプログラミング言語で,先頭の文字列がコマンド(butonとか) 変数はsetで値…

C/C++のライブラリについて

概要 静的ライブラリ,動的ライブラリ(そんなものは無い.それは一般的には共有ライブラリ),共有ライブラリ,静的リンク,動的リンクなど,分かっているようで理解が曖昧な点を整理しておく. C++ではヘッダファイルだけで提供するライブラリがある.ヘッダ…

common lispプログラミング

Common lispの勉強をしていて出会ったことを書き連ねていく. コーディングスタイル 詳細を知りたい場合はGoogle Common lisp Coding規約を読む. ファイル名はhoge-foo.lispという感じでハイフンでつなぐ。 グローバル変数は"hoge" 定数は+hoge+ 大文字と小…

インデックスのセットの要素をリストから除去する

c++

C++の場合 リストvがあって,そのリストから除去したいインデックスの集合remove_id_set(3,5,2)とかで指定する要素番号の要素を除去したい.eraseすると要素番号が一つずれるので,それも考慮して一旦集合をソートして,前から順に削除していくという方法. …

N以下の重複しない乱数(整数)の生成

C++ 良い方法かは分からないけどiotaやeraseを使った例を見つけたのでメモ.やり方は一旦iotaで[0,1,...max]の配列を作って,それをシャッフルして,eraseで必要ない部分を消す.eraseはイテレータを2つ渡すと,開始位置から終了位置の1つ前までを消去でき…

C/C++からPythonを使う

要旨 Pythonには色々な便利なライブラリがある.C/C++にも便利なライブラリがある.それらが重複しない場合は一方からもう一方を叩けると嬉しい. 参考URL 1. Embedding Python in Another Application — Python 3.5.2 documentation コンパイル方法 色々な…

c++のスレッド

c++

メモ c++11からはスレッドが言語に取り込まれている. コンパイルには-pthreadを付ける. スレッドを一時的に止めるときにはsleepではなく,スレッド用のstd::this_thread::thread_for()を使う. thread::join()をちゃんと実行して対象のスレッドの終了を待…

情報量関連のメモ

概要 機械学習とか統計を勉強していると情報量とかエントロピーの話が出てきていつも復習をし直しているので,纏めておく. 情報量 事象Aが与えられた時に,その情報量って?というものに答える. 確率を使って考える.発生が稀な事象と,よくある事象があっ…

オブジェクトの配列

c++

概要 自分で作ったオブジェクトの配列を作りたいことはよくある.特に,vectorで管理したいことはよくある.その時に,不要なコピーコンストラクタを呼ばないようにc++11以降ではpush_backの代わりにemplace_backを使う. emplace_backの引数はコンストラク…

Euler Projecect 1

100以下の整数のうち,3か5の倍数の和. Ruby 最もシンプルにただ全部舐めていくだけ. sum = 0 100.times do |i| if i%3==0 or i%5==0 sum += i end end p sum

Emacsの設定

パッケージ管理 package.elではなく,caskかEl-docというので管理するのが主流らしい. caskを使ってみる. インストール $ curl -fsSkL https://raw.github.com/cask/cask/master/go | python # ubuntu $ brew install cask # OSX $ export PATH="/home/nob…

ODEのテンプレートプログラム

c++

ODEのテンプレートプログラムで流れを確認しておく. ヘッダや宣言 dobuleとfloatの描画ルーチンを自動でコンパチにする宣言を入れておく. #include <iostream> #include <ode/ode.h> #include <drawstuff/drawstuff.h> // Doubleで扱う場合は描画ルーチンをD型にする. #ifdef dDOUBLE #define dsDrawBo</drawstuff/drawstuff.h></ode/ode.h></iostream>…

ランダムウォーク

お題 X軸上をランダムに動く点の軌跡を求める.1ステップで±1か,動かないか. python 一歩ずつやってもいいけど,ガバッと乱数作ってnumpyのcumsumを使う方法でもいい. import numpy as np move = np.random.randint(-1,2,100) # generate 100 random in…

C++プログラミングのメモ

Last update 16/07/25 概要 プログラミングをする上で,変数名の付け方とかprivate/publicの使い分けとかを勉強したことをまとめておく. 【C++API】 API化/OOPプログラミング 目的は実装を隠すことで,利用者に影響を与えずに内部を常に改変できるようにす…

c++よく忘れること

c++

概要 久しぶりにC++を書こうとすると(というよりも読もうとすると)忘れてしまっていてリハビリするのがコピーコンストラクタ,this, Template, 参照渡し,仮想関数, オーバライド,スマートポインタ. コピーコンストラクタと代入演算子のオーバーロード C…

Common lispの開発環境

動機 遺伝的プログラミングの勉強をしているとLispの例が多いから.人工知能系の研究で従来から使われている理由(Cに比べての高級性)は最近の言語には劣るから意味ないと言われてもいるようだけど,少し本を読んだ限りでは高級性以外の関数型であること,…

ディレクトリ内のあるファイル群に処理を適用する

お題 あるディレクトリ配下のあるファイル群(例えば拡張子がrbのファイルに対してなど)に何か処理を適用する場合.スクリプトを書くときに良くあるのかな. Ruby Dir::glob("/home/nobunaga/codes/*.rb").each do |f| func(f) end python pythonもほぼ同様…