髭散らかし太技術国(転生)

ここでは研究や自作した何かなどの技術的な話や商品の役立ちそうな話を中心に語ります。

【解説】コンピューターサイエンス、情報学、情報工学、情報科学の違いは何か?

以下の続きです。

higechira.hatenablog.com

先に結論を書くと、コンピューターサイエンス(CS、計算機科学)と情報工学情報科学、知能情報工学などは同じと考えて良いです。強いて言えば、CSが最も大きな範囲を明確に指しますが、少なくとも日本では、基本的に学科設立の経緯などによって名称が揺らいでいるだけです。

ただし、情報学はちょっと事情が異なる部分があります。

情報学とは何か?

ja.wikipedia.org

こういうことはウィキペディアが最も頼りになりますが、ちゃんと書いてある反面、情報量が多すぎてまとまらないこともあります。

なので、専攻で得た知識を借りて、私がポイントを明確にしたいと思います。

前ページと同様、発祥に注目すると、情報学は「図書館情報学」から発展してきました。実はCSとは別に図書館情報学という学問分野が存在し、日本にもその専門大学、図書館情報大学という国立大学が存在しました*1

図書館情報学という名前だけでは何を扱う学問かわからないと思うので、具体的なテーマを上げると「検索」「分類」「格納」「集約」などです。図書館におけるこれらの効率化が情報学の祖なのです。

コンピューターのための科学だったCSに対し、こちらは検索や分類などの情報を扱う手法そのものの効率化のための科学であり、計算機はあくまで手段というスタンスです。これはCS以外の他の学問と同じであり、CSの外にある学問ということになります。

ただし、計算機の発展によって情報を扱う手法は格段に増えていったため、計算機との関連性を切っても切れなくなってきました。また、情報学部といった学部名称では、もはや元の情報学の他にCSも包括していたりします。

だからといって、学科レベルでは完全に同一視するのは難しいです。被っている部分はあるにしろ、情報学はあくまで情報そのものに主眼をおいており、計算機との連携はあくまで手段として行う学問なのです。CSの領域が含まれる場合もありますが、そういうスタンスであるということは念頭においておいたほうが良いです。

情報学は上記のようにアルゴリズムのような情報そのものの扱いに関する分野であるため、何かの構築を目的とする工学(エンジニアリング)は主眼にない事がわかります。相対的に多くの日本のCS学科が情報工学科と名乗る理由の一つは、情報学との違いを明白にできるからだと思われます。

CSを情報〇〇と呼ぶのは何故?

では、そもそもなぜ計算機科学を「情報」工学などと呼ぶのでしょうか?

特に日本の学科はしきりに、情報〇〇と名乗りたがる傾向があります。また、先程も言いましたが、相対的に情報工学科と名乗る学科が多いです。

一つは「計算機」ではコンピューターを指すのかが明確では無いからだと考えられます。仕組みから言えば確かに計算機なのですが、電子計算機でも分かりにくいということなのでしょう*2

これを説明するにはそもそもなぜ計算機で情報が処理できるのかについて説明しなければならないと思います。

  • 全ての情報は符号化することができる
  • すべての情報は0と1だけ(2進数)を組み合わせた符号で表す事ができる

という理論を知っていますか?クロード・シャノンという人が1948年に提唱した情報理論の一部です。これは方程式だけではなくて、情報そのものに対する初の科学的な理論です。

ここでシャノンが2進数について言及したのはコンピューターを念頭においてのこと。そもそも最初に電子回路で論理回路を作れると述べた人物の一人はシャノンと言われています(もう一人は日本人の中嶋章)。
つまり、シャノンは「コンピューターはマルチメディアなあらゆる情報を処理できる」ということに世界で初めて言及しました。このあたりは坂村健先生の「痛快!コンピュータ学」という文庫本に面白く書かれています。

このときから、コンピューターで様々な情報を処理、すなわち加工することが試みられるようになりました。つまり、情報を工学的に扱うための機械として、コンピューターが認知されるようになりました。

こういった経緯を理解した上で、「情報工学」と言えば、コンピューターを使って情報を加工する分野であるということがより明確にわかると思います。「情報処理」 もまた、同様であることがわかります。 冒頭述べたとおり、日本におけるCSの学科名は、学科設立の経緯に寄るところが大きいですし、工学部での設置が多いことも前ページで述べたとおり電気工学科から発展していったことが理由です。そして、よりわかりやすい名称を求めた結果、「情報工学」などと名乗るようになったんだと考えられます。

*1:図情大は法人化の過程で筑波大学に吸収されました。あくまで法人化が理由なので学問分野が廃れたということではないですが、研究科に残っていた図書館情報という名前も今年4月から消滅するようです。CSとの境界が曖昧になったからでしょう。

*2:個人的には中国の「電脳」を輸入すれば解決すると思うのですが。電脳工学とか電脳科学とか格好良くないですか?

【解説】コンピューターサイエンスとは理学?工学?情報学との違いは?

コンピューターサイエンス(CS)、計算機科学、情報工学情報科学、情報学、etc...
一般的に英語ならCSで通ってますが、日本語にすると色々と翻訳、学科名があると思います。

ところで皆さんは、ふとこんな風に疑問に思ったことはないですか?

「コンピューターサイエンスって理学なの?工学なの?」
「情報学と何が違うの?」

