Author Archives: admin

C++のテンプレート関数で特定の型でエラーにする

std::is_class

is_class<T>を使うとTがクラス(構造体含む)かどうか判定してくれる。

テンプレート関数funcクラスや、クラスへのポインターや、クラスへのポインターのポインターを渡すとエラーになる。 ただしクラスへのポインターのポインターのポインターを渡すことはできる。

ソース

https://github.com/ambiesoft/blogprogs/tree/master/6022/isClass

vimで複数行の先頭や最後にに文字列を入力

複数行の先頭や末尾に同じ文字列を追加する方法

行の先頭に文字列を挿入

  1. カーソルを行の先頭に移動
  2. Ctrl+V (ビジュアルモードに入る)
  3. カーソルを最後の行に移動
  4. I (入力モード)
  5. テキストを入力
  6. ESC
  7. 少し待つ

行の途中に文字列を挿入

  1. カーソルを先頭の行の挿入したいところへ移動
  2. Ctrl+V (ビジュアルモードに入る)
  3. カーソルを最後の行に移動
  4. A (入力モード)
  5. テキストを入力
  6. ESC
  7. 少し待つ

行の最後に文字列を挿入

  1. カーソルを行の先頭に移動
  2. Ctrl+V (ビジュアルモードに入る)
  3. カーソルを最後の行に移動
  4. $ (最後へ移動)
  5. A (入力モード(最後に))
  6. テキストを入力
  7. ESC
  8. 少し待つ

 

テンプレートのvariadic引数で型をチェックする

普通の型チェック

Tがポインタだとエラーになる。

variadicの場合

最初の引数の型Tに対してチェックしている。CheckKataに渡される引数がwchar_t*だったりポインタのポインタだったらエラーになる。ただwchar_tはセーフにしている。

remove_cvなどの挙動がいまいちよくわからないのでこの書き方であっているのか不明。以下のようなコードで実行時の型を表示してくれる。

is_sameは渡された2つの型が同じならtrue
decayは配列参照などをポインタにしてくれる。
remove_cvconstvolatileを除去
remove_pointerはポインタを1つ除去する。

_vで終わるのはvalue,is_same::valueなどと同じ。
_tで終わるのはtype,remove_cv::typeなどと同じ。

ソース:https://github.com/ambiesoft/blogprogs/tree/master/6006/ConsoleApplication1

エクスプローラに表示されるファイルのタイプを取得する

SHGetFileInfoを使う

ubuntu serverでipv6を無効にする

ipv6有効だとちゃんとネット関連で対応してないと遅くなったりするのでとりあえず無効にしたい。

TLTR

/etc/sysctl.confに以下を追加

/etc/netplan/(file).yamlに以下を追加
link-local: [ ipv4 ]

バージョン確認

今現在ipv6が有効になっているかを確認する ip a

有効になっているとinet6が表示される。

無効にする

無効にするには/proc/sys以下のカーネル設定を叩けばいいがこれをやるコマンドがsysctl。この設定ファイル/etc/sysctl.confに以下の三行を追加する。

この設定を反映するには、sysctl -p

これで永続的に無効になるはずなのになぜか無効にならない。再起動後の値が以下。

netplanが有効にしてるかもしれないので試してみる。netplanはubuntu serverでipの設定をしているものらしい。

やはりnetplanが設定を変えてしまうようだ。そこでnetplanの設定ファイル/etc/netplan/以下の.yamlファイルに以下のようにlink-local: [ ipv4 ]を追加したら再起動しても無効になった。

git submoduleで特定のハッシュやタグでaddする

もともとsubmoduleは勝手に更新されたりしないので、普通にgit submodule addすると、そのときの最新状態に固定される。もっと古いものにしたいときは一旦addしてからsubmoduleのなかでgit checkout SOMETAG or HASHして、上のディレクトリでgit commitする。

実行イメージ

git cleanでいらないファイルを削除する

TLTR

git clean -Xi
または
git clean -Xid

便利コマンド -n

-nをつけるとドライランになって。実際には削除せず、何を削除するかを表示するだけなので確認するのに便利。

-X

.gitignoreで指定されているファイルを削除する。

警告がでる

clean.requireForceが設定されていなくてデフォルトでtrueになるので、もっとオプションが必要らしい。

  • -i: インタラクティブ、一個ずつ確認しながら削除する。
  • -f: clean.requireForceを無視して削除する。

-irmなどと違ってすごく高機能。

危険領域

-X.gitignoreで指定されているファイルを削除するので一番安全と思われる。-Xをつけないとgit statusで表示されるようなuntrackedなファイルも削除する。しかし前述のようにclean.requireForcefalseでない限りは追加オプションが必要になるので危険性は弱くなっている。-fだけで実行すると大事なファイルが削除されてしまう可能性が高い。しかし-dをつけないとディレクトリは削除されないようになっている。-iが高機能なので-fは一切使わないほうがいいだろう。

ファイルの特定の行を変更したコミットの差分を見る

git blame

これは、funcs.cというファイルの814行目から10行の部分を変更したのは誰なのかを表示する。

git log -L

git log -Lを使うには1.8.4以上が必要らしい。

コミットメッセージも表示してくれる。
変更が81f15c2b0d6e9eaf524ff7bab37426c21af75fb7によることは分かったので、これと一個前との差分を見る。

差分

これでコミット全体の差分が見れた。

この差分をgithubで見るにはhttps://github.com/file/file/commit/81f15みたいなURLになる。

参考

https://stackoverflow.com/a/19757493 made by Matt McClure CC BY-SA 3.0

bashで自分のグローバルIPを取得する

現在のインターネット環境では自分のPCのIPはプライベートIPの場合が多いので、自分のPCにはグローバルIPは設定されていない。グローバルIPが設定されているのはその先のルーターなのでルーターから取得することもできるだろうが、ルーターはパスワードが必要なのでここではスルー。

http://checkip.dyndns.com/にアクセスするとアクセス元つまり自分のIPを返してくれる。よってここからIPを取得すればいい

w3mはテキストブラウザ、-dumpは出力して終わる。-oはマッチした部分を返す。-PはPerl互換の正規表現。\dは数字にヒット+は連続の数字にヒット、\..をエスケープ。

なおこのスクリプトだとw3mがIPをいくつも返したとき全部取得してしまうので最初の1つだけを取得したい場合は head -n 1などをさらにパイプでつなげる。

タスクバー

下固定。いつもは上に配置して使っているので慣れるまで大変。

クイックローンチがない

クイックローンチ(C:\Users\User\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch)にショートカットをたくさんおいて使っていたのでこれがなくなると大変になる。

常にグルーピング?

グルーピングしたくない

IE

IEがないが、IEのコントロールはあるようなのでIEをつかった既存のアプリは動く。バージョンは以下。新しくなっているかは不明。ちなみにIEを起動するとEdgeが起動する。

デスクトップの右クリック

デスクトップの右クリックメニューが変わった。

いままでのメニューは「Show more options」で表示できる。

結論

とくに嬉しいことはなかった。というか使いづらい。さらにモバイルに近づけようとしているようだ。バージョンが上がるごとにWindowsがつかいずらくなっている。