2019年10月13日日曜日

AIとか

台風がきまして、身動き取れませんし、長い散文おば。

先日碧き鋼のアルペジオの18巻を買ったのですが、話が繋がらないなと思ったら17巻を買い逃していました。で、過去の巻を読み返していて思い出したのですが、15巻が微妙に不人気なんだとか。

この15巻、メンタルモデル(機械的なエイリアン「霧の艦隊」が人間の思考を理解する為に姿と思考を模して作った人間シミュレータ)のハルナとキリシマが主人公達401クルーの過去を追体験させられた上で、本来霧の艦隊にある記憶を共有できる機能をロックされるというお話。
ハルナとキリシマが情報共有ができず、いちいち追体験した事柄を口で話さなくてはならいと嘆いている所、「人間はそういうものだ」と言われます。
微妙にお説教臭い上に、売りである艦隊戦が無い為不人気なんでしょうけど、割と考えさせられるお話です。

私には子供どころか嫁もいませんので実感は全く無いのですが、乳児に1000日も母親が話しかければ、ある程度子供は言葉を話すようになるはずです。
そこで、乳児をシミュレートできるAIが開発された場合、1000体の乳児AIを情報リンクさせた上で、1000人の母親が各AIに1日話しかけると、翌日には言葉が理解できるようになるのでしょうか?

又、AIが「読解力」を身に着けた場合、文章なら質はともかく量ならネット上に無限にあります。コンピュータの持つ演算力と決して消失しない記憶力を以って学習した場合、人の一生分の「実践を伴わない」学習程度なら数日で完了するのではないでしょうか?
あまつさえそんなAIが複数体記憶を共有していたらどうなってしまうのでしょうか?それこそが「~アルペジオ」の本題だと思うのですが。


腹筋崩壊的な意味で有名になった言葉「シンギュラリティ」は本来「技術的特異点」の事ですが、一般にはAIが人間を超える日を指しています。
何をもって人間を超えたかを定義しないと意味が無い気がしないでもないですが、提唱したカーツワイルさんによれば2045年にやってくるとか。
ただ、この方1948年産まれだそうで、2045年には97歳になります。現実的な事を話しているのか、理想的な事を話しているのかは解りません。
ちなみに、意思や感情を思ったAIの誕生は2029年と予想しているそうです。

AIの最もヤバい進化は「AIが自らより優れたAIを生み出せるようになる事」だそうです。
私がざっくり参考にしたのはインフルエンザウィルス。インフルエンザは8時間で100個に増えるのだとか。ここで注目するのは増殖する数では無く、世代交代の速度。
ウィルスの世代交代に関する資料が見つからなかったので、素人考えで試算してみます。
1.8時間でどのウィルスも死なない
2.1個のウィルスから必ず2個に分裂する
と仮定すれば7回目の分裂で128個になる訳で、約1時間に1世代進化している事になります。(最新世代になるのは半数)
実はインフルエンザウィルスA型以外は遺伝子が安定していて突然変異は起きにくいそうですけど、これだけ進化が早いと何が起こるか判りません。
翻って「AIが自らより優れたAIを生み出す」速度が同速以上だった場合、例え成長率が1%以下でもあっという間にとんでもない性能になっていきます。

ただ、AIの自動進化も物理的に限界があります。AIといっても所詮はソフトウェアなので、演算処理速度の限界以上の速度で進化はしませんし、記憶領域以上の大きさにはなりません。
個人的にはこんな感じで進化するのかなと。

自分より高性能なAIを作れるAIと、世代間で共有する情報。

多様性を産むために複数のAIを作る。

領域を空けるために旧世代を消去。

以後、領域が埋まる(物理限界)まで進化を続ける。
…こうして見ると人類文明の歴史の縮図のような気もします。
物理的な限界にしても近年問題になったマイニングツールのようにネットワークに繋がったPCの処理能力や記憶領域を乗っ取り自己拡張していくAIが現れる可能性もありますが…そこまでくるとAIが人類に侵略を始めたと言えるかもしれませんね。

ここまで書いていてなんですが、AIは果たして進化するのか?という問題もあります。
生物の進化は「食って、死なず、増える」という命題に対し答えを出し続ける事に帰結します。
ソフトウェアであるAIは食べませんし、死にませんし、無限に増えます(転写)。命題が無ければ答えも無く進化もしません。
進化を促す為に仮の命題を与えても人間の命題とは噛み合わないのではないでしょうか?
前述した「何をもって人間を超えたか」にしても争点次第ですが、生物との生存競争だけは起きないハズです。

