「def」を含む日記 RSS

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

2021-02-10

依存性逆転の法則理解した気がする

抽象依存するってことなんだよね。発想が抽象的でむずかしい。

以下に示すbeforeコード欠点は、IOに関係する部分とビジネスロジック(誇張)が密結合していることで、このメソッドを変更する理由複数存在している点である。(単一責任原則違反)

変更理由は、IOにnullが入ってくることを考慮するとか、暗号化アルゴリズムを変更するあたりがぱっと浮かんだ。

afterのコードは、readerwriter引数から受け取れるようになっていて、インターフェース依存するようになって、単一責任原則を守るようになった。

```

# before

def encrypt

while char = readChar do

writeChar(trunslate(char))

end

end

# after

def enctypt(reader, writer)

while char = reader.read do

writer.write(trunslate(cahr))

end

end

```

まとめ

インターフェース依存していこうな。

2020-06-28

メルセデスE 350 の排気ガス制御リバースエンジニアリング

ディーゼル排気正義財団訴状らしきpdfから抜粋

https://www.rechtspraak.nl/SiteCollectionDocuments/dagvaarding-collectieve-vordering-Daimler-AG-c.pdf

パートIII.Dで、当財団は、ダイムラー使用した違法操作機器運用にかかる委託研究について説明する。 ••••••(以下:••••••)が実施たこ調査では、これまで他の利益団体当局使用していない根本的に異なる方法論を採用した。端的にいえば、当財団が購入したEuro 6 Test Vehicleでテスト走行を行い、エンジン排気ガス管理制御するECU(Electronical Control Unitから走行中の情報を読み取ったのである。これにより当財団は、試験車両違法操作機器根本的なメカニズム機能を初めて洞察する者となった。本調査により当財団が同定できる限り、少なくとも8つの違法(SCRおよびEGR)操作機器配備された、驚異的に複雑で洗練された排出詐欺が明らかになった。これらの違法操作機器はそれぞれ、実際の運転条件でシステム全体の効率を大幅に低下させる。ダイムラートリックの結果として、これらの違法操作機器はNEDCテストサイクル外でのみ動作する。」

「III.B.1. 序文

255. このセクションでは、当財団は、排出規制および適用される判例法に基づいて、違法操作機器特性について説明する。 前述のとおり、当財団はとりわけ、2020年4月30日欧州司法裁判所 Eleanor Sharpston 法務官の意見※に特に注意を払っている。(図14を参照)。」

※「2020年4月30日欧州司法裁判所 Eleanor Sharpston 法務官の意見」はこちら。↓

"Court of Justice of the European Union PRESS RELEASE No 52/20

Luxembourg, 30 April 2020

Advocate General’s Opinion in Case C-693/18CLCV and Others (defeat device on a diesel engine)

According to Advocate General Sharpston, a device that adjusts upwards the operation of the emission control system of diesel engine vehicles during the approval testing of those vehicles is a ‘defeat device’prohibited by EU law

The objective of slowing down the aging or the clogging-up of the enginedoes not justify the use of such a device"

https://curia.europa.eu/jcms/upload/docs/application/pdf/2020-04/cp200052en.pdf

「III.D. DEJF(当財団)の調査

III.D.1. イントロダクション研究の関連性、および主要な調査結果

295. このセクションでは、当財団研究結果について論ずる。 この研究は、その方法論によって、上で説明した研究※とは区別される。 前述のように、この研究は、入力値(周囲温度や車速など)と出力値(PEMSで測定された排出量)を測定するのみならず、ECU自体の内部機能を測定することを目的とする。 テスト中にECUから直接情報を読み取ることにより、ECU設計操作を再構築可能である。」

※直前のIII.C で、第三者公表した調査結果を挙げている。

296.このアプローチは、概ねメーカーソースコードがなければ違法操作機器動作を検出および分析することは不可能であると考えられていることから、これまでどの型式承認当局・関連団体にも採用されていない。間違いなく可能であるとはいえ費用時間がかかり、専門知識を用いねばならない。この理由もあって、当財団はこれまでのところ、この研究単一テスト車両(本テスト車両)に限定している。本テスト車両は、第306項でさら指定されているユーロ6対応メルセデスE350であるモダンユーロ6車両選択する理由は、この車両タイプに、EGR(排気ガス再循環)とSCR(選択触媒反応)の組み合わせからなる高度で複雑な排出制御システムが装備されているためである。このような複合システムでは、SCRシステムが処理の大半を引き継ぐため、EGRシステムNOx排気負荷を減らすために「ハード」に動作しなくてもよくなる。 Euro 6モデルECUソフトウェアEuro 5ソフトウェア拡張バージョンであるため、以前のバージョンの多くの機能がまだソフトウェア存在している。調査が示すように、本テスト車両ECUには、機能しているEGR操作機器も多数含まれている。この点で、本研究結果は、EGR装置のみが装備されていた古いメルセデスベンツモデルにも関連している。

297. 要するに、この調査により、SCRとEGRの違法操作機器範囲特定された。これらはそれぞれ、特定の条件下でシステムの全体的な効率を大幅に低下させ、これによりSCR触媒コンバーターほとんどの条件で動作容量のうち最大で60%に制限されることとなる。」

「300. 本調査の結果、違法なSCRおよびEGR操作機器は、NEDC検査下の状況では動作せず、通常の使用状況でのみ動作するようにプログラムされていることが判明した。 違法操作機器は、条件がNEDC検査条件から少しでも逸脱している場合アクティブになることがわかっている。 さらに、SCR関連のいくつかの違法操作機器には、車両が数か月間使用された後にの違法操作機器操作するように設定されたタイマー機能があり、NEDC検査を確実に通るようになっている。」

「302. 本調査はまた、これらの違法操作ツールほとんどがソフトウェア更新後にテスト車両から削除されたことを示している。これは、エンジンの損傷を防止したり、車両安全動作を確保したりするために違法操作ツール必要ないことを意味している。このソフトウェア更新によって、テスト車両のすべての違法操作機器が実際に削除されたかどうかは明らかではない。……」

「III.D.2. メソドロジー

III.D.2.a)はじめに

305. 本調査使用されるメソドロジーは、データ収集ソフトウェア分析、およびテスト車両から生れたテスト結果の解釈とを、組み合わせることである。306. 前述のように、本テスト車両は、メルセデスベンツ E 350 BlueTEC 4 MATIC Tであり、OM 642型 190 Kw、2987 ccm、6気筒エンジンを搭載している。本テスト車両検査文書コピーを別紙57に提示した。……

307. ECU情報チャネルは複雑で量が多いため(ECUは内部で10,000を超える信号を処理)、イテラティブなプロセスを用いた。 最初フェーズでは、通常使用中に車両ECUプロファイル作成するために、広範なデータ収集が行われた。 排出制御に関連するソフトウェアデータは、ソフトウェア分析使用して特定した。 その後、データ収集プロセスさらに洗練し、より詳細なデータを得た。」

「III.D.2.b)データ収集

308. 調査中のデータ収集は、OBD-2ポート使用して実行した。……」

「310.前述のように、ECUソフトウェアソースコードや完全なドキュメントについては、ダイムラーがその情報を慎重に管理しているために、本調査者はこれらを得ていない。 ただし、ドキュメントソースコードが利用できないソフトウェア分析については多くの研究があり、そのような分析IT業界で定期的に行われている。研究者は、「逆アセンブル」(ソフトウェア人間が読める形式に変換される)やソフトウェアシミュレーションなどのいわゆるリバースエンジニアリング手法使用している。 これらの手法により、ソースコードが利用できない文書化されていないソフトウェア分析可能になり、本テスト車両ECUソフトウェア分析にも使用されている。」

