[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
メール
|
1-
101-
201-
301-
401-
501-
601-
701-
801-
901-
1001-
1101-
1201-
1301-
1401-
1501-
1601-
1701-
1801-
1901-
2001-
2101-
2201-
2301-
2401-
2501-
2601-
2701-
2801-
2901-
3001-
3101-
3201-
3301-
3401-
3501-
3601-
3701-
3801-
3901-
4001-
4101-
4201-
4301-
4401-
4501-
4601-
4701-
4801-
4901-
5001-
5101-
5201-
5301-
5401-
この機能を使うにはJavaScriptを有効にしてください
|
管理人の独り言(プログラミング関連)
1
:
みみず★
:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。
2
:
774さん
:2008/08/10(日) 23:32:49
このスレは、
Sleipnir 50%、プログラミング 50%で出来ています。
3
:
774さん
:2008/08/10(日) 23:34:49
Sleipnirの戻る、進むの復元はそのページが全て読み込まれてから行われる。
JavaScriptで例えるならば、
window.onload
のタイミングである。
よって、画像の読み込みも全て含めてから復元が行われる。
ただ、此れは瞬間的に読み込まれるサイトならば問題ないのだが、
画像が一杯のサイトだと復元できるまでの所要時間が長すぎる。
是非ともタブを復元した瞬間に前後移動が出来るようにして欲しい。
4
:
774さん
:2008/08/11(月) 02:08:37
スーパープログラマーへの道
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html
----
トリプルバッファリング。
それと描画の部分は関数ポインタにしてやるっていうのも俺の妄想と一緒だなあ。
5
:
774さん
:2008/08/11(月) 02:12:19
以下全て引用
-----
第4F回 正確な60FPSの実現(ウエイトタイマ構成法) 99/6/8
どことなくマニアックになってきた、この連載であるが、今回は、正確な60FPS(秒間60フレーム)を実現するためのウエイトタイマ(時間待ち)ルーチンについて説明する。
よく、タイミングはDirectDrawでflipすれば速いマシンなら60FPSになるので、それで調整するという人もいるが、これは、
1.遅いマシンでは60FPSにならない(タイミングが必要ならtimeGetTimeで調整すべき。第49回参照)
2.Flipは、使わないほうが無難。(第44回参照)
3.画面のリフレッシュレートは60Hzとは限らない。
という3つの理由で間違っている。
あと、正確に60FPS刻むような待ち時間を計算できない人がよくいるが、以下のソースを見れば、なんとなくコツがつかめるはずである。コツとしては、
1.システムに負荷をかけないよう、余分な時間はSleepする。(Sleepの精度を考慮に入れて、直前まではSleepさせない)
2.今回の待ち時間は、1000/FPSとやってしまうと、端数分だけおかしくなる
3.かと言って、精度を出すためにdouble型で今回の待ち時間を計算するのは少し、無駄
の3ポイントぐらいであろう。速いマシンで正確に60FPSを刻まないのは、この待ち時間の消費のさせかたが間違っているからである。描画(blt)の直前にこのルーチンを呼べば、必ず安定して、指定のFPSになる。
--------------------------------------------------------------------------------
void ys::ElapseTime(void){ // (C)yaneurao 1998-1999
// 厳粛かつ正確かつ効率良く時間待ちをする
if (iFPS == 0) return ; // Non-wait mode
static DWORD lastdraw = 0; // 前回の描画時刻
// (不運にも第一発目のtimeGetTime() == 0とかゆーこともあるが、それは構わない)
DWORD t = timeGetTime(); // 現在時刻
dwFPSWaitTT = (dwFPSWaitTT & 0xffff) + dwFPSWait; // 今回の待ち時間を計算
// dwFPSWaitは、待ち時間の小数以下を16ビットの精度で持っていると考えよ
// これにより、double型を持ち出す必要がなくなる。
// dwFPSWaitTT = 1000 * 0x10000 / FPS;である
DWORD dwWait = dwFPSWaitTT >> 16; // 結局のところ、今回は何ms待つねん?
// 1フレーム時間を経過しちょる。ただちに描画しなちゃい!
DWORD dwElp = (DWORD)(t - lastdraw); // 前回描画からいくら経過しとんねん?
if (dwElp>=dwWait) {
lastdraw = t;
return ;
}
// ほな、時間を潰すとすっか!
// まだ時間はたっぷりあるのか?
// 4ms以上消費する必要があるのならば、Sleepする
if (dwWait-dwElp >= 4) Sleep(dwWait-dwElp-3);
// いまdwWait>dwElpなのでdwWait-dwElp>=0と考えて良い
// 95/98/NTで測定したところSleep(1);で1ms単位でスリープするのは可能
// ただし、実装系依存の可能性もあるのでSleepの精度は3ms以内と仮定
while ((timeGetTime()-lastdraw)<dwWait) ;
// ループで時間を潰す(あまり好きじゃないけど)
// これで、時間つぶし完了!
lastdraw += dwWait; // ぴったりで描画が完了した仮定する。(端数を持ち込まないため)
}
--------------------------------------------------------------------------------
しかし、きちっと、このようなFPS調整のための時間待ちルーチンを書いている人を見たことがない。
小数点以下をdoubleで表記するのではなく、256倍や65536倍して整数で代用するのは、常用テクなのだが、意外と知らない人が多い。もっとも、なんでもかでも1命令1クロックで実行してしまう最近のCPUではあまり意味のないことなのかも知れない。しかし、最近のプログラマは、lineやcircleをアセンブラで実装した経験が無いのか?cos,sinを65536倍した整数テーブルをいじくり回すプログラムを書かないのか?そんな人たちが3Dでぐりぐり動くゲームを作っているのか?!まったくもって驚きである。8月に恐怖の大王が来るというよりは、65536倍衝撃的なんだってば!!
6
:
774さん
:2008/08/11(月) 14:56:27
int main(int argc, char **argv){
const int count = 100;
const int * const p = &count;
const int * const * const pp = &p;
const int * const * const *ppp = &pp;
}
7
:
774さん
:2008/08/11(月) 15:15:06
>>
http://jbbs.livedoor.jp/bbs/read.cgi/computer/38153/1205557370/492
が大体理解できた。
---
メタ関数::テンプレート・メタプログラミング
http://cppemb.blog17.fc2.com/blog-entry-90.html
---
のおかげ!
8
:
774さん
:2008/08/12(火) 01:31:44
JavaScript:document.body.innerHTMLのガイドライン4
http://society6.2ch.net/test/read.cgi/gline/1171265251/122
---
122 :水先案名無い人:2007/11/02(金) 12:04:48 ID:7m0B59Ki0
ちょっと趣旨違うと思うけど
①メモ帳開く
②以下の文を貼りつける
<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X
[i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>
③html形式で保存して、起動する
---
テトリス。
9
:
774さん
:2008/08/12(火) 02:26:04
ブラウザでc言語 part1‐ニコニコ動画(夏)
http://www.nicovideo.jp/watch/sm3702138
---
codepad
http://codepad.org/
---
こんなサイトがあったのか・・・
10
:
774さん
:2008/08/15(金) 11:51:04
プログラミングキャンプの講義資料を公開します - IT戦記
http://d.hatena.ne.jp/amachang/20080814/1218677014
11
:
774さん
:2008/08/15(金) 11:51:40
>>10
正直なところ、
全体のフィールドと、あるブロックを同じ関数で描画させる方法は凄いなと思った。
12
:
774さん
:2008/08/15(金) 13:41:20
俺もゲームプログラミングを本格的に始めるべきなのか。
でも普通のプログラミングも出来ないのにどうすればいいんだああああああああああああああああああああああ
13
:
774さん
:2008/08/15(金) 22:03:25
ちょwwwwwwwwwwwwwww
----
素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/
----
こいつ中学生wwwwwwwwwwwwww
14
:
774さん
:2008/08/15(金) 22:26:15
>>13
っ!
俺も中学生の時ちゃんとプログラミングを勉強しておかないといけなかったっ!
15
:
774さん
:2008/08/20(水) 17:35:38
>>14
取り敢えず最新の仕様を勉強してYahoo!したいと思う。
__noSuchなんとか__とか、
__proto__とか
__defineGetter__とか
__defineSetter__とか
function.next()とか頑張って覚えちゃうぞー!
16
:
774さん
:2008/08/20(水) 17:36:14
と言って、殆ど分かっているつもりなんだけれども。
配列の分割代入って面白いの?
17
:
774さん
:2008/08/20(水) 17:43:21
サブクラス化したウィンドウに対してウィンドウ毎に変数を確保する方法は直接無い。
SetWindowLongPtr()とかを使おうとしても、自分でExtraなメモリを確保していないし、元々内部で使用しているかもしれない。
だから無理である。
しかし、EditBoxに対して、Ctrl+Aを押したときに全て選択だとかはみなロジックは一緒なので、サブクラス化するためごとに関数を用意するというのもとてもソースの無駄遣いである。
だからそこらへんアセンブリ言語レベルでどうにかならないかなと思って適当に書いて、二時間ぐらいかけて上手くいった。
時間かかりすぎだろうJK。
が利用できるかテスト。
18
:
774さん
:2008/08/20(水) 17:45:07
void *SetProcMod(
LRESULT (CALLBACK *proc)(LPVOID, HWND, UINT, WPARAM, LPARAM),
SIZE_T bytes = 0
) const
{
static const BYTE code[] = {
0x53, //PUSH EBX
0x89, 0xE3, //MOV EBX, ESI
0x81, 0xC3, 0x04, 0x00, 0x00, 0x00, //ADD EBX, 4
0xB8, 0x00, 0x00, 0x00, 0x00, //MOV EAX, imm32
0x87, 0x03, //XCHG EAX, [EBX]
0x5B, //POP EBX
0x50, //PUSH EAX
0xB8, 0x00, 0x00, 0x00, 0x00, //MOV EAX, imm32
0xFF, 0xE0, //JMP EAX
};
BYTE *p = (BYTE *)VirtualAlloc(
NULL,
sizeof(code) + sizeof(WNDPROC) + bytes,
MEM_COMMIT,
PAGE_EXECUTE_READWRITE
);
memcpy(p, code, sizeof(code));
*((DWORD *)(p + 10)) = (DWORD)(p + sizeof(code) + sizeof(WNDPROC));
*((DWORD *)(p + 19)) = (DWORD)proc;
*((WNDPROC *)(p + sizeof(code))) = SetProc((WNDPROC)p);
return p + sizeof(code) + sizeof(WNDPROC);
}
19
:
774さん
:2008/08/20(水) 17:48:29
codeは雛型。
codeとWNDPROC型と指定されたバイト数のメモリを確保し、実行、読み込み、書き込みを許可する。
次に雛形をコピー。
そして、必要な情報を書き込んだ後、サブクラス化を実行する。
そして、確保されたメモリのポインタを返すと。
20
:
774さん
:2008/08/20(水) 17:51:01
こうすると、procの第一引数に確保されたメモリのポインタが入っている。
また、次に呼び出すプロシージャのアドレスは、pを渡されたアドレスだとすると。
*(((WNDPROC *)p) - 1)
で取得できるという代物だ。
此れで態々グローバル変数を利用する必要が無くなる。
メモリの管理についてはもう少し良い方法があるが、64kb程しか一回にリークしないので問題ないかと。
此れでソースが少なくてすむね!
21
:
774さん
:2008/08/20(水) 17:57:09
というか、二時間というのはバイトコードの打つ方法に時間がかかった。
Intelの資料糞読みにくい。
22
:
774さん
:2008/08/20(水) 18:00:45
何故[ESP]を直接参照する方法が無いんだ!
0x89, 0xE3, //MOV EBX, ESI
は
0x89, 0xE3, //MOV EBX, ESP
の間違えですた。
23
:
774さん
:2008/08/20(水) 18:01:57
[ESP]を直接参照できればもう少しソースコードを短くすることが出来るのだがなあ。
というか此れ自体も適当に入力したので、もうちょっと短く出来るのかもしれない。
24
:
774さん
:2008/08/20(水) 18:09:44
一応、返却値として、その確保されたメモリへのポインタを返しているので、
bytesに適当な値を指定したら、
*((int *)p) = 123;
とかすれば、初期状態で変数を与えることも出来るねえと。
因みに、VirtualAllocの仕様上メモリの内容は0で初期化されてます。
25
:
774さん
:2008/08/20(水) 18:10:26
と言うことで、此れをMemoPanelに利用しようかなあと。
環境依存だから動かない環境があるかなあ?
26
:
774さん
:2008/08/20(水) 18:42:44
おしゃべり総合商社「ネイリー」
http://narude531masu.blog59.fc2.com/
---
P検なんてあったなあ。
なつかしす。
今じゃ要らない資格ですね。因みに俺は四級のはず。
Wordとかエクセルは全然使わないんだけれどもwwww
27
:
774さん
:2008/08/20(水) 19:55:58
うはwww、VirtualAlloc関数滅茶苦茶メモリ勿体無いwwwww
ちゃんとメモリ管理はした方が良いようですwwwww
28
:
774さん
:2008/08/20(水) 21:58:36
operator new[]で確保したメモリは実行できることが保証されているの?
良く分からんwww
29
:
◆rCEzuNnL0g
:2008/08/21(木) 18:40:10
Sleipnir.APIが利用できれば、かなりスクリプト+EXEで色々と正確に出来そう。
正確というのは、違うウィンドウとかに効果を起こさないとかそんなことね。
Sleipnir.API.Handleを見ればウィンドウハンドルが分かるので、GetWindowThreadProcessId()を利用すればプロセスIDを取得することが出来る。
で、そこでOpenProcess()を利用すれば、プロセスハンドルを取得できる。
という事で、此れを利用すれば色々とウマーなことが出来るのはではなかろうかと。
VirtualAllocEx()とか使ったり、WriteProcessMemory()とか使うとウマーじゃなかろうか。
まあここら辺でも見ればいいかと。
-----
常駐プログラム隠蔽テクニック
http://ruffnex.oc.to/kenji/text/dll_inj/
-----
30
:
◆rCEzuNnL0g
:2008/08/21(木) 18:42:56
---
ProcessHandle_ProcessID_WindowHandle - trick-with-Wiki
http://wiki.trick-with.net/ProcessHandle_ProcessID_WindowHandle.html
---
プロセスIDとプロセスハンドルとウィンドウハンドルの件
良いサイト発見!
31
:
◆rCEzuNnL0g
:2008/08/21(木) 20:40:14
次の JavaScript の仕様はこうなる! ECMAScript 3.0 から 3.1 への変更点まとめ - IT戦記
http://d.hatena.ne.jp/amachang/20080821/1219302804
---
ちょwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
IEでもgetter、setter始まったなwwwwwwwwwwwwwwwwwwwwwwwwww
まだちょっと理解できていない部分があるので、これから勉強を。
32
:
◆rCEzuNnL0g
:2008/08/21(木) 20:43:39
__defineGetter__、__defineSetter__
で定義したGetter,Setterはfor inで列挙できるみたい。
まあ、どうでもいいことか。
33
:
◆rCEzuNnL0g
:2008/08/21(木) 20:47:13
MemoPanelに検索機能があったほうがウマーかなあ。
34
:
◆rCEzuNnL0g
:2008/08/21(木) 20:56:33
>>29
スクリプトからEXEを起動するには、
new ActiveXObject("WScript.Shell").Run()
で。
---
1.10 プログラムを実行する、ファイルやフォルダを開く(Runメソッド) - VBScript & JScript(JavaScript) Tips for WSH
http://www.happy2-island.com/vbs/cafe02/capter00110.shtml
---
35
:
◆rCEzuNnL0g
:2008/08/21(木) 20:58:41
最近Sleipnir関連のtwitterの動きが熱すぎるw
36
:
◆rCEzuNnL0g
:2008/08/21(木) 21:00:58
正直な所、キャッシュポッドパネルがspxプラグインだったのは吹いたw
sqlite3.dllも使ってみるか?
37
:
◆rCEzuNnL0g
:2008/08/21(木) 22:12:23
SUB ESP, 4
PUSH EAX
PUSH EBX
ADD ESP, 12
MOV EAX, imm32
POP EBX
PUSH EAX
PUSH EBX
SUB ESP, 8
POP EBX
POP EAX
JMP cd
38
:
◆rCEzuNnL0g
:2008/08/21(木) 22:24:12
0x81, 0xEC, 0x04, 0x00, 0x00, 0x00 //SUB ESP, 4
0x50, //PUSH EAX
0x53, //PUSH EBX
0x81, 0xC4, 0x0C, 0x00, 0x00, 0x00 //ADD ESP, 12
0xB8, 0x00, 0x00, 0x00, 0x00, //MOV EAX, imm32
0x5B, //POP EBX
0x50, //PUSH EAX
0x53, //PUSH EBX
0x81, 0xEC, 0x08, 0x00, 0x00, 0x00 //SUB ESP, 8
0x5B, //POP EBX
0x58, //POP EAX
0xE9, 0x00, 0x00, 0x00, 0x00, //JMP cd
39
:
◆rCEzuNnL0g
:2008/08/21(木) 22:44:01
今までは、EAXレジスタとEBXレジスタを利用して、引数を積んでいたが、
EAXレジスタの値が変わってしまっていた。
という事でEAXレジスタの内容も変わらないようにした。
それが上のアセンブリ。
40
:
◆rCEzuNnL0g
:2008/08/21(木) 23:18:11
取り敢えず、やりたいことはやったので、(本当はもう一つあるのだが、スクリプトで代用可能)
一部環境で起動出来ない問題を究明したい。
sqlite3.dllがエクスポートしている関数は0x64個か・・・
結構少ないなあ。
41
:
◆rCEzuNnL0g
:2008/08/21(木) 23:23:34
因みにFenrirLib.fxがエクスポートしているのは0x0729個。
vcl100.bplは0x1D19個。
取り敢えずfxプラグインは、FPI_CreateInstanceをエクスポートすれば良いみたい。
42
:
◆rCEzuNnL0g
:2008/08/21(木) 23:25:46
_FPI_CreateInstance@4
って何だ?
43
:
◆rCEzuNnL0g
:2008/08/21(木) 23:29:42
あ、MemoPanel.spxも
SPX_GetPluginInfo
SPX_Initialize
_SPX_GetPluginInfo@0
_SPX_Initialize@4
の四つをエクスポートしていた。
下の二つが何かが気になるなあ。
44
:
◆rCEzuNnL0g
:2008/08/21(木) 23:30:18
@の後は、引数の数*4だと思われ。
45
:
◆rCEzuNnL0g
:2008/08/21(木) 23:31:01
FPI = Fenrir Plugin Interface?
46
:
◆rCEzuNnL0g
:2008/08/21(木) 23:32:58
JIT Actionsも含めて全て、
FPI_CreateInstanceを呼んでいる。
47
:
◆rCEzuNnL0g
:2008/08/22(金) 18:43:34
レンコン=拳銃… ネット隠語検知 「犯罪」を防止 総務省がソフト開発へ:ニュース - CNET Japan
http://japan.cnet.com/news/media/story/0,2000056023,20379040,00.htm?ref=rss
---
備忘録。メモ。
48
:
◆rCEzuNnL0g
:2008/08/22(金) 21:04:01
これがC++のソースなんだぜ?
-----
const BYTE *p = ((BYTE *)_p - sizeof(WNDPROC) - sizeof(void *));
SetProc(*((WNDPROC *)(p + sizeof(void *))));
void * const p_code = (void *)(*((DWORD *)p));
void * const base = (void *)((DWORD)p_code & 0xFFFF0000);
SIZE_T * const used = (SIZE_T *)base;
const SIZE_T code_size = *((SIZE_T *)((BYTE *)base + sizeof(SIZE_T)));
BYTE ** const p_p = *((BYTE ***)((BYTE *)base + sizeof(SIZE_T) + sizeof(SIZE_T)));
void * const now_base = (void *)((DWORD)*p_p & 0xFFFF0000);
49
:
◆rCEzuNnL0g
:2008/08/23(土) 16:27:15
SPXプラグインからアクションを実行する方法を考え中。
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板