設計と実装を同時にやるのは…やめようね!!(血涙)
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
記事タイトルの通りですが・・・
先日応用情報の試験勉強をしていたときのこと、キューとスタックのどっちがLIFOでどっちがFIFOなのか全然覚えられねえや、どうしようや、と悩んでいた。
というか同じ悩みは基本情報を受けたときにもあったのだが、なあなあで放置してそのままにしていたのだった。
とりあえず応用情報の試験当日に、適当にググって出て来た情報から覚えやすそうなものをピックアップして、
・キュー = レジ待ち → つまりFIFOや!!!
・スタック → その反対、つまりLIFOや!!!!
ということだけ覚えて臨んだものの、結局のところ試験に影響はなかった記憶。
そして応用情報が終わった今更になってそのことを思い出して、もう少し詳しく調べてみるか?と気になってきた次第なのであった。
なお記事編集現時点で試験結果は未発表だが、そんなレベルでも試験自体はギリギリ受かったくさい・・・
果たしてそんな程度の知識・理解しかないのに受かってしまう資格に意味があるのだろうか・・・?いや通ったのであれば会社からお小遣い貰えるから個人的には文句はないすけど・・・
閑話休題。
とりあえず例のごとく目の前の四角い箱に聞いてみる。
するとそもそもの話、
キュー = queue → 順番待ちの列
スタック = stack → 皿や本、草などの積み重なったモノ
という一般的な英単語が元々あった模様。
はえーなるほど、そもそもそういう英単語が昔からあって、FIFO、LIFOにそれぞれ対応する英単語を当てはめたみたいすね。
いやちょっと待てや。じゃあそのままFIFO、LIFOのままでええやないかい!!!!
そっちの方がLast, Firstついてるからわかりやすいやろがい!!!
なんでわざわざ別の表現を付けてしまうねん!!!
非英語圏の人間からしたらqueue, stackなんて言われてもピンと来ないし、それを知らないと影響が出るような問題を作んなや!!!!
まあそんな道理の欠片もないゴミクレームはおいておいて・・・
英語版wikipediaによると、stackはAlan M. Turing博士1946年頃に使い始めたとのこと。
ん?Turingってもしかしてかのチューリングマシンの人!?はーやっぱ頭いい人は色々すごいっすね(白目)
じゃあqueueはというと、ちょっとよくわかんなかった。
たかだか数十分調べた程度ではそれっぽい情報が出てこないか、ワイ小の英語読解力の問題か・・・
cue:合図(演技開始など)、ビリヤードのキュー、のキューとは異なる語句として扱われるようだが、その一方でqueueは中世(古代?)フランス語のcue, coe:キュー、当時は尻尾という意味らしい、を語源とするみたいな情報もあって、じゃあその古代フランス語のcueと現代英語のcueはスペル同じなのに意味違うんか?となったあたりでもうこれ諦め。
つか完全に明後日の方向だったのでヤメだヤメ!!
ともかくよく例に挙がるメモリの構造がstackであること、直感的にはハードの低レベルな部分の方が歴史的に古いことを考えると、stackが先にアイデアとして存在していて、情報分野の語句としても使われていたんじゃないでしょうか。
んで後からどっかでFIFOの概念が定式化されて、それにqueueという単語を当てはめた感じ?
結局最初の話に戻ると、どうすればqueue, stackとFIFO, LIFOを結び付けられんねんというところだけど、誰にでも覚えやすい方法はなさそうかなあ。
個人的には今回記事を書くにあたって知った、それぞれの一般的な英単語の意味と、その例となるイメージ画像、特にstack → 皿や本が積み重なっているようす、で覚えられそうだけど、、
うーん、正道としてはやっぱり元々の英単語と結びつけけるしかないのかなあ
queue → 列車待ちで並んでいる人
stack → 物理的に積み上げられた本や皿
という感じだろうか・・・いやびみょい、微妙すぎる。。。
■経緯
1年ほど前に普段使いしているデスクトップを使っていろいろハードの勉強をしようとしていたことがあった。
まずメモリを増設するのが簡単と知り、購入、適当にぶっさし、無事メモリが増えて色々と快適になった。
次にCPUも交換できることを聞いて、今のintelCPUと同じソケットで性能が高いものを新品で購入、交換してみるも起動せず・・・
結論としては、CPUの世代が違うとマザーボードが対応していないことがあるためであった、ふぁっく。
社内で探せば買ってくれる人もいそうだったが、勉強も兼ねてそのうち自作PC組み立ててみようとそのまま押し入れにしまいこんでいた。
それを最近になって発掘。
ここ最近は仕事も落ち着いてお金と時間にそこそこ余裕もあったので、いい加減やってみることに。
■構成パーツ
・CPU
intel core i5-9500 LGA1151 9th gen
上述の通り、素人知識で購入して放置していたものを使用する。
普段使いしているデスクトップのCPUもソケットは同じLGA1151であったが、世代が違っていた、確か7世代だったか?んで9世代のCPUにはマザーボードが対応していなかったようす、ふぁっく(大事なことなので2ry)
まあ数万お金を無駄にすることで、逆に強烈に記憶に残ったと思えば、多少はね?(ブチギレ)
・マザーボード
ASRock B365m Pro4
(箱の正面写真でなく、何故か横の写真を撮っていた・・・)
仕事帰りに電気街によって適当に中古でintel CPUのLGA1151ソケットで、
「第9世代」
に対応しているものを購入(ブチギレ)、そもそも対応しているマザボの数があまりなかったので最悪また何か間違えて無駄になっても許せる範囲の額のものを選択した。
確か1万しないぐらいだった、初心者なので相場はよくわかんねっす。
どうせなら新品を購入すべきだったのかもしれない、動作確認されたものなのかよくわかってない。
・メモリ
CFD D4U2666PS-8GC19 288pin DIMM 8GB
ヨドバシで適当に注文。
マザーボードに刺せるもので、とりあえず1枚だけ購入。
結果論だが、2枚組の購入で良かった、まあ結果論よ。
今度本格的に使い始めるときまでに購入するべ。
・電源ユニット
CORSAIR CP-9020103-JP
(光の反射がとんでもないことになっていたので暗めに補正、汚い腕が映っているがまあ気にしない)
これもヨドバシドットコムで注文、正直よくわからんかったが、マザーボードの電源供給のpinに合わせて対応したケーブルがあればよいようなので、その通りに、かつ、評判が良くそこそこ手頃そうなこの子に決定。
これも今思うともう少しサイズが小さいものにすべきだったように思われる。
たぶnマザーボードのサイズと合っていない?
こいつが大きすぎるために、PCケースを大きくしないといけないと思われる。
・SSD
SanDisk SDSSDH3-500G-J25
まあSSDかHDDも必要でしょうということで、これもヨドで適当に注文、これはマジで適当に注文した。
しかも結局今回つないでいない、細かい話は後で本格的に使い始める際の設置時に考えよう。
以上!!!
PCケース?動作確認するだけならいらんでしょ??(ド素人)
■作業
マザーボードを箱から取り出す。
CPUを設置するところのカバーを開ける、カパッと。
放置していたCPUを設置、といってもソケットの向きを揃えて置くだけ。
以前試したときに既に熱伝導グリス?を塗りたくっていたが、これって劣化したりするんだろうか?
よくわからんので、とりあえず余っているグリスを引っ張り出して塗っていく、塗りが汚い、こういうところきれいにできないのホンマあかんな・・・やってて悲しくなってくるで・・・
一通り塗り終わったらカバーを閉める。
CPUの上にクーラーを取り付け。
最初ハマっているのかよくわからなかったが、4隅の器具を時計回りに押し込んでいくとカチッと音がしてハマったようす、はえーワイ小みたいなアホでもわかる直感的な作りしてますなあ(感心)
CPUクーラーのファンの電源コードを対応しているpinに接続する。
場所はマザーボードの取扱説明書で確認。
ゆうてもpinの数とか、形とかあるしあんまり間違えることはなさそう。
メモリを差す。
横の抑えを開いてメモリを上から差し込む、抑えを閉じる。
人生においてメモリを刺すのはこれが3度目だったが、今回は特に固かった気がする。
若干体重かけてしもうたが、冷静に考えてあかんやろ・・・もう少し丁寧に扱おう屋
電源ユニットを取り出し、マザーボードに接続する。
cpuの電源(画像左上らへん)と、マザーボードへの電源供給(真ん中らへn)の2カ所にそれぞれ対応するケーブルをさす。
一応向きがあるようだが、ピンの形状から表裏逆には刺せないようになっているぽい。
そらまあこれで壊してしまったとかシャレにならんし、pinの規格自体がミスを防止する形になってんねんやろうか。
ディスプレイのケーブルを接続する。
コンセントを電源ユニットに接続する。
よーーーーーーーし、これで一通り接続したはずや!!!
ということで、電源ユニットの電源ボタンをONにするする。
・・・・・
あれ?点かない?
ナンデ??
またオレ何かやっちゃいました?(nru系)
ざっくり調べると、電源ユニットの電源ボタンとは別に、電源をONにしたことに対応する信号、つまり、デスクトップPCのケースでいうところの電源ボタンを押したことに対応する信号、を送らないといけない?そらそうか(沼)
記事を漁っていると、ドライバーみたいな金属で対応するpinのプラスマイナスを触れればいける、みたいな記述を見かけたので試してみる、反応なし、無茶苦茶なデマ流しよってからに・・・お前これで壊れてたらどうしてくれんねや!!!(自己責任)
とはいえ今更PCケース買いに行くのもな・・・
しゃーなし大人しく電気街へGO!
適当に店を見て回っていると、自作パーツのところにテスト用に電源ONを行うことができるという部品を発見。
いやこれじゃね??!!?!?!?
ついでに電源ユニットのテスト器具と一緒に購入、速攻帰宅。
というわけで購入したこ奴らを早速試してみる。
まず電源の検証から。
マザーボードに接続していた電源ユニットのpinを外す。
テストのpinに接続する。
電源ボタンONすると、ユニットのファンが回って、テストボード(?)のLEDランプも点灯!
おーええやん(感動)
いや冷静に考えて電源ユニットは新品買ったんだからこんなことする必要なかったのでは・・・?
まあそこは気にしたら負けや、続いてテスト用のスイッチをボードに接続する。
本来はPCケースの電源ボタンから伸びているコードがあるようで、それらを接続するものらしい。
そらまあボタン押したら何らかの形でその情報を伝達せなあかんわけやから、そういうものあるに決まってるわなあ!!!(威圧)
何にせよ試すZOY!!!
再度電源ユニットのボタンをON!!!
テストの電源ONOFFボタンをポチっとな!!!!
・・・・?
お?画面に何か表示されたが?
F1かF2を押せというので押す。
おー!!!
なんか独自BIOSっぽいものが表示されとるやんけ!!!11!!!2233”!!!!!
OS入れないとこれ以降どうしようもなさそうやけど、とりあえず最低限の動作確認はできたじゃん!!!!やったね!!!!
つか結局SSD使ってないけど、まあええか!!!
今度CentOSかUbuntu入れるときに考えようや
■まとめ(?)
とりあえず最低限のパーツで、何か表示させるところまでやるだけなら、
・CPU
・マザーボード
・メモリ
・電源ユニット
・電源ONの信号を送るためのテストボード
・キーボード
・ディスプレイ
でできるみたいっすね。
もちろん各パーツが正しくそれぞれつながるように規格を合わせないと、1年前のワイ小みたいに危うく数万円を虚無に葬ってしまいかねないが、まあそれも勉強じゃない?(他人事)
あとはこいつらが入るPCケースを買って、適当なlinuxOSをUSBか何かに入れてインストールすればええんかな?また今度やってみよ
例のごとくまずはまとめから。
■結論
BIOS設定から仮想化をONに切り替えることで、android stdio上でのhaxmのインストールに成功、そのままandroidのエミュレータを動かしてサンプルappを動かすことができた。
■経緯
先日aws上にkotlinの開発環境を用意したはいいが、そもそもaws上でGUI開発をどうすんねんとざっくり調べてみたところ、色々と準備が面倒なことが発覚。
ちょっと右往左往しつつある。
手段と目的を混同しているのはよろしくない。
今はちょっと作ってみたい簡易アプリのアイデアがあって、どういう環境で勉強しながら開発するかは重要ではない。
ということで大人しくローカルのwindows10homeにandroid stdioを入れた。
javaもkotlinも全く触ったことはないが、まあここしばらくC++で通信ゴチャゴチャするCUIソフトに係わったり、pythonで簡易ツール用意したり、強制的にlinux環境で仕事したりで、徐々に知識も身についてきたからなんとかなるっしょ!!とまずサンプルを動かしてみようと試みる。
がそもそもandroidのエミュレータが動かない?
なんでじゃい!?!??!??
どうやらHAXMのインストールに失敗しているようす。
ログを見ろと言っているので、該当ファイルを見てみる、C:\Users\ユーザー名\AppData\Local\Tempを開く、haxm_install_yyyymmdd_hhmmのテキストファイルを開く。
Version: 7.6.5
Output folder: C:\Program Files\Intel\HAXM
Extract: checktool.exe... 100%
Execute: C:\Program Files\Intel\HAXM\checktool.exe --verbose
CPU vendor * GenuineIntel
Intel64 supported * Yes
VMX supported * Yes
VMX enabled - No
EPT supported * Yes
NX supported * Yes
NX enabled * Yes
Hyper-V disabled * Yes
OS version * Windows 10.0.19041
OS architecture * x86_64
Guest unoccupied * Yes. 0 guest(s)
The system requirements are not satisfied.
??!?!??
いやこんなん見てもさっぱりですがな・・・
そのまま読む限りは、VMX enabledがNoになっているのがダメそうかね。
同じような症状の人がいないかググってみる。
全く同じような状況はなさそうだったが、どうやらwindows10Homeだと複数OSを動かすような機能がONにできないようす。確かにHyper-Vの設定とか去年ぐらいに開発作業でなんかそこらへんの設定いじらされた気がするなあ(まるで成長していない・・・)
どうしたもんかと記事を漁っていると以下の記事を発見。
http://syrup-factory.com/memo/archives/31
VirtualBoxの話だから少しずれてるか?そもそも今HAXMがインストールできていない原因がここにあるのかが明確でないわけだが・・・
とはいえ既に色々と汚染されているwindowsマシンだし、試しにやってみることに。
とりま再起動、lenvoなのでロゴが出ているときにenter入力でbios画面へ。
AdvancedからCPUSetupでそれっぽい項目を探す。
Intel(R) Virtualization Technologyがdisableになっとる、項目の説明文を読むに、パーティションによらず同時に複数のオペレーティングシステムを動かすことを可能にするうんぬんと記載がある、うーんこれかな?
物は試し、enableに変更して再起動。
再度android stdioを起動してHAXMのインストールを試す。
が、失敗。
何があかんねんや・・・
一応失敗のログの内容は変わっているようだが、ログの該当フォルダを再度参照すると、そもそもそのフォルダが存在していないようす?
ちょっとまた沼ってきたな・・・
一旦仕切りなおして適当に記事を漁ると、android stdio→tool→SDKManagerからHAXMのインストーラをダウンロードして実行すると良いという話を発見。
その通りにtool、SDK Managerからインストーラを取得、インストール実行、うん?成功しているのか?
とりあえずサンプルプログラムをビルド、実行してみる。
がうまくいかない、エラーログをみるとまだandroidのエミュレータが立ち上がっていない?
しばらく待っていると、エミュレータが立ち上がり、無事androidの仮想環境を操作できるようになった、おおー。
そのままサンプルアプリを実行。
おーちゃんと画面が反応しているやん!
とりあえずこれをもとに改造していく形でjavaもといkotlin勉強すっかなー。
色々迷走したが、ネットの情報は基本的にあてにならんな・・・(おまいう)
ということで、以下記録。
■やりたいこと
aws cloud9でandroidのアプリを作る環境を用意したい。
→当初はpython+kivyとやらを利用しようとしたが、kivyのpip installが最終的にうまくいかなかったので断念。
そもそもpythonでandroid appの勉強をしようというのが前提として間違いなのでは・・・?
→おとなしく現状一番主流(?)なjava+kotlinにすることに、まず最低限のビルド+実行の環境だけ作ってみる。
■右往左往した流れ
ググってまず見つけた日本語記事、が微妙に記述がおかしくないか・・・?
https://hi-algorithm.com/cloud9-kotlin/
同じような英語記事を発見、こちらをまず参考にすることに。
https://danielllewellyn.medium.com/kotlin-in-aws-cloud-9-74c6da4dbd79
とりま順番にコマンドを実行する。
sudo yum -y install java-1.8.0-openjdk-devel
sudo update-alternatives --config java
→1.8.0を選択
sudo update-alternatives --config javac
→1.8.0を選択
→ここまではおk、が次のコマンドがよくわからんことになっている・・・
どうやら公式情報
https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/sample-java.html#sample-java-sdk-creds
を見るに、単にコマンドの区切りがされていないだけ?
※いやこの記事も横幅制限で改行が変なところでされてしまいそうだが、まあいいか(放置)
公式が正しいやろということでそっちを参考に実行する。
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install gradle
が、gradleのinstallで失敗、どういうこっちゃねん・・・
javaは全然知らないが、Mavenの方のインストール手順を順に実行。
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
sudo yum install -y apache-maven
最後のyum installのところで容量が足りんと怒られる。
マジか・・・つかデフォルト10GBしか割り当てられていないのか・・・
ググって暫定的に容量を20GB増やす。
https://ri-dream.net/blog/aws/aws-cloud9-volume-change
mvnが入ったことを確認。
mvn -version
よくわからんがプロジェクト作成、いらんのでは、この手順?
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
と、ここまでやって、そもそもmvnじゃなくて、kotlinをsdk installするという話なのでは??と話が戻る、もしかしたらmvnは必要なかったのかもしらん・・・
sdk install kotlin
インストール成功したっぽい・・・えぇ・・・
適当に拾ってきたhelloソースをコピペ
public class hello {
public static void main(String []args) {
System.out.println("hello kotlin");
}
コンパイル
kotlinc hello.kt -include-runtime -d hello.jar
実行
java -jar hello.jar
一応これで出力されたので、最低限勉強し始める環境はできたんじゃないでしょうか。
ほんとうか?android画面の実行確認とかawsでどうすんねや??
まあそのあたりは、javaとkotlinの勉強しながら今度用意しよう・・・
スポンサードリンク
スポンサードリンク