iPixiv V1.4 Beta 2 – Pixiv 下载爬楼器

iPixiv – 轻松、便捷的Pixiv爬楼下载器!
最新版本:V1.4 Beta 2
主要功能:
– 自动,多线程批量下载
– 可以添加管理多个任务
– 使用Tags搜索图片
– 搜索到的图片缩略图预览
– 支持图集下载!
– 已下载图片预览!
– 已支持指定作者ID下载!
– 支持下载管理器

作者:SmdCn
Email: Smdcn(at)ocgsoft.cn
QQ:493688867
Blog:blog.smdcn.net

下载地址:http://www.ipixiv.cn/
使用教程:http://www.ipixiv.cn/ipixiv/help.htm

What’s News in V1.4 Beta 2
支持下载用户收藏
对应Pixiv版式更新修改了列表抓取
修正任务切换时的一个BUG

2013-06-27 Update:
软件目前还未更新对Pixiv新页面的支持,功能可能是失效的。
目前虽然没有弃坑,但我并不确定什么时候能有时间进行更新,
目前你可以先试试使用 辅助浏览器脚本

MSSQL 删除特定标识开头的表

在使用数据库中,我们经常通过不同的开头,来区分不用应用说使用的表。
比如BBSMax会使用bx_,Discuz默认使用cdb_,这样做对于维护数据库是相当方便的(当然,不同应用如果能分库就更好了 XD)
如果某个应用不用了,只想删除这个应用的表怎么办呢?
在MSSQL,可以用执行下面的SQL语句来实现,只要把红色部分修改成需要的表开头名既可。
这个方法在MSSQL2005下测试成功(需要注意的事,如果表间存在依赖关系,那么不可能一次性删除所有的表,有的表会因为依赖关系无法删除,不过当他的依赖关系已经被删除了以后就可以删除了(比如B表依赖A表,那么第一次执行,A表无法删除,因为被B依赖,但是B没有被依赖,所以被删除了,于是再次执行,A没了依赖,就可以被删除了)

DECLARE cursorname cursor for select ‘drop table ‘+name from sysobjects where name like ‘bx%’ and xtype = ‘u’
open cursorname
declare @curname sysname
fetch next from cursorname into @curname
while(@@fetch_status=0)
begin
exec(@curname)
fetch next from cursorname into @curname
end
close cursorname
deallocate cursorname

以上 ><

i-Comic 测试版上线!

>. < 恩,新作品,初稿完工,欢迎测试

i-Comic 是一个提供日本同人志、漫画、小说搜索的站点。
目前聚合了来自 虎穴、CQ、RIvista(增加中) 内的数据搜索,你只要一个入口既可同时获取多个站点的内容。

基本功能:
1、多站同人志的聚合搜索,免得去一个一个站找。
2、同一本在多站的关联,想要的本一个站没有,还可以看看其他站有没有
3、同Tag、社团的搜索功能 ><
4、联想、推荐功能 6.19 更新
5、预览图加载查看 6.19 更新

> < 其实定位有点奇怪 ,于是目前只是一个导购的小工具罢了,功能还在完善中~

PHP中使用curl取得HTTP状态码

今天做了个程序,需要取得HTTP状态码,于是继续搜索无力,果然中文资源非常少,于是去查了PHP的手册。
找到了curl这个小工具。
使用curl需要在php.ini中设置启用才行 >< Windows的服务器中,打开php.ini,找到:
extension=php_curl.dll
去掉前面的注释既可 。

实现代码如下:

$curl = curl_init();
$url=’http://www.smdcn.net’;
curl_setopt($curl, CURLOPT_URL, $url); //设置URL
curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header
curl_setopt($curl,CURLOPT_NOBODY,true); //Body就不要了吧,我们只是需要Head
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //数据存到成字符串吧,别给我直接输出到屏幕了
$data = curl_exec($curl); //开始执行啦~
echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~
curl_close($curl); //用完记得关掉他

完成~~

QeePHP 使用缓存QCache_File储存单条查询结果

QeePHP 是一个很简单易用的PHP框架,以至于我就看了一晚,就开始用它做应用了(你去死)

好吧,我比较笨,PHP不是很熟,于是之前一直没有搞定如果把查询结果的数据保存起来,最后自制一个超土曲线救国的方式。于是记录下来:

$cache =new QCache_File; //新建一个缓存类,这里用QCache_File,当然QeePHP还支持Memcache和XCache

if ($mycache = $cache->get(“data_”.$dataid)) //尝试取Cache,文档告诉我,如果无法取得会返回false
{
$data= new DataBook($mycache);  //DataBook是一个QeePHP的模型类 QDB_ActiveRecord_Abstract,如果取到数据的话,就用数据创建一个DataBook
}else{
$data = DataBook::find(‘id = ?’,$dataid)->getOne(); //如果没有找到数据,然后就查询数据库
$cache->set(“data_”.$dataid,$data->toArray()); //然后把查到的数据转成Array存到缓存
}

在PHP中使用Google Translate

今天需要在做一个内置的翻译功能,然后找了半天,一直没看到合适的方法,
网络上基本上都是同样一个有问题的代码,于是下面找到一个可以用的代码。
直接file_get_contents取API,然后正则表达式取需要的那部分。

/**
* Translating language with Google API
* @author gabe@fijiwebdesign.com
* @version $id$
* @license – Share-Alike 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)
*
* Google requires attribution for their Language API, please see: http://code.google.com/apis/ajaxlanguage/documentation/#Branding
*
*/
class Google_Translate_API {

/**
* Translate a piece of text with the Google Translate API
* @return String
* @param $text String
* @param $from String[optional] Original language of $text. An empty String will let google decide the language of origin
* @param $to String[optional] Language to translate $text to
*/
static function translate($text, $from = ”, $to = ‘en’) {
$url = ‘http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=’.rawurlencode($text).’&langpair=’.rawurlencode($from.’|’.$to);
$response = file_get_contents(
$url,
null,
stream_context_create(
array(
‘http’=>array(
‘method’=>”GET”,
‘header’=>”Referer: http://”.$_SERVER[‘HTTP_HOST’].”/\r\n”
)
)
)
);
if (preg_match(“/{\”translatedText\”:\”([^\”]+)\”/i”, $response, $matches)) {
return self::_unescapeUTF8EscapeSeq($matches[1]);
}
return false;
}

/**
* Convert UTF-8 Escape sequences in a string to UTF-8 Bytes
* @return UTF-8 String
* @param $str String
*/
static function _unescapeUTF8EscapeSeq($str) {
return preg_replace_callback(“/\\\u([0-9a-f]{4})/i”, create_function(‘$matches’, ‘return html_entity_decode(\’&#x\’.$matches[1].\’;\’, ENT_NOQUOTES, \’UTF-8\’);’), $str);
}
}

// example usage
$text = ‘570話ベースで鷹鰐・ダズワニネタが1本ずつです。smdcn.net’;
$trans_text = Google_Translate_API::translate($text, ‘ja’, ‘zh-cn’);
if ($trans_text !== false) {
echo $trans_text;

iPixiv 1.3 – Pixiv 下载爬楼器

最新版本:V1.3
更新日期:2010-02-05
主要功能:
– 自动,多线程批量下载
– 可以添加管理多个任务
– 使用Tags搜索图片
– 搜索到的图片缩略图预览
– 支持图集下载!
– 已下载图片预览!
– 已支持指定作者ID下载!
下载地址:http://www.ipixiv.cn/
使用教程:http://www.ipixiv.cn/ipixiv/help.htm

What's News in V1.3
增加了根据作者ID搜索图片的功能!
修正了图片数少于设定最大搜索数时重复显示最后一页图片的BUG
修正了一些搜索设定上的BUG
修正了退出下载时最后下载ID记录可能错误的BUG
完善中断下载功能,并且加入第二次点击提示强制中断的设定

[转]IIS7.5中神秘的ApplicationPoolIdentity

 IIS7.5中(仅win7,win2008 SP2,win2008 R2支持),应用程序池的运行帐号,除了指定为LocalService,LocalSystem,NetWorkService这三种基本类型外,还新增了一种ApplicationPoolIdentify 

 

win7的官方帮助上是这么说的:
ApplicationPoolIdentity – 默认情况下,选择“应用程序池标识”帐户。启动应用程序池时动态创建“应用程序池标识”帐户,因此,此帐户对于您的应用程序来说是最安全的。

也就是说"ApplicationPoolIdentity"帐号是系统动态创建的“虚拟”帐号(说它是虚拟的,是因为在用户管理里看不到该用户或用户组,在命令行下输入net user也无法显示,但该帐号又是确实存在的) 

如何验证该帐号确实是存在的的?打开任务管理器,观察一下:

w3wp.exe即iis进程,上图中高亮部分表明该iis进程正在以帐号luckty运行(注意这里的luckty即为上图中的应用程序池名称)

好了,搞清楚这个有什么用?

先来做一个测试,比如我们在iis里新建一个站点,主目录设置为c:\2\,应用程序池就指定刚才图中的luckty

假如我们在该站点的default.aspx.cs里写入这样一行代码 :

File.AppendAllText("C:\\TestDir\\1.txt",DateTime.Now.ToString());

前提是c盘必须先建一个目录TestDir,同时除Administrator,System保留完全控制权外,其它帐号的权限都删除掉

运行后,会提示异常: 对路径“C:\TestDir\1.txt”的访问被拒绝。

原因很明显:该站点运行时是以应用程序池(luckty)对应的虚拟帐号运行的,而这个虚拟帐号不具备c:\TestDir的访问权限

这种情况在web服务器(iis6)安全配置中很常见,比如我们把图片上传目录,常常放在主目录之外,同时以虚拟目录形式挂于站点之下,另外在IIS6中不指定该目录任何执行权限 ,这样即使有人非法上传了asp/aspx木马上去,也无法运行搞不成破坏!
言归正传,要想让那一行测试代码正常运行,解决办法很简单,把虚拟帐号的权限加入文件夹安全权限中即可,但是问题来了:这个虚拟帐号我们是不可见的,如果你直接添加名为luckty的用户到文件夹安全帐号里,根本通不过(提示找不到luckty用户),说明这个虚拟帐号名称并不是"luckty"

关键:手动输入 IIS AppPool\luckty (即IIS AppPool\应用程序池名),再确定,这回ok了.

 

当然除了用"IIS AppPool\应用程序池名"外,windows内部还有一个特殊的用户组Authenticated Users,把这个组加入TestDir的安全权限帐号里也可以,不过个人觉得没有"IIS AppPool\应用程序池名"来得精确.

结束语:
IIS7.5的虚拟帐号设计确实很棒,想想传统IIS6的时候,为了把同一服务器上的各站点权限分开(以防止木马捣乱),不得不创建一堆iuser_XXX,iwam_XXX帐号并指定密码,再一个个站点分配过去,累死人!而虚拟帐号设计则让这类管理轻松多了,也不用担心密码过于简单或过期问题。So,还在等什么,赶紧升级到win7/win2008 R2吧!

 

To Linux..总算解决问题了

周一,开始试NOI Linux,用VBox安装,结果悲剧的格子世界了,和朋友测试了好多次都如此,失望了。
然后兴起测试Ubuntu9.10,不知道为啥一直wubi安装不能,于是大悲剧。
周二,用wubi安装,试了几次,终于成功了一次,但是第一次成功进入,重启后又进不去了,无语了。于是再次放弃。
周三,继续测试wubi安装,终于安装成功了,然后安装自带的软件包Lazarus,发现一直有问题,使用Freepascal,正常,但是Debug不能,想着反正以后要用Lazarus,而且还是0.22的非常老的版本,一直安装不能,缺少前提软体,用apt-get也下不来,只能一个一个从社区去下,一个个去下还好,居然每个软件都还要有前置软件,就这样下来7个gtk等相关的包,总算可以安装了,
然后使用也都基本正常,可惜比较严重的问题就是Watcher无法使用,不知道什么原因,顺带看了以下GUIDE,似乎也是不支持watch?于是彻底悲剧了,接下来的训练估计都要用这个系统来熟悉环境的,目前只是希望比赛时的NOI Linux不会出现格子世界
于是刚才请教了一下角星大牛,终于找到0.9.22的Watch的正确用法了,orz,于是接下来看来能够很顺利了。

解决一些.net 程序在 64位 系统下运行的问题

随着Windows 7和WinServer 2k8的推动,很多人都开始换上新系统,当然,也有不少朋友还是用上了64位的操作系统,但是问题也随之而来,本来Dotnet使用IL不需要考虑系统是多少位的,会自动根据系统DotNet框架来选择,但实际上并没有那么简单,于是乎一些.net开发的程序在x64下就开启不能了。
虽然AI_Player君说,没必要解决,但是昨天还是看了一下,了解了错误的类型,错误实际上是一个程序同时使用32位和64位造成的,也就是通过.net编写的程序,系统能够正常的把你使用64位运行,但是你如果你调用了控件,或者其他32位的组件,你的程序就会Crash。
解决思想:
虽然我们无法改变调用组件的类型,但是我们的程序可以强制告诉系统以32位运行(进程管理器中看到后面会标注x32),这样就不会出现在64位和32位同时存在的情况,于是问题解决。

解决方法:
[color=grey]0、确认你的系统是32位系统(是否必须未知)
[b]1、Visual Studio 打开你的项目
2、菜单-》生成-》配置管理器
3、活动解决方案平台下拉框-》新建
4、键入或选择新平台-》 x86-》确认
5、编译你的程序[/b]

[color=blue]特别注意:如此处理出来的程序,如果需要加壳,请确保壳支持x86模式,否则加完壳后此方法失效。
然后把你的程序拿到64位的系统上测试看看吧~
本方法由 SmdCn 在 Windows Server 2008 R2 下测试成功,其他系统暂时不了解
如果你也有遇到类似问题,或者发现本方法由什么问题,欢迎与我交流
Email: smdcn (at) qq.com (at=@)