「III.D.3.b)本SCRシステム

315. 本SCRシステムでは、主な制御変数の1つはAdBlueまたはDEFディーゼル排気流体)の投与量である。本テスト車両ECUBosch EDC17CP57 は、システムに投与されたAdBlueの量を計算する。 SCR触媒コンバーター内で、AdBlueはアンモニアに変換され、次にアンモニアNOx酸素と反応して窒素と水に変換される。

316.有効性の尺度は、「SCR除去効率」または「変換効率である。 SCRの潜在的効率は、以下を含む多くの物理的条件によって制限される場合がある。

317. 以上のリストは完全なものではないが、適切に機能しているSCRシステム物理的な制限を受けていることを示している。 これらの制限対処するために、本ECUソフトウェアには、2つの異なる動作モードが含まれている。

318.最初モードは、以下「アンモニア負荷モデル」と呼ぶもので、SCRシステムが完全に機能するモードである。 このモード公的アクセス可能メディアでは説明されておらず、この用語自体は文献で使用されている標準ではないことに注意されたい。

319. 2番目のモードは「代替モデルである。 これは、不正操作ツールによってアクティブ化されるモードである代替モデルがいずれかの操作ツールによってアクティブ化されると、通常SCRは最大60%となる。 特にいくつかの違法操作ツールが同時にアクティブ化されている場合は、効率が大幅に低下する可能性もある。……」

「III.D.4. 調査結果:ダイムラー違法操作ツール

330. 本調査による観察結果の要点は、代替モデルでは、実際の運転条件のほとんどで、SCRシステムターゲット効率比較的低い値に保たれるが、これは物理的な制限に基づいていない要因やポリシー選択によって生じているため、 違法だということである。 言い換えると、SCR触媒でのNOx還元に直接影響を与えることがない入力に応じて、効率目標意図的に低い値に低減される。 したがって、これらの要素とポリシー選択、およびそれらが有効にするメカニズムは、違法操作手段と見なすことができる。

331. これらの違法なSCR関連の操作ツールは、以下の機能を共有する:

(i)それらは、温度排気ガス質量流量といった、極端な条件下で一般的制御する必要がある物理特性に応答する。

(ii)ただしそれらは、通常の「実際の」運転条件では、システマティックアクティべートされる。

(iii)それらは、たとえば、正当化されないヒステリシス使用することにより、アクティベート後に、ある効果が出るように設計されている。

簡単に言えば、ヒステリシスという用語は、新しい状態への切り替えを引き起こす値と元の状態への戻りを引き起こす値との間に特定の「範囲」がある状態を表す。一般的な例は、特定温度で加熱がオンになるサーモスタットで、温度が初期値よりも数度低い場合にのオフになることで、システムのオンとオフ連続して行われないようになっている。今回のケースでいうと、ヒステリシスは、元の状態(この場合は「アンモニア負荷モデル」)に切り替えるしきい値が「代替モデル」が動き出す状態に切り替えるレベルよりもかなり低い(または高い)場合に発生する; そして

iv)それらはSCRシステム目標効率を大幅に低下させ、AdBlueの投与を大幅に削減する。これにより、NOx排出量が大幅かつ大幅に増加する。

332. 本調査の結果、8個以上の違法操作機器発見されたが、そのうち6個はSCRシステム(およびAdBlueの投与量)に関連している。……」

「III.D.4.a)SCR操作ツール1:排気ガス質量流量

335. 最初違法SCR操作機器は、SCR触媒コンバーターを通過する排気ガスの体積(排気ガス質量流量)を参照する。

336. 上述したように、排気ガス質量流量がSCR触媒の処理能力よりも大きい場合排気ガスはSCR触媒から逃げることができ、NOxチャージを減らす機会が与えられないこととなる。 これに対処しないと、SCR効率過大評価につながり、AdBlueのオーバードーズにつながる可能性がある。 このことで、SCR触媒アンモニアオーバーフィルされ、アンモニアスリップが発生する可能性がある。 したがって、質量流量監視し、過剰なマスフローが通知されたときにSCRのターゲット効率推定値を下げることは、原則として、有効ストラテジーになる可能性がある。

337. ただし、テスト車両では、フィルタ後の排気ガス質量流量制限は、時速170 kgに設定されており、これは、実際の運転状況では約100 km / hに相当する。 このしきい値は、技術的な観点から見て、言い訳けができないほど低くなっている。 このしきい値を超えるとすぐに、ECU代替モデルに切り替える。 さらに、(-80 kg / hの)強いヒステリシス適用されるため、負荷モデルに切り替える場合質量流量は90 kg / h未満でなければならない。 60 km / h程度の低速でも、このしきい値は日常的に超過している。 さらに、エンジン一定している場合、短時間では負荷モデルに戻らない。

338. この制限は、正確には、SCRシステムの「エージングファクター」によって決まることに注意せよ。この機能に関連して、ECUはSCR触媒コンバーターがその耐用期間中さらされた温度を記録し、これに基づいて経年変化の影響をモデル化する。ただし、以下のグラフに示すように、この違法操作機器エージングファクターは、完全な100%(完全に新しい状態)が1%~99%(すなわち実質的に新しい)まで減少するとすぐにアクティブになるように設定されている。すでにその時点で、上限は時速200 kgから時速170 kg へ削減され、下限(ヒステリシス)は時速120 kg / hから時速80 kg / hに削減されている。 NEDC検査は完全に新しい車両で行われるため、輸入検査でこの違法操作デバイスを検出できないと推定できるのである。これに対し、本テスト車両はこれらの観測の時点で70,000マイル走行しており、ソフトウェアは69%のSCRエージングファクターを示していた。」

「342. 代替モデルに切り替わると、推定される Permalink | 記事への反応(1) | 23:14

2020-06-20

ラスアス2がめっちゃ賛否両論でIGN Japanの70点が再評価されててワロタ

PS4の『The Last of Us 2』が事前のメタスコア大絶賛一色とは一転していざ発売されると前作ユーザーから賛否両論となりユーザースコアが激低で結果的に主要サイトの中でほぼ唯一批判的に評価していた日本のIGN Japanレビュー海外ユーザーから評価される怪現象が起きている。

ラスアス2とは

