したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

1みみず★:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。

653774さん:2008/11/01(土) 18:22:02 ID:CENbthlg0
正直IUnknownを継承するのはC++上での意味上の問題であり、実際には特に意味はない。

654774さん:2008/11/01(土) 18:50:25 ID:CENbthlg0
よく使うASM命令ベスト100位に説明つけてみた(7/10) - KENJI’S BLOG
http://d.hatena.ne.jp/kenjiaiko/20081101/1225481451

655774さん:2008/11/01(土) 20:25:41 ID:CENbthlg0
Sleipnirのfxプラグインに俺の超適当プラグインを潜入させることに成功。
これで、弄くりまくれる。

656774さん:2008/11/01(土) 21:27:10 ID:CENbthlg0
>>650の続き
Sleipnir2の最新testだったら、0x000649C4の52を55に変更。

657774さん:2008/11/01(土) 21:28:05 ID:CENbthlg0
という事で、Sleipnirにフックモジュールを潜入させることに成功。
うまー。

658774さん:2008/11/02(日) 12:24:02 ID:CENbthlg0
Sleipnirひでええええええええええええええ
APIフック出来たのに、タイトルが弄くれない。
Sleipnir - [タイトル]
見たいになっているのだが、なんか良く分からない状況。
SetWindowTextで弄くっていないのは間違えない。

659774さん:2008/11/02(日) 15:46:17 ID:CENbthlg0
Sleipnir - [MDIタイトル]
になっているらしい。
動作を追っていったら、user32.dllでこのような文字列が作られていた。
つまりこれは、MDIウィンドウを利用しているソフトの宿命のようだ。
だけれども完全に弄くれないという訳ではないと思うなあ。

660774さん:2008/11/02(日) 17:35:25 ID:CENbthlg0
CPU Disasm
Address Hex dump Command Comments
77D1E3FF /> \33F6 XOR ESI,ESI ; Case C (WM_SETTEXT) of switch USER32.77D1088C

661774さん:2008/11/02(日) 18:44:00 ID:CENbthlg0
Fuck食場
http://d.hatena.ne.jp/arikui/

662774さん:2008/11/03(月) 17:09:11 ID:CENbthlg0
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <windows.h>
#include <tchar.h>
#include <process.h>

template<typename T>
class comp{
public:
T r, i;

comp(){
comp(0);
}
comp(T a){
comp(a, 0);
}
comp(T a, T b){
r = a;
i = b;
}

comp operator+(const comp &a){
comp b;
b.r = this->r + a.r;
b.i = this->i + a.i;
return b;
}
comp operator*(const comp &a){
comp b;
b.r = this->r * a.r - this->i * a.i;
b.i = this->r * a.i + this->i * a.r;
return b;
}
T abs(){
return this->r * this->r + this->i + this->i;
}
};

template<typename T>
T abs(T a){
return a >= 0 ? a : -a;
}

template<typename T>
T abs(comp<T> a){
return a.abs();
}

const int c = 10000;

template<typename T>
int in(T a){
T b = 0;
for(int i = 0; i < c; i++){
if(abs(b) >= 2) return i;
b = b * b + a;
}
return -1;
}

const TCHAR *className = _T("test");

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
break;

case WM_PAINT:{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);

const static COLORREF ref[] = {
RGB(0xFF, 0x00, 0x00),
RGB(0x00, 0xFF, 0x00),
RGB(0x00, 0x00, 0xFF),
RGB(0xFF, 0xFF, 0x00),
RGB(0xFF, 0x00, 0xFF),
RGB(0x00, 0xFF, 0xFF),
};

for(int i = -450; i < 200; ++i){
for(int j = -300; j < 300; ++j){
//SetPixel(hdc, i + 450, j + 300, RGB(0xFF, 0xFF, 0));
int ret = in(comp<double>((double)i / (double)300, abs((double)j / (double)300)));
if(ret == -1){
SetPixel(hdc, i + 450, j + 300, RGB(0, 0, 0));
}else{
//SetPixel(hdc, i + 450, j + 300, ref[(ret / 1) % (sizeof(ref) / sizeof(ref[0]))]);
}
}
}

EndPaint(hWnd, &ps);

break;
}

default:
return DefWindowProc(hWnd, msg, wp, lp);
}
return 0;
}

unsigned int __stdcall thread(void *){
RECT rc = {0, 0, 800, 800};
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);

