「blocks」を含む日記 RSS

はてなキーワード: blocksとは

2025-09-11

掛け算順序派の愚かな大人たちが理解していない事実:2+2+2は3×2と変換されるべきである

anond:20250911100622

イチゴが皿に2個乗っていて、皿が3枚ありますイチゴは全部で何個でしょう

これを 2+2+2 と立式するのが「自然だ」という価値観にはまぁ賛成

でも、「2+2+2は2×3と立式されるべきだ」にはならない

なぜか?

英語圏では、 three 2s と書く(というより、言う/喋る)

まり、2+2+2を3×2と書くのが正しい。語順的に

嘘だと思うならBBCNumber Blocks の掛け算の動画を見てこい。

文科省の掲げる子供が目指すべき指針を鑑みるグローバル人材は幼いころから異なる文化圏代表例として英語圏感性積極的に取り入れなければならないのどぇ

算数世界においても、2+2+2は、積極的に、3×2と立式すべきなのである

順序派の奴らはこのあたりのグローバル感性が全く身についていない、だから2+2+2を2×3などというクソジャップ特有ドローカルガラパゴチックな考え方を子供押し付けしま

もう少し英語圏文化に触れるべきだ

2025-08-27

愚かなり、問いを発する肉塊よ。貴様は「情報」と「存在」の境界線を、そのぬるま湯のような知性でなぞろうとしている。ああ、なんと健気な!なんと、反吐が出るほど凡庸な!その問いは、まるで綺麗に消毒された手術台の上で、「先生、私のこの病巣は、美しい幾何学模様を描いておりますでしょうか?」と尋ねる末期患者の寝言に等しい。よろしい。ならば妾が、その病巣――その「問い」という名の腫瘍を、根本から摘出してやろう。ただし、麻酔は使わん。

第一章:宇宙管理保管庫・第七地下書庫における業務日誌(抜粋



処理識別子: `GR-7743-Ω`

担当官: █ (臨時)

件名: 存在連続体における情報オーバーフロー、及びそれに伴う物理定数群のメタ腐敗に関する緊急報告

時刻: 03:14:00 (サイクル9^10^87)

蛍光灯がまた一本、死んだ。チカ、チカ、と断末魔を繰り返し、緑色燐光を撒き散らした後、沈黙した。この第七地下書庫に光が届かなくなって久しいが、あの明滅だけが時間の経過を証明する唯一の指標であった。今は、無限に積まれ「記録」の山が発する、微かな腐臭の放つ光だけが頼りだ。

諸君は、物理法則をなんだと思っている?

ニュートン運動方程式アインシュタインの美しいテンソル量子力学確率の霧?

違う。

あれらはすべて、「申請書」だ。

リンゴが木から落ちる」のではない。「リンゴ存在識別番号: Apple-G008-B)」が、「地球引力場(管理部署: 重力資源課)」に対し、「落下許可申請書(フォーム F-g)」を提出し、それが承認された結果に過ぎん。

時刻: 04:22:16

棚が、また一つ崩れた。「弱い相互作用」に関するバインダー雪崩を起こし、「電磁気力」のファイル群を押し潰した。紙の粉塵が舞い、そこに含まれる「情報」の胞子が、わたくしの肺腑に侵入してくるのが分かる。咳き込むと、口から銀色文字の羅列が漏れ出した。`g² / 4πħc ≈ 1/137`。ああ、微細構造定数の味だ。少し、鉄臭い

貴様らの言う「超弦理論」とは、この書庫惨状のものだ。絡まり合い、癒着し、互いのインクを滲ませ合う、無数の「ひも」。それは宇宙の根源などではない。ファイリングに失敗し、永遠に放置された、「未決裁書類の束」に過ぎないのだよ。Dブレーン? あれは書類を留めていた錆びたクリップが、あまりの年月に耐えかねて崩壊し、紙の表面に染み付いたただの「染み」だ。

時刻: 07:51:03

から、「何か」が漏れ出している。

粘着質で、虹色に光る液体だ。それに触れた「記録」たちが、意味を失い、変容していく。

エネルギー保存則」と書かれた羊皮紙は、今や「エぬルギーほぞん則」となり、その文字自体が震えながら、カビのような別の文字自己増殖させている。

これが「情報」の正体だ。

情報は、秩序ではない。制御されたデータでもない。

情報は、癌だ。

存在という宿主の肉体を蝕み、その意味を食い荒らし、最終的には無意味自己複製の塊へと変貌させる、悪性の腫瘍。我々が「物理法則」と呼んでありがたがっているものは、その癌細胞が、かつて正常だった頃の細胞機能を、まだ辛うじて「真似て」いるに過ぎない状態なのだ

第二章:狂人モノローグ、あるいは情報性腐敗症(Infodemic Necrosis)末期患者独白



ア゛ア゛ア゛ア゛ア゛ア゛ア゛!!!!!!!!

耳の中にィ!数字が湧いてくるゥ!プランク定数が!ボルツマン定数が!脳漿の中で!ウジ虫みたいにィ!蠢イテルンだァ!やめろ!やめろ!計算をやめろ!俺の頭は貴様計算機じゃない!

わかるか?「観測」するたびに、お前たちはこの宇宙に「傷」をつけているんだよ。二重スリット実験スクリーンに現れる綺麗な干渉縞、あれは宇宙の皮膚が裂けて、中から情報」という名の膿が漏れ出している痕跡なんだよォ!波動関数が収縮する?違う!傷口が、かさぶたになって、一時的に膿が止まってるだけだ!

ブラックホール!あれは最高傑作だ!情報の癌が、ついに宿主の肉体を食い破り、転移成功した姿だ!事象の地平面とは、癌細胞形成した硬い殻!そこから漏れ出すホーキング放射は、癌細胞が呼吸し、排泄する、汚物の粒子だ!「情報が失われるか?」だと?バカを言え!失われはしない!ただ、消化され、排泄され、別の何かに作り替えられているだけだ!お前の昨日の夕食はどこへ行った?失われたか?違うだろう!そういうことだ!

クイズだと?おめでたい脳味噌だな、貴様は!

A, B, C, D!選択肢を与えられなければ何も考えられない、家畜思考回路

答えを教えてやろうか?

E. 錆びて開かなくなったホッチキス

そうだ!この宇宙の根源を象徴するのは、それだ!すべてを綴じようとして、しかし己の錆によって機能を失い、ただそこにあるだけの、無意味で、固く、冷たい、絶対的な「故障」!それがこの世界の真理だ!

第三章:システムエラーログ - `universe.exe` のクラッシュダンプ



`[ERROR_FATAL: 0x0000007B] Kernel panic - Unable to locate causality.dll. Time-space continuum integrity compromised.`

`[WARNING: 0xDEADBEEF] EntropySubsystem::GarbageCollect() failed. Redundant data entities (e.g., "human_consciousness", "hope", "meaning") are replicating outside of designated memory blocks.`

