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

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

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

1611 ◆adhRKFl5jU:2009/03/09(月) 20:51:31
常に開いておかないと通信出来んやん。
必要なときだけ開いて、閉じれば良い?面倒すぎるだろ。
しかし、それしか方法無いしそれで行くかorz....

1612 ◆adhRKFl5jU:2009/03/09(月) 21:02:28
リソースを占有し続けるぜ!

1613 ◆adhRKFl5jU:2009/03/09(月) 21:14:19
取り敢えず、読み込みたい書き込みたい!と思ったら、
WaitNamedPipe
で待てば良いみたい。
まあ、大体鯖は
-----
ConnectNamedPipeで接続を待つ。;
ReadFileで情報を読む。;
WriteFileで情報を書き込む。 if(書き込まないといけないような内容だったら);
最初に戻る。
-----
という感じか。
全てのダウンロードが終わったら終了するのだが、ちょうど終了処理中に新たなダウンロード依頼が来たら困っちゃうが、まあそれは実装の時に考えよう。

1614 ◆adhRKFl5jU:2009/03/09(月) 21:28:06
ぐはっ。
起動時にはダウンロードするファイルが無いから直ぐ終了するぜ!
考えよう。

1615 ◆adhRKFl5jU:2009/03/10(火) 18:13:43
クリックジャッキングの本質的な解決策 - IT戦記
http://d.hatena.ne.jp/amachang/20090310/1236674542
-----
駄目じゃね?
まあ、JavaScriptが有効じゃなかったら問題ないが。
でも
-----
* *{
opacity: 0.1 !important;
}
-----
でおk。
こっちの方が優先度が高いはず。

1616 ◆adhRKFl5jU:2009/03/10(火) 20:15:31
あ。
ユーザースタイルシートの方が優先度高いか。なんてこった。

1617 ◆adhRKFl5jU:2009/03/10(火) 20:16:39
いかん。
1.ユーザー
2.鯖
3.鯖 !important
4.ユーザー !importantか?

1618 ◆adhRKFl5jU:2009/03/10(火) 20:22:09
ちゃうちゃう。
1.鯖
2.ユーザー
3.鯖 !important
4.ユーザー !important
か。

1619 ◆adhRKFl5jU:2009/03/10(火) 20:22:54
Windows と C++: 非同期 WinHTTP
http://msdn.microsoft.com/ja-jp/magazine/cc716528.aspx
-----
やっぱり日本語の資料じゃないと読む気がしない。

1620 ◆adhRKFl5jU:2009/03/10(火) 20:23:23
個人的にはスレッドつくりまくりの計画だから、要らないかもしれないが。

1621 ◆adhRKFl5jU:2009/03/10(火) 20:26:13
std::pair<bool, unsigned long long int> GetHash(const wchar_t *str){
typedef std::pair<bool, unsigned long long int> rettype;

std::size_t len = std::wcslen(str);
unsigned long long int v = 0x0123456789ABCDEFLL;
for(std::size_t i = 0; i < len; ++i){
v = v * 137 + str[i] * 581;
}

return rettype(true, v);
}

std::pair<bool, unsigned long long int> GetHash(const char *str){
typedef std::pair<bool, unsigned long long int> rettype;

int size = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
if(size == 0){
return rettype(false, 0LL);
}
wchar_t *buff = (wchar_t*)std::malloc(sizeof(wchar_t) * size);
if(buff == NULL){
return rettype(false, 0LL);
}

int copyed = MultiByteToWideChar(CP_ACP, 0, str, -1, buff, size);
if(copyed == 0 || size != copyed){
std::free(buff);
return rettype(false, 0LL);
}

rettype ret = GetHash(buff);

std::free(buff);
return ret;
}

1622 ◆adhRKFl5jU:2009/03/11(水) 18:28:14
TryEnterCriticalSectionのMutex版はないのか!

1623 ◆adhRKFl5jU:2009/03/11(水) 20:42:05
にゅー。
Mutexとかの処理が上手くいかない。
ファイルマッピングを使っちゃおうかなあ。
あれって、書き込んだ瞬間に他のプロセスにも反映されるのかが分からないから困る。

1624 ◆adhRKFl5jU:2009/03/11(水) 21:17:29
MapViewOfFile
が上手くいかない。
まあ、CreateFileMappingを使う方向で。
-----
HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_WRITECOPY | SEC_COMMIT, 0, 100, "TESTTESTTEST");
void *p;
void * const _p = p = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

UnmapViewOfFile(_p);
CloseHandle(hMap);

1625 ◆adhRKFl5jU:2009/03/12(木) 12:49:59
BOOST_INTERLOCKED_INCREMENT
使えば良いみたい。使わなくても良いみたい。
よく分からない。

1626 ◆adhRKFl5jU:2009/03/12(木) 12:50:11
#include "DownloadManager.hpp"

#include <iostream>
#include <string>

#include <cstdlib>
#include <cctype>

#include <windows.h>

#include <cstring>

int Run(const char*, DWORD);
int Init(const char*, DWORD);
std::string GetFileName(std::string);
void Death(const char*);
bool CreateMainProcess(std::string&);

int Run(const char *hash, DWORD pid){
DownloadManager dm(hash);
if(dm.AddPID(pid)){
if(dm.Initialize()){
int ret = dm.Loop();
dm.Finalize();
return ret;
}
}

return -1;
}