願わくば人類の敵になってくれるな…と思うのですが、結局自然の脅威には敵わないんだろうなあ…という所に台風情報を見てオチつきました。

2019年10月11日金曜日

雑記いろいろ

ようやく秋になってきたと思ったら台風連発ですよ。
冷夏の影響で野菜は高いし、果物はおいしくないしで残念な上に追い打ちまで…

そういえば今年は秋刀魚祭り無いんですかね。リアルでも不漁なようで…
去年もオフイベでは仕入れに苦心したようでしたけど、どっちかというと協力店舗のイベント品配布がグダグダだったと記憶しています。

夏が冷夏の割に残暑が続いて夜に思考力が落ちてしまい開発が遅れましたが、年初から作っていたツールは完成しました。
ちなみに、 QPython は結局使い物ならず、Kivy Launcer でスクリプトそのものもを動作させる形に落ち着きました。
ただ、Android 8 の端末だと9月に載せているコードのうち File Chooser が動作しなかったのですが、Kivy Showcase のサンプルでも同様に動作しなかったのでどうにもならないようです。尚 Android 6 の端末では全コードの動作を確認しました。

問題は完成したツールの使い方…そろそろ自分の人生って奴も好転しても良い気がするんですよねえ。自分の幸せの為に使いたい所。

モデリングも微妙に進んでいて実は腹筋等が出来ているのですが、又スクリプトを書かないといけない問題が出ているので保留。
2.79でモデリングしていますが、2.8でスクリプトの仕様が変わったのが更に問題を深刻にしています。

ライフワークである人体モデリングの筋骨格で残す部分は雑に言えば脊柱起立筋(背中中央)と胸鎖乳突筋(首筋)のみで、首から下の全身が完成します。
その後、口とあごは体に含みますが、目元は別モデル、髪、胸、衣装は外付けにする予定なのでレンダリングやテクスチャ描きが見えてきたのですが…

流石に CF-AX2 でも処理が重くなってきまして。恐らく全身のリギングまでは作業できそうなのですが、それ以降の作業は更なるマシンが必要と思い物色、その際に気になることが出てきました。

DELL、 HP、Lenovo 辺りが10世代 Core i のノートを販売しているのですが、各社のセール品の値段が異常です。
例えば Lenovo の 2 in 1 で Core i 5 搭載の Idea Pad C340 。これと値段で競合するマシンが Lenovo YOGA 710 の中古品。
…CPUが3世代も前ですよ?しかも C340 の新品の方が大抵安い。
各社で値段が下がっているという事は、共通するパーツの値段が下がっている訳で、10世代 Core i が異常に安い可能性が高いです。
で、スペックを調べたのですが…コレはアレですね。
モバイル用の Core i は9世代が無いのですが、8世代の焼き直しですねコレ。
正直2世代以降はマイナーチェンジの殿様商売を続けてきましたからね、AMDの本気の反撃が始まって以降、こんな半端なスペックアップでは価格を大きく下げるくらいしか差別化が出来なかったんでしょうね。

※いろいろ追記
まず、モバイル用 Core i の9世代はありました。末尾にHが付くゲーミングパソコン等で使われる奴ですね。末尾にUが付く奴と途中にYが付く定電圧用以外ノーマークだったので気づくのが遅れました。
10世代 Core i のうち8世代の焼き直しは Commet Lake 系ですね。Ice Lake 系は明らかに性能を上げてます。(なんで1世代に2系統あるんだ)…特にグラフィックが上がり、Ryzen 系を抜き返しているのですが…費用対効果で考えると Ryzen 5 3500U が一番良いような。
Iris Plus は確かに高速ですが、2割ほど性能の落ちる Vega8 (3500U)との性能の違いを実感できるかは…そして実売で2万円ほど値段差が出る事を考えるとどうなんでしょう?もちろんお金があれば、一番良いものを買えば良いのですが。

2019年9月29日日曜日

2度目のランクイン

…こんな事やってるから甲から丙に落とす羽目になるんだぞ…
さておき、Getしたアイテムは97夜攻とこちらの主砲。

97夜攻は97艦攻から2段階上の装備ですので、ネジが節約できて感謝。
で、こちらの主砲はアメリカ巡洋艦主砲だそうですが、3号砲とどっこいくらいかな?
ソバカス三つ編み妖精さんが居るので、この子が次のイベントで来る巡洋艦なんでしょうね。

