2013/12/28(土)Windows 8.1 の cygwin で group の permission が設定できない。

はてブ数 2013/12/28 06:25 計算機な日記::ボクと計算機つーさ

概要
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(土)Windows 8 PC に Windows 8.1 を入れるために必要なKB

はてブ数 2013/12/28 03:09 計算機な日記::ボクと計算機つーさ

クリーンインストール/リカバリ直後とかで、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(火)SRM601 o-- +0

はてブ数 2013/12/24 16:07 ゲーム日記::TopCoderつーさ

超久しぶりに参加した。
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(土)template <class T> class TreeNode { ... }; の中身は?

はてブ数 2013/12/21 18:42 プログラミング::C++つーさ

tree を作ることを考える。

根があって、任意数の子をとれる。
子も任意数の子をとれる。

汎用的なtreeクラスの節、template class Node 中身; の中身について考える。

どうやったら引き回しやすいか。

まぁ、複数の子っても、たくさんの子を持つか、
あるいはまったく子を持たないかわからないので、
二分木で表現することにする。

思いつくまま定義を書くと、

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(日)ぼくんちの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も変わらないはずだし、もっと楽できたなぁ……。
反省です。

おわりです。

2013/11/16(土)問:加算の超最適化を実装せよ

はてブ数 2013/11/16 14:11 計算機な日記::プロコンつーさ

http://codegolf.stackexchange.com/questions/12664/implement-superoptimizer-for-addition

今Y個の0/1の2値のいずれかを取る変数x[0]...x[Y-1]がある。
こいつらの和がXになるかどうか を判定する論理式を作るプログラムを作る。
論理式には括弧 と and or not が利用できる。
論理式のスコアは、x[?]が評価された回数で定まる。

F(Y = 2, X = 1) := (x[0] & !x[1]) | (!x[0] & x[1]) ならば スコア は 4。

入力 Y,X に対して最もスコアが低くなるような論理式を生成して返すプログラムを書け。

2013/11/07(木)C# on Windows でMP3をデコードする

はてブ数 2013/11/07 01:04 プログラミング::C#つーさ

Windowsには昔からAudioCodecManagerという音声形式を色々扱える系のAPI群があるので、
それをP/InvokeでC#から呼び出してMP3をデコードすることができる。

Windows 95の頃には既に存在した古のAPIであるが、
Windowsの機能を使うので、ライセンス的にも特に怖くないし、
対象プラットフォームがWindowsで、かつ目的がMP3の仕組みを勉強するのでなければ、
これでいいよね。

https://github.com/ttsuki/ttsuki/blob/master/WinMM/AcmMp3Decoder.cs

2013/11/04(月)template <class T> struct Hoge { }; の T を POD に制約したい

はてブ数 2013/11/04 16:38 プログラミング::C++つーさ

タイトルの通り、template struct Hoge ; の T を POD に制約したい。

というわけで、 Hoge がインスタンス化されようとするとき
コンパイルエラーを生成できるような、PRECONDITIONAL_ERROR なるものを作ってみた。
STATIC_ASSERTの親戚のような感じで使えるかなー。

今回作ってみたのは、template実体化時にTがPODじゃないとコンパイルエラー。
ついでに、引数に渡された配列の長さがある一定以上ないとコンパイルエラー。

自作コンテナを作るとき、TがPODならコンストラクタもデストラクタも呼ばなくてよいので、
コンテナを clear するときも、for (int i = 0; i < size(); i++) this[i]->~T(); する必要が無いっていう。

以下 gist

続きを読む