HWND hWnd = CreateWindowEx(
0,
className,
_T("test"),
WS_OVERLAPPEDWINDOW,
rc.left, rc.top,
rc.right - rc.left, rc.bottom - rc.top,
NULL,
NULL,
GetModuleHandle(NULL),
NULL
);
ShowWindow(hWnd, SW_SHOW);

MSG msg;
while(1){
BOOL ret = GetMessage(&msg, NULL, 0, 0);
if(ret == 0 || ret == -1){
break;
}
DispatchMessage(&msg);
}

return 0;
}

int main(int argc, char **argv){

WNDCLASSEX wc = {sizeof(wc)};
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = GetModuleHandle(NULL);
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = className;
wc.hIconSm = NULL;

RegisterClassEx(&wc);

HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, thread, NULL, NULL, NULL);

std::string str;
while(1){
std::getline(std::cin, str);
if(str == "end"){
break;
}
}
}

663774さん:2008/11/03(月) 17:09:34 ID:CENbthlg0
お。
結構長かったのに書き込めた。

664774さん:2008/11/03(月) 20:53:50 ID:CENbthlg0
俺はC/C++とJavaScriptだけが使える。Lispもほんの少しだけ使える。
さて、次はJavaかC#かPerlか。
まあ、全部やりたいけれども。

665774さん:2008/11/03(月) 20:56:44 ID:CENbthlg0
やっぱり、人口の多いJavaやろう。
こんな感じ?
public class Main{
public static main(Strint[] args){
System.out.println("やらないか?");
}
}

666774さん:2008/11/03(月) 20:57:09 ID:CENbthlg0
Javaで検索したら
Javaの道(Java入門・リファレンス)
http://www.javaroad.jp/
が一番上のほうに出たから、ここでお勉強。

667774さん:2008/11/03(月) 20:59:45 ID:CENbthlg0
おっと、voidを忘れていた。

668774さん:2008/11/03(月) 21:01:25 ID:CENbthlg0
なんか、Eから始まる有名なソフトがあった気がする。

669774さん:2008/11/03(月) 21:04:44 ID:CENbthlg0
Eclipse (統合開発環境) - Wikipedia
http://ja.wikipedia.org/wiki/Eclipse_(%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83)
-----
これだ。
Javaで書かれているんだ。重そう。

670774さん:2008/11/03(月) 21:06:16 ID:CENbthlg0
@IT:連載 Eclipseを使おう!(1)
http://www.atmarkit.co.jp/fjava/rensai2/eclipse01/eclipse01.html
-----
ここ見ながら入れる。
一度入れたことがあるんだけれども、当時の俺には全く理解できませんでした。

671774さん:2008/11/03(月) 21:44:22 ID:CENbthlg0
おっおっおっ。
Java動いた。
うまー。

672774さん:2008/11/03(月) 21:52:52 ID:CENbthlg0
finalを最初に付けるとconst的になるみたい。
だけれども、一度代入できる。
つまり宣言の時に初期化してなかったら、まだ代入できる。
だけれども代入するとどうしようも出来ない。
此れならば、ifの中でconstの値を変更できるということか。

673774さん:2008/11/03(月) 21:54:01 ID:CENbthlg0
やっぱりC++に似ているな。
構文的に

674774さん:2008/11/03(月) 21:56:34 ID:CENbthlg0
public class HelloWorld {

int a = 0;

public static void main(String[] args){
HelloWorld b = new HelloWorld();
b.Show();
}

void Show(){
int c = 100;

System.out.println(a);
System.out.println(c);
}
}

675774さん:2008/11/03(月) 22:05:46 ID:CENbthlg0
public class HelloWorld {
public static void main(String[] args){
System.out.println(Integer.toString(0x74346346, 2));
}
}

676774さん:2008/11/03(月) 22:08:11 ID:CENbthlg0
演算時にはその中に含まれる最大の型に変換されて計算される。
少なくともintには拡張される。

677774さん:2008/11/03(月) 22:09:42 ID:CENbthlg0
変数が含まれる場合は上が適用されるようだが、
short x = 100 + 100;
はちゃんとコンパイルは通るようだ。

678774さん:2008/11/03(月) 22:11:15 ID:CENbthlg0
何故此れのコンパイルが通るし。