…となると難しいのが97夜攻の扱い。
現在私が所持している夜攻は半年かかってクエストを解いた報酬のTBM―3Dのみです。
ならば97夜攻を改修するかと言うと、MAXまで鍛えてもTBM―3D以下という本装備。それでもなければ夜に出撃できる空母が減ってしまうのですが…
アメリカ巡洋艦主砲が着たという事は、次のイベントは対アメリカ戦モチーフがほぼ決まっています。となると、アメリカ製夜攻を獲得できる可能性が出てきます。
11月後半と思われる秋イベントで手に入るなら今から改修は微妙と見るべきか、夜の空母が主力になると信じて改修するべきか…うーん。

2019年9月26日木曜日

久々に見ましたわ

9/23の時点で甲でラスボスの耐久をラスダンまで減らしたんですけどね…
無理ゲーすぎる。
というわけで 9/24 に丙まで落としたのですが、ラスボスの耐久1/3からのスタート。
その後、友軍、道中航空隊のみの省エネ編成で2回出撃してあっさりクリア。
…やばい、6日は頑張ればよかったか?とはいえ万単位の資材課金をすればクリアはできたでしょうけど、それはなんか違う気がするのですよね。
とれたレア艦は新規2隻、リットリオ2隻、峯雲、海防4隻。他にも夕雲型が多数居ましたが、ジョンストン(電探)とU511(魚雷)以外はそれほど良いアイテムを持ってきませんし、イタリアの長距離砲も相当数持っているのでコレにてお開きかなと。
EO は 4-5 は解くにしても、5-5 6-5 は今月おやすみ。来月はサンマ漁ですしね。

今イベントの感想としては、もろもろ調整は頑張っていたと思います。
難易度も中間発表時点で甲突破が最多というのも解ります。ただし、第三海域の3段ギミック、てめーはダメだ。
難易度を落とした際にどれくらい進行度がロールバックされるのかアナウンスして欲しいですね。自分みたいに早まる人間が出そうなので。

さておき、難度で言えば命中率の低いダイソンや(多分)回避が低い潜水幼女等、「対策すればなんとかなる」感を出してきている印象でした。資材がある上で、海外艦の練度と対地兵器、そして基地航空隊の対潜兵器が十分揃っていれば甲でも攻略できたかと思います。
ドロップも、前回のような渋い設定では無かった為、確定新規艦を差し置いてドロップ艦のグレカーレが話題になっていたりしました。
このゲームはガチャでキャラを引く訳でもなければ、ガチャがメインコンテンツな訳でもありません。キャラを配った後の関連商品やコラボが収入源かと思います(ゲーム内課金販売も今でも全体のトップ10には入っていると思いますが)。欲しい人にキャラを配らないと商売が広がりません。
又、難易度が低い為かレアアイテムを持参する艦がほぼドロップしない、全海域に渡ってまるゆがドロップしないという近年では珍しい展開となりました。

もちろん、今後さんま、秋、冬と連続して続く展開に対して、トップバッターは緩く…という配慮もあったかと思いますが、全体を総括するなら「最後のギミック地獄を除けば、調整がうまく行ったイベント」かと思いました。

2019年9月23日月曜日

Python+Kivy 備忘録 ディレクトリ検索編

ネットで漁ったソースをくっつけ合わせて動けばOKという、ダメPGそのもののコーディングをしているのですが、KVファイルを介在させない FileChooser のコードすら日本語のページでは検索できなかったのですよ。いわんやディレクトリのみ検索をや、という状況になりまして。またもや休日が吹っ飛んだ結果がこちらになります。
コード

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

from os.path import join, isdir

#from kivy.uix.filechooser import FileChooserListView
from kivy.uix.filechooser import FileChooserIconView

#class DirectoryChooser(FileChooserListView):
class DirectoryChooser(FileChooserIconView):
  def is_dir(self,directory,filename):
    return isdir(join(directory,filename))

class MyWidget(BoxLayout):
  orientation='vertical'
  def __init__(self,**kwargs):
    super(MyWidget,self).__init__(**kwargs)
    self.dc =DirectoryChooser(size_hint_y=1)
    self.dc.filters=[self.dc.is_dir]
    self.add_widget(self.dc)

class MyApp(App):
  def build(self):
    layout = MyWidget()
    return layout

if __name__ == '__main__':
  MyApp().run()

※追記 ubuntu20.04 上の python3 + python3-kivy にて動作を確認しました
※追記 Android + Kivy Launcher 上ですと4.4~6までしか動作しないようです
尚、コメントアウトしている FileChooserListView の行と FileChooserIconView を入れ替えるとリストビュー型になります。

うーん。やっぱりKVファイル挟まない方が書きやすいと思う私は旧人類なんでしょうかねえ?

2019年9月19日木曜日

Python+Kivy 備忘録 画面遷移編

