もじょえんじにあ……共感できる?

日常のメモ。日々これ共感。へたれでしょほてきなIT?

postfixの運用をやめたいのです

さくらのメールボックスというサービスがあります。

相当お安い。容量は数人~2,30人で使うのであれば普通は問題ないと思います。

IaaS、仮想マシンで運用するのは、立ち上げはそれほど大変じゃないのですが、長い運用は正直めんどうです。ClamAVならOpen Sourceですがそれ以上のセキュリティが必要な場合にはお金も相当かかります。サーバ用は急激に高くなりますし。

このサービスはさくら以外のリジストラで登録している場合DNSをさくらに向けろ、ということになってますが、向けなくても運用は可能っぽいので試しています。

具体的にはNSをns1, ns2.dns.ne.jpに向けろということを指示されますが、そうしなくても動作します。そういうのがわかんない人向けですね。そうしたほうがQA工数も減るし合理的だと思います。

よそのリジストラでさくらに移管しないモードで設定したあとに、自分のbindやリジストラのDNSで、TXT, MX を向けてあげるだけです。

具体的には、設定すると、さくらのns1.dns.ne.jpが設定されるので、

dig @ns1.dnx.ne.jp mx your.domain.name
dig @ns1.dnx.ne.jp txt your.domain.name

あたりをして、今のレジストラDNSで同じになるように設定すればSPFまではOKです。

要は@ns1のさくらのDNSとそれが無しの普通のDNSのdigの結果が同じになればさくらのマニュアルにそわなくてもいいみたい。

popよりimapにして暗号化デフォルトにするとThunderbirdでも設定が簡単みたい。

安定させるために使うのが、imapなので、ユーザが消さないとダメな場合があるっぽい。まぁ、そのへんはしかたないかもdeathね。

ミラクルミラクル

Miracle Linux 8.4 を Hyper-Vへインストールしたのですが、解像度が変更できない……

結論だけ。

/etc/default/grub

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/ml-swap rd.lvm.lv=ml/root rd.lvm.lv=ml/swap rhgb quiet"

の後ろに解像度の表記を追加しマス。例えば、1920x1080なら……

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/ml-swap rd.lvm.lv=ml/root rd.lvm.lv=ml/swap rhgb quiet video=hyperv_fb:1920x1080"

としてから

grub2-mkconfig -o /boot/grub2/grub.cfg

です。で、reboot。もし、第二世代でインストールできたら(なんかひっかかったので第一世代にしてインストールしたのdeath)、

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

デスね。reboot必要なのは一緒です。まぁ、これはこれで変更できないんデスが。

 

【ダーク】ConsogameでOfficeを買うと……

Consogame というサイトがありますf:id:kanako1000:20210904230328p:plain

Gameだけでなくて、WindowsやOfficeのライセンスも売ってます

f:id:kanako1000:20210904230521p:plain

明らかに値段がおかしいので、普通のひとは手をださないほうがいいと思いマス。

でも、びっくりするほど、ここのサポートは手厚いです。ヘタクソでもいいので英語でChatする必要があるんですけどネ

Windows10は有名サイトがあるくらいで、Proを$10程度で買えたりします。16coreなのにHomeのヒトとか、Hyper-Vを使うのに$10ならアリかと。

Officeのほうですが、なんとかなりましたけどおすすめしません。$16くらいだったかな。

最初、購入して来たKeyは「電話認証じゃないとだめよ」と書いてあったので面倒だけど電話したら凄いケタ数を入力させられて「そのキーはだめっす」みたいな感じ?で、「だめだったんだけど」と言ったらスクリーンショットを送れといわれて送ったら、再発行してくれて「オレらの仕入れ先のミスっぽい」というメッセージ。でもやっぱりだめ。

「やっぱりダメだお」とChatで送ったら、すまないがもう一度スクリーンショットを送ってくれといわれて送って、ちょっとまってくれ、再発行はするから、と言われて待ってたら、今度はWeb認証専用のキーが来たっぽい。でもダメ。

しかし、MSのJP的にはJPで有効でないOfficeのライセンスはハネるという動作をするっぽいので、ChromeでTranslateしてくれ、ここにそう書いてあるので参考まで、と送った。で、最悪Skype out でもいいのでUSに電話認証するデスヨ、とChatしたら、上位のライセンスを送ってきたデス。