ここでは、

  • コンピューターサイエンスは理学なのか工学なのか?
  • そして、情報学との違いは何なのか?

について紐解きたいと思います。

私、今年の春から博士課程に進学することになっているのですが、
(博士課程って何?という人は一旦別タブでググってくださいね。)
そろそろこのあたりの解釈は明快にしたいなと思ったため、整理してみることにしました。

元々この記事を書くきっかけは、CSの歴史に関して齟齬のあるサイトを見つけてしまったからなんですが、それは別の記事で。

私の出した結論を先に述べるとCSは「工学の上に成り立つ科学」です。だからややこしいんでしょう。

CSって理学なの?工学なの?

何かを検証するときには、よく仮説が立てられます*1

私は自分でじっくり考えて調べるまで、CSは「工学」だと思っていました。
実際、工学よりではあります。

ただし、理学的部分も持っています。

ここで重要なのはCSの歴史を追うことです。
他のどんなものでもそうですが、歴史を紐解けばそれが何であるかを解明するヒントが得られます。
では、コンピューターサイエンスという学問がどのように発展してきたかを見てみます。

コンピューターサイエンスの歴史

まず、「Computer」という単語ですが、これは計算機を意味します。多くの人が意識せずに使っていますが、これはもはや自明です。

計算機という構想は、数学を解くための自動的な機械を作りたい、というところから始まりました。
ここから、CSは数学科から発展してきたと言う言説を説いている人もいます。そうであれば、CSは理学よりで良いと思いますが、これはかなり軽薄です。
もしそうだとしたら、なんで「計算」科学、"Computational" Science ではないんでしょうか?

「計算機」科学、"Computer" Science という名前もキーとなります。

これは言ってしまえば「計算機のための」科学なのです。

計算機も黎明期は機械式、つまりアナログで10進数により計算するものが作られていました。今のコンピューターとは全く異なる仕組みで動いていたのです。

しかし、歴史は転機を迎えます。それが「プログラム内蔵方式」の誕生です。

この方式の計算機の実機が実証できた瞬間が、今日のCSの始まりなのです。

なぜか?

それは、OSを始めとして多くのCSで扱われる理論は、プログラム内蔵方式を前提に展開されているから。
むしろ逆なのです。「計算機のための」科学なので、

  • 如何に計算機の仕組みを有効活用できるようにするか

のために発展してきました。これがコンピューターサイエンスです。

もし、コンピューターを「製造するための学問」であれば、完全に工学になるでしょう。でも、CSの理論の多くは計算機の資源を有効活用するためにあります。だから、より理学的と言える理論的な事柄も扱われるのです。

結局理学なのか?工学なのか?

最初に言った通り、CSは「工学の上に成り立つ科学」です。科学とは広いので工学も理学も含みます。結局線引きを明確にすることはできないのです。

ですが!

「計算機のための科学」の計算機は電気・電子工学の回路によって形作られています。ハードウェアのことにも論理回路から、実際の回路のことまで、レベルがありますが、コンピューターサイエンスを深堀りしていくと計算機を形作っている電子工学の知識は切っても切れません。
だから、「工学の上に成り立つ科学」なのです。

本場アメリカ、そして日本の多くのCS専攻は電気工学科から発展、独立していきました。現在でも電気工学科にCS分野が存在する大学もあります。ぶっちゃけた話をすれば、CSはあまり「計算」には頼らず、必須な理学の分野は限定的です。一方で、工学の知識、特に電子工学の知識はコンピューターサイエンスを語る上で重要なのです。よって、必要な知識は「工学の方が要される」、言い方を変えると「工学の方がより密接にコンピューターサイエンスと結びついている」と言えます。

だから、私がどちら寄りかはっきり答えるなら、CSは「工学」寄りです。

情報学との違いは?

次のページで情報学との違いについて説明します。

*1:仮説検証型と呼ばれる、研究の進め方の代表格。記事と直接関係ないけど

富士通の安鯖 TX1310 M1 のCPUをCore i7 4790Kに換装してみた

5年前に買った安鯖のCPUを交換しました。

FUJITSU Server PRIMERGY TX1310 M1 の記事、買った時に書こうと思っていたものの忙しくて書けなかったんですよね。懐かしい。
というか、タダの一度もTX1310を取り上げていなかったのには驚きです。

少し昔話したくなっちゃったので本題に入る前に買った当時の話とかします。

今でこそ安鯖として有名なTX1310 M1ですが、2014年当時はまだ発売されたばかりで、全然情報がありませんでした。だから誰か人柱が情報流してくれないかなと安鯖総合スレに張り付いていたんですが、話題に上がるのは鼻毛ばっか(笑)

鼻毛鯖っていうのはNECの安鯖で、ちょうどそのちょっと前くらいまではNECが安鯖の主力でした(鼻毛って呼ばれてるのはNTT-Xもとい「みかかさ」で在庫処分であろう鼻毛カッターが付いてきたけど、それが意外と使えてスレ民に気に入られたから)。

だから当時は移行期で、出たばかりの富士通 TX1310 M1がたまーに安売りされてたくらいでした。

ところがそんな時に確かnon-ECCメモリでしかも通常電圧も動作したぞ、みたいな話が上がって買う人が増えたんじゃなかったですかね?(wiki見たら翌年3月でした)