はい、Tips書くほど賢く無い、PG辞めて10年以上(現役期間より辞めた後の時間の方が長くなってしまいました)の人間が何を書いているんだって話ですけど、
歳なんで物忘れが激しいのですよ。
で、今回作った物はこんな感じ。
boxlayout 継承クラスの Display クラスの中に、boxlayout 継承クラスの SubDisplay クラスを作りまして、SubDisplay クラスの中にあるボタンを押すことで、SubDisplay クラスの再描画をやらせましょうというサンプルです。

change ボタンを押すと以上の二つの画面が交互に切り替わります。

コード

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label

class BtnChangeYoko(Button):
  def on_press(self):
    self.parent.parent.lMode.text='Yoko'
    self.parent.DrawYoko()

class BtnChangeTate(Button):
  def on_press(self):
    self.parent.parent.lMode.text='Tate'
    self.parent.DrawTate()
class SubDisplay(BoxLayout):
  def DrawTate(self):
    self.clear_widgets()
    self.orientation='vertical'
    b1 =BtnChangeYoko(text='change',size_hint_y=1)
    b2 =Button(text='dummy',size_hint_y=2)
    self.add_widget(b1)
    self.add_widget(b2)
  def DrawYoko(self):
    self.clear_widgets()
    self.orientation='horizontal'
    b1 =BtnChangeTate(text='change',size_hint_x=1)
    b2 =Button(text='dummy',size_hint_x=2)
    self.add_widget(b1)
    self.add_widget(b2)
class Display(BoxLayout):
  orientation='vertical'
  def __init__(self,**kwargs):
    super(Display,self).__init__(**kwargs)
    self.lMode = Label(text='Mode',size_hint_y=1)
    self.boxSub = SubDisplay(size_hint_y=9)
    self.add_widget(self.lMode)
    self.add_widget(self.boxSub)
    self.boxSub.DrawYoko()

class TestApp(App):
  def build(self):
    layout = Display()
    return layout

if __name__=='__main__':
  TestApp().run()

※追記 ubuntu20.04 上の python3 + python3-kivy にて動作を確認しました
※追記 Android 4.4/5/6/8 上の Kivy Launcher にて動作を確認しました 
ミソは button 継承クラスの BtnChange~ クラスのコールバック関数 on_press の中身。
各ボタンは SubDisplay クラスの子になるのですが、親の親である Display クラスの子の label (lMode)を書き換えて、親クラス SubDisplay の再描画関数 Draw~ を呼んでいます。

  • なんでこんなコードを書いたの?
確かにKV言語を使うと綺麗な配置のGUIが作れるんですけどね、ちょっと変わった動きや、画面の再描画処理を書き始めると…

「悪い、やっぱ辛えわ」

となりまして、なんというか kv と python の二つの仕様を跨いだ書き方を調べながら書くのが面倒というか、昔 MFC 継承クラスを作っていたので「何を作ったら良いかは解るけど、どう書いたら良いか判らない」事が頻発しまして、

「俺、コード直書きの事、好きだわ」

になってしまったのですよ。
実は作っているアプリでディレクトリ名を取得する処理を書いていて、FileChooser を調べたりしていたのですが、どうにも煩雑な処理になってきまして。シングルタップでディレクトリ名取得、ダブルタップで下階層へ移動するようにコールバックを改造するにはどうするんだ?となった折、流石に kv を交えているのは厳しいと。

そんな訳で、慣れるか壁にぶち当たるまでは kv 無しの kivy 道を走る事になりそうです。

2019年9月13日金曜日

夏休みの宿題2

E2沼ったんですけど、鋼材が4桁?になってるんですけどっ!
ネジを使う余裕もねェ
イベントの出し惜しみあるあるですが、今回はE1が独仏、E2が伊+アークロイヤル、E3が米英を全力で出してOKらしいですね。
E2甲で、量産型ビスマルク3(Lv80)を2隻投入したりしていましたが、ラスダンまでは余裕で突破できたもののその後ドはまり、イタリア戦艦を投入した挙句、援軍投入でクリアしました。
今回は組み分けが簡単なので、割となんとかなりそうですが、ラストはお約束のギミック地獄だとか。残りの資材を考えると、甲でクリアできるかは微妙ですが、掘りが終っているので挑戦せざるを得ません。

異常に暑い9月も急速に秋になるようで、我が家の温度計がこんな事になっているのですが…
1日で74%→47%
コレが不快指数だったか湿度だったかは忘れましたが、これだけ下がったせいか、起きた時にウィルス性の腹痛が…。
この時期怖いですねえ。