2020年6月19日に発売されたPS4ゲームThe Last of Us Part II』。日本では「ラスアス2」、海外では「TLOU2」と略されることが多い。ソニー・インタラクティブエンタテインメント (SIE) のファーストパーティー(傘下スタジオであるノーティドッグ (Naughty Dog) が開発を担当し、SIEより発売された。アメリカヴァージニア州本拠地を置くノーティドッグは、『クラッシュバンディクーシリーズや『ジャック×ダクスターシリーズ、そして近年では『アンチャーテッドシリーズによって知られている開発会社であり、2001年よりSIEの傘下スタジオとなっている。

前作『The Last of Us』は2013年PS3で発売され、2014年にはPS4リマスター版が発売された。PS3版とPS4版を合わせると現在までに約2000万本以上を売り上げている。メタスコアでは95点を獲得し、数え切れないほどのメディアによって表彰された( https://en.wikipedia.org/wiki/List_of_accolades_received_by_The_Last_of_Us )。

ゲームジャンルとしては三人称視点アクションアドベンチャーであり、サバイバルホラーステルスシューターといった要素を含む。プレイヤーは成人男性ジョエル少女エリー操作し、ゾンビがはびこる終末的世界を生き延びるために冒険を繰り広げる。オープンワールドではなくリニア(一本道)ではあるが、開発チームが「ワイドリニア」と呼ぶ自由度の高いリニア空間は、開発者企図した凝ったゲーム体験プレイヤー自由な探索という相反するゲーム性をバランス良く両立させるものである

メタスコア、ユーザースコアとは

Metacritic(メタクリティック)というレビュー収集サイトによって、主要ゲームサイトゲームレビューの点数を収集、平均したもの、それが「メタスコア」であり、それとは別にユーザー投稿した点数を平均したものが「ユーザースコアである

Metacriticは1999年映画レビューサイトとして始まり、その後サイト評価収集対象ビデオゲームを加えた。メタスコアは現在では世界で最も重要視されるゲーム評価基準のひとつとなっている。単純にいえば、あるゲーム100点をつけたレビューサイトと60点をつけたレビューサイトがあれば、それらを平均した80点がそのゲームメタスコアとなる(実際にはメディアごとに重要度というものが設定されており、その重み付けを反映してスコア計算されるため、もう少しややこしい)。

どのようなレビューを受けたのか

The Last of Us Part II』は世界各国のメディアによるレビューで絶賛され、2020年6月20日10時(JST)時点では94件のレビューを平均して95点という非常な高評価を受けた。過半数を越える実に50件ものレビューが同作に100点満点を与えている。

このメタスコアは2020年に発売されたゲームのなかで最高評価であり、その下には同じく95点の『ペルソナ5 ザ・ロイヤル』、93点の『Half-Life: Alyx』、91点の『あつまれ どうぶつの森』などが続く。なお日本ユーザーに馴染みが深いタイトルで言うと、『ファイナルファンタジーVII リメイク』は87点、『仁王2』は85点、『バイオハザード RE:3』は84点である。( https://www.metacritic.com/browse/games/score/metascore/year/all/filtered

PS4タイトル全体の中では、97点の『Red Dead Redemption 2』(2018年)と『グランド・セフト・オートV』(2014年)に次ぐ順位である。( https://www.metacritic.com/browse/games/score/metascore/all/ps4/filtered?sort=desc&view=detailed

しかしその中にあって、日本のIGN Japan10点満点で7点とやや厳しめの点数をつけている( 過去との決別で残された物語The Last of Us Part II』レビュー https://jp.ign.com/the-last-of-us-2/44388/review/the-last-of-us-part-ii )。レビュアー福山幸司は前作が「ビデオゲーム史上に残る、マスターピースであることが疑いようがない」とした上で、「残念ながら『The Last of Us Part II』は、前作を超えるどころか、共に並び立つことすら許されないほど、いびつ出来栄えとなってしまった。」と評した。福山が同作に批判的な評価を下している原因は、主にそのストーリー面についてのものだ。Metacriticに収集された94件のレビューのうち、ラスアス2にIGN Japanと同程度またはそれ以下の評価を与えているメディアは、ほかにGAMINGbibleとGame Revolutionだけである

IGN Japan6月13日福山によるレビューを発表し、さらにその翌日には同編集部のクラベ・エスラによる同作のレビューをめぐる分析記事掲載された( 世界各国のメディアが『The Last of Us Part II』を大絶賛! IGN JAPAN評価が激しく異なる理由を紐解く https://jp.ign.com/the-last-of-us-2/44460/news/the-last-of-us-part-ii-ign-japan )。相反する評価を受けるビッグタイトルは時々あるが、それを分析した記事投稿されるのは頻繁にあることではなく、それだけラスアス2が注目を集めるタイトルであること、IGN Japanレビューが異色であったことを示していると言えるだろう。

いざ発売されるとユーザーから賛否両論

2020年6月19日にいざゲームが発売されると、ユーザーからはたちまち賛否両論が巻き起こった。議論の的となるのはやはり主にストーリー面についてであり、前作のファンから批判が多くを占めた。Metacriticのユーザーレビューは、2020年6月20日10時(JST)時点では17984件のレビューを平均して3.3という酷評しか言いようのないスコアになっている。

そして、このような酷評を与えられるにつれ、IGN Japanレビューが再評価されつつある。興味深いのは、海外ゲーマーの多くが(日本ゲーマーが『ファミ通』のクロスレビューに対して揶揄するのと同様に)多くのメディアの絶賛レビューメーカーから受け取った金銭によって操作されており信用に値しないと信じ込んでいる点だろう。以下、ツイッターでひっかかった意見の一部。

まおんも@nagineco

ラスアス2発売前はIGNJの評価叩かれてたのに発売されてからはやくも評価されてて掌返しのはやさに笑った

MichiruBOSS @N6Gi7

I think one of the best review about Tlou2 is from IGN Japan. If you are interestes, go check it out.

(ラスアス2に関する最高のレビューひとつはIGN Japanによるものでした。興味があれば是非確認して。)

Sublem @DarthSublem

Whooo boy, friend is pissed off at TLOU2, he says it's a PoS because the fucked the story so hard. IGN Japan was right. Gameplay and graphics are great, but the story is complete ass. He told me about the story and ending, and I have to agree. It's basically a big FU to TLOU1

(友人がラスアス2に立腹している。ストーリーがとても酷くて凹んでいるらしい。IGN Japanは正しかった。ゲーム性とグラフィックは素晴らしい、しかストーリーは本当に最低。彼はストーリーエンディングについて語ってくれて、私も同意した。今作は基本的に前作に対するFU (Fuck You) だ)

アマ公@okamiamatelas

The Last Of Us Part IIを5時間程度プレイしてみたが、IGN Japanレビューで言いたいことが序盤をプレイしただけで、非常によく伝わってきた。7/10という点数になるかはともかく、賛否両論になるのがほぼ確実なゲームクリア時に今の感想を塗りつぶすほどの展開になっていると嬉しいな。

Mashiro@li__xunhuan

IGN Japan forever god

#TLOU2

真剣@scaa315

IGN japan god forever #TLOU2

大隊長は中程度の知性を有する焼き鳥です。@8492Squadron

IGN Japanレビュー70点が結果的ユーザー体感に近いスコアだったということでそういうあれだったのか……。

Rich Price@richprice16

I’m only 3 hours in, but the IGN Japan review of game resonates the most so far. They basically said it’s a good game, but not 10/10. The gameplay is virtually identical to the original, which is 7 years old.

(まだ3時間プレイしただけだが、いまのところIGN Japanレビューが最も共感できる。基本的には良いゲームだと言えるが、10点満点はない。ゲーム性は7年前のオリジナルとほぼ同じだ。)

Lt. Senpai@Lt_Senpai

Metacritic needs to make it that the Critic Reviews are based on actual critics and not paid off journalists. The only legitimate review on there is from IGN Japan. Even THEY were generous.

(Metacriticは、そのCritic Reviewsが実際の批評家に基づいたものであって報酬を受け取ったジャーナリストによるものではないことを明らかにする必要がある。唯一の正当なレビューはIGN Japanによるものだった。それですらまだ手ぬるい。)

David Camões@mephis87

IGN Japan did a better job review this game.

This game is not a masterpiece, is not a 10/10 or 9/10.

I don't care about gay or bi characters, i think that is amazing but the story of this game is a 6/10.

Yes the graphics are amazing but that alone is not what makes a great game.

(IGN Japanはこのゲームレビューで最も良い仕事をした。このゲームマスターピースではないし、10点満点でも9点でもない。私はゲイバイキャラクターは気にしない、それは素晴らしいことだと思うけれど、でもこのストーリー10点満点で6点だ。)

Sublem @DarthSublem

Friend has, he says the story is dog shit and just takes a shit on TLOU 1.

From what I can tell, IGN Japan was right, and everyone who gave a 10/10 was obviously paid off

(友人は今作のストーリーはラスアス1の上にひりだした犬の糞だと言った。私の知る限りではIGN Japanは正しかったし、10点満点を付けたやつは明らかに金をもらっている)

かにちゃん@1102_kanie

ラスアス2

まだ半分だけど、俺は苦手

IGNJのレビューも納得だわ...

話が重くて辛いとかじゃなくて単純に話がつまらなくて辛い

#ラスアス2

Ivanhoe20@Ivanhoe20

It means IGN Japan is less biased than IGN USA in terms of criticism

(これは批評面においてIGN JapanがIGN USAよりも偏っていないことを示している)

krikor||Read vinland saga

@GoReadVinland

Let me tell you this IGN gave the game a 10/10 and most def is sucking up to ND and sony but IGN japan gave the game a 7/10 and said the story is bad and did not follow the same route as the first one so i wouldn't trust any gaming journalists or company on an honest review

(IGNは10点満点で10点を与え、Naughty Dogソニーにおもねっているが、IGN Japanは同作に7点を与え、ストーリーは良くなく、前作のようにはなれなかったと言う。だから私はゲームジャーナリスト企業が誠実なレビューをするとは信用できない)

Fatality!!@AlexStrider

I don't believe to the 100% ratings, I don't believe to 0% ratings either...

IGN Japan gave the game a 70% score, probably what it really deserves.

(私は100点の評価は信じていないし、0点の評価も信じていない……。IGN Japanは本作に70点を付けたが、おそらくそれが実情に近い。)

vεr†rø@DaytimeCurfew

The thing with IGN is that you can pay them for a review. Like almost any "credible" reviewer. IGN Japan tho, thats a realistic review

(IGNについて重要なのはレビューのために彼らに金銭を支払うことができるということです。ほとんどの「信頼できる」レビュアーと同様に。ING Japan現実的レビューだったけれども)

SONG@songforyou0313

Awosome. IGN japan is without censorship.

(すごい。IGN Japanには検閲がない。)

Nemui@Gelzoniansuss

IGN Japan summed that up pretty good there.

Graphics are out of this world. Its beautiful.

But well... new characters only to throw them away.

It seems like they couldn't buy IGN Japan in the end haha

(IGN Japanはかなり上手くまとめている。グラフィックはこの世のものとは思えない。美しい。でも、、、新キャラはそれらを投げ捨ててしまった。結局のところ彼らはIGN Japanを買収できなかったようだ。笑)

なんでこんなことになった?

わからん

考えられうる要因としては、ゲーマーの「ポリコレ疲れ」やTroll荒らし)がある。

前作から引き続き主人公を務める女性主人公エリーは、本作ではレズビアンであることが明らかになり、新キャラクターバイセクシャルのディーナと接近する。新キャラクターのレブはトランスジェンダー少年である。今作でメインキャラクターの一人となるアビーは、発売前に誤って噂されていたようなトランスジェンダー女性ではなく、単に「女性らしさ」がないだけの筋肉質な女性である。ラスアス2のシナリオを手掛けたNaughty Dogイスラエルアメリカ人のライターNeil Druckmann(ニールドラックマン)は、自身シスジェンダー男性であるものの、フェミニスト評論家Anita Sarkeesian(アニータ・サーキシアンからの影響を公言しており、ジェンダーコーリティ多様性配慮したゲーム作りを心がけている。2004年よりNaughty Dogで働く彼は、前作『The Last of Us』や『アンチャーテッド 海賊王と最後の秘宝』のクリエイティブディレクターおよびライターを務めた。

ユーザースコア世界には、Troll荒らし)によるreview bombレビュー爆弾レビュー爆撃)というものがある。『Death Stranding』のケースでは、1万8000件以上のユーザーレビューから約6000件以上が削除され、それにより「5.1」だったスコアは「7.3」まで上昇した。有名作の発売の際には、このようなreview bomb存在もまたよくある光景となっている( レビューサイトが「デス・ストランディング」への「疑わしいユーザー評価」を大量削除してスコアが一気に急上昇 - GIGAZINE https://gigazine.net/news/20191210-removed-death-stranding-suspicious-ratings/ )。おそらく今回のラスアス2でも、後日いくらかのレビューが削除され、揺り戻しが起こるだろう。

しかツイッターでの評判などを見る限り、この低評価の原因はTrollによるいたずらだけとは思えない。結局のところ不満を集めるのは、新メインキャラクターアビー男性に媚びたところのない政治的に正しい女性キャラクターだったからではなく、前作で辛い旅をともにしてプレイヤーがさんざん感情移入した主人公ジョエルがポッと出のアビーによく確認もされずあっさり射殺され、ジョエルの代わりにそのアビーを長時間にわたってプレイアブルキャラとして操作しなくてはならないというゲーム構造によるもの、それにとっちらかって焦点の定まらないストイーリーラインによるものだろう。

2020-06-14

UNコーディング面接こんな感じでした

入室と自己紹介

面接官「やあ!わたしはベン。会えて嬉しいよ!」

ぼく「こんにちは、ベン。ぼくはWashlet2000。便意はどう?」

面「超いい感じだよ。きみは?」

ぼ「ぼくも超いい感じさ」

面「それはよかった。わたし部署AのToiletエンジニアで3年目なんだ。社内ツールを作ってるよ。Benki関係ツールで、超クールでExcitingなやつなんだ」

ぼ「それはクールだね」

面「簡単自己紹介をお願いしていいかな?」

ぼ「うん。ぼくは経験豊富自宅警備員で…〇〇で貢献して…リーダー経験が……」

面「Cool(たぶん聴いてない)。じゃ、問題に入ろうか。わたしから問題はね…」

ぼ「あ、はい

出題と質疑

面「Unkを管理するコードを書いて」

ぼ「Unkの管理…」

面「そう。Unkってさ、知的生命体でしょ?あれを実現するの。『分裂』もあるから注意して」

ぼ「なるほど。えーと、それはHankeyみたいな普通のUnkだよね。えーとえーと」

面「…」

ぼ「えーと、そうだ、Unicodeとか決まってる?」

面「決まってるよ。U+1F4A9」

ぼ「うーん。じゃあUnkって何を保持したらいい?種類、個数?」

面「いい匂いだね。ここでは簡単のため、そうだね、個数だけにしようか」

ぼ「ならUnkの個数を持つ感じかな」

面「多分そうだね」

ぼ「えーと、そして、『分裂』のときに増える個数、『消滅』したかどうかを返すAPIが要る」

面「うん。あと新しいUnkが産声を上げたときも」

ぼ「そうだね。じゃあ内部的には、分裂した時の増殖個数を計算して、unkで現在の個数を管理する感じかな…」

面「それで行けそう?」

ぼ「待って。それで、APIはdivision()、roar()、isDead()でいい?」

面「うん、そうだね。とりあえずAPIはそれで良いよ」

ぼ「OK。あ、division()でもうそれ以上増えれなときには、どうする?」

面「それもいい匂いだ。そうだね、今の個数を返すようにしようか」

ぼ「あと何かあるかな…」

面「…」

ぼ「Unkだと、大腸菌を表示したり、そこからBenkiにジャンプしたりできるけど…」

面「あとで必要になるかもね」

ぼ「だよね。速度は…当然すべてO(1)でやらないといけない」

面「速いほうがいいね

ぼ「あとは、えーと、Benkiクリアもあとで付けそうだな。まあこれは簡単か」

面「そうだね」

ぼ「まとめると、Unkの個数を整数のIntで持ち、unkで管理する。division()が呼ばれたら、分裂して、isDead()が呼ばれたら、生存の真偽を返す。分裂時にはroar()を呼び出して、Unkoooooooooo!×(増殖個数分)産声をあげる」

面「それで良さそう?」

ぼ「うーん、多分…なにかあるかな…」

面「『消滅』を何度かしたあと、『分裂』をしたらどうなる?」

ぼ「ん?……あ、だめだ!そうか、『消滅』『消滅』『分裂』で過去の個数うんこに増えてしまう!つまり、isDead()が真なら、その時のunkを初期化しないと!」

面「そう!ならどうする?」

ぼ「うーん。変数maxUnkを足せばいいかな。isDead()はmaxUnkより大きな場合は真。そのときはunkを初期化する」

面「なるほど。大丈夫そうだね」

ぼ「あとはOKかな?…よし、じゃあコード書いてみるよ(マーカーを手に取る)」

コーディング

ぼ「まずクラス外観はこんな感じかな…(カキカキ)」

class Unk:
    def __init__(self): pass
    def division(self): pass
    def roar(self): pass
    def isDead(self): pass

面「ん?これ何の言語?」

ぼ「pyてょnだよ。ぼくはpyてょn使いなんだ(自己紹介で言ったけど…)」

面「Cool

ぼ「そして、Unkの個数を整数で持つよ。名前はunkでいいか

面「OK

ぼ「それと有効な最大unk数を保持するmaxUnkが要るね」

class Unk:
    def __init__(self):
        self.unk = 1
        self.maxUnk = 1024
        
    def division(self): pass
    def roar(self): pass
    def isDead(self): pass

面「なんでunkを1で初期化したの?」

ぼ「これは『いまの個数』だから。初めは1つのUnkが存在するのを想定してる」

面「なるほど」

class Unk:
    def __init__(self):
        self.unk = 1
        self.maxUnk = 1024
        
    def division(self):
        self.unk = self.unk*2
        
    def roar(self):
        print("Unkoooooooo! ×", self.unk//2)
        
    def isDead(self):
        return self.unk > self.maxUnk

ぼ「division()、roar()、isDead()も書くとこんな感じかな…」

面「増殖の計算は2倍したんだね」

ぼ「そう。ちょっと手動テストしてみるね…。えーとunkが無いときのdivision()、roar()は大丈夫そうかな…。初回のdivision()でunkのサイズが1になって…そのあとroar()したら…isDead()は……」

unk = Unk()
while True:
    if not unk.isDead():
        unk.division()
        unk.roar()
    else:
        break
---
Unkoooooooo! × 1
Unkoooooooo! × 2
Unkoooooooo! × 4
Unkoooooooo! × 8
Unkoooooooo! × 16
Unkoooooooo! × 32
Unkoooooooo! × 64
Unkoooooooo! × 128
Unkoooooooo! × 256
Unkoooooooo! × 512
Unkoooooooo! × 1024

面「大丈夫そう?」

ぼ「うん…たぶん…」

面「じゃいくつか聞くよ」

2020-06-12

anond:20200612120752

以下のソースが何をやっているか答えてみせろ

def myfunc(arr):
    if len(arr) <= 1:
        return arr

    left = []
    right = []

    ref = arr[0]
    ref_count = 0

    for e in arr:
        if e < ref:
            left.append(e)
        elif e > ref:
            right.append(e)
        else:
            ref_count += 1

    left = myfunc(left)
    right = myfunc(right)

    return left + [ref] * ref_count + right

2020-06-11

anond:20200611184839

できるけど。

Xを集合。

BをΦ,X∈Uを満たす部分集合族。

OをBの元の合併と有限個の共通部分全体。

V⊂Xが開集合

def任意のx∈Vに対して、x∈U⊂VとなるU∈Oが存在

これはどんな教科書にも書いてある開集合基本的な特徴付け。

特に、X=R^n、Bを開球全体とすれば、高校生でも知ってるEuclid空間開集合定義

もう君が数学勉強してないことも日本語読めないことも客観的に見てバレバレなんだから、恥重ねるのやめたら?

2020-05-23

anond:20200521175300

どもども。

「なにか作ってみろ」は有効アドバイス

わたし意見と経歴

わたしは「なにか作ってみろ」系の言説にはまったく同意しません。

わたし自身会社に3ヶ月間みっちり導入教育をしてもらい(COBOL85とPL/I時代がわかる……)、基本的アルゴリズムコントロールブレークマッチング、マスタ-トランザクションソートマージetc.いよいよ時代がわかる……)の演習を(給料をもらいながら)やって、その後もプログラムとつかず離れずでフラフラと生きてきました。

こういう経験新卒カードがあるから有効もので、では1から始めるとしたら……、というときに、プログラミングスクール専門学校)というのは悪くない選択肢ではないかと思います。が、行ったことないので正直わかりません。

実際自分が1から始めるという立場になったら、まったくオロオロして元増田さんのように世のなか(の気にいらないヤツら)に呪詛を吐いて満足するだけだったと思います(当然ながらそれをいくらやってもプログラミングは上達しません)。

「なにか作ってみる」前に動機をはっきりさせる

話をプログラミングだけに限っていえば、一番大事なのはやりかたじゃなくて動機だろうと思います

「なにか作ってみよう」というのは、なにか作ってみようと思ってない人にはまったく心に響かないでしょう。

動機リブンで「なにか作ってみた」人といえば思いだすのは、MikuMikuDance樋口優さん(ミクを簡単に踊らせたい!)とhinadanの若宮正子さん(高齢者にも遊べるゲームが欲しい!)でしょうか。

ただかれらはわたしから見れば(モチベーションを維持しそれを行動に移す)天才で、あんまり参考にならないのも確かです。

作ってみた」は就職に使える経験

あと、元増田さんの動機は「プログラミング生業にしたい」ということなので、野良プログラマでは履歴書上でのアピール力が弱いかも、と思います

ビジネスで使われるアルゴリズムにはそれなりのルールがあります安全な(バグの出にくい)コードの書きかた、「車輪の再発明」はぜず、枯れた(将棋で言えば定跡のような)アルゴリズムを使う、ほかの人に使ってもらえるための工夫(可読性の向上など)、etc.です。

「なにか作ってみよう」を繰りかえしても、そういった作法的なものが身につくかどうか、それは才能に関わってくる問題だと思います。才能だのみの手法を推奨するのは無責任だと思いますね。

また、たとえば「例をコピーして解析する」というのもある意味有効プログラミング学習法ですが、「下手に習うと下手が伝染る」ともいいます。どれがお手本として優れているか、それを見る目はある程度ビジネス用途プログラムに関わっていないと持てないというジレンマがあります

野生のプログラマ就職有効なくらいの力を見せるとしたら、なにかのコミッター(なにする人かよく知りませんが)とかになって「××ならこの人」となったり、プログラミングコンテストで上位の成績を残したりしなければいけないのかもしれません。

どうしたものでしょうね。ブクマカのみなさんの反応を見ると、専門学校でもあまり就職に有利にならない(ホントか?専門学校意味あるのか?)という話ですが、目的就職ならば、一番の近道のような気がします。

じゃあどうすべきか?は他人にはわからない

そこらへんからは、元増田さんがなにをしたいか、あるいは聞いてみたいだけだったのかによります仕事には適性とやる気が大事です。あとは年齢と必要性かな。進路はオーダーメイド以外にはありえないので、提示された案を自分で選んでそれに賭けるしかないのかな、と思います

「なにか作ってみました」の記録

自分がまず作ったもの晒してみろよ

さて、この文章は実はこの一文に反応してのものです。(↑のは前書き)

GWあたりからトシも考えずにRubyの再入門をしていまして、手始めに「首相動静」の整形ツールを作ってみました。

初心者で(Rubyに関しては仕事で使ったことないので)なにか作ってみよう、というとこの程度ですね。

これで就職に有利になるかというと、あんまりそうは思えないなあ。Excelマクロが組めるとかのほうがどこかの事務所に潜りこめそうですよ(でもそれも最近インフレ気味かもしれませんね)。

なにをするツール

朝日新聞首相動静は詳細ですが、改行が入っておらず、大変読みにくいものです。こんな感じです。

首相動静の例(2018年12月11日……話題になったものです)

 【午前】9時31分、自民党本部。33分、同党役員会。10時2分、官邸。5分、閣議。21分、宇宙開発戦略本部。34分、柴山昌彦文部科学相。38分、岩屋毅防衛相。41分、山下貴司法相。11時3分安全保障と防衛力に関する懇談会

 【午後】0時11分、政府与党連絡会議。44分、山口那津男公明党代表。1時27分、日韓議員連盟額賀福志郎会長河村建夫幹事長。2時20分、行政改革推進会議。52分、兼原信官房副長官補、秋葉剛男外務事務次官。3時36分、麻生太郎財務相財務省岡本薫明事務次官太田主計局長。4時7分、太田氏出る。可部生理局長加わる。15分、全員出る。25分、黒川弘務法務事務次官。34分、谷内正太郎国家安全保障局長、北村内閣情報官宮川内閣衛星情報センター所長。41分、谷内、宮川両氏出る。5時3分北村氏出る。10分、東京永田町ザ・キャピトルホテル東急宴会場「鳳凰」で中曽根康弘世界平和研究所設立30周年記念式典に出席し、あいさつ。20分、官邸。6時18分、ガーナのアクフォアド大統領を出迎え。記念撮影。19分、儀仗(ぎじょう)隊による栄誉礼、儀仗。27分、アクフォアド大統領会談。7時12分、署名式、共同記者発表。32分、公邸首相主催の夕食会。8時43分、アクフォアド大統領見送り。9時、ヨルダンのアブドラ国王電話協議

首相動静フォーマット

ただ、これはフォーマットがはっきりしており、

  • 午前と午後はそれぞれ1行になっていて、行頭には【午前】/【午後】という文字列が付いている。
  • 午前と午後の間には空行がある。
  • ひとつひとつイベント時刻表示で始まり句点「。」で終わっている。
  • 時刻は「h時m分」型で、前ゼロはつかない。後にかならず読点「、」が付く。「h時」の部分が前の項目と同じ場合には省略する。
  • 午前いっぱい、午後いっぱいの予定の場合には時刻をつけない(他の首相動静から)。

と、例を見るかぎりキッチリとしたルールに則っているようです。

動機

なので、「これだったら整形できるかも」と思い、再び学びはじめたRubyで整形ツールを作ってみることにしました。

整形ツール
ツール仕様
整形後の例(上記動静を整形)

【午前】

09時31分、自民党本部

09時33分、同党役員会。

10時02分、官邸

10時05分、閣議

10時21分、宇宙開発戦略本部

10時34分、柴山昌彦文部科学相

10時38分、岩屋毅防衛相

10時41分、山下貴司法相

11時03分安全保障と防衛力に関する懇談会

【午後】

00時11分、政府与党連絡会議

00時44分、山口那津男公明党代表

01時27分、日韓議員連盟額賀福志郎会長河村建夫幹事長

02時20分、行政改革推進会議

02時52分、兼原信官房副長官補、秋葉剛男外務事務次官

03時36分、麻生太郎財務相財務省岡本薫明事務次官太田主計局長。

04時07分、太田氏出る。可部生理局長加わる。

04時15分、全員出る。

04時25分、黒川弘務法務事務次官

04時34分、谷内正太郎国家安全保障局長、北村内閣情報官宮川内閣衛星情報センター所長。

04時41分、谷内、宮川両氏出る。

05時03分北村氏出る。

05時10分、東京永田町ザ・キャピトルホテル東急宴会場「鳳凰」で中曽根康弘世界平和研究所設立30周年記念式典に出席し、あいさつ。

05時20分、官邸

06時18分、ガーナのアクフォアド大統領を出迎え。記念撮影

06時19分、儀仗(ぎじょう)隊による栄誉礼、儀仗。

06時27分、アクフォアド大統領会談

07時12分、署名式、共同記者発表。

07時32分、公邸首相主催の夕食会。

08時43分、アクフォアド大統領見送り

09時00分、ヨルダンのアブドラ国王電話協議

う~ん、見やすい!ことないですか?

あと、午後の時刻を24時間制にしたいな、とも思いますが、それは今後の課題(つぎに首相動静話題になったとき)とします。全角数字計算ってどうやるんだろう?

ソース

たぶんRubyistにいろいろ突っこまれると思うけど、こんな感じです。

プログラマ玉石混淆ですが、これは石のほうの例だと思っていただければさいわいです。

はてな記法にはシンタックスハイライトあるけど、増田だとInternal Server Errorになるのではずしました。見にくくてスマソ。

# encoding: utf-8
# 漢字コンバータライブラリを取りこむ(String漢字変換メソッドを付けてくれる。神)
require 'kconv'

# 正規表現パターン
# 時刻をh時m分形式からhh時mm分形式にする
# 否定後読みを使用する
# 時は行頭にある
OneDigitHour = /^((?<![0-1])[0-9]時)/
# 分は時のあとにある。このパターンマッチすると、\1が時、\2が分になる。
OneDigitMinute = /^([0-9]{1,2}時)(?<![1-5])([0-9]分)/
# 分のない、時だけの行のパターン否定先読み使用
HourWithoutMinute = /^([0-9]{1,2}時)(?![0-5]?[0-9]分)/

# 行頭のh時m分をhh時mm分にするサブ処理(これは関数といっていいの?)
def convTopHourMinute2TwoDigits(oneLine)
    # 時を変換
    oneLine.sub!(OneDigitHour, "0\\1")
    # 分を変換
    oneLine.sub!(OneDigitMinute, "\\10\\2")
    # 分がない場合"00分"を追加
    oneLine.sub!(HourWithoutMinute, "\\100分")
    # 戻り値
    oneLine
end

# 入力ファイル名前
InputFilename = "首相動静2018年12月11日.txt"
# 出力ファイル名前
OutputFilename = "首相動静2018年12月11日_編集済.txt"

# 入力ファイルオープン
inFile = File.open(InputFilename, "r")
# 出力ファイルオープン
outFile = File.open(OutputFilename, "w")

# 時刻パターンシンプルに、h時、m分、h時m分、という3パターンを結合する
# 1つのパターンで全部カバーするよりこちらのほうが見やすい。というか、脳の容量の問題で1文に書ききれなかった
jikokuPattern = /[0-9]{1,2}時[0-9]{1,2}分、|[0-9]{1,2}時、|[0-9]{1,2}分、/
# 午前/午後
ampm = /(【午前】|【午後】)/

# 午前/午後、あるいは時刻の前で改行するためのパターン
kaigyouSign = Regexp.union(ampm, jikokuPattern)

# ファイル一括読み込み
# 昔は1行ずつ読みこんでました。メインメモリが3MByteとかだったので
contents = inFile.read.toutf8

# 入力終了。閉じておきます
inFile.close

# スコープ関係から、ここでローカル変数に代入
# ※ Rubyスコープと暗黙の型には泣かされました。これに慣れるのがRubyのコツかしら
#  明示的な型宣言はあったほうがいいと思うなあ。エラー出力の理由がわからなかったりするので。
hour = ""

# デバッグ行はコメント化しています
# 時刻パターンチェックのため、コンテンツを出力してみる
# p jikokuPattern.match(contents)

# エントリを改行サインで行に分ける
contents.gsub!(kaigyouSign, "\n\\&") # "\\&"はマッチした文字列のもの。2重のエスケープ"\\"が必要

# 改行チェックのため出力
# p contents

# 入力を行で分割して各行ごとに処理
contents.split("\n") do |oneLine|
    # 午前/午後を示す開きカッコ"【"があるか
    if (oneLine =~ /^【/) then
        # そのまま出力
        outFile.write(oneLine + "\n")
        # p "午前午後:" + oneLine
        next
    # 空白行は無視スキップする)
    elsif (oneLine =~ /^[\s ]*$/) then
        # 出力しない
        # p " 空白行:<skip>"
        next
    # 行頭に「時」があるか
    elsif (oneLine =~ /^[0-9]{1,2}時/) then
        # あったら時間表示を抜きだしておく
        hour = oneLine.match(/^([0-9]{1,2}時)/)[0]
        # p "   時:" + oneLine
        outFile.write(convTopHourMinute2TwoDigits(oneLine) + "\n")
        next
    else
        # 「時」がなければつけて出力
        oneLine = hour + oneLine
        # p "普通の行:" + oneLine
        outFile.write(convTopHourMinute2TwoDigits(oneLine) + "\n")
    end
end
感想

手でやったほうが早いね

以上

2020-04-11

マスクデバフ効果

みんな布マスクDEFのバフ期待できんって論調だけど、自分のATKにデバフについて目を向けなさすぎじゃね?

結局みんな他人ごと、人まかせなのよ。

2020-03-27

anond:20200327115842

グローバル変数と同じ変数名に代入しようとすると

「代入するってことはローカル変数だな」

解釈が変わる

それで右辺のaがローカル変数扱いになる

代入しつつグローバル変数扱いするためには

global a

を入れる必要がある

a = [1, 2, 3]
def b():
    global a
    a = [a[i]+1 for i in range(3)]
    print(a)
b()

python有識者教えてほしい

a = [1, 2, 3]
a = [a[i]+1 for i in range(3)]
print(a) # [2, 3, 4]

リスト内包表記ってこう書くじゃん?

a = [1, 2, 3]
a = [a[i]+1 for i in range(3)]
def b():
    print(a)
b() # [2, 3, 4]

これでも問題ないじゃん?

a = [1, 2, 3]
def b():
    a = [a[i]+1 for i in range(3)]
    print(a)
b()

これだとエラー

なんで??

2019-12-31

[]T9(ティーナイン)

携帯電話テンキーを用いた文字入力方式一種。少ないストローク数で文字入力可能。テジック・コミュニケーションズ社によって開発された。日本ではデンソーJ-DN31が初採用NEC積極的に搭載機種を開発した。スマホではクラゲ日本入力を利用することで実現可能らしい。

日本語を入力する場合は子音のみを指定する。そうするとソフトウェア母音を推測して変換候補提示してくるのでその中から選択する。

「にほんごにゅうりょく」と入力したい場合は「なはんかなやあらやか」つまりは「5602581982」と打てば候補として「にほんごにゅうりょく」が出てくるらしい。改良版のT9ダイレクトでは直接漢字が変換候補として挙げられる。

ローマ字アルファベット場合abcなら2をdefなら3をghiなら4を1回押すことで可能性のある3文字から最も単語として成立しそうな文字が選ばれて単語が出てくる。

2019-08-04

動作性IQが高いと「SRT・力」の成長率が高い

言語IQなら「INT・かしこさ」が成長しやすくなる。

加速性IQなら「AGI・すばやさ」。

運命IQだと「LUC・こううん」。

健康IQが高くて「DEFぼうぎょ」が高い人が一番お得かな。HPも伸びやすいし

2019-06-26

数学検定1級の増田に聞いてみたいんだけど、RPGダメージ設定って

どう計算するのが良いと思う?

良い感じの計算式考えてくれない?

使おうと思っているステータス

LVレベル

HP:体力

SP:気力

ATK:攻撃

DEF:防御力

STR:体格?

SPD:素早さ

INT:賢さ

MND:精神力

DEX命中率、回避

LUK:運

EXP:けいけんち

2019-01-06

import pprint


class Value:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __repr__(self):
        return f'{type(self).__name__}({self.x}, {self.y})'


def create_2D_list(a, b):
    _2D_list = []
    for i in range(a):
        _1D_list = []
        _2D_list.append(_1D_list)
        for j in range(b):
            _1D_list.append(Value(i, j))
    return _2D_list


pprint.pprint(create_2D_list(2, 3))
# [[Value(0, 0), Value(0, 1), Value(0, 2)],
#  [Value(1, 0), Value(1, 1), Value(1, 2)]]

2019-01-01

Graphviz を使って Python抽象構文木を生成する。



1. こんな感じで使います


1.1. スクリプトとして使用する。

$ python parser.py sample.py


1.2. モジュールとして使用する。

import parser
code = '''
a  = 1 + 1
print(a)
'''
graph = parser.create_graph(code)
graph.render("sample")


2. ソースコード parser.py はこんな感じです。

import ast
import sys
import graphviz


def create_graph(lines):
    graph = graphviz.Graph(format='png')
    root = ast.parse(lines)
    node_list = [root]
    _setup(graph, node_list)
    return graph


def _setup(graph, node_list):
    # node
    node = node_list[-1]
    node_identity = str(len(node_list))
    node_name = type(node).__name__
    graph.node(node_identity, node_name)

    # children
    for child in ast.iter_child_nodes(node):
        node_list.append(child)
        child_identity = str(len(node_list))
        graph.edge(node_identity, child_identity)
        _setup(graph, node_list)


if __name__ == '__main__':
    file_name = sys.argv[1]
    with open(file_name) as file:
        lines = file.read()
    graph = create_graph(lines)
    graph.render(file_name)

2018-12-07

対魔忍RPGSR所感

Wikiに“キャラ評価一覧”なるものができたので読んでみたら書きたくなった

現状だとクエストに関してはどのレアリティのどのキャラでも鍛えれば回れる

サポートも呼べるから周回性能なんか重要じゃないだろ、高難易度レイドの評価重要なのでは?と思ったので所感を書いてみる

50レイドでは発見時死にかけでもなければ30ターン殴れることが多い気がするので30ターン前提で評価

傑出

ガチャ不知火:硬いヒーラー回復効率も最強で文句なし

旧凛子:火力文句なし

天音:硬いので落ちる心配がない 軽いSP消費のATKデバフヒール回るまでを安定させることもできるし、ATKバフとDEFデバフ同時掛けを一人で出来る(バフのみ、デバフのみのキャラと違って迅刹が連続しても腐らない)迅刹OPな今の仕様では相当強い イベカゼとの相性は悪い

ガチャユキカゼ:与ダメ減る属性がいないのでどの単色構成にも混ぜて使える。火力文句ないが、一番ダメージが出る属性相手一方的に有利が取れない スキル1はロボ、オーガファウストで使うと危ない

優秀

アスカアタッカーが迅刹を使わない無双6でスキル1連打構成なら相当強い ワイトで代替可能とは言えないレベルステータスが違う

リリム:硬いので落ちる心配がない 2種デバフで迅刹が連続しても腐らない(演出長いけど)。ATKデバフSPが重いのでヒーラーの出足が遅い時の安定化要員にし辛いと思う。(2ターン目までにリリムとヒーラーの迅刹がどちらも発動しない確率は40%くらいある)

あやめ:常にボコボコに殴ってくる相手には相当強い。無双以外にATK上げる系の装備来たら評価上がるはず LSも良い ピンチならスキル1使えばいいし優秀だと思う

まあまあ

イベカゼ:ステ低いが他にない三色大バフは魅力。代替不可なので厳選装備支給対象。迅刹がないと遅いが迅刹発動が連続しても演出時間問題で嬉しさ半減

紅:スキル1連打以外に使いみちはないが、基礎ステ優秀

50レイドには連れて行かない

ラクル、若さくら、イベアサギ、イベ不知火

==========以下使ったことない============

強い気がするけど持ってない(育ってない)からからない

アスカ:迅刹がないと遅いが迅刹が連続しても以下略無双以外にATK上げる系の装備来たら評価上がるはず

蛍、スネークレディ:火力SRは強いよ。スネークさんは奥義で殴るからしかしたら不遇かも

そこそこ強い気がするけど持ってない(育ってない)からからない

イングリッドアタッカーなのにATKバフ中持ってるのはいいと思う。迅刹ないとバフするだけになって攻撃性能活きないけど

仮面スキル1連打かな?

50レイドには連れて行かない気がするけど持ってない(育ってない)からからない

ニア、沙耶NEO、ナーサラ、アルカ、凜花、朧

2018-10-21

プログラミング論理的思考の訓練

プログラミングを教えててよく分かるのは、ちゃん論理的思考が出来ているかどうかを計る道具として非常に有用だということ

口先だけで乗り切ってきた人はプログラミングを教えてもちゃん理解してくれない

知識化するときに表面上だけを理解することに慣れきってしまっていて

試験とか面接突破できるんだけど実際のところ分かってない

からプログラミングを教えて新しい物を作らせようとすると全然作れない

からあるソースを少し触る、とかもできない

例えば

def hoge(a, b):
    c = a + b
    return c

def gaga(a, b):
    print("Hello ", a, b)

っていうソースがあったとして、gagaっていうメソッドhoge演算結果が表示されるように変更してみよう、っていうことをさせると

def gaga(a, b):
    print("Hello ", a, b, c)

って答える。

もちろんスコープとか名前空間とか、そもそもそれが生まれてきた経緯とかメソッド意味とかはちゃんと教えてるんだけど

それでも理解してくれない

この問題に関して正解を教えると、この問題は解けるようになるが、しばらくすると似たようなミスを連発する

一方で論理的思考が出来る子は全然分野違いから来てる子でもそんな間違いはしない

頭の中を整理して理解しているからなのか、とんでもない間違いはほぼない

入試とか面接だと両者の区別は付かないし、下手したら普段業務でも顕在化しなかったりするんだけど

しばらく一緒に仕事をしたりすると

「あ、なんかそもそもを分かってない」

っていう子はプログラミングができない

プログラミングで何かを作らせるっていうのはそういう人間を見分けるテストとしてすごく有用だと思うし、重宝してる

2018-10-04

anond:20181004162110

pythonおじさん「あっ! 変数オペレータの間にスペースが入ってない! これはダメコードだ!」

pythonおじさん2「文字列は+で結合するもんだろ? なんで複数行にわたって文字列が書いてあるの? おかしくない」

pythonおじさん3「ん? なんで関数の中に関数が書いてあんの? 関数ちゃんdef宣言しなきゃだめだよ~」

2018-06-29

from typing import Sequence


class ReverseSequence(object):
    def __init__(self, sequence: Sequence):
        self.sequence = sequence  # reference to container
        self.index = len(sequence)  # current index

    # Step 1. define __iter__ method whitch returns self.
    def __iter__(self):
        return self

    # Step 2. define __next__ method
    #             rasing StopIteration at the end of iteration.
    def __next__(self):
        if self.index > 0:
            self.index = self.index - 1  # next index
            return self.sequence[self.index]
        else:
            raise StopIteration


class ReverseSequenceGenerator(object):
    def __init__(self, sequence: Sequence):
        self.sequence = sequence
        self.index = len(sequence)

    def __iter__(self):
        while self.index > 0:
            self.index = self.index - 1
            yield self.sequence[self.index]
        raise StopIteration


assert list.__eq__(
    [element for element in ReverseSequence('spam')],
    [element for element in ReverseSequenceGenerator('spam')]
)

class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


class ReverseGenerator:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        while True:
            if self.index == 0:
                raise StopIteration
            self.index = self.index - 1
            yield self.data[self.index]


assert [s for s in Reverse('spam')] == [s for s in ReverseGenerator('spam')]

2018-05-28

今日のできごと

t*お昼に書きます

name*ここは見出しです

[日記]

小見出しです。
さらに小さい小々見出しです。
名前個数
りんご1
みかんだいだい2

ここは引用文です。

ただのブロックとして使うこともできます

整形済みテキストです。
 class Foo
   def bar'baz' # return baz
   end
 end
 ||<

2018-04-02

def _stub_rectangle_list(rectangle_list, query_rectangle):
    """Pop rectangles overlapped by query_rectangle from rectangle_list."""
    new_rectangle_list = []
    stubbed_rectangle_list = []
    while rectangle_list:
        rectangle = rectangle_list.pop()
        if rectangle & query_rectangle:
            stubbed_rectangle_list.append(rectangle)
        else:
            new_rectangle_list.append(rectangle)
    rectangle_list.extend(new_rectangle_list)
    return stubbed_rectangle_list


def _stub_rectangle_list(rectangle_list, query_rectangle):
    ###another implementation using list comprehension.
    ###It's slower than the above code, but more readable.
    new_rectangle_list
        = [rec for rec in rectangle_list if not (rec & query_rectangle)]
    stubbded_rectangle_list
        = [rec for rec in rectangle_list if rec & query_rectangle]

    # rectangle_list ← new_rectangle_list
    rectangle_list.clear()
    rectangle_list.extend(new_rectangle_list)

    return stubbded_rectangle_list

2018-03-09

プログラミング言語を見分けるフローチャート

何で書かれてるかわからないコードがあったとして、この言語は○○だ!と判断するまで脳内でどんな流れで判断してる?


クラスなしでグローバル部分に直接代入とかコードとか書いてるから

関数定義に 「function」を使っていて、変数名に $ がついてるから

メソッド定義が 「def」 で if のあとに : があるから


みたいなの

フローチャート式でもなんでも、いい感じに見分けれる方法教えて

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