int Init(const char *_hash, DWORD pid){
std::string hash(_hash);
{
HANDLE hTesting = CreateMutexA(NULL, FALSE, ("DLTesting1:" + m_hash).c_str());
if(hTesting == NULL){
return -1;
}
HANDLE hRunning = CreateMutexA(NULL, FALSE, ("DLRuning:" + m_hash).c_str());
if(hRunning == NULL){
CloseHandle(hTesting);
return -1;
}
WaitForSingleObject(hTesting, INFINITE);
bool isMutexRunningNonSignal = WaitForSingleObject(hRunning, 0) == WAIT_OBJECT_0;
ReleaseMutex(hTesting);
if(isMutexRunningNonSignal){
ReleaseMutex(hRunning);
}
CloseHandle(hRunning);
CloseHandle(hTesting);

if(isMutexRunningNonSignal){
if(CreateMainProcess(hash)){
return 0;
}else{
return -1;
}
}
}

{
HANDLE hTesting = CreateMutexA(NULL, FALSE, ("DLTesting1:" + m_hash).c_str());
if(hTesting == NULL){
return -1;
}
HANDLE hFlag = CreateEvent(NULL, TRUE, FALSE, ("DLFlag:" + hash).c_str());
if(hFlag == NULL){
return -1;
}
if(GetLastError() == ERROR_ALREADY_EXISTS){

}else{
if(CreateMainProcess(hash))
}
}

return 0;
}

bool

std::string GetFileName(std::string str){
typedef std::string::size_type size_type;

size_type pos = str.find_last_of('\\');
if(pos == std::string::npos){
pos = str.find_last_of('/');
}

if(pos == std::string::npos || pos == str.length() - 1){
return str;
}

return str.substr(pos + 1);
}

int main(int argc, char **argv){
if(argc < 2){
Death("引数が凄く足りません。");
}

const char *hash = NULL;
DWORD pid = ~0;
bool run = false;
for(int i = 1; i < argc; ++i){
if(argv[i][0] == '/' || argv[i][0] == '-'){
switch(argv[i][1]){
case 'h':
case 'H':{
hash = &argv[i][2];
break;
}
case 'i':
case 'I':{
pid = (DWORD)std::atol(&argv[i][2]);
break;
}
case 'r':
case 'R':{
run = true;
break;
}
}
}
}

//コマンドラインが無くても、ここで引っかかるはず。
if(pid == ~0 || hash == NULL){
Death("引数が足りないです。");
}

//パイプの最大の長さは全体で256文字まで。バックスラッシュ以外は利用可能。
//このソフトは英数字以外は利用しないとする。
//256 - nはn文字分確保するため。
{
unsigned int len = 0;
while(hash[len]){
++len;
if(len <= 256 - 15){
if(std::isalpha(hash[len - 1]) || std::isdigit(hash[len - 1])){
}else{
Death("渡されたハッシュに不正な文字が含まれています。");
}
}else{
Death("渡されたハッシュが長すぎます。");
}
}
if(len == 0){
Death("渡されたハッシュがありません。");
}
}

if(run){
return Run(hash, pid);
}

return Init(hash, pid);
}

//エラー吐いて死ぬ
void Death(const char *str){
std::cerr << GetFileName(__argv[0]) << ":" << str << std::endl;
std::exit(-1);
}

1627 ◆adhRKFl5jU:2009/03/12(木) 12:50:42
#include "DownloadManager.hpp"

#include <string>
#include <map>

#include <windows.h>

/*----------*/
unsigned int
DownloadManager::WaitThread(void *){
return 0;
}

/*==========*/
DownloadManager::DownloadManager(const char *hash)
: m_hash(hash), m_hRunning(NULL), m_hPipe(NULL), m_hFlag(NULL)
{}

/*==========*/
bool
DownloadManager::AddPID(DWORD pid){
std::map<DWORD, HANDLE>::const_iterator it = m_pis.find(pid);
if(it == m_pis.end()){
HANDLE hProcess = OpenProcess(SYNCHRONIZE, FALSE, pid);
if(hProcess != NULL){
m_pis.insert(std::make_pair(pid, hProcess));
return true;
}
return false;
}

return true;
}

/*==========*/
bool
DownloadManager::Initialize(){
m_hRunning = CreateMutexA(NULL, FALSE, ("DLRunning:" + m_hash).c_str());
if(m_hRunning == NULL){
return false;
}
WaitForSingleObject(m_hRunning, INFINITE);

m_hPipe = CreateNamedPipeA(("\\\\.\\pipe\\" + m_hash).c_str(), PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, 0, 0, 1000, NULL);
if(m_hPipe == INVALID_HANDLE_VALUE){
ReleaseMutex(m_hRunning);
CloseHandle(m_hRunning);

return false;
}

m_hFlag = CreateEventA(NULL, TRUE, FALSE, ("DLFlag:" + m_hash).c_str());
if(m_hFlag == NULL){
CloseHandle(m_hPipe);
ReleaseMutex(m_hRunning);
CloseHandle(m_hRunning);

return false;
}

HANDLE hCreated = OpenEventA(EVENT_MODIFY_STATE, FALSE, ("DLCreated:" + m_hash).c_str());
if(hCreated == NULL){
CloseHandle(m_hFlag);
CloseHandle(m_hPipe);
ReleaseMutex(m_hRunning);
CloseHandle(m_hRunning);

return false;
}
if(SetEvent(hCreated) == FALSE){
CloseHandle(hCreated);
CloseHandle(m_hFlag);
CloseHandle(m_hPipe);
ReleaseMutex(m_hRunning);
CloseHandle(m_hRunning);

return false;
}
CloseHandle(hCreated);

return true;
}