まあ、通ったけど……無茶してない?大丈夫?

超なつゲーであそぶ

昔、ダイソーで売ってたCDのゲームがありまして、特にライセンスキーとかもないので今もあそべます

f:id:kanako1000:20210818224431p:plain

萌え絵ですが、ゲーム自体はヘクスじゃなくてスクエアのタクティクス級のゲームです。全10面ありますが、中盤からは普通に時間がかかりますよ。640x480を前提としているくらい古いゲームなので、遊ぼうかなーと思ってもWindowやアイコンがどっかいっちゃうのが面倒だったんですが、考えてみればHyper-Vにしてmstscで繋げばよいということに気付いちゃいました。1vcore 4GBもあげれば充分に動きます(XP時代のゲームですし)。相手があまりアタマよくないのも遊ぶにはいいdeath。でも7面、9面、10面でおさけのみながら間違うと結構苦労します。ま、飲んで戦争しちゃだめですね。
もしだめなら権利者の人、コメントしてね。音も100円とは思えないほどちゃんとしてます(多少ばらけることもあります)

せっかくなので計ってみる

デコレータ関数もつくったので計ってみましょう。

関数の手前に1行足すだけデス。あとmainも作るdeathネ。

@elapsed
def e0(n):

@elapsed
def eratosthenes(n):

def main():
  n = 10000
  primes = e0(n)
  primes = eratosthenes(n)
  print(len(primes))
if __name__ == "__main__": main()

mainの中でsys.argvとかでnをコマンドラインから入れるような処理を書くと毎回ファイル開かないでよいです。イマドキのipynbとかだと、まぁ、それすら気にしないデスけど。では、どーん。

$ ./xprimes.py
848.7949371337891 ms in e0
2.7043819427490234 ms in eratosthenes
1229

数はあってるみたいですね。速度はざっくり300倍って感じデス

Pythonで速い書き方のエラトステネスちゃん

昨日書いたコードはぶっちゃけ、速くないdeath。

まぁ、教科書的?というか遅いとわかっているメソッドつかってますからね。

速くするならこんな感じ?

def eratosthenes(n):
  n = int(n)
  if n < 2: return []
  sqrtn = 1 + int(n**0.5)
  primes = [2, 3]
  cands = [x for x in range(5, n+1, 2) if x%3]
  while (cands[0] <= sqrtn):
    prime = cands.pop(0)
    primes.append(prime)
    cands = [x for x in cands if x%prime]
  primes = primes + cands
  return primes

まず、removeというmethodはフィーリングでごめん、ですが遅いです。

いまどきのPCならメモリを大富豪に使っていいのでリスト内包表現にしたいデス。

このコードだと、primesに結果を入れる、candsは素数候補ということで、candsは毎回解放して作り直しのコードになります

まず、2, 3 は確定として、5からの奇数だけのcandsを作りますが、内包表現の後置ifを使って、3の倍数を捨ててます(3の倍数はx%3==0なのでリストに入らない)

関数の引数のnが最大値なので、念の為切り上げて√n の整数値をsqrtnとして作っておきます。検索はここまででいいデス。

一般論ですが、一番前を引っこ抜くpopや一番後ろに追加するappendは途中を操作するremoveより速いはずです。なので、candsの先頭は素数なのでpopしてprimesにappendしまっす。

リスト内包表現はmap()より速いことをpython2のこと検証したですし、柔軟な書き方ができるのでこれで、candsを作りなおすわけです。

で、sqrtnまで来たらループ終了で、そのときcandsに残っているのは素数のみのはずです。なので連結しておしまいdeath。

エラトステネスのふるい

古くて新しい?

素数を求める方式にエラトステネスのふるいというのがあります。

すっごいシンプルで2からNまでの整数をどばーっと集めて先頭のものは素数なので、それで割れるものを篩い落す(ふるいおとす)方式です。

で、残ったのが素数リストになるという方式deathね。

そのままの古典的な実装だとこんなかんじでどうかな。

 

def e0(n):
  n = int(n)
  if n < 2: return []
  sqrtn = 1 + int(n**0.5)
  primes = list(range(2, n))
  for i in range(2, n):
    if not i in primes: continue
    for j in range(i*2, n, i):
      if j in primes: primes.remove(j)
    if i > sqrtn: break
  return primes