pc.usy.jp

私が買ったのは2014年12月の最初に2万切った時です。

今になったから言いますが、Wikiに結構情報流してて、PCIe x8の片辺閉じてないからx16のGPU挿せるとか、初期搭載メモリとかの情報を載せたのは実は私だったりします(でもメモリいっぱい検証してくれた人ではないです)。当時ブログにこの安鯖のネタを書かなかったのは、wikiに書いて満足していたっていうのもあったりします。

pc.usy.jp

5年弱使ってて個人的な不満は起動ボタン押してからOS立ち上げまで若干10秒掛かることぐらいで、一切故障すること無く安定して動いてくれています(もし同じ構成でそんな長くないって人いたら教えて下さい。UEFIではないから…? )。 あと、HDDの交換時にベゼルの外し方の公式解説がいまいちわかりにくくて、壊しそうになったりもしましたけど(笑)
ファンが煩いっていう人は結構居いましたね。私は上の方のファンのコネクタを自己責任で引っこ抜いて使ってます。スペック的にも熱暴走したことは無いです。

スペックは現在以下のような感じになっています。用途は普通のデスクトップ。本当は仮想OS上にデスクトップとサーバー*1を共存させたかったんですが、当時の私はまだ情報に疎かった(専攻がCSじゃなかった的な意味で)のでやめました。やったとしてもなんの得があったかわかんないけどw

部品名 型名
CPU Pentium G3420 (2C/2T, 3.20 GHz)
メモリ Crucial BLS2KIT8G3D1609DS1S00 DDR3-1600 CL9 8GB×2
SSD CFD CSSD-S6T240NMG3V 240GB
HDD Seagate ST250DM000-1BD141 3.5" 250GB
+ 2.5インチのやついくつか
グラボ 玄人志向 GF-GTX750-LE1GHD
OS Windows 10 Pro

ちょっと値段も記録しておきたいんですが、OSは手持ちがあり、SSDは昨年買ったものなのでそれ抜きにすると、本体が1.9万、メモリ1.5万、グラボ1.2万で合計約4万6千円で手に入ったことになります。SSDは7000円したのでそれ入れると5万3千円くらいです。おまけのアンプは使わずに売ったのでそれ引くと大体50,000JPYで手に入ったことになります。恐ろしい。
でもその分ディスプレイに金をかけていて、EIZO FS2434に3万4千円投資しています。後に1万円くらい値上げしたうえにHDMIの付属をやめてしまいましたが、当時はこれでも高い方だったんですよ。

今になって思えば、グラボはケチらずに GTX 750 Ti にしとけば良かったなと思ってます(内蔵メモリ容量がなぁ)。CPUは何度も変えようと思ったんですが、高望みしすぎるあまり4790Kが異様に値段が高いままで手を出せなくて結局そのまま今日まで来てしまいました。なんだかんだ、セロリンじゃなかったのとグラボを載せたおかげでそこそこ負荷が高いときも凌げてきたので良かったんですが、最近はそうも行かなくなってきました。

動画編集のせいなんですが、なんでその動画編集しているかというと…




そう!




VTuber
f:id:higechira:20191124025214p:plain







VTuberやり始めたことが理由でCPU換装することになるなんて夢にも思わなかったでしょうね、買った当時の私。

higechira.hatenablog.com

案の定↑の記事で書いたとおりあんまり伸びてないですがそれは置いといて(笑)、動画編集がそこそこ楽しかったり、Liveも面白くて気分転換になるのでブログ感覚で続けてます。
でも、エンコード時間が長かったり、3Dだけでも重いのに、恋声やOBSやゲームを同時起動させていると時に落ちたりと、実用上の問題がそろそろ続けるなら限界かな?と思っていました。

まだVにそこまで予算をかけようとは思えないですが、CPUはV活以外にも恩恵があります。っていうかV活動をCPUアップブレードの口実にしているような気がしてきてだんだん自分が疑わしくなってきましたが、当時は高くて手が届かなくても、いい加減5年も経てばCPUの値段も下がっているだろうってことでクリスマスプレゼントにCore i7 4790Kを落札しました。
ちなみに書いてる現在の中古の相場は2万円超で、フリマとかだと2~1万円くらいです。ジャンクでない限り1万切るのは厳しい模様。ちょっと高い気もしたので、9000円以下で出てるKがつかないCore i7 4790とかXeon E3-1271v3と迷ったりもしましたが、Xmasなので勢いで買いました(こういうときだけXmasは味方)。

以下、換装の模様を写真付きでお送りします。

箱の写真が無いですが、リテール版CPUで一式揃っていました。熱伝導シートは使ったことがあるんですが、グリスは初めてなので適当に売れてるやつを買いました。

f:id:higechira:20191230221450j:plain
Intel Core i7 4790K リテール版の中身とグリス

ちなみに熱伝導シートの記事もあると思って探したけど下書きだけで書いてなかった(泣)
供養のために知らない人もいると思うので参考までにこんなの↓です。

f:id:higechira:20180608035434j:plain:w200f:id:higechira:20180608035428j:plain:w200f:id:higechira:20180608035423j:plain:w200
過去にThinkPad T43に使った熱伝導シート(2012/10/07付け)