public class HelloWorld {
public static void main(String[] args){
short i = (int)(123 * 2);
System.out.println(i);
}
}

679774さん:2008/11/03(月) 22:14:57 ID:CENbthlg0
以下のように表示。
-----
468やらないか?
やらないか?123345
123やらないか?345
-----
public class HelloWorld {
public static void main(String[] args){
String a = "やらないか?";
System.out.println(123 + 345 + a);
System.out.println(a + 123 + 345);
System.out.println(123 + a + 345);
}
}

680774さん:2008/11/03(月) 22:15:54 ID:CENbthlg0
toString()を持っているのは、JavaScriptっぽいなあ。

681774さん:2008/11/03(月) 22:23:49 ID:CENbthlg0
true
false
true
-----
public class HelloWorld {
public static void main(String[] args){
String a = "やらないか?";
String b = "やらないか?";
System.out.println(a == b);

StringBuffer c = new StringBuffer("test");
StringBuffer d = new StringBuffer("test");
StringBuffer e = c;

System.out.println(c == d);
System.out.println(c == e);
}
}

682774さん:2008/11/03(月) 22:25:10 ID:CENbthlg0
JavaScriptならば多分trueのはず。だけれどもJavaはfalse
-----
public class HelloWorld {
public static void main(String[] args){
String a = new String("test");
String b = new String("test");

System.out.println(a == b);
}
}

683774さん:2008/11/03(月) 22:25:45 ID:CENbthlg0
javascript:alert(new String("test") == new String("test"));
falseだったorz............

684774さん:2008/11/03(月) 22:26:58 ID:CENbthlg0
両方ともfalse。

public class HelloWorld {
public static void main(String[] args){
String a = new String("test");
String b = new String("test");

System.out.println((a + "") == (b + ""));
System.out.println((a + "") == (a + ""));
}
}

685774さん:2008/11/03(月) 22:27:59 ID:CENbthlg0
JavaScriptならばtrueなのにね。
javascript:alert(new String("test") + "" == new String("test") + "");

686774さん:2008/11/03(月) 22:32:29 ID:CENbthlg0
ifの中にはboolean型のみ。
C/C++とかJavaScriptみたいには出来ないようだ。
つまり
if(123)は不可能と。
ちゃんと
if(123 != 0)と書けということか!
if(a = 123)
とか書けないじゃないか。馬鹿やろう!

687774さん:2008/11/03(月) 22:35:30 ID:CENbthlg0
演算はintに拡張してから行われる。まあlongは例外だけれども。
だからchar,byte,shortのビットシフトは予想外の結果になるかもね、っと。

688774さん:2008/11/03(月) 22:42:26 ID:CENbthlg0
確かにwhile(1)と書けない以上for(;;)と書く人が出てくるのも理解できる。

689774さん:2008/11/03(月) 22:43:04 ID:CENbthlg0
単文もOKだな。

690774さん:2008/11/03(月) 22:44:26 ID:CENbthlg0
while(true)?入力量多すぎww

691774さん:2008/11/03(月) 22:46:53 ID:CENbthlg0
switch出来るのはintかenumのみか・・・
longも不可っと。
そういえば、C/C++ってポインタで出来たっけ。
多分出来ないと思うけれども。

692774さん:2008/11/03(月) 22:52:10 ID:CENbthlg0
なるほど。
Objectの配列を生成してもC++で言うデフォルトコンストラクタは呼び出されないと。

693774さん:2008/11/03(月) 22:54:48 ID:CENbthlg0
配列は{}か・・・
JavaScriptは[]なのにね。
で、大きさは最初に決まってしまうと。

694774さん:2008/11/03(月) 22:57:36 ID:CENbthlg0
やっぱり""とnew String()の違いは意識しないといけないかなあ。

695774さん:2008/11/03(月) 22:58:34 ID:CENbthlg0
まあ、String::equalsを利用すれば早いのだけれども。

696774さん:2008/11/03(月) 23:05:09 ID:CENbthlg0
Object#clone()ってObjectを返すんじゃないの?
String[]をcloneしたらString[]が返ってくるように例のソフトはいっているんだけれども。

697774さん:2008/11/03(月) 23:06:40 ID:CENbthlg0
やっぱり配列の扱いはObjectだなあ。
a = b;
は参照しかコピーされない。

698774さん:2008/11/03(月) 23:14:47 ID:CENbthlg0
やっぱり、両方ともtrueだよなあ・・・

