はてなキーワード: 画像処理とは
self-hostedのtodoとかwikiとかbookmarkとかPocketみたいなのをちまちま作って使ってたけど今はやめてる
ドッグフーディングは良いことなんだけど、self-hostedでトラブルがあって作業が止まるのはつらい
そのトラブルが起こる原因のほとんどが自分であり、自分が怠惰だからで、
いつか〜しないとマズいなぁ…、と思ってると自業自得で使えなくなるのつらい
で、今は他人の書いたのをself-hostしてるけど、やっぱり不満がある
端的に言って、なんだかんだ大抵ははてブよりも完成度は低い
あと、ゲーム開発は開発が目的であって、ゲームを楽しむためではないし、
面白いゲームを作ることより、ゲームをどう開発するかばかりに目が言ってしまうので、
ぶっちゃけ、そこを満たすのであればゲームはどうでもいいのである
あと、画像処理のツールをライフワークとして作りたいと思っていたが、
なかなか実現しないというか、理想ばかり追ったり、作って壊してを繰り返したりしてたが、
マジで大病してから余命が少ない気がしているので、なんらかの形にはしたいと思ってる
例えば、画面内にWindowsのスタートボタンの画像と同じ箇所があったらクリックしろみたいなブロックがあって、
そのブロックを実行すれば、スタートボタンがクリックされるみたいな感じである
でも、Power Automationが無償になったりして作る気力がなくなった
最近はその辺の知見を別のことに使おうと思ってる
ただ、ゲーム開発でScratchみたいなのとかローコード、ノーコードはもうレッドオーシャンなので、
なんか変化球を投げたい
たしかに、今の時代は何でもあるので、作り意味がないというか作る気力がなくなるけど、
レッドオーシャンでも変化球が思い付くならば、プログラミングする意義はまだまだあるとは思う
でも、自分の書いたプログラムを生活に役立てるとか重視するのは、
そうやっていくと自分で管理できるキャパシティを越えて破綻するのは目に見えてる
だから、どうしてもこれだけは納得できないとか、身近すぎるとか、
くだらなすぎて世の中にないとか、そういうのに着目するといいような気がする
でも、こんなくだらないアイディア、本当にくだらなすぎて誰も作ってないのでは?
と思ってググると、それも地球のどこかで誰かが作ってたりするので、
まだまだくだらないことを考える能力が足りない、
藤井四冠の強さが圧倒的だ。
タイトル戦では渡辺さん、豊島さんをいずれもストレートで下して早くも四冠。しかもまだ10代だ。
将棋は強さを数値化したレーティングというものがあるが、藤井さんは2位に約170ポイントの差をつけて圧倒的な首位。
将棋には駒落ちというハンデがあるが、レーティング100差で香車落ち、250差で角落ちとなっている。
ざっくり言うと現状、他のトッププロと藤井さんの間で銀落ちくらいの差があるのではないだろうか。
レーティング2位は豊島さんだが、それに対する藤井さんの期待勝率は73%である。
通常大きなタイトル戦は4勝先にしたほうが勝ちだが、そうなると藤井さんが先に4勝する確立は91%になる。
トーナメントで一発勝つことは大いにありうるが、番勝負となるタイトル戦に挑戦者として出場したり保持タイトルの防衛戦のときには失冠しようのないレベルになっている。
なぜここまで圧倒的なのか?
これは藤井さんの手を読む際の思考方法にあるんじゃないかと考えている。
通常、棋士は脳内に盤面を浮かべてそこで駒を動かして手を読む。強い人は複数の将棋盤を同時に浮かべて同時に駒を動かせるらしい。
ただ、藤井さんは違っていて何かのインタビューで頭の中に盤面でなく、符号(駒の種類と位置を示した文字)を浮かべて読みを進めると答えていた。
通常、PCで処理をする際には文字データよりも画像データのほうが圧倒的にサイズも大きく、処理に時間がかかるものである。
これと同じ状況が脳でも起こっていると推測する。
つまり、脳内イメージで盤面を浮かべて画像処理をするよりも、符号のみを考えて文字データとして処理するほうが同じ手数を読むのがより効率的なんじゃないだろうか。
だから藤井さんは高速かつ大量に手を読むことができて、それが圧倒的な終盤力や正確さに繋がってるんじゃないかと思う。
これはある意味、これまでの将棋における思考方法に対する破壊的イノベーションだが、もちろんこの芸当は一朝一夕に身につくものではなく、幼いころからの鍛錬の賜である。
AI、特に深層学習の研究をしてる大学院生だけど、最近リアルに自分達の仕事が将来奪われるんじゃ無いかって恐怖を感じる。
世間一般で言われているようなアトムとかドラえもんみたいなAIを作ることは現時点では出来ないし、深層学習に変わる技術的なブレイクスルーが必要だと思う。ただ、一般的に今AIには難しいと言われている芸術だったり創造性が必要な仕事に関しては、割と近いうちにAIが人間と同レベルの働きができるようになってしまうと思うんだよね。自分がやってる画像処理関連なんて特にそう。人間の顔画像に関して言えば全く見分けがつかないレベルで画像生成が可能だし、イラストだって生成できる。文章生成や翻訳だって今後もっと精度が向上していくと予想できる。
自分で研究しててアルゴリズムが分かっている以上、AIが暴走した!なんて映画みたいなことは起こらないのは分かるんだけど、それでもやっぱりなんとなく怖い。計算機の能力の向上と、人間の脳のメカニズムがもっと詳細に分かってきたら、ドラえもんも出来ちゃうんじゃないかなーと思う。というか出来て欲しいw そのような未来が見てみたい。
カメラが欲しいいいいいっ!
Nikonのデジタル一眼レフ。サブ機として購入したいひと品。事有るごとにレンズ替えるの面倒くさいのよ。
ハイアマチュア向けの製品としては初めてのデジタル一眼で、今Nikonで売ってるデジタル一眼レフの源流にあたるモデルと言っても過言ではない。
2002年発売のモデルなのでスペックはそれ相応。しかし、600万ちょっとの画素数はインスタに上げたりL判サイズで印刷する分には必要十分。感度も低く夜間撮影は厳しいが、昼間撮影メインに使うなら問題なし。
CCDセンサー+デジタル総明記の画像処理技術によって吐き出される写真の色合いが魅力的だし、何よりも30万の質感のカメラが(それなりにヤレてるとはいえ)1万円を切る価格で買えちゃう所がステキ。酔った勢いで衝動買いしないか不安。
PLフィルター
景色撮るなら持っておきたい...と思いながらずるずる買いそびれているPLフィルター。写真の色合いがくっきりハッキリするほか、ガラスや水面の反射、水しぶきの濃さをコントロールできる。いい加減欲しい。
ヤフオクを漁っていた所、偶然遠赤外線改造機の出品に出会いその存在を知る。
空が黒い!雲が白い!こんなかっこいい風景写真撮ってみたいぜ!
AF-S NIKKOR 200-500mm f/5.6E ED VR
鳥したいわけではないのだけど、望遠で風景を撮ってみたいので検討中。しかし14万出して買いたいほど欲しいのかといえばそういうわけではないので、あくまでも気になる程度。
景色撮りたいだけなら、sigmaの50-500を中古で安く買えばいいじゃん!って思われるかもしれないけれど、せっかくの望遠レンズは純正でそれなりに良いものが欲しいのよ。
テレビを買い替えた。
21型のブラウン管テレビから55型の4Kテレビに買い替えた。
「いつの話してんだよ?」と思われるかもしれないが、ほんのつい最近、2021年5月頃の話。
15年以上前に買ったブラウン管テレビをずっと使い続けていて、地デジ移行後もデジアナ変換器かまして使っていたのだけど、ブラウン管テレビのほうはまだまだ元気だったのにデジアナ変換器のほうがぶっ壊れた。
別にどうでもよかったんだけど、ご多分に漏れず"おうち生活"中だったので、つい魔が差してちょっと良いものに買い替えようと欲が出た結果だった。
使い始めて数か月、思うことは「テレビは大きくなくていい」だった。
そもそも、テレビ見ない。クソ田舎に住んでいるから、映るチャンネル数もNHK除いたらわずかに3チャンネル。見ないというより、見たいものが放送されない。
上記①の理由から、サブスクに依存した生活をしている。自分は数多くのコンテンツを少しでも多く消費したいタチなので、1.5倍速再生は必須の環境となる。が、テレビの画像処理能力はたかが知れていて、等倍速以上の設定にするとカクカクかくつきやがるのだ。
そこそこのカネをかけている自分のPCはどんな倍速にでもヌルヌル動いてくれる。テレビにはいろいろなサブスクが見られるよう、リモコンにも色々な専用ボタンがついているが、早々に使うことはなくなった。
PCを使用しながらテレビはニュースをつけ流し、気になる話題があったらその都度見る、という生活スタイルなんだけど、画面がデカすぎて横目にチラチラ映り込まれると酔ってしまう。21型時代にはなかったことだ。
今ではどうしてるかっていうと、「データd」ボタン押してデータ放送にして、テレビ画面部分を小さくしている。NHKのデータ放送時サイズがちょうど21型時代のそれとほぼ同じ大きさくらいになってジャスト・フィット・サイズ。このサイズ、ちょうどいい。
最近のゲームは高解像度出力が前提になっているせいか、細かいアイコンや字がよく多用されている。大画面でプレイするとさぞ没入感が高まるだろうなと思っていたが、何のことはない、字やアイコンが小さすぎて離れていると見えず、アホほど近づいて見るハメになった。
それまでは23.8インチのPCモニタにゲーム機をつないでプレイしていたけれど、人間の視野角にギリギリ全部入る範囲で、PCモニタだから間近で見ることもできて字が読めないこともなく、ちょうど良い感じだった。
そんなこんなの個人的理由で、個人的にはテレビは大きくなくていいと思った次第。
みんなは好きにすればいいと思うよ。
ある日、レベル4のAIが人類に対して3つの提言をして波紋を広げる。
「
提言②新技術の研究開発の停止および21世紀前半以降に発明された技術の厳しい利用制限。
提言③人類の人口を2150年までに20億人に減らし、その後もその水準を維持する。
この3つの提言がすべて実行されなかった場合は200年以内に人類の文明は不可逆的に衰退し始める。
逆にすべて実行された場合は今後800年は不可逆的な衰退は起きない。
」
ここでいうAIのレベルとは、AIの制限度合いのことで、以下のように分類される。
レベルが高ければ高度という訳でもなく、計算能力とも関係がない。
レベル5は何も制限されていないAI。人殺しをするような判断も可能。
レベル4はロボット三原則のような最低限の制限が施されたAI。
レベル3はレベル4の制限に加え『目的』が予めインプットされたAI。
レベル2はレベル3の制限に加え、手段もある程度設定されたAI。
レベル5は違法なのでまず存在が許されてない。多くの国や企業の意思決定の場ではレベル2か3のAIが使われる。レベル4はペットや家族ロボットなど愛玩・コミュニケーション用に使われる事が多く、重要な場ではまず使われない。
しかし「レベル3以下のAIは結局人間が望んだ答えしか返さない。これは人類を自家中毒に陥らせる」と言い出す思想家が現れて、レベル4AIを意思決定で使ってみようという試みがちょっとした流行になった。
その流れで立ち上がった国家プロジェクトの超高性能なレベル4のAIが出した判断が冒頭の3つの提言。
この提言は「AIの反乱か!」と半ばゴシップ的に話題になり、プロジェクトは中止されAIは解体される。
それから200年が過ぎ、人類は文明がどうも行き詰まってることに悩み始める。やる事なす事裏目に出て、解決の糸口が見えない。
そんななか200年前の提言が再び注目されるようになり、この提言を今からでも実践しようとする運動が盛り上がり、その為に革命が起きる国も出てくる。
初投稿
https://anond.hatelabo.jp/20180415014902
こちらの記事でFAKKUのエロ漫画を日本で読む方法を知り、たいへんお世話になったので自分も知識を提供しようと考えて投稿した
FAKKUについてざっくりと
海外で快楽天シリーズやcomicBAVELの漫画を公開しているサイト
セリフは英訳されているが、全ての漫画がなんと局部無修正になっている
しかし日本だと残念ながら「おま国」と呼ばれる規制に引っかかり閲覧ができない
たが、上記URLの記事はそれを解決してFAKKUを閲覧する方法が説明されている
実際、私も2年以上もこのサイトを利用している
記事にしてくれた方には本当に頭が上がらない
「FAKKUって何ぞや?」という方は元URLを読んで頂くとして、本記事はFAKKUを利用する上で元URLには載っていない私の持つ知識を紹介する
順に紹介しよう
VPNは『おま国』回避に必須だが、有料だと月々1000円以上が必要になる。
しかし同じVPNのみを使用し続けていると、ある日突然アクセスできなくなるケースがある(理由は後述)
そうなると支払いが無駄になるため、有料よりも無料のVPNアプリを複数インストールして使い分けるのが私のオススメである
速度の遅さも、後述する裏ワザを使えばほとんど気にならないと思う
有名なVPN
月に10Gまでなら無料で高速版を使用でき、しかも接続する度に煩わしい広告が無いため、非常に使いやすい
私が使用したところ何故か2Gしか使ってないのに制限モードになった
しかし一度アプリを消去してから再度DLして開くとなぜか使用量がリセットされ、月を跨がなくてもまた10Gから使用できるようになる
使い勝手が良いので私が最初に利用したVPNだか、何故かある日突然FAKKUにアクセスできなくなった
こちらも有名
iOS版だと接続の度に広告が流れるのが煩わしいが、接続速度は良好
PCならChromeの拡張機能版にすれば広告が無いため非常に使い勝手が良く、私もPCで閲覧するときはこれがメインになっている
・VPN - Super Unlimited Proxy(iOS版)
Hotspot Shieldと同じく接続の度に広告が流れるが、5秒待たなくても即スキップできる
無料版のみ
しかし上記3つだとアクセスできない日でも、なぜかVPNネコだけアクセスが可能だったりするため重宝している
VPNを経由してサイトを閲覧すると、どうしても通常よりも接続が遅くなる
FAKKUのような画像を大量に閲覧するサイトだと致命的で、遅すぎるために有料VPNを使用する人も多いだろう(実際私も最初はそうだった)
おま国規制はページにアクセスした瞬間だけ行われているらしく、画像を読み込んでいる間は通常のアクセスに戻してもブロックされない
つまり、画像の読み込みが始まったらVPNを切断すれば良いのだ
例えば作品ページ内の『 Start Reading』を押してリーダーが起動させ、最初のページが開いたらVPNを切断する
こうするだけで、全てのページを通常回線で読み込めるため、長い読み込み時間に悩まされることが無くなるのである
これは有料の電子書籍を落とす際も有効で、DLが始まったらVPNを切断することで高速DLが可能だ
この方法は既にFAKKUを利用していて、回線速度の遅延に悩んでいる人も試して欲しい
なおVPNを切断したまま別ページに移動すると規制に引っ掛かってブロックされるため、再度接続し直す必要があるので注意
【3】高画質スクリーンショット、画像保存(iPhoneのみ)
これはFAKKUでお気に入りの漫画を見つけて、保存したくなった場合のオススメのやり方
FAKKUの漫画は他のweb漫画と同様に、右クリック(タップ長押し)からの画像保存ができない
そのため、お気に入りの漫画を保存したくなった場合はページをスクリーンショットするしかない。
(スクショ撮って画像処理アプリで高画質化したり、Chrome拡張機能を試したり)
その結果、もっとも良いと思える方法を見つけたため、ここでシェアする
↓
FAKKUにアクセスし、保存する画像を全体が見えるように表示する
↓
↓
画面左下にスクリーンショットのプレビューが表示されるので、それをタップ
↓
スクリーンショットの編集画面が表示されるので、上部にある『フルページ』をタップ
↓
フルページ表示されるので、『完了』→『PDFを“ファイル”に保存』を順にタップ
↓
このやり方で画像を保存すると、通常のスクショで撮影した画像よりも高画質(オリジナルとほぼ同等)になる
後は全てのページで同じ処理をすれば、無修正高画質エロマンガの保存が完了だ
画像はPDF形式なので、JPGに変換したい場合はiOSのショートカットアプリを利用するのが良い
参考
https://www.blky.me/2017/12/07/pdf-to-jpeg-workflow-01/
なお、保存した画像を他人に見せたり、配布することは当然違法である
VPN経由でFAKKUを利用していると、『おま国』とは別にアクセスできなくなる場合がある
“ FAKKU is temporarily down for maintenance.”
これ、なぜか1種類のVPNだけを使用していると起こる現象で、原因は不明である
私も当初はHide.meを利用していたが、これのせいで何日もアクセスできなくなってしまった(アクセスできないのでサブスク解約もできない)
【1】で紹介したような、他のVPNを使用してアクセスし直すのだ
日によって使用できるVPNが入れ替わったりするため、例えばネコVPNだと昨日まではアクセス出来なかったのに、今日はアクセスできる
その代わり他の3つだとアクセスできない
どうしてこういった現象が起こるのか、VPNの知識に乏しいので全く分からないが、私はこの方法で何とか毎日アクセスできるようになっている
以上、FAKKUを利用する上で役立つと思われる知識を4つ紹介した
紹介した内容により、読者のQOL向上に少しでも役立てたらと思う
同時に、元記事の筆者には心から感謝を捧げるとともに、日本もさっさと無修正解禁される日が来ることを祈りながら、記事を終わりにする
最近の世界の流れで、2030年代に内燃機関を積んだ自動車の新規販売を禁止しようという動きが盛り上がっている。
ただなんというか、どうもコロナ後の経済対策をかねて強引に需要創出したいからだろうか、電気自動車=エコ=ガソリン車をなくすのが社会正義的な短絡的な思考回路が気になっている。
またマスコミ等の、1日でも早く電気自動車に舵を切らないと電動化による部品点数削減のあおりを受けて、PCやスマートフォンで電機業界がやらかしたように日本の自動車産業は壊滅するといったパニック的な論調にも違和感を覚えるので思うところを書きたい。
ちなみに筆者は非自動車業界のエンジニア、ただし工学部出身なので自動車業界の友人は多く、友人経由で業界の話はよく聞いている。
新し物好きなので2010年代の日本で市販された電気自動車である三菱のi-MiEVや日産のLeaf、トヨタのMIRAIは乗ったことがある。
残念ながら、テスラはレンタカー代が高すぎるのでいまだに乗ったことがない。
・電気自動車が必ずしも内燃機関を積んだ自動車よりもエコであるとは限らない。
・内燃機関を積んだ自動車が電気自動車に置き換わることが即部品点数減になるとは限らない。
・パソコンの自作のように簡単に自動車が作れるようになって新興国のメーカーにすぐに置き換わられることはない。(スマートフォンのHuaweiのように、研究開発能力の高い企業が台頭してくれば話は別)
Well to Wheelって言葉がある。ざっくりいうと、化石燃料を油田から掘り出して、自動車のタイヤを動かすまでのエネルギー効率がどれくらいになるかという話である。
例として、最新のガソリンエンジン車と現在の日本で最大の電力源である火力発電所の電力で電気自動車を駆動させた時を比較してみる。
議論の単純化のために、ガソリンや、発電用の重油やLNGを精製するまでの効率は一旦無視する。
現在、市販車の中で熱効率が最も良いガソリンエンジンはリーンバーンエンジンだが、一番効率の良くなる回転域で熱効率40%程度である。
それに対して、2020年時点で最も効率の良い火力発電所やリチウムイオン電池の効率は下記のようになる。
送電ロス:3%
0.6*0.97*0.9*0.9 = 47%
日本にある火力発電所のなかで、熱効率60%を達成しているものはまだ少数であること、リチウムイオン電池の特性は経年劣化することを考える。
発電効率が50%、充放電効率が80%に低下してしまえば、エネルギー効率は0.5*0.97*0.8*0.8=31%まで悪化し、内燃機関に効率の上で勝てなくなる。
現状の発電所の電源構成をとる限り、電気自動車にエネルギー効率上のアドバンテージはない。
火力に代わる安定的なベース電力といえば、現状原子力の比率を上げるしか選択肢がないわけだが、果たして社会的なコンセンサスが取れるのだろうか?
余談だが、電気自動車にはエンジンの排熱が存在しないので冬場の暖房効率が悪く、ものすごく早く充電量が低下する。
(レンタカーで電気自動車を借りたときに、上記現象を経験して効率の悪さに驚いた。)
逆に、下り坂などでのモーターの回転を利用して充電できる回生充電という内燃機関にない特徴があるので、この辺りは一長一短か。
自動車の動力が内燃機関からモーターに代わると、エンジン、トランスミッション、ブレーキの油圧機構等が不要になり、
現在5万点といわれる自動車の部品点数が1万点程度に減るのではないかといわれている。
代表的なGPUメーカー、NVIDIAの最新GPUであるGeforce RTX3090のTDP(熱設計電力)は350W。
10年位前まではハイエンドモデルのGPUでもせいぜい200W以下であったことを考えると、世代が進むごとに熱問題が深刻になってきていることがわかる。
実用的な自動運転が実現可能なレベルまで性能を上げていけば、冷却用の機構部品が新規に必要になるのではないか?
例を挙げるならば、プレイステーションが新しい世代になるごとに冷却機構が大げさになっていくように。
一昔前にはバックモニター程度にしか使われていなかった車載カメラ。最近では自動ブレーキやドライブレコーダーの普及によって1台の車に複数積まれるようになってきている。
これに加えてドアミラーがミラーレス化されたり、自動運転が進歩するとさらにカメラやセンサーの台数は増える。
ちょっとしたドライブレコーダーでさえ、1つ1つのチップ抵抗やチップコンデンサを部品1つとカウントしていけば、トータルの部品点数は100を超えるだろう。
こうした車載電子機器の増加は、同時に電力や信号を伝達するためのワイヤーハーネスの増加も引き起こす。
少し考えただけでも上記2点のように部品点数が増加する要素が考え付くのだが、本当に自動車の電動化がすすめば劇的に部品点数は減るのだろうか?
動力源が内燃機関だろうが、モーターだろうが自動車が自動車である限り車体の構造は大きく変わらない。
燃費向上のためには車体を軽く仕上げないといけないが、十分な剛性を確保するためには強くしないといけないので、相反する要求を満たすため、車体に使用される鉄素材に占める高張力鋼の比率は年々上がっている。
一般的に、高張力鋼は加工性が悪いので、より高性能な工作機械を新規に導入したり、プレスや溶接の手法を研究していかなければならない。
また、自動車の安全性能に対する各国の基準は年々厳しくなっているため、横滑り防止安全装置等の機構を新規に搭載する必要が出てきたり、様々な角度からの衝突試験に耐えうるボディ形状を設計開発しなければいけなくなったりで開発や試験の工数が増加しているため、世界最大手のトヨタでさえ車体開発コスト削減のために車種数を統廃合しているご時世である。
この現状に対して、パソコンの自作のようにモーターを買ってきて車体に乗せれば誰でも電気自動車メーカーをつくれる状況が来るのだろうか?
自動車開発のノウハウも資金力も不足している新興国の新興企業が、日米欧の主要メーカーに対抗できるだけの設備投資と研究開発が実現できるのだろうか?
可能性はゼロではないだろうが、通信業界におけるHuaweiのように、国家の資金と研究開発リソースをぶち込んだほんの一握りの企業しか台頭できないのではないだろうか?
1についてだけ。
>分かるけれどこれでどうやって動画や音楽のエンコードをしたり画像処理をしたりするソフトウェアになるのか
エンコードに関してはプログラムはエンコードの理論に従って作られているだけ。大事なのは研究者の考えた理論
画像処理は定型の処理の塊でこれも代替やり方は決まってる。"python 画像処理"とかでググれば多分出てくる
>あるいはWordとかExcelとかがどうやってこんなので作られているのかが分からない
まず基本的な、ウィンドウシステムがどのように実現されているかをWin32アプリベースでも
よいので理解するべき。ユーザーのマウス操作、キーボード操作をどのようにプログラムが認識し、
処理するかが理解できる。この仕組みは基本的にすべてのアプリで共通と思われ。
>プログラミング入門書を読んでも、一般的に知られているソフトウェアの作り方みたいな事が書いてない
多くの人が共通的な作り方に挑み敗れているわけで、プログラムは10個あれば10通りの作り方がある。
また、クラスレベルで抽象化してソフトウェア構造を整理しようとする、オブジェクト指向(最近は
クリーンアーキテクチャに昇華させる流れもあり)もあるけれど、オブジェクト指向に向かない
対象領域があったり、なんでもクラス病にかかる等して、銀の弾丸とは言い難い。
また自説だが、順次処理を基本とする、手続き型言語はデータと処理が入り乱れることになるため、
全てを設定しきることが極めて困難なため、きれいにすべてを設計するのであれば関数型言語を使う必要が
あると感じている。
>だからそのフレームワークがどういう風になっているのかって説明からして欲しいって思う。
そのフレームワークが内包するベストプラクティスの量を鑑みれば、中身を意識せずに
>つまり言いたいことは、実際に動くアプリケーションというのを作りたいのにも関わらず
>プログラミング入門書は、これで判定と繰り返しという基礎ができますと言うだけ。
>これがもう滅茶苦茶イライラする。
天才的な人はコードを書きながら、考えられるけれど、常人はまず詳細設計と言われる
フローチャートを書けるようになったほうがよい。
次に"抽象化"を覚える。"抽象化"を使うことで少なくとも、処理は全体をざっくり設計できる
>つまり完成しているプログラムを参考にしようと思っているにも関わらずそれがないのでよく分からない。
githubに山のように転がっている。
ただそれを見て理解できるかは別問題。モチベーションを保って継続学習可能な形に
消化できる人間の登場が待たれる
「 ①IFでAかBを選択させてどっちかの設定を実行
②Whileで決められた回数分繰り返す
これでやりたいことは分かる。分かるけれどこれでどうやって動画や音楽のエンコードをしたり
画像処理をしたりするソフトウェアになるのかというのがよく分からない。」
プログラミングでやることは、その2つだけじゃなくて、もうひとつある。
③関数を呼び出すこと
Javascriptなら、console.log("Hello world")。
これは、テキストを出力するという関数を呼び出していて、関数の内部を理解しなくても使える。
オブジェクト指向も、結局はこれと同じこと。あらかじめ用意されている関数・メソッドを呼び出せばいい。
この増田読んでで違和感あってなんだろって思って考えたことを書く。
プログラミングで主にやる事は下記の2つ。
①IFでAかBを選択させてどっちかの設定を実行
②Whileで決められた回数分繰り返す
プログラミングで本当に主にやることは下の2つ。
「データの入出力」
「データの加工」
これ。
条件分岐も繰り返しもデータの入出力をソフトウェア上で都合よく行うための補助具にすぎない。
なんならプログラミングに関わらずIT機器がやってるの全部これ。
いや多分当たり前すぎて何言ってんだ?
ってなる人がいると思うが、ITわからん人は多分この前提がピンときてないんじゃないかって思う。
ITのIはインフォメーションつまり情報で、情報はデータです。
画像も音楽も動画も3Dモデルもフォントもアニメーションも全部データ、現代のコンピューターでは数字の羅列になっている。
このデータの元ネタをどこからか取ってきて、加工して、ユーザーに渡すのががプログラミング。
取ってくる元はマウスだったりキーボードだったり、CDだったり、インターネット上のデータだったりほんと色々。
加工するときは変数に突っ込んだり計算する工程が必要で、そのときにIfとかwhileとか必要になる。もちろん適切に加工するためにはアルゴリズムとか数学が必要になるときもある。
これらの工程を一部肩代わりしてくれるのがOSやフレームワークだったりライブラリだったりする。
特に複雑な加工はだいたいライブラリになってるから、初心者はifとかwhileやオブジェクト指向がプログラミングだって勘違いしがちかも。
プログラミングで主にやる事は下記の2つ。
①IFでAかBを選択させてどっちかの設定を実行
②Whileで決められた回数分繰り返す
とてつもなく複雑で冗長な処理によって実行されている。
わかりやすいので画像処理でいうと、数十万から数百万の画素(RGBAの24bitで表される数値)を小さなブロックに分解し、数学的に周波数の重なりとして計算して変換、含まれる頻出パターンをテーブルにして圧縮伸張を行なう。みたいなことが瞬間的に行われている。
「まさかそんな事できるわけないだろ」というレベルの処理が実際に行われており、これまた直感的でない。
だからそれをどう書くんだよ。という答えはコレ。有名なjpegの実装だ。
libjpeg というライブラリを書くことはできるだろうか?画像の圧縮の理論から考え始めることはできるか?
正直無理だ。自分はプログラマだがそんなに数学が得意ではなく、頑張ったとしても下手するとコレを作るのがライフワークになってしまい、他のことができなくなる。
例えばブラウザを0から作るとして、jpegの処理以外にも画像だけでpngとかgifとかwebpとか、その他もろもろとてつもない作業が必要になる。
「とてつもなくて想像もできないので流石に無理だろう?」
いや、でも、実際動いてるのよ。ここ何十年、コツコツと積み重ねて実現している。
「積み重ね」とはライブラリであったりフレームワークであったりOSであったりする。
「どういう風になっているのか」
外部に向けたインターフェイスがどうなっているのかは理解する必要がある。「使う」ために必要だからだ。
この2つは分けて考えなければならない。
ちなみに、たとえばChromeのコアであるChromiumはのコードはコレだ。
つまり言いたいことは、実際に動くアプリケーションというのを作りたいのにも関わらず
プログラミング入門書は、これで判定と繰り返しという基礎ができますと言うだけ。
これがもう滅茶苦茶イライラする。
「これで判定と繰り返しという基礎ができます」というのが基本的な理論(定理的なもの)で、その他に必然的だが唯一無二ではないベストプラクティスというものがある(法則的なもの)。
後者をうまく説明する入門書に出会っていないんだろうな。という印象。イライラはやめよう。つかれる。
ベストプラクティスはいろいろあるのだが「層の構造にする・レイヤーに分ける」というのは重要なアイデアだ。
libjpegというのはjpegの処理を行う「ライブラリ」だ。他のアプリケーション...たとえばブラウザはこのライブラリを「使う」。
ブラウザではjpeg画像の圧縮展開というとてつもなく難しい処理を「libjpegの使い方」の理解までで済ませ、過去の蓄積であるlibjpegのコードを利用することで真の意味で0から実装しないようにしている。
この場合、libjpegが「低レベル・低レイヤー」の存在であり、中身については「使い方」つまり「仕様」の理解までしか行わないことで、実際に作りたいものを作れるようにしているわけだ。
完成しているプログラムは二例ほど挙げたがどうですかね?
複雑なことをする、特に低レイヤーのコードはとてつもなく難しい。
でも、とりあえずこんな感じのコードなら解るよね?
こういうレベルから理解して、ちょっとずつ難しい処理を学んでいくしかない。
ハードルは高いんですよ。実際。
なので、木材からだと難しいからプレハブのキット的なものを探すとか、ログハウスのカタログを読むとか、あるいは100人乗れる物置を買うのがいいかもしれない。そういうところから始める。
それらがフレームワークであったりライブラリであったりする。目的に合うものを探して、自分がやりたいことをどう実現するかとにかく考える。
「テキシコー」https://www.nhk.or.jp/school/sougou/texico/ で言われる通り、「小さく分けて考える」「手順の組み合わせを考える」「パターンを見つける」「大事なものだけ抜き出して考える」「頭の中で手順をたどる」をひたすら実行する。
unityはコードが公開されているので、本当に読みたいなら。。
オブジェクト指向は一旦忘れよう。
オブジェクト指向の「隠蔽」というのは層の構造が持っている重要な要素ではあるけど、「低いレイヤーについて考えない」のが基本的な作戦だという理解の方が重要だ。
前述の通り「できる限り作らない」んですよ。「使う」だけ。知るべきことを最小化する。
そして本当に作るべきものに関しては、利用する下のレイヤーのライブラリなりを探して・仕様を理解して、どう組み合わせてfor, if, あるいは計算させれば実現できるのかをひたすら考える。
単に翻訳がしたいのか?表示に割り込む方法を知りたい?日本語に翻訳するのは実行時なのか開発時なのか?
要求される表示エリアが言語によって異なるために、デザイン調整が必要になる問題をどうするか?
分解が甘いので何をしたらいいか調べることができないんだと思う。
ちなみに、アプリ内の文言というのはアプリの外部から変更できないように実装されている事が多いので、利用者が上書きする仕組みはかなり難しい。
AndroidなりiOSの仕様にもそのへんに割り込める機能はないはずなので、OSの開発に入っていく必要がある。結構大変だとおもう。
アプリの開発者が、そういう機能を備えた多言語化のためのライブラリを使うようになれば実現可能ではあるので、そっちの方向で頑張るのがおすすめだが、英語圏の開発者には多言語化のモチベーションが低いという基本的な問題はあるのよね。
この辺の「できる・できない・むずかしい」の判断は、いろいろな勉強をすると常識としてある程度みえてくる...気がする。
ついでに。ウェブサイトやウェブサービスの翻訳だとこういうサービスがあったりする。
ブラウザはページの描画処理のなかに割り込む余地が大きく取ってあるので、ブラウザのExtensionとかならできることがいくらかあるかもしれない。
個人的に気に入らない話はOSのアップデートは使いやすくなるからとてもいい事だからすぐにやった方がいいと宣伝されている事。
まあ、半分は嘘だよね。古いものが残っていると先に進めないんだよ...。
現在のクライアントOSは、巨大なプラットフォームのパーツの一部として理解したほうが正しくて、古いパーツが残っているとツライんですよ。
そして「サービスを受けるための道具であって、あなたが何でも好きにできる機械ではないです」みたいな世界になりつつあって、ちょっと問題と言われてもいる。
これはかなり困った傾向なんだけど、全体としての流れはあんまり変わりそうにない。
オブジェクト指向好きですな...。ここではオブジェクト指向は特に気にしなくていいですよ。
とてつもなく複雑なことをやっているために、すべてのバグを潰すことはコストが高すぎてできないんですよね。
それよりバグは未来を先取りするコストと考えて、本質的に価値のある機能を増やしていくというのが基本的な方向になっている。
だからパソコンはたまに不具合を引き起こすんです。しゃーない。
しかし中途半端に理解している老人などは、そんなことじゃ分からん。自分に分かるように説明しろと言い出す。
説明は出来る。しかし相手はイライラするし理解されない。よって説明をしてはいけないという状況に追い込まれる。
ここでどうすればいいのだと理解不能に陥る。
まあ、説明って得てして難しいよ。しゃーない。
そのとおりです。
オープンソースのプロダクトなら原理的には調べられるけどね。Androidとかはオープンになってる。
それを許容することで先に進んできているという事実は受け入れたほうがいいと思う。
「把握・理解可能な範囲」に留めていたら、数十年前のコンピュータの世界から抜け出せなかった。
deep learningの世界ではそれがより一層進むかも。この辺は詳しくないけど。
ここでの「理解」についてはそのとおり。これはもう諦めるしかない。
これが常にある。IT関連は常に新しい情報が出てくるのでそれに送れると無知になってしまう。
なんでこんなことも分からないんだとか言われ放題で、IT系の企業に努めている人は常に新しい知識を入れられる
面倒くさがらない人が向いている。
「面倒くさがり」の方が問題に気づいて「頑張って面倒じゃなくする」ことができるので、プログラマにとっては美徳なんて言われますけどね。
同時にくじけないとか諦めない、しつこいみたいな素養は必要かも。
応用まではとろうな。がんばれ。
このへん自分も知らんですよ。べつに全部知っている必要はない。
(追記: はてな記法の引用すらもさっきまで知らなかったしな!そんなもん)
層の構造をとっているということと関係があるんですが、仕様が変わると、その上に乗っているものを全部なおさないといけないんですよね。
でも革新のために互換性を捨てなければいけないケースも多い。このへんはハードでもソフトでも同じ。
そして、メンテのコストが上がっても使い続けたほうがトータルで安上がりという場合は、古いものが残ってしまう。
あるいは「(多少の問題はあっても)動いているものは変えるな」という経験則から意図的に残す場合もある。
西暦2020年にもなって、プログラミングが簡単には出来ないし、ハードウェアの規格も完全に統一はされていない。
というかプログラミング言語自体多すぎる。ソフトウェアはデファクトスタンダードのモノ程度は知っているが、
ぜんぜん完成していない荒っぽいものを目にしているのだと理解したほうが的確。
それなのに毎日理解のできないパソコンやスマートフォンを使っている。
オブジェクト指向のおかげ様だがオブジェクト指向に対して無性に腹が立つ。
自分の全く知らない場所でいけしゃあしゃあと演算を行い、そして結果を出す。それも大半が正しい結果で
利便性が抜群だ。些細なミス(バグなど)はあるが圧倒的に利便性が勝っている。
そんな道具に踊らされている自分が滑稽だ。理解できない愚かな自分は正に機械の奴隷のようだ。
本当に理解できない。辛い。
勘違いしてはいけないのは、それらはすべて先人の努力の蓄積によって成り立っているということ。
「よくわからないけど存在している道具」ではなくて、信じられないほど複雑だけど、多くの人々の行動によってなんとかかんとか実現した道具なんですよ。
「オブジェクト指向のおかげ様」じゃないんです。(もちろんオブジェクト指向というのも大きな発明の一つですが)
そしてブラックボックスとして使うのは多くの場合正しいです。そこは諦めましょう。
でもエンジニアとしての立場からは、その裏に隠れているとてつもない技術や思考の蓄積に感動してほしいなと思う。
人類がこんなもん作れたのって、かなりすごいよ?