では蓋を開けます。ファンは意外とネジを回さないと取れないです。バネ付きなので完全に回さなくても取れるもんだと思ったんですよ。でも、途中まで外して揺すってみましたが取れなくて、こんな事やってたら基板壊れると思ってググりました。ネジの根本が外れたらするっと抜けます。

f:id:higechira:20191230221402j:plain
換装前の様子

ちなみに縦置きでネジを外したんですが、緩んだ瞬間落っこちてきて危険なので、面倒でも本体は寝かせましょうw

f:id:higechira:20191230221448j:plain
顕になったPentium

TX1310M1の付属ファンは結構ずっしりしています。ちなみにこれはトップフローですが、サイドフローのものもあるらしいです。

f:id:higechira:20191230221449j:plain
TX1310 M1付属のファン(表面)
f:id:higechira:20191230221451j:plain
TX1310 M1付属のファン(側面)
f:id:higechira:20191230221454j:plain
TX1310 M1付属のファン(裏面)

4790Kのリテールファンと比較してみましたが、ヒートシンクが全然違います。TX1310M1の方のファンのほうが冷えると思うのでリテールファンはやめました。

f:id:higechira:20191230221642j:plain
TX1310M1付属クーラー(左)と4790K付属のリテールクーラー(右)

CPU配置はすんなり行きました。なんとなく適当にこうだろうと思った方向に置いたらピッタリハマっちゃったので不安になりましたが、これ以外の方向でセットするのは切り欠きがあるので不可能でした。

f:id:higechira:20191230221648j:plain
4790Kをセット

グリスは初めてなのでググりながら適当な量を塗り塗りしました。押しつぶされて広がるので、あんまり端には塗んないほうが良いです。

f:id:higechira:20191230221652j:plain
グリスを塗布

ファンのネジ穴を実は一つ調子に乗って潰してしまったのですが、たまたま100均で買った(のに200円だった)モンキーレンチを持ち合わせていたので付け外し出来ました。六角レンチでも外せるようにしてくれた富士通に感謝。

f:id:higechira:20191230221654j:plain
ファンを取り付け

最初の頃は誰も人柱にならなかったので、色々と残念なことが言われていたTX1310 M1ですが(安鯖総合スレ28台目あたり参照)、BIOSでちゃんと4790Kが認識されることをこの目で確かめられる日が来ました*2

f:id:higechira:20191230221658j:plain
BIOSでちゃんと認識している

Windows10 の起動と、一応構成が変わってもOSライセンスが通っていることが確認できたので換装作業は完了です。

乾燥している時期の換装なので、静電気が気になって風呂上がりにやりました。

換装した感想ですが、はっきり言って普段使いではそこまで体感できるほどの差は無かったです。ちょっと速くなったか?くらい。まあ元が3.2GHzでそんなに遅いものではなかったので、4.0GHzになったところで対して変わんないんでしょう。固定周波数じゃないのもあるかもしれません。でも、キャッシュ容量は3MB→8MBへ大幅アップなので、メモリを沢山食う処理ではおそらく真価を発揮してくれると信じたい、くらいの感触。

ところが、エンコード(x264)は、これまで1時間以上掛かっていた処理がたったの10分で終わるようになりました。周波数、キャッシュ容量に加えてスレッド並列度(2C/2T→4C/8T)とベクトル化命令(SSE4.2→AVX2)の改善も効いてくるので流石です。とんでもねぇ費用対効果だこりゃ。
ちなみにNVENCのほうは約12分なので、GPUでハードウェアエンコする方が若干遅くなっています。x264の方が画質が良いのでNVENCの方はテスト出力で使っていたのですが、今後はQSVの方が良いかな?
というかHitogataを最大で出力すると、GPU使用率が100%近くなるので、グラボも変えたほうが良いかもしれないです。

熱がヤバいと噂なので、Core Tempで温度も測ってみました。
まずはCrystalMarkの結果から。

f:id:higechira:20191230235838p:plain
そこそこの温度

リテールクーラーだともうちょっと上がるって話を見ましたが、それに比べると80度以下でそこそこ冷えてるんだなって事がわかりました。

でもこれはクーラー間の比較のために後から測った結果。実際の使用環境でどれくらい温度が上がるか調べたかったので、以下を同時に実行してCPUをいじめてみました。

  • x264エンコード(1080p/60fps)
  • +配信で使うソフトをすべて起動して実際に配信
  • Firefoxでハードウェア支援切って4K再生

f:id:higechira:20191231000753p:plain
スクショで撮れた限界

電力消費がCrystalMarkよりも高くなっています。TDPより低いのでもっと熱くなれそうですが、スクショのタイミングが難しくて91度のときは撮り損ねました。温度が上がると周波数が下がるので、TDPまで電力上げるのは難しいと思います。実アプリケーションでの負荷では90度超えるくらいが限界のようです。

ところでどうして同じCPU使用率100%なのにこんなに電力が違うんだ?と思いませんか。思ったあなたは鋭い!CPU使用率はある一定時間に1コアで処理された命令の割合なので、ベクトル化命令かどうかなんて一切考慮されていないのです。ベクトル化命令の方が扱うデータが多いので当然ながらCPUの負荷は高いです(なのでこの記事とは全く関係無いけど、拾ってきたベンチマークだけ測ってRyzenは速くないとかいう意見は全くCPUを理解してないんですよね*3)。リテールクーラーで80度台止まりのデータがググったらいくつか見つかったんですが、ベンチがザルかもしれません。
ちなみに買った当時、5年前はこのあたりのことは一切わからなかったんですが、CSに専攻を変えてここ2,3年くらいで身についた?知識なので、その恩恵が受けられてるように思いました。