public class HelloWorld {
public static void p(boolean b){
System.out.println(b);
}

public static void main(String[] args){
String[][] a = new String[5][];
for(int i = 0; i < a.length; ++i){
a[i] = new String[5];
for(int j = 0; j < a[i].length; ++j){
a[i][j] = new String("test");
}
}

String[][] b = a.clone();
p(a[0] == b[0]);
p(a[0][0] == b[0][0]);
}
}

699774さん:2008/11/03(月) 23:16:40 ID:CENbthlg0
全てを参照じゃない方法でコピー(ディープコピー)する方法は無いんですか?
それがSystem.arraycopyなんですか?分かりません><

700774さん:2008/11/03(月) 23:17:46 ID:CENbthlg0
>配列もオブジェクトですからシャローコピーとディープコピーを考慮する必要があります。cloneメソッド、arraycopyメソッドを使用した場合はシャローコピーとなります。forループを使用した場合はループ内の実装方法の違い(新たなインスタンスを生成するか(ディープ)、代入演算子=によりコピーを行うか(シャロー)。)によりディープコピーにもなりますし、シャローコピーにもなります。どちらの方法を使用するかはケースにより異なります。
やっぱり両方とも参照のコピーだけか・・・
自分で作らないといけないということですね。

701774さん:2008/11/03(月) 23:24:06 ID:CENbthlg0
>new演算子を使用しない上段の方法は、new演算子を使用する下段の方法に比べメモリ使用の関係上効率がよいです。上段の方法はコンパイル時指定された文字列がメモリ領域内に作られるのに対し、下段の方法はコンパイル時指定された文字列がメモリ領域内に作られるのに加え、new String( )実行時にも同様な指定された文字列を含むインスタンスが作られます。これは余分なメモリ領域であり、Stringクラスに用意されている便利なコンストラクタを使用する場合を除き、new演算子を使用する必要はありません。
なるなる。

702774さん:2008/11/03(月) 23:27:24 ID:CENbthlg0
文字列の比較には
compareTo
を使うべきみたいだ。

703774さん:2008/11/03(月) 23:30:30 ID:CENbthlg0
equalsも良いみたいだよなあ。
つまり、equalsはbooleanで返す、compareToはintで返すということか。

704774さん:2008/11/03(月) 23:33:36 ID:CENbthlg0
Stringは一度作ったら中身は変更できない。
StringBufferは変更できる。

705774さん:2008/11/03(月) 23:39:13 ID:CENbthlg0
StringBufferにはreverseがあるのにStringにはどうしてないんだろ。

706774さん:2008/11/03(月) 23:39:49 ID:CENbthlg0
StringBufferのreverseは中身が変更されて、でそのオブジェクトの参照が返される。

707774さん:2008/11/03(月) 23:42:04 ID:CENbthlg0
正規表現は後回し。
Javaの道:文字列(7.正規表現)
http://www.javaroad.jp/java_character7.htm