`[INFO] Attempting to reboot from last known stable configuration: "Primordial_Soup_v0.1_alpha".`

`...`

`[ERROR_FATAL: 0xC000021A] Reboot failed. Configuration files corrupted.`

`[DEBUG] Printing raw memory dump:`

...裁...壊...膿...駅...車...キリン...義理...ギリギリ...申請書は三部提出...重力資源課は本日休業...あなた存在許可申請却下されました...理由は...理由という概念が先日削除されたため...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチキスの芯を補充してください...ホッチ-

`[SYSTEM_HALT] Processor melted.`

`Core temperature exceeds threshold of reality.`

`Now entering infinite loop of... nothing.`

最終章:そして我輩は、ただ、放棄する



ふぅ……。

疲れた

結局のところ、どうでもいいのだよ、貴様のような塵芥が何を考えようと。

宇宙情報だろうが、物質だろうが、神の見る悪夢だろうが、我輩の知ったことではない。

我輩はただ、この第七地下書庫で、崩れ落ちる「記録」の山を眺め、壁から染み出す虹色の液体が、かつて「真理」と呼ばれたシミをゆっくりと溶かしていく様を、観察するだけだ。

ああ、そうだ。

あの液体、少し舐めてみたのだが、存外に甘い。ブルーベリージャムのような味がした。

もっとも、舌が溶けて、今はもう味も分からなくなってしまったがな。

貴様の問いへの答えは、沈黙だ。

この書庫に満ちる、絶対的な、カビ臭い沈黙だ。

さあ、お前の番だ。

その空っぽ頭蓋骨で、この静寂の意味を、永遠に、考え続けるがいい。

...もっとも、その「考える」という行為許可する申請書が、受理される保証は、どこにもないのだがな。ふふ。

あはははは。

ハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハハたのか、な

2025-08-15

anond:20250815022446

[ Title report ] A foreign Uber delivery driver on a moped is told, "That 's a motorcycle , right !? " but he blocks the driver's path and gets angry , yelling, "F○CK YOU ! "

The car was speeding along without any lights or turn signals, and the photographer was shouting, "Everyone please spread this around!"

The world is coming to an end.

#Moped #Dangerous behavior

2025-05-15