あと、CPU負荷が抑えられればアプリが落ちるのも回避できるかなと思っていたのですが、換装後もOBSが出力しなくなったり、マイクラ恋声が若干不安定になったりしました。インターネットプロバイダのやる気が0なのでたまに回線死ぬんですが、OBSは出力できなくなると処理を止めるんでしょうか?ってそうとしか考えられないですよね。マイクラGPUよわよわだからだろうし、恋声はそもそもBuffer overfullになったらたまにリフレッシュしようなって感じですかね?

というわけで、普段使いならちゃんと冷えるってことがわかりましたし、殺しにかかっても100度には達しないということが確認できました。

オーバークロックすればもっとエンコ時間縮められるのはわかってますが、動画はせいぜい長くても20分くらいのしか作らないつもりだし、寿命を縮めたくないのでしないと思います。やるなら一つ止めてるファンも動かすことになるので五月蝿くなりそうです。

でもワンチャン試したくなったら記事にするかも?

あと、落札したやつがリテールパッケージ全部一式揃っていたので、シールが付属していました。Pentiumに重ねて貼ることで私のテンションは高まりましたが、写真で見るとあんまり目立たちませんでした(完)

f:id:higechira:20191230221846j:plain
嬉しいおまけ

f:id:higechira:20191230221851j:plain
インテル入ってる(パンッ、パパパパンッ

*1:録画用途が第一候補だった

*2:当然サポート対象外なので注意!!流石にもう売ってないから言わなくていいかなと思ったけど念には念を。

*3:やめるのだフェネックベンチマークでCPU使用率100%になってるからって喜んでたらだめなのだ!そのベンチがすべての命令セットに対応していないなら最高性能は引き出せないのだ!フェアな比較ではないのだ!

機械学習・GPUユーザー必見!CUDA・OpenCL・TensorFlow/Kerasより高速で簡単なOpenACC!

Pythonは便利ですがいくら頑張ってもCUDAには追いつけないです…
TensorFlow/Kerasを使えばフレームワークでなんとなくディープラーニングに限らない用途で使えるって話もありますけど、やっぱりスピードは大事。高速化したいですよねっ!
でもCUDAは難しそう…

大丈夫、そんなあなたにCのforとかの基本構文と少しのオプションだけで簡単にCUDA並の速さを手に入れられる方法をご紹介しましょう!!!!!

それが、


OpenACC



です!!!!!

なんとあの GPU メーカーである我らが NVIDIA 直々に作って推奨している規格なんです。
まだあまり知られていませんが、超最強。

さらに、2019年現在最新GPUのVoltaアーキテクチャではあのCUDAすら超える性能を引き出すことに成功しています!!!

もう一度言います。

CUDAより高速になることが
あるんです!

しかも、今まさにNVIDIAが必死に普及させようとしているので、無料でNVIDIA様の講習が受けられちゃいます。

CUDA と OpenCLOpenMP ならどれがいい?
いいえ、OpenACC です!!

OpenACC はなななんと AMD GPU にも Xeon Phi にも対応しています!!

qiita.com

詳しくはQiitaに書きましたので上記のURLを是非ご参照ください!!!!!*1

*1:めっちゃハイテンションですが深夜テンションなだけです。あとQiitaに書いた時点で私には一銭もお金が入らないです。悲しい。

Takashift、競プロを始めた件

10月後半忙しくって、書くこと無いなーってスルーしてましたが、すごくありました。


Takashift、競プロはじめたってよ。


始めたって言っても去年ちょっとだけAtCoderやってたりしたんで、初めてってわけじゃないです。しかも、競プロをやると言いつつ競うことは目的じゃないという(単芝)

ぶっちゃけ恥ずかしながらプログラミング言語のメソッドとかどのモジュール読み込むんだとかいちいち覚えていないんですよね。まあ、エディターとかで結構補助してくれるし、モジュールは若干困るけどどうせググればすぐ出てくるから、支障も実際の所あまり無いです。

ただ、どこかでこれじゃまずいなぁと思っていたのもまた事実。何か取り敢えず作りたいなぁ簡単に作れないかなって思った時に、いちいちどのモジュールが必要かググらないと簡単なコマンドラインツール一つ作れないのはやっぱり困りものです。まあCなら見なくてもある程度書けますが、サクッと作りたい時にC使いますか…?

というわけで、すぐにご所望のものが作れそうなプログラミング言語をいつでも書けるようにしておきたい!ので、定期的にプログラミングしようと思い立ちました。その題材としてAtCoderのABCを使いはじめたわけです。アルゴリズムもすぐに出てくるようになったらなお嬉しいし。

やってる言語ですがGo、RubyPythonの3つにしています。Goは元々結構でかいアプリを作っていたのである程度知っています。でも、チュートリアルを全部やったわけではないですし、割とうろ覚え。ですが、他の言語をやっているとこれ!って機能があって爽快な気分になれるし、コンパイル言語でスッキリしていて文字列操作とか一通り揃っている言語はまあGoですねって感じで(ゴルーチンも強し)。Rubyは色々と自由が効くので(その自由さが時として仇ですが)知っておけばなんか作りたい時に役に立つかなぁと言う感じ。あと作者の言う通り、書いてて面白みがあります。Pythonは実を言うとあんまり書き方がなじまないし、色んな所で言われてますが書いてて面白くないので自主的には基本書かない(と言いつつコード量からするとそこそこ書いてます。マジで覚える気がない言語ナンバーワン)です。でも取り敢えずすぐに作りたくて且つ他の人がいじることを念頭に置くならPythonでしょうね。Python2をPythonとだけ銘打って解説してるサイトはいい加減滅びろ。

ノルマは最低月イチで始めました。


そして…


起承転結が早いですが、1ヶ月目にしてダメなところが浮き彫りになりました。まず、月イチだと少なすぎます。最低2週に一回は書かないと記憶が…
忙しかったのでそれどころではなかったんですが、3週間も開くと忘却の彼方ですね。ABCって結構似たようなパターンが多いと思うんですが。トリリンガルでやってることも影響している可能性はありますね。ダメダメじゃないですかやだ~

そしてわかってはいましたが、私ってそもそも競プロには向いてないなぁということも改めて認識。ものにもよるけどタイムアタック的なことはあんまり好かないんですよね。まあ、プログラムを考えるのは楽しいんですけどね。

色んな人が居て人それぞれスタイルがあると思うんですが、少なくとも私はよく考えてからプログラミングします。そして、最初のチュートリアルならともかく、何も考えずに取り敢えず動くだけのコードを書くのは嫌いです。それにすでに正解があるものをみんなでよってたかって早く解いても意味ないじゃないとさえどこか頭の片隅で思ってるかも知れないです(それいっちゃあおしまいよぉ)。
こういう性格だから時間を競うのが合わないのは自明。
競うことを目的としてないのでいいんですけどね。こういう競プロの使い方があっても良いんじゃないかってユースケースになってもいいと思うし。時間だけがプログラミングの評価軸じゃないですよね?(実際業務でそれだけだったら、っていうのは想像したくない…)
もちろん、AtCoderを早く解ける人が凄いのは言うまでもないですし、そのほうが業務では絶対有利です。だからやってるんですよ(笑)

でも、世の中は偏見持ちの小物ばっかなので、競プロが出来ないのは努力じゃどうにもならないとか、プログラミングは才能が全てとか、そんなことを言う人はたくさん居ます。競プロ出来なくて自分にプログラミングの才能が無いんじゃないかっていう思う人が他にもいるかも知れないんで、そういう人のために言いますが、決して競プロが出来ないからと言ってプログラミングの才能が無いことの証明にはなりません。例えば、デバッグが開発時間の殆どを占めることはよくあることなのでデバッグの才能も重要です。でもデバッグの才能は実装の速さで測れません。また、既存のプログラムの理解が開発時間を支配することもありますが、これも同じです。プログラミングに於いて最も大事なのはやっぱりロジックを考える力で、プログラムの動きを考えられることです。そしてこれは一つの評価軸で一様に測れるものではないのです。セオリーが偉いなんて誰が決めたんですか?そんなに早くなくったって誰も考えないような素晴らしいロジックを考えられる人が居たらその人は確実に天才呼ばわりされます。

あんまり悪い例は出したくないですが、プログラミングの速さだけが滅茶苦茶早いために自分は天才だとイキりだして、終いにはチーム開発の現場で勝手に自分の得意な言語で好きなように書き、保守性をぶっ壊してくれる人だって居ます。人より上を目指すなら、速さは大事ですが、全てではないことをよく肝に命じておいてください。

あと、言語のメソッドとか実装について覚えられない理由も実は自分でわかっています。
結構ロジックに重点を置いてるんで、どの言語で書くとかどの関数でどういうふうに書くとかはあんまり重要視してないんです。そして、これは無意識にやってることなんでどうしようもないです。
こう書くとわかりにくいかも知れませんが、要するに無駄な努力はしたくない性格なんでしょう。

でもだからと言ってぱっと簡単に書ける言語を持たないのは自分にとってマイナスです。というわけでこれからも精進します。ついでに競プロにも強くなれるように。

あれっ?

なんかおんなじことやってる娘がいるみたい!しかもライブコーディングじゃん!! 捗る~

www.youtube.com

VTuber空高ちゃんをどうぞよろしくね!

基礎は大事という話

月イチで記事を書くのがお約束なんですが、今月は特段技術的に取り上げたい内容は無いのでこんなことを書いて置こうと思います。

最近色々と説明を要求される機会が増えているのですが、なんだかんだで中身がちゃんと説明できないということがままあったりします。

説明がタジタジなってしまうのは要するに基本がわかっていないからなんですよね。そしてついごまかそうとしたりしてしまうのが人間の心理というもの。諸行無常

私は結構感覚でこうすればうまくいくだろうという時もあったりして、それは幸い正しいことが多いですが、時として説明を求められると…
ということもあります。

でも、どこがどうなってこうなってるかっていう基本を理解していないのはとても危ういことだと思います。表面的なことだけわかってて自分はわかっていると思っている人も多いですが、それでその人はデバッグできるんでしょうか?

正直、ものを一から作るよりも修理や拡張の方がハードルが高いです。これは明らかな事実です。なぜなら、すでにある既製品と似たようなものを作るだけなら猿真似でもできてしまうことがざらにあるからです。一方で、修理や拡張は中身がある程度理解できていないとできません。

これはソフトウェアエンジニアに限った話ではないと思います。例えば、プラモデルを作れたらそれはもうエンジニアなんでしょうか?Pythonとかで既にある関数を組み合わせて既存のアプリに近いものを作るのは入門には良いと思うし、当然エンジニアの取る手段の一つとして良いと思いますが、これしかできない人は中身を、基本を理解しているんでしょうか?修理する時どうするんでしょうか?

だからものをただ作れるだけではエンジニアとは呼べないと思います。自称エンジニアは本物では無いんです。私も自分のことをまだ本物じゃないと思っています。ハードレベルの話もOSレベルの話も(なんとなくわかってるだけマシですが)怪しい知識だらけです。私が進んでいるのは学術の方なんだからなおさらヤバいです。でも普通のエンジニアの人はそんな完璧じゃなくても手がかりさえあれば原因にたどり着くことができるはずなので、そんなに厳しく無くても私くらいで十分かもしれません。

アカデミックで何が一番ヤバいかというとやっぱり説明できないことです。だから私は微妙に知識に抜けがあると感じるとちょっとずれたことをつい言ってしまうのです。でもそれが余計に墓穴を掘り進めてしまうこともあります。ですが自分がしっかり根拠を持ってその動作やら現象やらを説明できる自信があれば、そういう下手なごまかしもなくなるはずです。だってそんな事する必要無くなるのですから。

あと、基礎を理解しているとその上で起こっていることが大体理解できるようになります。色々と見通せるようになるんです。教授にはコンピューターの全体像が見えているように感じます。

それで基礎をちゃんと議論できるレベルまで体得するにはどうしたらいいかといえば、結局は好奇心をどれだけ膨らませられるかが肝心なんだと思います。D進できる人とできない人というのがいるというのはこの部分だと思います。前者は「どうやって動いているのか」に興味を持つことで自然と自主的に調べていって仕組みを理解できるんでしょうね。

今丁度私はソフトウェアの拡張開発をやっているところですが、本物になれるようにもう少し頑張ってみようかなと思っています。

コミケに初めてサークル参加した感想

7月の終わりに予告した通り、8/12(月)のコミックマーケット96(4日目)にサークル参加してきました。

f:id:higechira:20190819003456j:plain
インテル入ってる

higechira.hatenablog.com

出展側としては初参加でしたが、おかげさまで50部全部頒布することができました。ありがとうございます。

普段は割とすぐ記事化するのに今回はしばらく沈黙していましたが、先日あった出張前辺りから体調が悪く夏バテ気味で記事を書こうという気力が湧きませんでした。でもだんだん良くなってきています。

それで、せっかくなのでコミケ参加において有益な情報を残しておこうかなと思うのですが、感想を交えてつらつら書いていきたいと思います。

準備

持ち物

お釣り用の小銭は前もって用意しておきます。頒布しているうちに500円は溜まっていくのでそんなに多くなくても良いと思いますが、参考までに私は14枚用意しました。5000円対応のために一応千円札も何枚か持っておきます。最悪南棟なら会場内にケバブ?が売ってたので適当に崩してきてもらいましょう。

f:id:higechira:20190819003227j:plain
肉とかき氷でした

また、値札、テープ、マーカーなどを用意しました。ただし、会場の机はとても狭いので作業には向きません。今回バテてて前日までに用意できず、会場で開場までの間にサークル名の掲示物などを用意しましたが、案内の紙は自宅で作成を済ませたほうが良いです。

多くのサイトで書かれている机のテーブルクロスは今回用意しませんでした。見栄えが気になるならあるに越したことはないですが、私は実際に会場に行ってみて無くても良いと思いました。

あと、お金を入れる缶か何かはあったほうが良いと思います。百均とかでも売ってますが、今回は500円均一だったのでお菓子の空き缶で代用しました。

それと、お金が見える位置にあるのはあんまり良くないと思うので、小さいダンボールの箱を盾にしました。

夏コミなら必ず会場に付く前に飲み物を用意します(会場付近の店は混んでて品切れのことがある)。500mLだと足りないことがあるので、1Lのペットボトルがおすすめです。私は前日に冷凍してタオルにくるんで持っていくようにしています。

頒布物も忘れずに持っていきましょう。

持ち物はそんな感じです。

同人誌の制作と印刷

なんだかんだで本格的な制作は7月中旬からとなってしまいましたが、1週間ちょっとでどうにか仕上げました。せっかくなのでコピー本じゃなくてちゃんと製本しようと思ったので、脱稿は早めにしました。もう少し遅くても入稿できるらしいですが、すでに納期も伸びていたので印刷会社さんのためにもあんまりギリギリにしない方が良いです。

印刷会社さんは、自分の持っている同人誌の中で品質を見たうえで、値段を相談して決めました*1

ソフトは今回、本文はWordで書いて、表紙はPowerPointを使用しました。本文は白黒のつもりなので良いとして、表紙はカラーであるためイラストツールを使ったほうがCMYKで出力できて良かったのですが、時間がなかったので今回はパワポで作りました。仕上がりですが、若干暗いかな?くらいの感じでした。なお、表紙と中表紙と裏表紙は一枚で作成するのが一般的みたいです(中表紙が無ければ別々でも大丈夫っぽいです)。

サイズは本文はB5で作りましたが、本文、表紙ともに断ち切り前のサイズ(印刷業者にもよるけど縦横3mm余分に大きくする)で作ったほうが無難です。

そして、入稿についてですが、ファイル形式はPDFであれば一応どこも大丈夫みたいです(フォントは埋め込むように設定しましょう)。

当日会場まで直接搬入してくれるところがほとんどですが、私は今回、部数も少なく、事前の仕上がりがどんなもんか見てみたかったので自宅まで宅配してもらいました。ただし、直接搬入のほうが入稿締切が遅かったりします。

ちなみに、万が一の落丁等に備えて予備が付属しています。今回は50部の発注で予備6部でした。

当日の作業

今回は8時に駅に着くように向かいました。待ち合わせ場所ですが、りんかい線国際展示場駅前は混みまくるので辞めておいたほうが良いです。今回ゆりかもめ有明駅改札前集合にしましたが、人が溜まらないのでおすすめです。

配置場所はパイプ椅子が2つしか無いし、スペースもギリギリそれが収まる程度しかないです。南棟は後ろが少し広かったですが、気休めです。

C95で別サークルの手伝いをしたときはスタッフが回ってきましたが、今回は時間まで回ってきそうになかったので、自分でサークル窓口まで見本誌を提出しに行きました。同じフロアでも窓口が複数あったりするので自分のエリアの窓口がどこか確認してから行きましょう。今回私は間違えて自分のエリアと異なる担当の窓口に受付してしまいました(スタッフさんの仕事が増えます)。

荷物は机の下に置くのが基本となります。また、お隣さんに物と訪問者が侵食しないように注意しましょう。

見本誌とは別に閲覧用の見本を置いておくと来た人が安心して見れます。閲覧OKですと言っておくと更に安心します。

片付けは最終日も机の上に椅子を置くだけで良いとのことです。

交流

会場では必ず隣のサークルさんに挨拶をします。今回は親方さんと頒布物を交換したりしました(ボリュームがぜんぜん違うのに申し訳無さを感じました)。

同人誌即売会では「本を読んで買わずに去っていく」というおなじみの試練があります。これ、今まで参加してみて見てきたし、自分も実際にやってたりしていたので、覚悟はできているというか、遭遇しても大丈夫だと思ってたんですが、実際にサークル側として立ってみると結構不安になるもんですね。まあなかなか貴重な経験ですから知ることができて良かったです。尤もこれが即売会です。どんなもんか興味を持ってくれる人が結構いることもわかりました。なかなか難しいですが、もう少し敷居を下げた本を出してみようかなとも思いました(がそんな人にはすでにある、痛快コンピュータ学って本がおすすめだよ!)。

また、会場で実際に頒布するときには中身について感想を言って去っていくジェントルマンもいたりします。今回複数あったのは「NECのオーロラ*2を載せてほしかった」でした。特集ページに取り上げても良かったかも知れませんが、まだ確固としたメリットが確立されているとは言えないので次回以降検討します。補足すると、今回の本でベクトル型は過去のものとして紹介されてると思いますが、「要するにコスパで負けた」と書いていて、私自身は別にベクトル型が技術的に駄目だとは思ってないので、うまいこと使い分けができると良いのかなと思います。

また、余談ですが、私が確認した限りだとAMDは最近TOP500入りしていないのでちょっと強めに気合が足んねぇ!(ニュアンス)と書いていますが、現時点で一位のSummitの後継機にはCPU、GPUともにAMDを採用するらしく、HPC向けにもこれから本腰入れるっぽいです。

今回の状況

会場

南棟は極めて快適でした。常に涼しかったです。一方の西棟は灼熱地獄でした。本当に南棟に配置されて良かったです。

とは言っても来年の夏コミは5月なので、今回みたいにはならないと思います。

待機列の問題

1日目と2日目は学業の方の出張と出展準備に追われていたので、私は3日目から参加しましたが、11時頃に会場に着いたものの、待機列があるとスタッフに言われた方向に向かっても列に辿り着けず、ウロウロしているうちに場所が変わったという声を聞いて、とりあえず駅の方に向かって歩いたら階段の左に列ができていました。もっと駅側にも列があったりして「おかしいなぁ」と思いつつも30分〜1時間弱くらい?で入れたんですが、後から東の駐車場まで列が伸びていたという話を聞きました。

1時間も並んでいない私でさえ暑さでおかしくなりそうだったので、絶句。来場者数が日付の分増えるとはねぇ…

冬コミは対策してくれることを願っています。🙏

カタログの入手性

3日目の時点でカタログが売り切れてしまっていました。orz
つらたん
いつも事前購入しないで当日買いなんですがいままでは3日目でも売っていましたし、自分のサークルの載ったカタログが手に入らないなんてまさか思ってなかったんで、次回は是非部数を増やして〜

最後に

C97も申し込んだので、当選したら是非会場で会いましょう!
既刊も今回の半分くらいは持っていくつもりです。
感想もお待ちしています。

*1:今回はポプルスさんに頼みました。仕上がり良かったです。

*2:GPUみたいにPCIeで増設する形のベクトル型プロセッサ https://jpn.nec.com/hpc/sxauroratsubasa/index.html