708774さん:2008/11/03(月) 23:48:39 ID:CENbthlg0
Number#valueOfはObjectを返す
parse**()は(ry

709774さん:2008/11/03(月) 23:51:14 ID:CENbthlg0
NumberFormalか・・・

710774さん:2008/11/03(月) 23:51:39 ID:CENbthlg0
NumberFormatだろwwwwwww
俺は何故打ち間違えたしw

711774さん:2008/11/03(月) 23:56:03 ID:CENbthlg0
Javaの道:数データ(3.フォーマット処理)
http://www.javaroad.jp/java_number3.htm
----
後からもう一度読む・・・?

712774さん:2008/11/04(火) 00:00:38 ID:CENbthlg0
クラスの最後には;いらない。
此れはC++とは違うね。
C++はクラスの宣言の後に変数の宣言を付け加えれるからだよな。
Javaはグローバル変数は宣言できないのか?

713774さん:2008/11/04(火) 00:01:13 ID:CENbthlg0
多分それは静的なメンバ変数に該当するのか?

714774さん:2008/11/04(火) 00:11:40 ID:CENbthlg0
Javaの道:クラス(6.コンストラクタ)
http://www.javaroad.jp/java_class6.htm
-----
明日はここから読む。

715774さん:2008/11/04(火) 00:14:17 ID:CENbthlg0
やっぱりJavaとC++は似ているしJavaScriptとも似ている。
面白い。

716774さん:2008/11/04(火) 00:18:23 ID:CENbthlg0
GUI書きたい気がする。
まあ、それは基本押さえてから。

717774さん:2008/11/04(火) 00:18:56 ID:CENbthlg0
Java出来たらC#も押さえてみる?
でパールやってフラッシュやって。
おおおおお。
一杯言語あるぜえええええええ

718774さん:2008/11/04(火) 00:37:31 ID:CENbthlg0
初心者がJavaを“超高速”で学ぶためのコツ:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060927/249181/

719774さん:2008/11/04(火) 01:34:15 ID:CENbthlg0
eclipseってプラグインで拡張できるんでしょ。
どうやるんだよ。

720774さん:2008/11/04(火) 01:36:00 ID:CENbthlg0
ダウンロード中・・・

721774さん:2008/11/04(火) 21:15:10 ID:CENbthlg0
Javaに飽きたのでC#勉強中。

722774さん:2008/11/04(火) 21:19:04 ID:CENbthlg0
C#のビットシフトJavaみたいに勝手にint型に拡張しないんだよな?
(Javaはint型に拡張します。)

723774さん:2008/11/04(火) 21:23:39 ID:CENbthlg0
Javaではラベルでbreakとかcontinueが出来るがgotoがない。
C#ではラベルが無いのかは分からないが、gotoが出来る。
なんかswitch中で、goto case 1;とか出来るみたいだが、これはC/C++では出来ないよね?

724774さん:2008/11/04(火) 21:26:03 ID:CENbthlg0
試したけれども、やっぱり出来ないようだ。
これはC#のみ、っと。

725774さん:2008/11/04(火) 21:27:30 ID:CENbthlg0
if()とかfor()とかwhile()とかdo{}while();とかはbool型を要求してくる。
これはJavaと一緒。
だから
if(1)とかは書けない。

726774さん:2008/11/04(火) 21:34:02 ID:CENbthlg0
Javaならば
int[] array = {0, 1, 2};
int[] array = new int[2];
と書く。
C#ならば
int[] array = new int[]{0, 1, 2};
int[] array = new int[2];
と書く。
JavaScriptならば
var array = [0, 1, 2];
var array = new Array(2);
と書く。
Cならば
int array[] = {0, 1, 2};
int array[2];
と書く。
C++ならば
(書きようがない)
std::vector<int> array(2);
と書く。

727774さん:2008/11/04(火) 21:37:08 ID:CENbthlg0
Javaの多次元配列の方法は、配列の配列。つまり
int[][] array = new int[10][];
for(int i = 0; i < array.length; ++i) array[i] = new int[10];
と作るしかない。

728774さん:2008/11/04(火) 21:39:22 ID:CENbthlg0
C#ならば
int[,] array = new int[10,10];
と書ける。
またJava的な方法でも書ける。
int[][] array = new int[][]{
new int[]{1,2,3},
new int[]{2,3,4}
};
とか?

729774さん:2008/11/04(火) 21:39:52 ID:CENbthlg0
>「配列の配列」は「多次元配列」と比べ、 動作が少しだけ高速であるという事と、列数を自由に変えられるという利点がありますが、 メモリ利用効率が少々悪いという事と、宣言・初期化が面倒であるという欠点があります。
だそうです。

730774さん:2008/11/04(火) 21:41:13 ID:CENbthlg0
関数 (C# によるプログラミング入門)
http://ufcpp.net/study/csharp/st_function.html
-----
明日はここから。

731774さん:2008/11/05(水) 22:37:42 ID:CENbthlg0
プリプロセス (C# によるプログラミング入門)
http://ufcpp.net/study/csharp/sp_preprocess.html

732774さん:2008/11/05(水) 23:07:27 ID:CENbthlg0
静的コンストラクタがあると、実行時にウィンドウクラスが一回登録できてうまーなのです。
つまり、bool変数が必要なくなるということです。
だけれどもC#だと必ず一回呼ばれちゃうみたいなのです。つまりそのクラス一回も利用していなくても呼び出されると。
だけれども、そのウィンドウクラスを利用するクラスが一度も生成されなかったら、それは実行する必要は無いと思うんです。
だから、コンパイル時にチェックして、そのクラスもしくは派生クラスが生成しているようならばそのコードを入れるようにすると。
動的に生成される場合が多いので、作られない場合も在るかもしれませんが、その場合は最初に行っちゃえば良いんです。ソース上で生成処理があったら行うと。

733774さん:2008/11/06(木) 22:04:16 ID:CENbthlg0
うーん。
やっぱりC#難しい。
使おうと思わないからかなあ。
GUIを簡単に開発するためにはちゃんと頑張りたい。
でもJavaもやらないとなあ。

取り敢えず自分の家で実行できるプログラミング言語は、
C/C++
Java
C#
JavaScript
VB
だけか。
少ないなあ。
パールも動かせるようにするか。

734774さん:2008/11/07(金) 20:39:53 ID:CENbthlg0
ISPへの支払いは何に使われる? インターネットのお値段(1)?インターネット-最新ニュース:IT-PLUS
http://it.nikkei.co.jp/internet/news/index.aspx?n=MMIT39000005112008
払ったりもらったり、力で決まるISPの接続料 インターネットのお値段(2)?インターネット-最新ニュース:IT-PLUS
http://it.nikkei.co.jp/internet/news/index.aspx?n=MMIT39000006112008

735774さん:2008/11/07(金) 20:46:47 ID:CENbthlg0
取り敢えずC++0xでは#defineをデフォで使えなくすべきだと思うんだ。
そうすれば、オートコンプリートが使えそうである。

C#もネイティブに落ちればいいのだが。

736774さん:2008/11/07(金) 20:49:07 ID:CENbthlg0
定数の宣言ならば
const int
とか使えば良いし、関数形式のマクロだってinline関数で事足りるだろう。
それ以外の処理は変になるから使うな!ということです。
つまり
#define STR(a) #a
とか言うのはなしにしようぜということ。
まあ、これは俺もお世話になっていたりするのだが、無いならないで書き直せば良いだけなので。
(でもやっぱり面倒だな・・・)

737774さん:2008/11/07(金) 20:50:50 ID:CENbthlg0
ふと思ったのだがJavaって

int[][] v = {
{
1,2,3
},
{
1,2,3
}
};
とか書けるのか?
なんだか無理っぽい気がしてきた。

738774さん:2008/11/07(金) 20:53:54 ID:CENbthlg0
せっかくSleipnirにハック、じゃなくてフックするためのDLLを導入できたんだから何とかしたい。
何をするといわれても困る。
取り敢えず、Sleipnirから渡されるオブジェクトから利用できる関数を列挙せねば・・・

739774さん:2008/11/07(金) 23:00:55 ID:CENbthlg0
まとめてみた。
左からアドレス,RET *。
多分COMだから、最後にthisポインタをプッシュしている。

004CF9D0 //バージョン 8
004CF970 //8
004CF940 //4
004D3DF0 //4
004CF910 //4
004CF6E0 //QueryInterfaceっぽいけれども・・・? 0C
004D32B0 //QueryInterfaceっぽいけれども・・・? 0C
004D5590 //8
004CF390 //4
004D03B0 //8
004D0EE0 //GetSpecialFolderみたいな? 0C
004D2C50 //ttp://とかと比較している 10
004D2910 //上と同じような感じ 14
004D25A0 //上と同じような感じ 1C
004D4CA0 //10
004D4C80 //8
004D4630 //14
004D4610 //0C
004D5A50 //10
004D5850 //14
004D3F90 //8
004CF4A0 //8
004CF430 //8
004D0980 //8
004D0860 //14
004D0810 //GetMenuItemCountを呼び出している 4
004D06F0 //GetMenuItemCountを呼び出している 0C
004D0660 //GetMenuItemCountもGetSubMenuを呼び出している 8
004D3EF0 //上と同じ 14
004D53B0 //0C
004D0250 //GetWindowとGetClientRextとClientToScreenを(ry 14
004D0460 //4
004D0450 //4
004D0440 //4
004D0430 //4
004D0420 //4
004D0410 //4
004D0400 //4
004D03F0 //4
004D0210 //8
004D0200 //4
004D01F0 //4
004D01E0 //4
004D01D0 //4
004D3EA0 //10
004D01C0 //4
004D01B0 //4
004D5C70 //内側でなんかSleipnir.APIの登録っぽいものをやっているっぽい気がする 0C
004D5C50 //上のことと、なんか内側でsleipnir,_document,_windowの登録を行っている気がする 0C
004D5C20 //なんかスクリプトの実行ですか? 18
004D5BF0 //上に同じ 18
0042EE10 //なんかfreeしている 4
0042EDE0 //上に同じ 4
0042EBA0 //上に同じ 4

740774さん:2008/11/07(金) 23:02:12 ID:CENbthlg0
ブレークポイントを設置してそれぞれの呼び出しについて研究すべきだと思う。

741774さん:2008/11/08(土) 20:12:29 ID:CENbthlg0
Sleipnir3のブックマークがデータベースで管理されるようになったので、某巨大掲示板で独自バイナリより早いんじゃない?とか言っていたが、間違えなくデータベースの方が遅いと思う。
ただ、現状では一度読み込んだらそんなに頻繁に読みに行っていないと思うので、そんなに速さに違いは無いと思う。
つまり一度読みに言ってメモリ上に保存していると。
だけれどもこれだと沢山ブックマークがあるとメモリをとりすぎる。まあ、データベースの方がかなり楽だし、スクリプトからも弄くれるのでウマーということです。
明らかにXML的に弄くるよりも楽。
だけれどもSQLを勉強しなければいけないのは大変だorz...

742774さん:2008/11/08(土) 20:13:03 ID:CENbthlg0
上のほうに出てきたやつ。
SQL講座 [Smart]
http://www.rfs.jp/sb/sql/

743774さん:2008/11/08(土) 23:03:35 ID:CENbthlg0
正直SleipnirでもFirefoxでも何でも良いんですよ。
ちゃんとブラウザとして利用できるならば。
だけれども、俺がSleipnirにこだわる理由はと聞かれても困る。
正直趣味の問題だ。

744774さん:2008/11/08(土) 23:15:39 ID:CENbthlg0
取り敢えず、最近思った要望。
検索バー、アドレスバーにフォーカスがあるときは、クライアントにフォーカスを移さない。

745774さん:2008/11/08(土) 23:27:01 ID:CENbthlg0
SQLをちゃんと勉強しよう!
C#もちゃんと勉強しよう!
Javaもちゃんと勉強しよう!
国語もちゃんと勉強しよう!
英語もちゃんと勉強しよう!
古典もちゃんと勉強しよう!

746774さん:2008/11/09(日) 01:14:12 ID:CENbthlg0
簡単なSQLならば出来そうな気がしてきた。
別にテーブルの結合(JOIN)なんて覚えなくても良いよね。
覚えればそれはそれで使えるのだが。

747774さん:2008/11/09(日) 01:22:45 ID:CENbthlg0
SELECT ParentId, AVG(Id) FROM FenrirBookmark GROUP BY ParentId
こんな意味の無いSQLを書いてみたり・・・?
どちらにせよ、この技術はそのままMySQLとかのサーバー用のソフトウェアにも利用できるので、覚えておいてそんは無いと思う。

748774さん:2008/11/09(日) 01:24:31 ID:CENbthlg0
SELECT ParentId, AVG(Id) FROM FenrirBookmark WHERE ParentId != -1 GROUP BY ParentId
今更ながら、WHEREとかGROUP BYにはちゃんと指定する順番があるようである。

749774さん:2008/11/09(日) 01:25:04 ID:CENbthlg0
SELECT ParentId, AVG(Id) FROM FenrirBookmark WHERE ParentId != -1 GROUP BY ParentId ORDER BY ParentId DESC
なるほどなるほど・・・

750774さん:2008/11/09(日) 01:27:05 ID:CENbthlg0
Sleipnir3では消したはずのお気に入りがデータベース上には残ったままになっているので、
DELETE FROM FenrirBookmark WHERE Deleted == 1
見たいなSQLを実行すればいいと思う。

751774さん:2008/11/09(日) 01:31:13 ID:CENbthlg0
上は間違え
DELETE FROM FenrirBookmark WHERE Deleted = 1
が正しい。
-----
また、
UPDATE FenrirBookmark SET Deleted = 0 WHERE Deleted = 1
とすれば復元も出来るがArrayNumberが被らないように注意。
此れは頑張れば、SQLだけで出来るかも。
MAXとかSELECTとかの合わせ技で。

昆布だし(ry

752774さん:2008/11/09(日) 01:33:16 ID:CENbthlg0
キー(でよかったっけ?)を演算子の対象に出来るのは面白い。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板