2013/12/29(Sun)asusのタッチパッドでマウスの真ん中のボタンを有効にする
touchpad で middle click ができないんだわ。設定画面も見つからない。
これでは、ブラウザ使っててもタブが閉じられないし、新しいタブで開けないし、
そのほか、ミドルボタンをフックして何かしてくれるようなツールも使えないジャマイカ。
前のS101使ってた時は、三本指タップができてたのに!
検索してもなかなか解決方法がわからなくて苦しんでたんだけど、やっと見つけた解決方法がこれ!
記事は zenbook 向けのものですが、私が最近買った taichi21 でもいけました。
http://wj32.org/wp/2012/12/19/asus-ux31e-setting-up-the-elantech-touchpad-driver-for-windows-8/
2013/12/28(Sat)Windows 8.1 の cygwin で group の permission が設定できない。
概要
chmod してもグループに対するアクセス権がrwxのまま変更できない話。
Windows 8.1 に cygwin x64 を入れたら起こった。
/etc/passwd の 自ユーザのグループが513(なし)になってる。
のを544(Administrators)か545(Users)に直す。
すでにできてしまったファイルやディレクトリはchgrpで戻す。
内容。
新たにWin8ノートパソコンを買ったので環境構築の一環でcygwin x64を入れた。
無事インストールして、いざ使うかーと思って screen を起動しようとしたら
tu-sa@t21 ~ $ screen Directory /tmp/uscreens/S-tu-sa must have mode 700.
ほう……。ならば?
tu-sa@t21 ~ $ ls -l /tmp/uscreens 合計 0 drwxrwx---+ 1 tu-sa なし 0 12月 28 05:21 S-tu-sa tu-sa@t21 ~ $ chmod 700 -R /tmp/uscreens/S-tu-sa tu-sa@t21 ~ $ ls -l /tmp/uscreens 合計 0 drwxrwx---+ 1 tu-sa なし 0 12月 28 05:21 S-tu-sa
はははこやつめ。
2013/12/28(Sat)Windows 8 PC に Windows 8.1 を入れるために必要なKB
クリーンインストール/リカバリ直後とかで、Windows Updateしてなくて、
ストアにWindows 8.1へのアップグレードが出てこないPCを、
とりあえずWindows 8.1へアップグレードしたいときこのKBを入れる。
Windows Server 2012 R2への更新もこれでいける。
http://support.microsoft.com/kb/2871389
アップグレード後ちゃんとWindows Updateするべきなのは言うまでもない!
2013/12/24(Tue)SRM601 o-- +0
超久しぶりに参加した。
250を解くのが遅すぎたし、500には手も足も出なかった。
案の定レーティング下がった。
停滞は後退とよく言ったモノで。青から再出発。
Easy 250
public class WinterAndPresents { public long getNumber(int[] apples, int[] oranges); }
リンゴとオレンジが入ったバッグがいくつかある。
apples[i], oranges[i] は、i番目のバッグのリンゴとオレンジの数を表す。
ある正の数Xを決め、それぞれのバッグからX個ずつ同じ数の果物を取って1つのギフトセットを作ることを考える。
全部で何種類のギフトセットが作れるか返すメソッドgetNumberを実装せよ。
2つのギフトセットについて、リンゴまたはオレンジの数が異なるとき、それらは異なるセットと見なす。
制約: apples.Length = oranges.Length <= 50
制約: apples[i], oranges[i] < 1000000
制限: 実行時間2秒 メモリ64MB
サンプル
getNumber({1},{1}) → 3 // {apples, oranges} = {1,0}, {0,1}, {1,1} の組み合わせの3種類 getNumber({1, 2, 0, 3}, {4, 5, 0, 6}) → 0 // 空のバッグがあるのでギフトセットは作れぬ。 getNumber({2, 2, 2}, {2, 2, 2}) → 16 // {0,3}, {1,2}, {2,1}, {3,0}, {0,6}, {1,5}, {2,4}, {3,3}, {4,2}, {5,1}, {6,0}, {3,6}, {4,5}, {5,4}, {6,3}, {6,6} getNumber({7, 4, 5}, {1, 10, 2}) → 46 getNumber({1000000}, {1000000}) → 1000002000000
Normal 500
public class WinterAndSnowmen { public int getNumber(int N, int M); }
二人の雪だるまがゲームをするらしい。
正の整数集合a, bを次の条件を満たすように作る。
・集合 a に含まれる整数はN以下
・集合 b に含まれる整数はM以下
・aとbに同じ数は含まれない
・aに含まれる全ての数をXORしたもの < bに含まれる全ての数をXORしたもの。
このような集合ペアの作り方は何通りあるか計算し答えるメソッドを実装せよ。
なお、結果は非常に大きくなる場合があるので、1,000,000,007で割った余りを答えること
制約:N, M <= 2000
制限: 実行時間2秒 メモリ64MB
サンプル
getNumber(2, 2) → 4 // { {},{1} }, { {},{2} }, { {},{1,2} }, { {1},{2} } の4通り getNumber(1, 1) → 1 // {}, {1} しかない getNumber(3, 5) → 74 getNumber(7, 4) → 216 getNumber(47, 74) → 962557390
Hard 950
読んでない
2013/12/21(Sat)template <class T> class TreeNode { ... }; の中身は?
tree を作ることを考える。
根があって、任意数の子をとれる。
子も任意数の子をとれる。
汎用的なtreeクラスの節、template
どうやったら引き回しやすいか。
まぁ、複数の子っても、たくさんの子を持つか、
あるいはまったく子を持たないかわからないので、
二分木で表現することにする。
思いつくまま定義を書くと、
template<class TValue> class Node { TValue value; Node<T> *parent, *firstChild, *nextSibling; };
みたいになって、それを実装してみたのが
https://gist.github.com/ttsuki/95ceef4cacdc9c5e0294 なのだけど、
いざ使ってみようと思って、
使う側に回ってからTValueにあたる型を作ってて思ったんだけど、
普通、Treeで何らかの構造を表そうと思ったら、
その要素TValueはデータ構造的にツリーになる前提があるわけで
TValue自身がTValue::ナントカ() が自分の親・兄弟にアクセスできないと、
トラヴァーサルしにくいなーということに後から気づいた。
じゃあ、
class 実際に扱いたい型 : public Node<実際に扱いたい型 *> { ctor() : Node(this) { } };
なら?
にしても、parentは、Node<TValue *>の型であって、
それをTValueとして扱うにはダウンキャストがいるのでなんか気持ち悪い。
って考えてると、
class 実際に扱いたい型 { Node<実際に扱いたい型 *> link; ctor() : link(this) { } };
になって、マジで?ってなる。
これだと、でもまぁ、これだとキャストなしに、
自分の親ノードを得るのに return link.parent.value; できるので……。
ただ、GetParent() とか、ApplyAllChildren等を
全部pImplばりに再実装しないといけなくて、
それめんどくさいなぁ。
なんか、お約束のレシピはないのかしら。
2013/12/01(Sun)ぼくんちのNASで動いているValue Domain DDNS Updator
「つーさのくーかん」は、ぼくんちのNAS上で動いてるのですが、
プロバイダを変えてからちょこちょこIPアドレスが変わるようになり、
GoogleのWebmasterツールから、サイトにアクセスできない!と怒られては、
手動でDNSレコードを更新していたりということをやっていたのですが、
最近この作業にうんざりしてきていたので、
ようやくValue DomainのDDNSを更新するためのプログラムを作ることにしました。
DNS更新には、自分のグローバルIPが要るのですが、これをどっから取ってくるか。
手っ取り早くどっか外部サイトのサービスを呼ぶ手もあるにはありますが、
やっぱ自宅鯖してるくらいだからその辺は閉じていたいとも思いまして、
UPnPでルータに問い合わせることにしようと思いました。
予てから、UPnPを使って自分のグローバルIPアドレスを得るC#プログラムを公開してましたが*1、
こいつは、Windowsなupnp.dllを使ってる関係で、Linuxでは動かなかったので、
NASが定期的に自分のIPを確認してDDNSに登録することはできなかった。
LinuxでUPnPと言われても門外漢で、
ちょっと調べるとgupnp-toolsとかいうのもあるらしいのですが、
Xなしで動くのかどうかよくわからなかったので、
まぁ、自分で書くことにしました。
https://gist.github.com/ttsuki/7723258
書きました。
VSでexeをビルドして、NASへコピーしました。
nohup mono ValueDomainDDNSUpdator.exe > vdddnsu.log 2>&1 & echo kill $! > kill-vdddnsu.sh
動きました。
これからは安定して、サイトにアクセスできるようになると思います。
UPnPは、最初にUDP multicastでネットワーク上にいるデバイスを探すのですが、
今回はルータのIPが既知、かつ、変化しないので、その辺はすっ飛ばしました。
って、考えたらコントロールURLも変わらないはずだし、もっと楽できたなぁ……。
反省です。
おわりです。