リパッケージは悪くない

Androidアプリがリパッケージされてマルウェアしこまれてうんぬんという記事
www.atmarkit.co.jp


ぉぃぉぃ、リパッケージしやすいというのはユーザにとってメリットなんだよ〜
そりゃソース公開されているのがベストだけど、そうじゃなければデコンパイルしてカスタマイズするのなんて当たり前だろ
マルウェアしこまれたうんぬんはストアの問題、ソースからコンパイルできないライトユーザの問題、リパッケージが悪いわけじゃない
そんなわけわからん事のためにリパッケージ対策すすめるとか勘弁して欲しい

ストアがなんとかせい、ストアが

どんどんアホになる

一度作ったプログラムを再実装しようとしたら、書けない!
元プログラム見てもなんか微妙に間違いを発見してしまい気になって追ってったりするから読めない
一番の問題はブラウザ
ネットで検索すると余計なもんが見えすぎる
遊んじゃう


結局紙とペン持ってPCは使わず、音楽は切ったらスラスラ進んで
結局A4一枚にも満たない数式書いて、それを元にコーディングしたらすぐできた
昔はこんなん頭ん中でぱぱってできたのになー…
アホになったわ…

WMI Win32_Processorが使えない

最近Windows7→10にした一台でアップデートしたとたんWin32_Processorが使えなくなってた
LoadPercentageがずっとnullになる感じ
他のWin10マシンでは問題ないので原因はよくわかんない

アップデート後にCPUの使用ログを見たらずっと0%のままなので何事かと思ったら・・・

とりあえずWin32_PerfFormattedData_PerfOS_Processorは使えるようなので
PercentProcessorTimeで置き換えるようにしてみた
タスクマネージャのCPU使用率と数ポイント誤差があるけどまぁええやろ

var locater = WScript.CreateObject("WbemScripting.SWbemLocator");
var service = locater.ConnectServer();

function get_cpu(service)
{
	var xs = new Enumerator(service.ExecQuery("Select * From Win32_Processor"));
	for(; !xs.atEnd(); xs.moveNext())
	{
		if(xs.item().LoadPercentage == null) {break;}
		return(xs.item().LoadPercentage);
	}
	xs = new Enumerator(service.ExecQuery("Select * From Win32_PerfFormattedData_PerfOS_Processor Where Name = '_Total'"));
	for(; !xs.atEnd(); xs.moveNext())
	{
		return(xs.item().PercentProcessorTime);
	}
	return("");
}

全くもう、ようわからん
昨日今日とちゃんと動いたので良しとしよう
f:id:zenu:20160418225401p:plain
f:id:zenu:20160418225403p:plain

配列が書けた

配列が使えるようになった
、、、と言っても要素足したりはまだ、おいおいやっとく

f:id:zenu:20160322212205p:plain

要素なしの空配列の型解決が超むずそうだったので未対応
nullを対応する時に一緒に対応を考えよう


クラス構文を用意してないけど.NET Frameworkメソッドは普通に呼べそう
レシーバを第一引数にした関数呼び出しにすればいい
実際「sub [](Array(String), Int) String」を「List(Of String) get_Item(Integer) As String」にマップできている
callvirtとかは後で考える
コンストラクタがないのでどー折り合いつけよっかなぁ


そういえば、.NETでGenericsの判定方法がさっぱり分からない
あるobjが「List(Of )」のインスタンスやってどうやって判定したらいいのかさっぱり・・・
今は「obj.GetType.Name.Equal("List`1")」って型名みて済ませたけど、うーん
おまけにキャストもまともにできないのでリフレクションで中身を取り出している
やだなー

複数ファイルからのコンパイル

複数ファイルからのコンパイルができた
ファイルを1つのNamespaceにする感じ

今んとこuseすると相手Namespaceの関数だけを取り込むような動きをする
エントリーポイントになるNamespaceしか実行しないから
use先のファイルに単に「print(1)」と書いたら動かない、つか単純に動かれても困るしどうしたものか・・・
とりあえずほっておこう

f:id:zenu:20160317234225p:plain

useすると勝手にファイルを読みに行く
ちゃんとパーサがリエントラントになってるみたい、結構えらいな

しかしパーサジェネレータがVS2005が出たころに書いたものなので、とにかくソースがきちゃない
error終端記号やyyerrorに相当するものに対応してないって問題以外は特に困ってないけど
パーサジェネレータを書き直したい病が出てきた



そういえば配列とnullを作るのを忘れていた!!
nullはどうしようかなぁ
「var x = null」は型解決できないのでエラーにせざるをえない
「var x: Hoge = null」はそもそも型不一致でエラー
「var x: Hoge? = null」はHoge?型のnullにすればいい
「sub f() Hoge? : return(null)」ならHoge?型のnullにすればいい、つかreturn関数が「sub return(x: Hoge?)」になるからいいのかな?
こういうやつはinferの前に型解決できそう

「var x: @T = null」はinferの時にしか型解決できないから
いっそinferでまとめてやっちゃうのがお得かな??

型解決

複数ファイルからコンパイルすんのに型解決は何パス必要か?
お手軽にやるとしたら3パスかなぁ

1パス目でstructのプロトタイプ作っておいて
2パス目でsubのプロトタイプ作る
3パス目でinferする

減らす方法あるのかも知んないけどこれが一番スッキリ分かりやすいから、これで作ろう
今は1ファイルからのコンパイルしかしないので2と3がごちゃまぜになってる

結構infer部分がワケワカラン事になってるからいっぺん整理せな

ひさびさvi

gitを使ってみてるけどCUIでうんたらは好きくないのでTortoiseGitを使っている
コミットログを後で変更する方法が分かんない
あんまり分からないのでgit commit --amendをしたら…

ちょっとviさんじゃないか…
使い方分かんねーよ
まぁコミットログ1行直すだけやしi押しててけてけ打ってEscをこれでもかと押して:wq!って押すんだよな確か

と思ったら日本語が文字化けしよる
もーでけへんねやったらnotepad.exeにでもしとけばいいのに…