/*==========*/
int
DownloadManager::Loop(){
return 0;
}

/*==========*/
bool
DownloadManager::Finalize(){
CloseHandle(m_hPipe);
ReleaseMutex(m_hRunning);
CloseHandle(m_hRunning);
return true;
}

1628 ◆adhRKFl5jU:2009/03/12(木) 12:50:57
#ifndef DOWNLOADMANAGER_HPP
#define DOWNLOADMANAGER_HPP

#include <string>
#include <map>

#include <windows.h>

class DownloadManager{
private:
static
unsigned int
WaitThread(void *);

public:
DownloadManager(const char*);
bool Initialize();
bool Finalize();
int Loop();
bool AddPID(DWORD);

private:
std::map<DWORD, HANDLE> m_pis;
std::string m_hash;

//mutex
HANDLE m_hRunning;
//pipe
HANDLE m_hPipe;
//event
HANDLE m_hFlag;
};

#endif

1629 ◆adhRKFl5jU:2009/03/12(木) 16:27:53
なんてこった。
今気づいた。ファイルマッピングは使えないと。
何故ならば、WaitFor(ryで待て無いじゃん。
やっぱりEventにしないとなorz......

1630 ◆adhRKFl5jU:2009/03/12(木) 16:28:58
取り敢えず、MutexとかEventを共有メモリ的に使えるようにするような簡単なclassでも書けば良いか。

1631 ◆adhRKFl5jU:2009/03/12(木) 16:55:55
#ifndef SHAREDMEMORYMANAGER_HPP
#define SHAREDMEMORYMANAGER_HPP

#include <windows.h>
#include <cstring>
#include <string>

#include <stdexcept>

class SharedMemoryManager{
private:
HANDLE m_hMutexRW, m_hMap;
volatile void *m_p;

public:
SharedMemoryManager(std::size_t size, const char *_id){
std::string id(_id);
if(id.length() > MAX_PATH - 5){
throw std::logic_error("_id is too long");
}

m_hMutexRW = CreateMutexA(NULL, FALSE, ("SMMR:" + id).c_str());
if(m_hMutexRW == NULL){
throw std::logic_error("CreateMutexA Error");
}
HANDLE hMutexC = CreateMutexA(NULL, FALSE, ("SMMC:" + id).c_str());
if(hMutexC == NULL){
CloseHandle(m_hMutexRW);
throw std::logic_error("CreateMutexA Error");
}

WaitForSingleObject(hMutexC, INFINITE);

m_hMap = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, size, ("SMMF" + id).c_str());
if(m_hMap == NULL){
ReleaseMutex(hMutexC);
CloseHandle(hMutexC);
CloseHandle(m_hMutexRW);
throw std::logic_error("CreateFileMappingA Error");
}
bool exist = (GetLastError() == ERROR_ALREADY_EXISTS);

m_p = MapViewOfFile(m_hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if(m_p == NULL){
CloseHandle(m_hMap);
ReleaseMutex(hMutexC);
CloseHandle(hMutexC);
CloseHandle(m_hMutexRW);
throw std::logic_error("MapViewOfFile Error");
}

if(exist == false){
ZeroMemory((void*)m_p, size);
}

ReleaseMutex(hMutexC);
CloseHandle(hMutexC);
}

~SharedMemoryManager(){
UnmapViewOfFile((void*)m_p);
CloseHandle(m_hMap);
CloseHandle(m_hMutexRW);
}

bool ReaderEnter(DWORD timeout = INFINITE){
return WaitForSingleObject(m_hMutexRW, timeout) == WAIT_OBJECT_0;
}
void ReaderLeave(){
ReleaseMutex(m_hMutexRW);
}
bool WriterEnter(DWORD timeout = INFINITE){
return WaitForSingleObject(m_hMutexRW, timeout) == WAIT_OBJECT_0;
}
void WriterLeave(){
ReleaseMutex(m_hMutexRW);
}

volatile void *GetPointer(){
return m_p;
}
operator volatile void *(){
return GetPointer();
}
};

#endif

1632 ◆adhRKFl5jU:2009/03/13(金) 13:18:07
初めてPIAのページが役に立ったと思ったwwww
-----
8-2. プロセス間通信とバックドア
http://www.ipa.go.jp/security/awareness/vendor/programming/b08_02.html

1633 ◆adhRKFl5jU:2009/03/13(金) 13:19:09
パイプはclassで包まないほうが良いと思った。
newで生成したりしてstd::bad_allocを捕捉しなきゃいけなくなるから。
HANDLEで扱ったほうが楽そうだ。

1634 ◆adhRKFl5jU:2009/03/13(金) 14:39:22
>hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。
全然同期なんですが。

1635 ◆adhRKFl5jU:2009/03/13(金) 14:45:58
>If hNamedPipe was not opened with FILE_FLAG_OVERLAPPED, the function does not return until a client is connected or an error occurs. Successful synchronous operations result in the function returning a nonzero value if a client connects after the function is called.
えー。

1636 ◆adhRKFl5jU:2009/03/13(金) 14:48:18
多分ウィンドウズの中の人は
SetNamedPipeHandleState
で非同期に変えてからやってくれ!と言っているんだ。
間違いない。

1637 ◆adhRKFl5jU:2009/03/13(金) 16:52:22
失敗したらthrowしまくっている。
boolを返す関数はreturn trueしかしない。
何故ならば、throwするからだ。

1638 ◆adhRKFl5jU:2009/03/14(土) 11:57:25
イテレータ使うとautoが使いたくなってくる。(C++0x的な意味で。)

1639 ◆adhRKFl5jU:2009/03/14(土) 11:58:04
std::list<T>::size()ってO(n)?O(1)?

1640 ◆adhRKFl5jU:2009/03/14(土) 11:59:12
仕様は知らないが、VC++はO(1)っぽい。

1641 ◆adhRKFl5jU:2009/03/14(土) 12:03:14
うわああああああああああboostが使いたくなってきた。
bimap

1642 ◆adhRKFl5jU:2009/03/14(土) 13:37:01
【人工知能】物理エンジンで人工生命つくって学習させた‐ニコニコ動画(ββ)
http://www.nicovideo.jp/watch/sm6392515
-----
これは凄い。

1643 ◆adhRKFl5jU:2009/03/14(土) 13:50:13
計算量はO(m)ですか?
m:関節の数

1644 ◆adhRKFl5jU:2009/03/14(土) 14:59:55
漸くダウンローダーのダウンロードじゃない部分が完成した。
多分二重起動とか、デッドロックは多分起こらないものと信じたい。
一応起動させると終了しないようには出来た。

1645 ◆adhRKFl5jU:2009/03/14(土) 18:30:08
オススメGmailフィルタ9選 : ライフハッカー[日本版], 仕事も生活も上手くこなすライフハック情報満載のブログ・メディア
http://www.lifehacker.jp/2009/03/090314_gmail10.html
スト決行!TBSからアナ消えた/芸能・社会/デイリースポーツonline
http://www.daily.co.jp/gossip/2009/03/14/0001753368.shtml
DO++: 大規模データを基にした自然言語処理
http://hillbig.cocolog-nifty.com/do/2009/03/post-3acb.html
痛いニュース(ノ∀`):「日本人のトイレに対する執念は何なんだ?」日本のトイレ、海外サイトで大反響 
http://blog.livedoor.jp/dqnplus/archives/1223558.html
| ^^ |秒刊SUNDAY | Windowsの潜在能力を飛躍的に向上するシステムツール集
http://www.yukawanet.com/sunday/2009/03/windows_1.html
安倍元首相が再登板に意欲「選挙の洗礼受けて」 : 政治 : YOMIURI ONLINE(読売新聞)
http://www.yomiuri.co.jp/politics/news/20090313-OYT1T00886.htm
若者はMP3の「雑音」がお好き? - スラッシュドット・ジャパン
http://slashdot.jp/article.pl?sid=09/03/13/0529258
Photoshopで火のついた線を描く方法 / ウェブデザインライブラリー
http://www.webdesignlibrary.jp/2009/03/fire-lines.php
音楽シーンに異変? 「初音ミク」チャートインの理由 - エンタ - 日経トレンディネット
http://trendy.nikkeibp.co.jp/article/pickup/20090310/1024495/

1646 ◆adhRKFl5jU:2009/03/14(土) 19:21:09
Sleipnirは東方よりも重い。メモリを食う。

1647 ◆adhRKFl5jU:2009/03/14(土) 21:29:04
friend classを使う荒業に出た。

1648 ◆adhRKFl5jU:2009/03/14(土) 21:33:36
流石に拙いと思ったので、やめた。

1649 ◆adhRKFl5jU:2009/03/14(土) 21:34:17
ObserverThread作るくらいだったら、シンプルにObserverパターンを実装すればよかったかな?

1650 ◆adhRKFl5jU:2009/03/14(土) 21:34:35
まあ、動いているからいいや><

1651 ◆adhRKFl5jU:2009/03/14(土) 21:38:35
あとは、ダウンローダーのコアとパイプのサーバー処理をなんとかするだけかな?

1652 ◆adhRKFl5jU:2009/03/15(日) 11:52:51
まだ、起動処理が書いてないし、クライアントも書いてないから、実際に動作実験が出来ないorz....
早いところ書かないとな。
まあ普通はテスト用のプログラムを書いてから開発に臨むべきだろうが。

1653 ◆adhRKFl5jU:2009/03/15(日) 11:55:06
新車の合鍵を作る序でに、本屋を見てきたのだが、Windowsのコマンドについて書かれた本が置いてなかった。
UnixとLinuxは置いてあったのに。
UnixとLinuxってそんなにコマンド違うのか?とも思った。俺はよく分からん><

1654 ◆adhRKFl5jU:2009/03/15(日) 15:52:52
まだ、完全にはデバッグできていないが、取り敢えず、起動部分は出来た。
後はクライアントを作るだけ。

1655 ◆adhRKFl5jU:2009/03/17(火) 18:49:00
取り敢えず、Sleipnirは終わったな。
これからはShiretoko使います。

1656 ◆adhRKFl5jU:2009/03/17(火) 19:01:11
PKU JudgeOnline
http://www.4dm.org/PKU/
------
こんなのあるんだ。

1657 ◆adhRKFl5jU:2009/03/17(火) 19:02:14
というかLingrすら知らなかったという。

1658 ◆adhRKFl5jU:2009/03/17(火) 19:03:55
取り敢えず、家を出てからちゃんと勉強が出来るようにジャッジに上がっているソースを全部ダウンロードしてみるテスト。
今からスクリプトを書くって言う。

1659 ◆adhRKFl5jU:2009/03/17(火) 19:09:11
あんまり晒されることを考慮して書いているから、晒されると動悸が・・・
まあインターネットだから仕方ないからいいんだよー!

1660 ◆adhRKFl5jU:2009/03/17(火) 19:32:32
正直emacsの自動的にふられるインデントが気に入らない。

1661 ◆adhRKFl5jU:2009/03/17(火) 23:28:07
出来たー。
どれだけ時間かかってソースダウンローダー作っているんだよwwwww

1662 ◆adhRKFl5jU:2009/03/17(火) 23:37:48
(function(){
var id = "";
var password = "";
var start = 1, end = 260;
var servername = ""
var CreateHTTPObject = function(){
return new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");
};

var Utility = {
GetSearchString: function(obj){
var vec = [];
for(var i in obj){
if(obj.hasOwnProperty(i)){
vec.push(i + "=" + obj[i]);
}
}
return vec.join("&");
},
forEach: function(vec, func){
vec = [].concat(vec);
var len = vec.length;
for(var i = 0; i < len; ++i){
if(func(vec[i])){
return;
}
}
},
DecodeHTML: function(str){
return str.replace(/&([a-zA-Z]+);/g, function($1, $2){
return ({
amp: "&",
quote: "\"",
gt: ">",
lt: "<"
})[$2];
});
}
};

var Downloader = function(){
this.cookie = "";
};

Downloader.prototype.GetCookie = function(){
var http = CreateHTTPObject();
http.open("POST", "http://" + servername + "/joi_test/joi2/?action_user_index=true", false);
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

http.send(Utility.GetSearchString({
action_user_auth_proc: "true",
id: id,
pass: password,
submit: encodeURI("ログイン")
}));

var cookie = http.getResponseHeader("Set-Cookie");
cookie.match(/(JoiSESSID)=([^;]+);/);

this.cookie = RegExp.$1 + "=" + RegExp.$2;
};
Downloader.prototype.DownloadData = function(page){
var http = CreateHTTPObject();

http.open("GET", "http://" + servername + "/joi_test/joi2/?action_user_probresult_detail=true&jid=" + page);
http.setRequestHeader("Cookie", this.cookie);
http.send();

var html = http.responseText;
if(html.match(/<h2>エラーが発生しました<\/h2>/) && html.match(/<li>error<\/li>/)){
return null;
}else{
var lines = html.split("\n");
var src = Downloader.GetSource(lines);
var qid = Downloader.GetQuestionId(lines);
var id = page;
var language = Downloader.GetLanguage(lines);
var point = Downloader.GetPoint(lines);
var uptime = Downloader.GetUpTime(lines);
var results = Downloader.GetResults(lines);

return {
src: src,
qid: qid,
id: id,
language: language,
point: point,
uptime: uptime,
results: results
};
}
};

1663 ◆adhRKFl5jU:2009/03/17(火) 23:38:02

Downloader.GetSource = function(lines){
var flag = false;
var src = "";

Utility.forEach(lines, function(line){
if(!flag){
if(line.match(/<pre>(.*)$/)){
flag = true;
src = RegExp.$1;
if(line.match(/<pre>([^<]*)<\/pre>/)){
src = RegExp.$1;
return true;
}
}
}else{
if(line.match(/^(.*)<\/pre>/)){
src += "\n" + RegExp.$1;
return true;
}else{
src += "\n" + line;
}
}
});

return Utility.DecodeHTML(src);
};
Downloader.GetQuestionId = function(lines){
var flag = false;
var ret = "";

Utility.forEach(lines, function(line){
if(!flag){
if(line.match(/<td>問題番号<\/td>/)){
flag = true;
}
}else{
if(line.match(/<td><a[^>]*>([0-9]+)<\/a><\/td>/)){
ret = RegExp.$1 - 0;
}
return true;
}
});

return ret;
};
Downloader._GetNext = function(lines, name){
var flag = false;
var ret = "";
var reg = new RegExp("<td>" + name + "</td>");

Utility.forEach(lines, function(line){
if(!flag){
if(line.match(reg)){
flag = true;
}
}else{
if(line.match(/<td>([^<]+)<\/td>/)){
ret = RegExp.$1;
}
return true;
}
});

return ret;
};
Downloader.GetLanguage = function(lines){
return Downloader._GetNext(lines, "言語");
};
Downloader.GetUpTime = function(lines){
return Downloader._GetNext(lines, "アップロード時刻");
};
Downloader.GetPoint = function(lines){
return Downloader._GetNext(lines, "点数") - 0;
};
Downloader.GetResults = function(lines){
var state = 0;
var count = 0;
var i = 0;
var ret = [];

Utility.forEach(lines, function(line){
switch(state){
case 0:{
if(line.match(/<td>データ([0-9]+)<\/td>/)){
count++;
state = 1;
}
break;
}
case 1:{
if(line.match(/<td>データ([0-9]+)<\/td>/)){
count++;
break;
}else{
state = 2;
}
}
case 2:{
if(line.match(/<th>([^<]+)<\/th>/)){
state = 3;
}else{
break;
}
}
case 3:{
if(i < count){
if(line.match(/<th>([^<]+)<\/th>/)){
i++;
ret.push(RegExp.$1);
}
}else{
return true;
}
break;
}
}
});

return ret;
};

1664 ◆adhRKFl5jU:2009/03/17(火) 23:38:15

var fso = new ActiveXObject("Scripting.FileSystemObject");
var log = fso.CreateTextFile("log" + (new Date()).getTime() + ".txt", false);

var dl = new Downloader;
dl.GetCookie();
for(var i = start; i < end; ++i){
if(fso.FileExists("source" + i + ".txt") == false){
var ret = dl.DownloadData(i);
if(ret != null){
try{
var file = fso.CreateTextFile("source" + i + ".txt", false);
file.Write(ret.src);
log.WriteLine("採点番号:" + ret.id);
log.WriteLine("問題番号:" + ret.qid);
log.WriteLine("言語:" + ret.language);
log.WriteLine("アップロード時刻:" + ret.uptime);
log.WriteLine("得点:" + ret.point);
log.WriteLine("詳細:" + ret.results.toString());
log.WriteLine("文字数:" + ret.src.length);
log.WriteLine("------------------------------");
}catch(e){
log.WriteLine("エラー:" + e.toString());
log.WriteLine("------------------------------");
}
}
}else{
log.WriteLine("採点番号" + i + "は存在するためスルー。");
log.WriteLine("------------------------------");
}
}

WScript.Echo("完了");
})();

1665774さん:2009/03/18(水) 16:48:59
プログラマが1ヶ月でWebデザイナーに転身する方法 - やねうらお−よっちゃんイカを食べながら年収1億円稼げる(かも知れない)仕事術
http://d.hatena.ne.jp/yaneurao/20090318#p1

1666 ◆adhRKFl5jU:2009/03/18(水) 20:37:00
Shareすげえ。
DLLをインジェクションさせると起動に失敗するようになっていやがる。
だけれどもSetWindowsHookで注入するのは問題ないらしい。
どのようにしてチェックしているのだろうか・・・

1667 ◆adhRKFl5jU:2009/03/18(水) 20:44:06
ん?
Sleepしてあとから注入するとちゃんと動くって言う。
どういうことだ・・・?

1668 ◆adhRKFl5jU:2009/03/18(水) 23:01:37
ああ、もう駄目だ。
あきらめたあああああああああああああああ

1669 ◆adhRKFl5jU:2009/03/25(水) 19:49:16
合宿楽しかった。
詳細は適当なときに。

1670 ◆adhRKFl5jU:2009/03/26(木) 18:48:56
今日、ハードディスクを注文した。
1TB*2。
早く届かないか。

1671 ◆adhRKFl5jU:2009/03/26(木) 18:53:23
IOIタソの画像を送信してくれたら嬉しいなとか言われた画像を鯖に上げようと思ったら、重すぎで鯖に怒られた。
どうしようか。

1672 ◆adhRKFl5jU:2009/03/26(木) 19:03:18
トップハーバーターを作るのか、それとも音ゲーを作るのか。
出来たら見せて欲しいものだ・・・

1673 ◆adhRKFl5jU:2009/03/26(木) 19:37:43
>>1671
グレースケールにしてjpgで保存した。
http://mimizu.karou.jp/lab/IMGP1689.jpg
http://mimizu.karou.jp/lab/IMGP1690.jpg

1674 ◆adhRKFl5jU:2009/03/26(木) 19:44:20
pngで保存してもあんまり圧縮されなかった。
まあ、そんなものか。
jpgはそこらへんは強いな。不可逆だけど。

1675 ◆adhRKFl5jU:2009/03/26(木) 21:14:48
そよきたじろうのブログ
http://zatoriku.blog35.fc2.com/
-----
情報オリンピックの合宿に居たらしい

1676 ◆adhRKFl5jU:2009/03/26(木) 23:05:07
> javascript:alert("\v" == "v"); //true
IE8入れたけど、まだ直ってないのか。
まあ、IEの判別に使われる位だからもう修正しないほうが良いかもしれない。
\vって、垂直タブで良かったよね・・・?

1677774さん:2009/03/26(木) 23:24:11
どうしてJSソースを絶対参照で置き換えているのかが分からない。
ファイル分割しているんだから、そんなことしなくて良いじゃん普通は。
理由があるのか?
-----
if (YUD.get("main").className != "main_open" & amp; & amp; loadCompleteFlag) {
-----
かなり気持ち悪いです><

1678 ◆adhRKFl5jU:2009/03/26(木) 23:28:54
もうちょっとSleipnirStartのソースコードは考えたほうが良い。
enginenameとかいうstring型(まあ、JSには変数の型という観念は存在しないが)を利用して、文字コードを決め打ちしているようだ。
もうちょっと、その検索エンジンの配列にeuc_jpだとか、POSTだとか、そういう情報を持たせて、もっと汎用的に書けば良いのになあと思う。
というか、アイコンの分だけ、div要素を用意しているとか。
普通に動的に生成すれば良いじゃんと思う。
そこまで速度を気にしているんですか?
逆にそっちの方が、転送量は減ると思うんですが。

1679 ◆adhRKFl5jU:2009/03/26(木) 23:30:02
こういうのとか。
-----
if (engine_name == "2ch_thread" || engine_name == "vector" || engine_name == "y_auction" || engine_name == "y_travel" || engine_name == "y_finance") {
function eucjp_search() {
YUD.get("eucjp").contentWindow.document.forms[engine_name].target = YSC.Iconlink.target.Value();
YUD.get("eucjp").contentWindow.document.forms[engine_name][YUD.get("eucjp").contentWindow.document.forms[engine_name].alias.value].value = search_str;
YUD.get("eucjp").contentWindow.document.forms[engine_name].submit()
}
if (!eucjp_flag) {
YUD.get("iframe_div").innerHTML += '<iframe id="eucjp" src="eucjp.htm" onload="parent.document.eucjp_flag = true;"></iframe>'
}
var myInterval = setInterval(function() {
if (eucjp_flag) {
clearInterval(myInterval);
eucjp_search()
}
},
100)
}
-----

1680 ◆adhRKFl5jU:2009/03/26(木) 23:31:58
どうみても、ソースコードが重複しています。
本当にありがとうございました。
別に重複が絶対いけないわけではないが、JavaScriptなんだからさ。
-----
if (engine_name == "y_shopping") {
function eucjp_search2() {
YUD.get("eucjp").contentWindow.document.forms[engine_name].target = YSC.Iconlink.target.Value();
YUD.get("eucjp").contentWindow.document.forms[engine_name][YUD.get("eucjp").contentWindow.document.forms[engine_name].alias.value].value = "http://shopping.yahoo.co.jp/search?p=&quot; + EscapeEUCJP(search_str) + "&first=1&cid=";
YUD.get("eucjp").contentWindow.document.forms[engine_name].submit()
}
if (!eucjp_flag) {
YUD.get("iframe_div").innerHTML += '<iframe id="eucjp" src="eucjp.htm" onload="parent.document.eucjp_flag = true;"></iframe>'
}
var myInterval = setInterval(function() {
if (eucjp_flag) {
clearInterval(myInterval);
eucjp_search2()
}
},
100)
}
-----

1681 ◆adhRKFl5jU:2009/03/26(木) 23:32:45
こんな・・・
-----
if (engine_name == "rakuten") {
function eucjp_search2() {
YUD.get("eucjp").contentWindow.document.forms[engine_name].target = YSC.Iconlink.target.Value();
YUD.get("eucjp").contentWindow.document.forms[engine_name][YUD.get("eucjp").contentWindow.document.forms[engine_name].alias.value].value = "http://esearch.rakuten.co.jp/rms/sd/esearch/vc?sv=2&amp;sitem=&quot; + EscapeEUCJP(search_str);
YUD.get("eucjp").contentWindow.document.forms[engine_name].submit()
}
if (!eucjp_flag) {
YUD.get("iframe_div").innerHTML += '<iframe id="eucjp" src="eucjp.htm" onload="parent.document.eucjp_flag = true;"></iframe>'
}
var myInterval = setInterval(function() {
if (eucjp_flag) {
clearInterval(myInterval);
eucjp_search2()
}
},
100)
}

1682 ◆adhRKFl5jU:2009/03/26(木) 23:34:06
おっと。関係ないソースを貼ってしまった。
まあ、いつものことだからいいか。
-----
function utf8_search() {
YUD.get("utf8").contentWindow.document.forms[engine_name].target = YSC.Iconlink.target.Value();
YUD.get("utf8").contentWindow.document.forms[engine_name][YUD.get("utf8").contentWindow.document.forms[engine_name].alias.value].value = search_str;
YUD.get("utf8").contentWindow.document.forms[engine_name].submit()
}
if (!utf8_flag) {
YUD.get("iframe_div").innerHTML += '<iframe id="utf8" src="utf8.htm" onload="parent.document.utf8_flag = true;"></iframe>'
}
var myInterval = setInterval(function() {
if (utf8_flag) {
clearInterval(myInterval);
utf8_search()
}
},
100)

1683 ◆adhRKFl5jU:2009/03/27(金) 15:12:34
画像とか用意するのが面倒すぎて困る。
なんか合宿中に色々と調べたいことがあったのだが、全部忘れてしまった。
幾らかメモを取ったからそれを見れば良いか。

1684 ◆adhRKFl5jU:2009/03/27(金) 15:15:56
Segment tree - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Segment_tree
-----
これを誰か訳してくれ><

1685774さん:2009/03/27(金) 15:21:34
HDDは来たのだが、ケースが来ていない。
早く来ないかな。

1686 ◆adhRKFl5jU:2009/03/28(土) 15:01:24
どうやら晦日に届くようだ。
良かった良かった。
正直もっと早く届いてほしいところだが、仕方がないだろう。

1687 ◆adhRKFl5jU:2009/03/28(土) 17:17:17
Debian - Wikipedia
http://ja.wikipedia.org/wiki/Debian
-----
入れるならばこれかな?

1688774さん:2009/03/28(土) 18:59:36
初めてLunascape5.0正式版が出たことを知った。
正直どうでも良いのだが。

1689 ◆adhRKFl5jU:2009/03/28(土) 19:37:00
ふと、IE(Trident)のCookieエディタを作ってやろうかと思って、仕様を調べている。
基本は、
“C:\Documents and Settings\ユーザ名\Local Settings\Temporary Internet Files”
で良いのだが、これは変更が可能である。
一番良いのは、関数で、クッキーの情報が収められているフォルダが分かることだが、恐らくレジストリで格納されているのでそっちを調べるのも良いかもしれない。
でも、レジストリだとWindowsが古いと駄目そうなんだよなあ・・・

1690 ◆adhRKFl5jU:2009/03/28(土) 20:17:00
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
以下の
Cache
を見れば、フルパスが分かるみたい。
WindowsXP SP3で確認。他は知らん。

1691 ◆adhRKFl5jU:2009/03/28(土) 20:56:43
いつものならばVC++を使うところだが、今回は合宿でのこととか、色々とあったので、それを使わないことにする。
つまり、gcc(g++)で開発しようということだ。
本当はC++0xが使いたいだけなのだが。

1692 ◆adhRKFl5jU:2009/03/28(土) 20:58:49
合宿中にemacsを利用していたために、テキストエディタで保存するのにC-x C-sで保存するくせが付きそうになったが、最終的にはつかなかった。

1693 ◆adhRKFl5jU:2009/03/28(土) 21:01:04
Fortran, C, C++ for Windows
http://www.equation.com/servlet/equation.cmd?call=fortran
-----
ここから落とせるらしい。

1694 ◆adhRKFl5jU:2009/03/29(日) 13:22:21
#include <iostream>

int main(int argc, char **argv){
std::cout << argc << std::endl;
}
-----
これが通らない・・・

1695 ◆adhRKFl5jU:2009/03/29(日) 13:31:45
やっぱり、stable版が良いな。

1696 ◆adhRKFl5jU:2009/03/29(日) 15:28:56
g++ test.cpp -lgdi32 -O3 -mwindows
こうすればコンソールも出なくて美味しい。

1697 ◆adhRKFl5jU:2009/03/29(日) 15:29:58
Win32 programming with bcc and gcc
http://hnw.jp/documents/winprog/
---
コンパイラに1円も払わない窓プログラミング
-----
今だったら、VC++にもあんまり金はかからないんだけれどもね。

1698 ◆adhRKFl5jU:2009/03/29(日) 15:57:02
偽MAKEFILEを書いているのだが、上手く通らない・・・

1699 ◆adhRKFl5jU:2009/03/29(日) 16:01:07
別にどっかの誰かに配布するわけじゃないから、適当に動けば良いやん。
ただ単にmake[ENTER]で簡単にコンパイル出来るところに意味がある。ただそれだけ。

1700 ◆adhRKFl5jU:2009/03/29(日) 16:43:19
vimを華麗に操っている人が居たので、vimも使いかいなと。
簡単には使えるんだけれども・・・

1701 ◆adhRKFl5jU:2009/03/29(日) 20:54:40
Subversionをインストールする。

1702 ◆adhRKFl5jU:2009/03/29(日) 20:57:03
gccでdllをコンパイルするためのメモ
-----
gcc -shared -o test.dll -Wl,--out-implib,libtest.lib,--output-def,deftest.def,--base-file,basetest.base,--kill-at test.def test.o
gcc -shared -o test.dll -Wl,--out-implib,libtest.lib,--output-def,deftest.def,--kill-at test.def test.o
Creating library file: libtest.lib
http://d.hatena.ne.jp/y2q_actionman/20070628/p1
g++ -c -O3 test.cpp

1703 ◆adhRKFl5jU:2009/03/30(月) 10:04:57
今の時代のブラウザを過去に使えたとして、ちゃんと動くだろうか。
多分動かないだろうな・・・。

1704 ◆adhRKFl5jU:2009/03/30(月) 10:23:45
Sleipnirで特定の条件で、特定のページを開くと
> Trident 「…(返事がない。ただの屍のようだ)」
とか出るということで、実際にやってみたら出た。
駄目だろこれはwww

1705 ◆adhRKFl5jU:2009/03/30(月) 10:26:26
最新のテスト版 test20 の IEBrowser.fx の 0x000041CC から書き込まれている。
これとは関係ないが、そのサイトがちゃんと開くと、JavaScriptの処理で物凄くメモリを食う。
メモリリークの為だと思うが、普通に600MBぐらいを食べた。
カーソルが動かなくなるとか、どういうことだろうか・・・

1706 ◆adhRKFl5jU:2009/03/30(月) 10:36:56
再現しなくなった・・・
何故だ・・・

1707 ◆adhRKFl5jU:2009/03/30(月) 10:37:10
http://www.pc-koubou.jp/goods/222314.html

1708 ◆adhRKFl5jU:2009/03/30(月) 14:45:32
7ポートのUSB HUBを買った。

1709 ◆adhRKFl5jU:2009/03/30(月) 15:56:46
nasmでg++とかgccでリンクできるようにするオブジェクトファイルかなんか名前を忘れた奴を吐くには、
nasm -f elf asm.S
とやれば良いみたい。
これでc++とnasmが組み合わせられる。gasなんて使えん。

1710 ◆adhRKFl5jU:2009/03/30(月) 17:32:54
なんかリンクしても、有効なWin32アプリケーションではないとか言われる。
何ゆえ?


新着レスの表示


名前: E-mail(省略可)

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

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

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

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