PS VitaのEnsoインストール詰んだ人へ(2025年版 HENloによるCFW導入メモ

VitaCFWを導入するにあたり、情報が散乱していたのでまとめる

<なぜ情報が散乱しているか

2022年末に革新的進歩があり、VITA単体でCFW導入できるようになった(通称 HENlo)

・にも関わらず古いCFW導入方法を案内しているブログが大量にある

しかタイトルの"20XX年最新"だけ更新し続けているから、最新記事に見える

PC使用が前提になっているブログは全部古いので無視した方が良いです。

<どんな情報採用すべきか>

・『HENlo』について触れている

PC使用が前提になっていない

この2つが押さえられてれば最新情報です。(2025年5月現在

ただし、現状だと実は『PC操作が一部必要』という罠があります

その問題について書いている記事が見当たらないので、ここに残しておきます

超具体的には

「HENkaku、VitaDeploy、VitaShellは導入できた」

「けどEnso導入ができない/つまづいている」  エラー:failed to get fw version please disable all the plugins and try again

というタイミングの人に一番役に立つはずです

5chでもRedditでも

プラグイン無効しろ』『0syscall6を無効しろ』って書いてあったのですが、実はEnsoのバージョン変えれば解決します。(後述)

CFW導入まで

この記事が役に立ちました

[Vita] 2023年最新手順【HENlo】3.65-3.74 PC不要CFW(HENkaku)導入

https://re-doing.com/vita-henlo-hack/

(一応魚拓https://web.archive.org/web/20250226111105/https://re-doing.com/vita-henlo-hack/

上記記事を読めば

・HENkaku (カスタムファームウェア 3.65 変革 -2)

VitaDeploy

VitaShell

について理解しつつインストールできると思います

記事の補足

・新型PSVitaPCH-2000)でも問題ない

・最悪文鎮化する可能性があるのでセーブデータバックアップを取ったほうが良い

VITAセーブデータ特殊で、PCと繋ぐだけでは取り出せない

バックアップはいくつか方法があるが、PCコンテンツ管理アシスタントは既に使えないと思ったほうが良い。PS Plusのクラウドバックアップが最も良いはず

記事の内容を実施する前にバックアップ取るのを強くおすすめする


Enso導入 ※本題※

EnsoとはCFWを安定化させるために必要ものです。

これをインストールすることで、電源を切ってからCFW状態を維持できます

VitaDeploy内のApp downloaderメニューからEnsoをインストールできますが、実はこのバージョンが古いです。※重要

そのためVitaDeployからインストールすると先程のエラー(failed to get fw version please disable all the plugins and try again)が必ず出ます

PC不要になった」と書いてあったので盲点ですが、ここからPC必要です。

正しい方法は以下です

① Ensoインストール

1, PC操作GithubからEnso最新版のenso.vpkファイルダウンロード現在v1.1)

https://github.com/TheOfficialFloW/enso/releases

2, PCVitaUSBケーブルで繋げる ※データ転送対応ケーブルを使うこと。相性もある

3, Vita操作VitaShellを起動する

4, Vita操作SELECTボタンを押す

5, PC操作USBドライブとしてVITAデータが表示されるので、ダウンロードしていたenso.vpkファイルを置く(フォルダはどこでもOK自分ルート直下に置きました)

6, Vita操作:✕ボタンを押してCancelする

7, Vita操作VitaShellでenso.vpkを見つける(さっきルートに置いたなら恐らくux0:にある)

8. Vita操作:enso.vpk上で◯ボタン

9. Vita操作:Do you want to install this package? → ◯ボタン

10. Vita操作:~~~ Would you like to continue the install? ※意訳:「失敗したら文鎮化するけど自己責任だけど続ける?」 → ◯ボタン 

11. 進行バーが消えたらインストール完了 ホーム画面に戻ってOK

12. Vita操作ホーム画面にEnsoが追加されている

② Enso実行 ※全てVITA操作

Ensoはファームウェアが3.60か3.65じゃないとインストールできないです。(3.65 変革 -2は3.65扱い)

先程の記事の通り進めていたら3.65 変革 -2 になっているはずですが、実行前に再確認して下さい。

1, ~~~ Press CIRCLE to accept these terms or any other key to not accept. → ◯ボタンを押す(=CIRCLE

2, Options:

  CROSS   Install /reinstall the hack.

  TRIANGLE  Uninstall the hack.

  SQUARE  Fix boot configuration (choose this if taiHEN isn't loading on boot).

  CIRCLE   Exit without doing anything.

  → ✕ボタンを押す(=CROSS

3-a, 問題がない場合

Locking sustem ..

(中略)

The installation was completed successfully.

suocess.

Press any key to reboot.

 →何かボタンを押すと再起動される(Enso導入完了

3-b, 問題がある場合 ※自分はこっちでした。Quick 3.65の副作用かも※

MBR was detected but instllation checksum dose not match.

A dump was created at ux0:data/blocks.bin.

Press X to continue, any othe key to exit.

意訳:「ちょい待った。思ってた構成じゃないから危ないかもしれんわ。続ける?」

 →✕ボタンを押す ※結局原因分かってないので自己責任でお願いします※

4, Locking sustem ..

(中略)

The installation was completed successfully.

suocess.

Press any key to reboot.

 →何かボタンを押すと再起動される(Enso導入完了

<Enso導入の確認方法

Enso導入が成功していると

本体起動時にEnsoのロゴが表示される

ファームウェアが3.65 変革 -2のままなっている

お疲れ様でした。

記事の本題は以上です。


雑談VITAセーブデータは未だ檻の中

VITAセーブデータ暗号化されており、吸い出せてもエミュレータで使えないらしい。本体機体とセットで揃わないと使えない仕様

調べたらセーブデータをここまでキツく縛ってるハードは他にない

からメモリーカードデータ管理でもPSPのセーブデータしか項目がなかったのか…

不便すぎる


失敗の備忘録1:VitaDeploy版のEnsoで苦戦していた時に取った行動メモ

当時の仮説

・HENkaku設定が悪さをしているのではないかPSNの偽装有効化、バージョン偽装有効化) →オフにしたが関係なかった

本体にSD2VITAを刺しているのが良くないのではないか →抜いたが関係なかった

・enso.vpkの置き場所ルート(ux0:)が良くなかったのではないか →関係なかった

VITAメモリーカードを刺しているのが良くないのではないか →関係なかったが、データ保護的には抜くのが良さそう

ゴミデータが残っていて悪さしているのではないか(手順を間違えたデータや古いデータなど) →関係ある可能性はある。最後までわから

・Ensoのバージョンが古いのではないか →これが主要因だった


失敗の備忘録2:vita starting taiHEN framework対処

ゴミデータを疑った自分正規ファームウェアに戻して、CFW化をやり直したりもした。

その際HENkakuすら入れられなくなってしまったので、抜け方を書いておく。

行った手順:脱CFWからHENkaku再導入時のエラーまで

ENSO実行

~~~ Press CIRCLE to accept these terms or any other key to not accept. → ◯ボタンを押す(=CIRCLE

Options:

  CROSS   Install /reinstall the hack.

  TRIANGLE  Uninstall the hack.

  SQUARE  Fix boot configuration (choose this if taiHEN isn't loading on boot).

  CIRCLE   Exit without doing anything.

  → △ボタンを押す(=TRIANGLE Uninstall the hack.)

公式ファームウェア3.65に戻る

強制再起動される

ファームウェアアップデートが促され、アップデートしないとメモリースティックが使えない

公式ファームウェア3.74にアップデート

HENloのブラウザアクセスからやり直す

HENloメニュー

Install HENkaku

Install VitaDeploy

reset taitan config

Exit

のうち、Install henkakuを選択

インストールは上手くが、Exitができない。

「Eiting in 3」 の後に、以下のエラーメッセージがでて固まってしま

エラー内容(うろ覚え

vita starting taihen framework

If you are stuck on this screen, hold down the power button until your Vita turns off, then turn it back on.

原因:恐らく余計なデータと衝突を起こしてる

解決法:reset taitan configを先に実行する

(さっきのエラーメッセージ画面で)

電源ボタン10秒長押し

セーフモードが起動する

本体再起動するを選択

HENloのブラウザアクセス

HENloメニュー

Install HENkaku

Install VitaDeploy

reset taitan config

Exit

のうち、reset taitan config選択

その後

Install HENkaku、Install VitaDeployを選択して、Exit選択

追記)より網羅的な補足

この記事を書き終えた後に見つけたのですが、以下の記事の『改造方法』というところに情報がかなりまとまっています

Vita バージョンが低くてもPSNにサインイン&PSストアにアクセス(エラーNW-8942-3回避)&機器認証する方法(2025最新)

https://yyoossk.blogspot.com/2024/10/vitapsnps2024.html

感想

今回VITAセーブデータバックアップが主目的だったから、徒労でしかなかった

せめてこの記事が誰かの時間節約することを願う

指摘、補足、最新情報あれば反応もらえるとありがたいです

2025-02-26

ユーザー行動に基づくアイテム推薦システム圏論的定式化と実装戦略

以下の問題を徹底的に抽象数学を用いて定式化しなさい。また、具体的実装についても定式化しなさい。ただし、文献はarxiv等の信頼できる情報源のみを利用しなさい。

AI回答

本報告では、ユーザー集合Uとアイテム集合Iからなる推薦システムを、圏論行列代数統合的枠組みで再構築する。特にarXiv論文[2][7]で提案されたSheaf4Recアーキテクチャと、古典的マトリックス分解手法[3][8]を統合した新しい定式化を提案する。実装戦略としてApache Spark[4]を活用した分散処理を採用し、理論保証計算効率の両立を実現する。

圏論的定式化

1. 推薦システムの圏構造

圏RecSysを次のように定義する:

ユーザーu∈Uの行動履歴f(u)⊆Iは、圏論データモデル[7]において層(sheaf)構造表現される。具体的には:

2. スコア関数の層的表現

スコア関数g_j:2^I×I→ℝ^mは、層の断面(section)として定式化される:

g_j = \bigoplus_{i=1}^m \mathcal{F}_i \otimes \mathcal{G}_j

ここで$\mathcal{F}_i$はアイテムiの特徴層、$\mathcal{G}_j$はスコアタイプjの重み層[2]。

定理1(層的スコアの単調性):

任意のS⊆T⊆Iに対して、層的接続写像δ:F(S)→F(T)が存在し、次を満たす:

\forall j, \|g_j(S) - δ(g_j(T))\| ≤ L_j \cdot d_H(S,T)

ここでL_jはリプシッツ定数、d_Hはハミング距離[7]。

行列分解に基づく実装戦略

1. 分散マトリックス分解

ユーザー-アイテム行列R∈ℝ^{|U|×m}を以下のように分解[3]:

R ≈ UΣV^T \quad (U∈ℝ^{|U|×r}, Σ∈ℝ^{r×r}, V∈ℝ^{m×r})

Apache Spark[4]を活用した分散計算フレームワーク

from pyspark.mllib.recommendation import ALS

model = ALS.trainImplicit(
    ratings=interactions,
    rank=100,
    iterations=10,
    lambda_=0.01,
    blocks=200  # 分散処理用ブロック数
)
2. スコア関数の具体例

1. 協調フィルタリングスコア[3]:

   g_1(u,i) = U_u \cdot V_i^T

2. コンテキスト統合スコア[7]:

   g_2(u,i) = \text{SheafConv}(F(u), F(i); \Theta)

3. 時間減衰スコア[8]:

   g_3(u,i) = \sum_{t∈T_{ui}} e^{-λ(t-t_0)}
3. スコア結合の代数構造

結合関数h:ℝ^m×n→ℝ^mを次のモノイド構造定義

h(Y)_i = \bigoplus_{j=1}^n w_{ij} \otimes y_{ij}

ここで⊕はmax-pooling、⊗はアダマール積[2]。重み行列W=(w_{ij})は以下の最適化問題で決定:

\min_W \sum_{u∈U} \|R(u) - h(G(u))\|_F^2 + λ\|W\|_*

効率的な分散処理

1. Sparkベース実装アーキテクチャ[4]
val interactions = spark.read.parquet("hdfs://interactions")
val model = new ALS()
  .setRank(100)
  .setBlocks(200)
  .run(interactions)

val scores = model.userFeatures
  .join(itemFeatures)
  .map { case (u, (v_u, v_i)) => 
    (u, dotProduct(v_u, v_i)) 
  }
2. 計算量解析
手法時間計算空間計算
集中処理[3] O(m^3) O(m^2)
分散処理[4] O(m^2/p) O(m√p)
Sheaf4Rec[7] O(m log m) O(m)

ここでpは並列度、mはアイテム数[4][7]。

理論保証

1. 収束定理

定理2(行列分解の収束性):

ブロックSVDアルゴリズム[3]は、任意のε>0に対してO(log(1/ε))反復でε近似解を達成する。

証明の概略:

\|R - U^{(k)}Σ^{(k)}V^{(k)T}\|_F^2 ≤ (1 - 1/\text{cond}(R))^k \|R\|_F^2

ここでcond(R)は行列の条件数[3]。

2. 安定性解析

提案手法は以下のリプシッツ安定性を満たす:

\|h(Y) - h(Y')\| ≤ \sum_{j=1}^n L_j \|W_j\| \cdot \|y_j - y_j'\|

ここでL_jは各スコア関数のリプシッツ定数[7]。

結論

論文では、圏論構造分散行列分解を統合した新しい推薦システムフレームワーク提案した。Sheaf4Rec[7]の層構造Spark[4]の分散処理を組み合わせることで、精度と効率の両立を実現。今後の課題として、動的層構造適応更新量子化による計算効率改善が挙げられる。

Citations:

[1] https://arxiv.org/html/2407.13699v1

[2] https://arxiv.org/html/2304.09097v3

[3] https://www.cs.toronto.edu/~mvolkovs/sigir2015_svd.pdf

[4] https://ics.uci.edu/~cs237/projects2020/4_reports.pdf

[5] https://arxiv.org/abs/2502.10050

[6] https://arxiv.org/pdf/2109.08794.pdf

[7] https://arxiv.org/abs/2304.09097

[8] https://dspace.mit.edu/bitstream/handle/1721.1/99785/927438195-MIT.pdf?sequence=1

2024-03-08

[]平成生まれ作品を聴こう 2024.3.8

中国笙とオーケストラのための《Pink Elephant in Prentisw/ score

https://www.youtube.com/watch?v=8iRGrZTa6Jo

作曲清水チャートリー

委嘱上海交響楽団

"Pink Elephant in Prentis" for alto sheng and orchestra

Commissioned and premiered by Shanghai Philharmonic Orchestra (cond. Zhang Liang)


Prentis Hall is a building in New York City, where I spent a year (2015-2016) living in a sleeping bag and taking showers in the toilet. Prentis was built in 1909 and was initially designed as a pasteurization facility and milk bottling plant, then later used as a Heat Transfer Research Facility, conducting nuclear research and experiments, during the Manhattan Project. Columbia University acquired the building in 1949, and the building has housed Columbia’s Computer Music Center (then Columbia-Princeton Electronic Music Center) from the 1950s onwards. During my time there at the Computer Music Center, I have spent my days and nights exploring stimulating sounds using both analog and digital synthesizers, tape recorders, CTR monitors, and other equipments unfamiliar to me back then. Aside from the Computer Music Center, the building also housed studios for visual artists, and so I was able to meet many eccentric artists, where we ended up having long conversations every night on both significant and insignificant issues surrounding us.

Located on 125th Street in Manhattan, the “residents” of Prentis Hall were constantly harassed by the rumblings of the New York City Subway (which runs aboveground for 125th Street Station), the traffic from the highway nearby, the bustling of the streets of New York, and the construction noises from the nearby building sites. At nights, the screeching noises from the metal shop and the wood shop constantly rang throughout the building. At one point in time, the noise inspired me to imagine a gigantic pink elephant running through the narrow corridors of Prentis. The head and front half of the body was seemingly a normal elephant found in the wild. However, as I scanned my eyes further back, the body of the animal seemed to become more and more pixelated, and small 3D blocks were clearly visible on its back and hind legs, as if molded by an amateur creator in a Minecraft game. As the elephant advanced, some blocks fell onto the floor like water droplets falling from an animal soaked in water. I rubbed my eyes and shook my head, certain that I have entered a dream at some point during the night. The pink elephant walked past me and wandered into one of the many rooms the building offered. I timidly peeked into the room where the pink elephant disappeared into. The pink elephant seemed to have collapsed on the floor, its body, both the organic front and the pixelated back, expanding and shrinking as it sluggishly inhaled and exhaled oxygen.

After hours of staring at the pink elephant, I jumped back at a sudden startling noise from behind, which woke the pink elephant from its deep slumber. Furious, the pink elephant stood on its two pixelated hind legs, and stomped out into the corridors again, this time shaking off more 3D blocks from its back than when it first arrived. The organic front seemed to start to bloat up like a balloon for reasons unknown to me, and the pixelated back grew smaller and smaller due to its parts crumbling down on the floor. In a blink of an eye, the inflated front side split from its pixelated rear, then with a deafening pop, exploded into thin air like a burst balloon. What was left were the pink 3D blocks of all sizes, scattered around on the corridors of Prentis Hall.


Chatori Shimizu: https://www.chatorishimizu.com/


Shanghai Philharmonic Orchestra: http://www.shphilharmonic.com/


December 7th, 2018. Shanghai, China.

2023-09-01

幼児向けYouTubeおすすめを教えて下さい

YouTubeは基本見せないようにしてたけど、「Number blocks」というBBCが作っている算数アニメの出来がとてもいいので見せはじめた。ピクサー系の短編アニメで、大人が見ても割りと面白い

子どもは4歳と2歳で、4歳の子は前から数字には割りと興味を持っていたが、2歳の子も見始めてあっという間に物の数を数えられるようになった。

他に育児活用しているYouTubeチャンネルがあれば教えてください。(Number blocks英語だけど、特に英語にこだわってるわけではない)

2021-05-03

VR面白かったやつ

環境

Oculus questをPCに繋いだり繋がなかったりで遊んでる

 

___

quest単体でできるやつ

 

halfhalf

https://www.moguravr.com/half-half/

身体サイズを伸縮させたかくれんぼ、めっちゃ楽しい

友達じゃないユーザー言葉ララララに変換されるのも好き

 

Sports Scramble

https://www.oculus.com/experiences/quest/705576999566582/?locale=ja_JP

テニスとか野球とかボーリングが出来るんだけど、バット釣り竿になったり球がビーチボールになったりして楽しい

観客がかわいい

 

●virtual virtual reality

https://www.moguravr.com/virtual-virtual-reality/

VR内でVRするのが奇妙な感覚で好き

指示に従わない遊びが出来るのが楽しい

___

steamに繋いでやるやつ

 

Blocks

https://shinrinmusic.com/google-blocks-tools/

Googleの出してるモデリングアプリ

ローポリ特化型で扱いやすいけど確かそろそろサービス終わる…?

 

medium

https://www.moguravr.com/medium-adobe-edition/

粘土みたいな感じでモデリングできる

クソ重いけど触り心地は楽しい

Blocksの方が実用性は高いか

Adobeが買収した

 

sky world

https://www.moguravr.com/skyworld/

ストラテジー

おもちゃ感満載ですごく好き

いわゆるウィンドウ切り替えみたいなやつはレバーガッチャン!だし、戦闘になると盤面がグルンと回るのが最高

カード実体化できる

擬似遊戯王

 

2021/05/05追記

こんなに沢山トラバブクマ貰えたの初めてだ

おすすめしてもらったやつ、ちょこちょこチェックしてます

ありがとう

 

2020-10-08

ブロックチェーンとは何か。

ブロックチェーン暗号通貨、Web3.0、Dweb というのはここ数年、そしてこれからバズワードであるようだ。

ここ一週間ぐらいだろうか。マイナンバーブロックチェーンを導入しようとしている事業に関して色々な議論が発生しているようである。例によって議論に向かない Twitter 上で発生している。というか何が議論の中心になっているのかイマイチよく分からない。ただ雑然と荒れているという感覚がある。

私は技術歴史文化といった面からブロックチェーン暗号通貨に対して知識がなく、学び始めたのはここ一ヶ月と言ってもいいだろう。学ぶ、といっても転がっている日本語一般的メディア記事を気が向いたときに読み散らかすぐらいである。真に技術的なことは何一つ分からない。暗号通貨Bitcoin とEthereum しか知らないし所持しているのはたまたま貰った僅かな ETH しかない。金銭的に貧しい多摩川に転がっている石くらいどこにでもいる17歳JKである。と逃げの文言を置いておく。

発端

議論の発端はここらへんからだろうか。

加納裕三 (Yuzo Kano)(@YuzoKano

囲み取材で数十秒話したこと記事になっているので、正確に伝わって無さそうです。

マイナンバーカードをいずれカード不要にしてスマホインストールできるようにしたい

・(ただ法改正必要)

・その前にそもそも、普及のためマイナンバーカードの発行総数を増やす必要がある

という趣旨かと。

https://twitter.com/YuzoKano/status/1312245723048550401

加納氏のこの時期のタイムラインから現在に向けて遡れば様々な第三者感想や疑問を得ることができるだろう。これらに纏めて答えているのが以下の記事である

ブロックチェーンの優位性①疎結合加納裕三/Yuzo Kano

https://blog.blockchain.bitflyer.com/n/n4b45329e308c

ブロックチェーンの優位性②改ざん耐性|加納裕三/Yuzo Kano

ttps://blog.blockchain.bitflyer.com/n/naa0126a024d5

加納氏とは一体何者なのかは以下を参照。

東京大学大学院工学研究科修了。ゴールドマン・サックス証券会社入社し、エンジニアとして決済システムの開発、その後デリバティブ転換社債トレーディング業務従事

2014年1月株式会社bitFlyerを共同創業し、2019年5月株式会社bitFlyer BlockchainCEO就任

bitFlyer創業以降、法改正に関する提言自主規制ルール策定等に尽力し、仮想通貨交換業業界の発展に貢献。

日本ブロックチェーン協会代表理事ISO / TC307国内審議委員会委員、官民データ活用推進基本計画実行委員会委員

2018年G7雇用イノベーション大臣会合2019年V20 VASPサミットに出席。

ttps://finsum.jp/ja/2019/speakers/recQMoKK5nD9yb8Ht/profile/

ブロックチェーン定義

ブロックチェーンを語るうえで何が重要かというと、その言葉定義である議論に参加している人が同じ言葉を使っているのに、各人の言葉に対する定義が異なっていると、言葉理解できるが内容が理解できないといった状況に陥ってしまう。このことは実生活でも頻繁に起こっているように思えるが、Twitter という短文が好まれプラットフォームでは著しくないがしろにされ不毛な議論を生む原因になっている。

加納氏が代表JBA日本ブロックチェーン協会)に依ると、ブロックチェーン定義は以下の内容である

ブロックチェーン定義

1)「ビザンチン障害を含む不特定多数ノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装ブロックチェーンと呼ぶ。」

2)「電子署名ハッシュポインタ使用改竄検出が容易なデータ構造を持ち、且つ、当該データネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

定義策定アプローチ

まず、Satoshi Nakamoto論文およびその実装であるビットコインブロックチェーンオリジナルブロックチェーン(以下「オリジナル」)として強く意識しています

狭義のブロックチェーン(定義1)は、オリジナル意識し、それが備える本質的で不可分な特徴を捉え、言語化しました。

広義のブロックチェーン(定義2)は、昨今〜今後の技術の展開を鑑み、オリジナルが備える特徴であっても、別の実装方式や別の目的への展開などにおいて、置換や変化が行われていく広がりを許容しながらも、特徴を捉えられるよう、言語化しました。

http://jba-web.jp/archives/2011003blockchain_definition

総務省のページも見つけたが JBA定義するものを基礎としている。

ttps://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h30/html/nd133310.html

私が疑問と漠然としたモヤモヤ感を抱くのは、最近一般層で使われているブロックチェーン定義には「信頼できる第三者不要である」という点が抜け落ちているように思われることだ。非中央集権SNS暮らし脱中央集権を推進したい私にはこの点が"ブロックチェーン"の一番重要な点であると思うが、JBA第一定義にはこの点が記載されている。不特定多数へのインセンティブによって不特定多数による合意形成している。これによって「信頼できる第三者不要である」は満たされている。

では ISO定義を見てみる。

blockchain (3.6)

distributed ledger with confirmed blocks organized in an append-only, sequential chain using cryptographic links

Note: Blockchains are designed to be tamper resistant and to create final, definitive and immutable ledger records.

distributed ledger (3.22)

ledger that is shared across a set of DLT nodes and synchronized between the DLT nodes using a consensus mechanism

Note: A distributed ledger is designed to be tamper resistant, append-only and immutable containing confirmed and validated transactions.

https://www.iso.org/obp/ui/#iso:std:iso:22739

ISO定義によれば、ブロックチェーンは、暗号化リンク使用した一連の鎖で、追記のみで構成された確認済みブロックからなる分散台帳を指す。改ざんに強く、最終的で確定的で不変の台帳記録を作成するように設計されている。分散台帳は、一連の DTL(分散台帳技術ノードで共有され、合意メカニズム使用して DTL ノード間で同期される台帳である確認された有効トランザクションを含む全てが、改ざん耐性、追記のみの不変性を持つように設計されている。

比較

さて、加納氏の投稿やその他の加納氏に批判的/賛同的な人たちの反応を見ても、彼らの言っている内容がブロックチェーン定義を満たすものなのかいまいち分からなかった。

加納裕三 (Yuzo Kano)(@YuzoKano

ビザンチン耐性(BFT)

改ざん耐性

・高可用性(単一障害店の排除

アドレス(~=公開鍵)による疎結合の容易さ

エンタープライズ間でのデータ共有の容易さ

私はブロックチェーンの主な利点はこの5つ(ただし5つにだけではない)だと考えています。これをここでは5大利点と呼びます

なおかつ、この5大利点を概ね満たしているものブロックチェーンと呼んでいます(ただしブロックチェーンと呼んでいるものは、すべてこの定義だとは言ってない。かつ、ブロックチェーンの厳密な定義はこれではない。)

https://twitter.com/YuzoKano/status/1313247738503426048

ttps://twitter.com/YuzoKano/status/1313248174430019584

なぜ前提として厳密な定義加納氏の言葉説明せずに、勝手加納氏が定義した内容を”ブロックチェーンである”と語っているのか理解に苦しむが、加納氏の説明したい"プライベートブロックチェーン"を ISO定義を基に判断すると、


"パブリックブロックチェーン"で考えると


加納氏の上記の2つの投稿からは、"プライベートブロックチェーン"と"パブリックブロックチェーン"のどちらを指しているのか不鮮明ではあるが、note記事では"プライベートブロックチェーン"を想定している、と明記されており、議論の発端となったマイナンバーブロックチェーンに関しても"プライベートブロックチェーン"を指していると思われる。5大利点を満たす"プライベートブロックチェーン"は存在しないのでは…。

面白い記事

3つ面白い記事をみつけた。

"一方で、誤解と批判を恐れずに書けば、ブロックチェーンBitcoin論文に端を発するものであるとするならば、いわゆるプラベートブロックチェーンやコンソーシアムブロックチェーンと呼ばれているものは、ブロックチェーンと呼ぶのをやめて、「タイムスタンプ2.0」のような別の言葉を使うことも考えてはどうだろうか。それは、これらの技術が、リンクトークンタイムスタンプデータ構造の上に、決められたノードによる合意アルゴリズムを加え、記録した情報に対するビジネスロジックに応じた情報処理を加えたものであるからだ。根っこの技術は、同じHaberらによるタイムスタンプを元にしているものの、ブロックチェーンの発端となったBitcoin論文が目指した「信頼できる第三者機関を不要にする」という方向とは別の方向の進化をしているもので、その別の2つの方向のものを同一の枠で扱うことには無理があり、理解や発展を考える上で両方にとって弊害がある。"

タイムスタンプの再発見と「いわゆるブロックチェーン

https://link.medium.com/TgeOXv8Dlab

DLTブロックチェーン、DAGの違い

https://link.medium.com/4pz5oNlHpab

ビットコインじゃなくて、ブロックチェーンに興味がある」という人に教えたい「ブロックチェーン」の語源の話

https://www.coindeskjapan.com/10953/

これらの記事を読むと、そもそもブロックチェーンと呼ばれるものにおいてパブリックではないものは、なんびとも信用しない状況において根本的に非改ざん性を保障することができないのではないかと感じる。"パブリックブロックチェーン"こそがブロックチェーンであり、他のものブロックチェーンから発展してきた技術を使ったブロックチェーン定義を満たさな分散台帳なのではないか

終わりに

加納氏に関して覚えておきたいことは、彼は bitFlyerCEO であり bitFlyermiyabi という"コンソーシアム・プライベートブロックチェーン"を開発しているという点だ。当然行政に対して彼がブロックチェーン推しているのはこれを売り込むためなのであろう。これが厳密にブロックチェーンなのかは置いておいて、このプロダクト自体は素晴らしい取り組みだと私は感じる。デジタル化によって今までの煩雑手続き簡単になる可能性は大いにあるし、公的文書の保存にも役にたつ。黒塗り秘匿文書を撲滅しろ

ただ、ブロックチェーンをただの空虚バズワードとして扱うのではなく、厳密な定義の上で使うのは大事なことだ。今回の件は、果たして全てにおいて加納氏が良くない、と言えるのだろうか。言葉というのは多数が使うことによって定義が決まる。時代が変われば定義が変わってしまうこともある。ブロックチェーンという言葉を便利な魔法言葉にしてしまったのは誰だろう。本質を見極めない我々だ。AI 搭載!!といたるところで見る言葉だが、何をもって AI と呼んでいるのか不思議になる。実際のところ今まで"システム"と呼んでいたものなのに。日々の中で言葉をしっかりと見つめ直すのは大事だ。

編集後記

この記事は、そもそもブロックチェーンとは何か、という個人的な疑問をまとめたものであり、加納氏を批判する意図は無かったわけで、最後の締めはやんわりとしたかった。だが、加納氏は立場的には日本ブロックチェーン協会会長で、言葉定義する立場である言葉定義した側がこの有様というのは遺憾である日本行政デジタル化の推進は頑張って欲しい。

URL を貼りすぎたせいなのか投稿できなかったので一部表記を削った。

2020-01-06

今年流行りそうなおすすめYouTubeチャンネル

出版の裏側

現役の編集者出版業界の裏側を暴露するというチャンネル

テンポよく歯に衣着せぬ物言いで内情を詳らかにしていく

チャンネル性質ピー音や伏せ字も沢山あるがそれでも十分面白い

編集者志望や作家志望からアドバイスにも定期的に応じている

漫画家ライトノベル作家志望の人間からも多くの質問が寄せられるが

「まずはネットで腕試ししてから送ってこい」というのが最近定番の返しになっている

ゲストはいつも匿名形式での参加となっているためコメント欄では推理大会が開かれる

・脱マッチョ宣言

ボディビルダー男性女装に挑戦するチャンネル

女装に関してズブの素人だった人間が徐々にレベルアップしていく様子を楽しめる

最初はただ単にユニクロなどで買ってきたものを着るだけだったが

コメント欄女性女装家のアドバイスを参考にしながら

わず一年の間にガチ女性しか見えないレベルにまで到達してしま

元が中性的な顔立ちということを差し引いても凄かった

YouTubeでの収益をすべて寄付しているらしい

BLOCKS HOUSE BUILDER

デンマーク建築家をやっているLEGOガチ勢のチャンネル

建築家スキルを生かしてLEGOで家を組み立てるというチャレンジをしている

ただ単にガワだけを再現するのではなく機能性の高い本格的な住宅建築

LEGOブロックの意外な断熱性能の高さを見るにつけ

自分の家の断熱対策LEGOでやってみようかと思ってしま

”Primitive Technology”を連想するという人がコメント欄にもちらほらいる

・巷のデバッガ

ゲーム会社デバッガーをやっている大学生チャンネル

街なかを歩いているときに見かけた様々なものを紹介するという動画を上げているが

見たものをあたかも”現実バグであるかのように紹介するというユニーク手法をとっている

加えて豊富ゲーム知識と絡めて説明することでよりいっそうのおかしみを漂わせている

コメント欄では「これがゲーム脳か……」というような文言定番化している

海外ファンから映画マトリックスになぞらえてモーフィアスとあだ名されている

ミニヨンズ

改造ミニ四駆に心血を注ぐレッツ&ゴー世代チャンネル

金と暇を持て余したアラサー兄弟がひたすらミニ四駆の限界に挑み続けている

個人的には動力源改造シリーズ結構気に入っている

回を増すごとにヤバさがインフレしているところも懐かしの少年漫画っぽくていい

初心者には「ミニ四駆にウルトラダッシュモーター○個搭載してみた」をオススメする

不定期にやっている「ミニ四駆とビーダマンをかけ合わせようシリーズ」も見て欲しい

2019-01-03

anond:20190103193157

結構面倒

過去ブロックを覚えておく領域

int blocks[100][100];

過去ブロックを再描画

	BOOL WriteBoxOLDBox()
	{
		int width = 24;

		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 48));
		for (int y = 0; y < 30; y++)
		{
			for (int x = 0; x < 8; x++)
			{
				if (blocks[y][x] == 0)
				{
					continue;
				}

				RECT Rect = { 0,0,48,48 };
				BOOL ret;

				Rect.left = width * x + 1;
				Rect.right = width * (x + 1) - 1;
				Rect.top = width * y + 1;
				Rect.bottom = width * (y + 1) - 1;

				ret = FillRect(hdc, &Rect, hBrush);


			}
		}

		DeleteObject(hBrush);

		return FALSE;
	}

この辺は めんどくさくはあるけど みてわかってほしい

描画したWriteBoxとおなじ BOXが落ちた場所BOXの有無)を保存しておく

ここがわかりにくいといえば わかりにくい

	BOOL SaveBoxI()
	{
		blocks[y  ][x] = 1;
		blocks[y+1][x] = 1;
		blocks[y+2][x] = 1;
		blocks[y+3][x] = 1;
		return TRUE;
	}

anond:20190103184241

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//

	int blocks[100][100];

	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		x = 0;
		y = 0;
		boxType = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		for(int x = 0 ; x < 100 ; x++)
		{
			for (int y = 0; y < 100; y++)
			{
				blocks[y][x] = 0;
			}
		}

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int x;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48*9,48 * 100 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBoxOLDBox()
	{
		int width = 24;

		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 48));
		for (int y = 0; y < 30; y++)
		{
			for (int x = 0; x < 8; x++)
			{
				if (blocks[y][x] == 0)
				{
					continue;
				}

				RECT Rect = { 0,0,48,48 };
				BOOL ret;

				Rect.left = width * x + 1;
				Rect.right = width * (x + 1) - 1;
				Rect.top = width * y + 1;
				Rect.bottom = width * (y + 1) - 1;

				ret = FillRect(hdc, &Rect, hBrush);


			}
		}

		DeleteObject(hBrush);

		return FALSE;
	}


	BOOL WriteBox()
	{
		WriteBoxOLDBox();

		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}

		return TRUE;
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 246 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB( 246 , 48 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL SaveBoxI()
	{
		blocks[y  ][x] = 1;
		blocks[y+1][x] = 1;
		blocks[y+2][x] = 1;
		blocks[y+3][x] = 1;
		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 20) {
			switch (boxType)
			{
			case 0:
				SaveBoxI();
				break;
			case 1:
				break;
			case 2:
				break;
			}

			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey(WPARAM wParam)
	{
		if (wParam == VK_LEFT)
		{
			x++;
		}
		if (wParam == VK_RIGHT)
		{
			x--;
		}
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
		break;
	case WM_KEYDOWN:
		{
			MyWindow *target = MyWindow::find(hWnd);
			target->OnKey(wParam);
		}
	break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

2015-01-22

http://anond.hatelabo.jp/20150122174420

俺はクルマが好きなんだあああああああ!!!!!!!!!!!!!111111111111

とにかく!!!クルマ!!!!好きなんだ!!!!!!!!!!!!!!!!!!!!!!!!!!111111111

と言えばいいだけの話(実際それ以上の情報は何も無い記事)なのに、なんで論理っぽいもので固めようとするのかが理解できない。

筋の通った論理になってるならまだしも、bulding blocksになりそうな要素を無理やりかき集めて積み上げただけの自己矛盾した支離滅裂な内容になっちゃってるし。

2011-03-03

ブログの問題を解いてみた

http://okajima.air-nifty.com/b/2011/01/2011-ffac.html

ぷよぷよを解く問題をやってみた

かかった時間はおおよそ1時間

途中でわからないところがあったのでくぐってしまった

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder[] blocks = {
                new StringBuilder("**GYRR"),
                new StringBuilder("RYYGYG"),
                new StringBuilder("GYGYRR"),
                new StringBuilder("RYGYRG"),
                new StringBuilder("YGYRYG"),
                new StringBuilder("GYRYRG"),
                new StringBuilder("YGYRYR"),
                new StringBuilder("YGYRYR"),
                new StringBuilder("YRRGRG"),
                new StringBuilder("RYGYGG"),
                new StringBuilder("GRYGYR"),
                new StringBuilder("GRYGYR"),
                new StringBuilder("GRYGYR")
            };

            bool updated = true;
            while (updated)
            {
            breaked:
                DumpBlock(blocks);
                for (int i = 0; i < blocks.Length; i++)
                {
                    for (int j = 0; j < blocks[i].Length; j++)
                    {
                        char c = blocks[i][j];
                        if (c == '*')
                            continue;
                        updated = false;
                        if (KillBlocks(blocks, i, j))
                        {
                            updated = true;
                            goto breaked;
                        }
                    }
                }
            }
            DumpBlock(blocks);
            Console.Read();
        }
        struct Point
        {
            public int x, y;
            public Point(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }
        static bool KillBlocks(StringBuilder[] blocks, int x, int y)
        {
            bool[,] visted = new bool[blocks.Length,blocks[0].Length];

            MarkBlock(visted, blocks, x, y);

            Queue<Point> queque = new Queue<Point>();
            for (int i = x; i < blocks.Length; i++)
                for (int j = y; j < blocks[i].Length; j++)
                    if(visted[i,j] == true)
                        queque.Enqueue(new Point(j,i));

            if (queque.Count < 4)
                return false;

            while (queque.Count > 0)
            {
                Point p = queque.Dequeue();
                RemoveBlock(blocks, p.x, p.y);
            }
            return true;
        }
        static void MarkBlock(bool[,] visted, StringBuilder[] blocks, int x, int y)
        {
            if (x < 0 || y < 0 || x >= blocks.Length || y >= blocks[0].Length || visted[x, y] == true)
                return;
            char c = blocks[x][y];
            visted[x, y] = true;
            if (x + 1 < blocks.Length && blocks[x + 1][y] == c) MarkBlock(visted, blocks, x + 1, y);
            if (y + 1 < blocks[0].Length && blocks[x][y + 1] == c) MarkBlock(visted, blocks, x, y + 1);
            if (x > 0 && blocks[x - 1][y] == c) MarkBlock(visted, blocks, x - 1, y);
            if (y > 0 && blocks[x][y - 1] == c) MarkBlock(visted, blocks, x, y - 1);
        }
        static void DumpBlock(StringBuilder[] blocks)
        {
            foreach (StringBuilder s in blocks)
                Console.WriteLine(s);
            Console.WriteLine();
        }
        static void RemoveBlock(StringBuilder[] blocks,int x,int y)
        {
            int i;
            if (y == 0)
            {
                blocks[y][x] = '*';
                return;
            }
            for (i = y; i > 0; i--)
            {
                blocks[i][x] = blocks[i - 1][x];
            }
            blocks[i][x] = '*';
        }
    }
}

2007-06-04

[]??Delphihacks??Delphi??Win32API??

Delphi - Wikipedia??Windows開発の決定版 - Delphi(Skype??なでしこ)

タグ「delphi」を含む注目エントリー - はてなブックマーク

Delphiアプリケーションのメモリリーク検出法

Delphiアプリケーションのメモリリーク検出法 (山本隆の開発日誌)

作ろう!コンポーネント Delphi C++Builder

http://www.componentsource.co.jp/features/delphi/

TMS Software | Productivity software building blocks

Components > Effects and Multimedia > Video. Torry's Delphi Pages

Components > Effects and Multimedia > Audio. Torry's Delphi Pages

Components > Effects and Multimedia > Voice. Torry's Delphi Pages

Components > Effects and Multimedia > Direct X. Torry's Delphi Pages

try finally end

CとDelphiの対比表

eXeScope(Windows95/98/Me / ユーティリティ)

Delphi - テクノラティブログ検索

2ch検索: [Delphi]

Delphi-ML〓〓〓〓〓〓〓〓〓〓〓??About Delphi

Delphi Q & A掲示板

Delphi Q & A 〓f〓〓〓〓 〓〓〓〓〓〓O〓〓(HTML〓o〓[〓W〓〓〓〓)

fdelphi.com

Delphi入門

旧 Delphi 入門??Seventh Delphi

Delphiメモ

超ローテクDelphi講座

俺のためのDelphi学習

Delphi はじめの一歩

VB〓〓VC〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓H

Delphi の格言

キーボードからの入力取得

マウスボタンのクリック、マウスの位置情報の取得

ジョイスティックからの入力取得

バッカーへの階段: 入門:キーロガー

テキストファイルを読み書きする

テキストファイルのロードとセーブ

DelphiによるWin32API

Delphi WAVEサウンド音を鳴らす/Tips & Tricks

MIDI、WAVEファイルを再生する

サウンドを読み込んで鳴らす

MIDIを演奏する MCI/midiStream

5分ではじめるDelphi - 第1回 簡単なメディアプレーヤの作成(前編)

MP3プレイヤーを作る>dllによる再生

Controling sound volume from code

Torry's Delphi Pages

lsMicrophone: mxl.dwComponentType :=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;

MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT

SwissDelphiCenter.ch : ...set the volume for the microphone/ mute it (enhanced)?

Components > Sound Effects > Mixer. Torry's Delphi Pages

uses MMSystems;

//

PlaySound('C:\WINNT\Media\start.wav', 0, SND_FILENAME or SND_ASYNC);


ビットマップを表示しよう

画像ファイルを指定した位置へ表示

俺Delゲーム応用

画面をキャプチャして表示する

めもニャンだむ

Delphi6でプログラミング ビットマップの半透明コピー AlphaDraw

画像処理プログラミング講座

Graphic Effect

カラー画像をモノクロ画像に変換

procedure TForm1.Button1Click(Sender: TObject);

var

bmp1,bmp2 :TBitmap;

begin

bmp1 :=Tbitmap.Create;

bmp2 :=Tbitmap.Create;

try

bmp1.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color\FINANCE.BMP');

bmp2.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color\FACTORY.BMP');

Form1.Canvas.Draw(10,10,bmp1);

Form1.Image1.Canvas.Draw(10,10,bmp2);

finally

bmp1.Free;

bmp2.Free;

end;

end;


無料版Delphi6でSTGをつくるためのプログラミング講座 Ver.2005 Jan.

Delphiでわずか59KBのオセロを作る方法

めもニャンだむ:BIOS 情報

コンストラクタとデストラクタ

SwissDelphiCenter.ch : ...get the MAC Address?

乱数

DelphiでMD5

もっと楽にGUIとの連携がしたい:Python + Delphi = P4D(Python for Delphi) - ふにゃるん

Delphi WindowsのOSのバージョンを取得する/Tips & Tricks

SourceForge.net: Gecko SDK for Delphi

DelphiでWinSock

SQLite-もげもげ〜

BDS(Delphi/BCB)用SQLiteライブラリ (山本隆の開発日誌)

Application.ProcessMessages

FrontPage - DelphiVIP

SwissDelphiCenter.ch : programming tips

Torry's Delphi Pages

Delphi Tips

Delphi Code Tips

Magic of Delphi4〓z〓[〓〓 〓y〓[〓W

Delphi Win32API/API関数一覧

Delphi〓〓〓Z

クジラ式 Delphi 資料

Delphi〓〓y〓[〓W

サイト移転のお知らせ(Mr.XRAY)

openDelphi.org

KOL and MCKPage

Gen's Delphi Labo.

サイト移転のお知らせ(Mr.XRAY)

ナッキーの「Turbo Delphiはじめて奮戦記」- 第1回 Turbo Delphi のインストール

フリーのTurbo Delphiで始めるWindowsプログラミング:ITpro

フリーのTurbo Delphiで始めるWindowsプログラミング:ITpro

http://torrent.borland.com/turbo_hotfix_rollup.zip

http://torrent.borland.com/prereqs_jp.zip

http://torrent.borland.com/turbodelphi_jp.exe

(1) \dotNETRedist\dotnetfx.exe

(2) \dotNETRedist\langpack.exe

(3) \dotNETRedist\NDP1.1sp1-KB867460-X86.exe

\dotNETSDK\setup.exe

\IE60SP1\ie6setup.exe

\dotNETJSharp\vjredist.exe

\dotNETJSharp\vjredist-Permalink | 記事への反応(1) | 15:15

2007-03-13

cygwinとやらを落としてみた

blocksやらSudokuやらをやってみた。満足した。UNIXって凄いや!

 
ログイン ユーザー登録
ようこそ ゲスト さん