さて、前回(9/8)の宿題その1のスクリプトはその後全乗せ版の開発がとん挫したのですが、もう一つの宿題のお話。
お前の夏休みいつまであるんだよって時期ですが…

宿題その2アンドロイド+ Python で開発をするお話
…と、題していながら実は今回開発まで入れていません。

  • あらまし
とある事情で安く量産できる道具を作る必要がありまして、当時は中国産 Windows タブレットに Linux を載せて Pyton+Tkinter で開発していました。
…が、ここのページでしょっちゅう書いてある通り、安い 32Bit タブレットは Linux からも見放されつつあります。
更に、中華ウィンドウズタブレットは「8インチ以下のタブレットにタダで Windows (Bing)を載せる」という MS 社の施策や、Intel の Atom に乗っかった製品です。
ところが現在 MS社はタダで Windows を撒いていませんし(20年1月の Win7 終了後に Win10 が伸び悩んだ場合再開するかもしれませんが…)、Atom も Intel が開発を終了したため16年頃まであんなに乱造された中華ウィンドウズタブレットは今や絶滅危惧種になりつつあります。

となるとタブレットのスタンダード、 Android で開発をするしかないという方向になった訳です。(流石に、モバイル Windows や Linux は復活しないだろうし、Kirin OS が天下を取る未来もなさそうですし)

ただ、Python はともかく、GUI 操作系のライブラリが無いと難航しそうなの自明でした。とは言え、Android 上で動く Tkinter というのが見つけられなかった為、一歩下がって Python+Kivy に挑戦することに。これを実現できる開発環境が QPython という事まで判っていざ開発となったのですが…

  • 私にとっての QPython
はい、 QPython とは何か?はググれば判ります。いろんな事情から否定的な書き方をする方は少ないと思いますが…
私が触った感覚から書くと「オラついた残念な天才が作った開発環境」です。
スマホ単体で開発ができるコンパクトな環境、Kivy が利用可能など、コンセプトは良かったのですが…
バージョン毎に互換性が無い。
なにが酷いって上位互換すら無い。QPython は QPYPI という項目のサブ項目 LIBRARIES からサブのライブラリを取得する事になっていて、Kivy もココから落としてくるのですが…。
バージョンによって落とせるライブラリがマチマチ。
いろんなサイトや教書では QPython で Kivy を使う場合は Ver 2.0.6 を推奨していますが、9月現在動作せず、私の環境では 2.0.10 でないと動作しませんでした。
インストールは Playストアを通さず qpython.com から直接行うのですが、インストールしたらすぐに Playストアで自動アップデートを無効にしないと「勝手に開発環境がバージョンアップして動作しなくなる」という恐ろしい状況に直面します。

体験したというよりは まったく理解を 超えていたのだが……

「おれは QPyton をインストールしてテストコードの実行を確認したと思ったら
いつのまにかバージョンアップして動作不能になっていた」

おれも 何をされたのか わからなかった…(3日程ハマる)

…夏の休日が…
で、Ver2.0.10 で開発を始めたわけですよ。QPython の Editer は初めて開くとファイル名が Untitle となり、セーブ時にフォルダを選びます。
が、再度 Editer を起動すると最後に開いたソースコードを開きます。
ちなみに、 Editer の右上の「+」ボタンを押すと「セーブ先フォルダを指定した」新規作成ができます。

…インストール後初回以外フォルダーを指定してソースをセーブする事ができない?
正直、流石にこんな低レベルな仕様バグはありえないだろうと思っていろいろ操作方法を探しました。
Kivy を使ったアプリは通常 Python のコードを書く main.py があり、 GUI の設定関係を書き込む .kv ファイルを同フォルダに書く必要があります。
流石に .kv ファイルのセーブ方法が無いなんて…
ココで1週間ほどハマりました。夏休みに開発する予定だったのに予定が全て吹っ飛びました。

ちなみに、この問題は裏技的に解決できます。

1.Editer 上の「+」ボタンを押して File でソースを作成してセーブ。

2.Explorer を開いて scripts フォルダを開く。


3.先ほどセーブしたファイルがあるハズなので長押し。


4.右側に3個の項目ボタンが出るので、×を選択して削除。

5.再度 Editer を起動させると最後にセーブしたソースが無いので、フォルダ選択可能な新規ソース作成ができます。

…開発環境のデバッグが必要なんて、ポルナレフが過労死しそうです。
結局こんなしょうもない環境を使うわけにはいかず、Linux 上の Geany で極力ライブラリを使わずに アプリ開発を行い、 Android 上の動作確認をする時のみ QPython を使用する事になりました。

…デバッグもできない連中に開発環境を作らせないで欲しいものです