漫画下载器 v1.6.1

1.6版挺失败的,BUG一堆,很不稳定,完全违背我的初衷。
特此发布一个增强稳定性的修复版本。
image

修复的BUG:

  • 修复了漫漫看无法下载的问题
  • 修复了Kuku动漫某些图片地址无法获取的问题
  • 修复了一些漫画列表无法读取的问题,实在无法读取的给出提示
  • 修复了剧集列表名称重复的问题
  • 修复了相同序号的剧集造成崩溃的问题

更新方法

  • 直接把文件解压覆盖1.6版就可以了,原有的数据不会丢失,启动时会有一个更新数据的提示,需要一点时间,请耐心等待。
  • 当然,如果是第一次下载的话,可以直接使用,不需要之前的版本。

下载地址

漫画下载器 v1.6

现在是凌晨1点,本来想在昨天(2010-08-02)晚上发布的,可是发布前发现还有一个BUG,结果修到现在。不过还好是发布前发现的,嘿嘿,不然就又少了一个功能了。1.6版经历了很多坎坷,牢骚待会再发,还是先上图。
image
看到了什么?是的!!是dm5,动漫屋!收录了动漫屋!!很多网友投诉说漫点的速度太慢,希望增加更多的来源,这次用动漫屋替换了漫点。
其他可以用肉眼看到的变化很少,最明显的就是搜索框右边多了个放大镜,还有搜索框内有灰色文字提示。这是因为有的网友问我,漫画太多,怎么搜索?其实我早就提供了搜索功能了。不过有些网友需要的按来源和作者搜索暂时还没有加入,实在很抱歉。但我相信其他功能会让你们满意的。
还有一个可见的变化是,右下角不再是老套的“有什么意见和建议,请到我的博客留言。”了,变成了“有妖气是新生代原创国漫的摇篮”,这可不是帮有妖气打广告哦,先卖个关子,为什么会这样?下载了就知道。

这回更新的重点是大家暂停功能,重写了线程控制,提供了稳定性,并加快了速度。
还有综合网友提出的现在完成后提示、崩溃提示都做了处理。
还有网友提出,不同网站的图片质量不同,希望可以区分。这个是我之前没想到的,处理的方法很简单,新增了一个可以选择漫画目录命名时是否带有来源后缀的功能。

我比较懒,不想做大的调整,还是那句老话,小改动,大变化。
虽然这样,但还是有一些新增的界面,让我们来看一下。

这是下载完成时的提示窗口:
image

程序崩溃时的提示窗口:
image

设置窗口的变化:
image

下面来看看我还做了什么。

修复的BUG:

  • 鼠标位于状态栏图标上方时的提示文字超出长度的问题
  • 修复了漫画列表更新后,立刻关闭程序,可能导致漫画列表本地保存失败的问题
  • 修复了更新漫画列表后,保存速度太慢的问题
  • 修复了下载成功后,失败标记文件没有被删除的问题
  • 修复了有妖气经常下载失败的问题
  • 修复了一个可能造成列表显示不全和图片下载不全的问题
  • 修复笨狗剧集名称带括号的问题
  • 修复了点击收藏时可能假死的问题

改进的功能:

  • 重写了线程控制,增强了稳定性,加快了速度
  • 新增暂停下载功能
  • 新的搜索框,带有提示功能
  • 新增清空收藏列表和清空常用列表功能
  • 命名时新增包含来源的选项
  • 新增下载按钮的快捷设置
  • 新增下载完成时弹出提示窗口
  • 新增程序崩溃时的错误报告
  • 新增走马灯的信息提示

更新方法

  • 直接把文件解压覆盖之前的版本就可以了,原有的数据不会丢失,启动时会有一个更新数据的提示,需要一点时间,请耐心等待。
  • 当然,如果是第一次下载的话,可以直接使用,不需要之前的版本。

下载地址

PS部分,可以忽略的牢骚地带。
5月发布1.5版以后,实在是太忙了,经常加班,加上生活琐事缠身,完全没有时间理漫画下载器,就完全把漫画下载器丢一边了。直到7月份,发现漫漫看升级了页面和服务器,之前的解析器没有办法解析漫漫看的新页面了,所以只好发布一个紧急的1.5.1版,但是由于太急,发布的时候漏了一个步骤,导致一部分功能丧失了。。不过还好都是不常用的功能,下载漫画的主要任务还是不会耽误的,呵呵。
1.6版是最近两周才开始有时间做的,工作上有一些变动,正处于空档期,就抓紧时间继续奋斗,嘿嘿。
水平有限,看了很多关于线程的资料,还是做不出很满意的线程控制框架。不过基本满足要求了,实现了暂停的功能,而且速度比以前快了一些,大概有10%左右,可能配置较低的机器会更明显一点。
UI上也做了一些新控件,搜索框、带下拉框的按钮、还有轮转的文字,做的时候很痛苦,一堆东西要学,不过做出来以后还是挺有成就感的。
稳定性!速度!这是最重要的两项指标,保证了稳定性和速度,才能加入新功能。不过修修补补实在太多了,我感觉现在的漫画下载器有点像preview版的钢铁侠,就是在敌人老窝造出来的那个,看起来很强悍,但从天上掉下来就会摔成碎片。如果没看过钢铁侠建议去看一下,真的很好看,我说的是第一部的剧情。如果不想看请忽略我的话。综上所诉,我想说的是,我会在1.7版重写架构,以保证稳定性和速度,更多的是为了更容易增加新的功能。

漫画下载器 v1.5.1

这是一个紧急发布的版本。只是修复了2个BUG,集成了最新的列表,虽然没有新的功能,还是看一下图吧。
image
最近工作和生活上忙的不可开交。。完全没有时间来做1.6版。。向各位耐心等待的漫友说声抱歉。。
1.6版还需要时间。。顺利的话,争取这个月底发布。

修复的BUG:

  • 修复了漫漫看不能下载的问题
  • 修复了图片不存在时导致程序崩溃的问题,并增加缺失图片的占位文件,说明该图片无法下载

改进的功能:

  • 图片下载时使用.cdl的扩展名标记正在下载

更新方法

  • 直接把文件解压覆盖1.5版就可以了,原有的数据不会丢失,启动时会有一个更新数据的提示,需要一点时间,请耐心等待。
  • 当然,如果是第一次下载的话,可以直接使用,不需要之前的版本。

下载地址

有道难题资格赛心得

好久没写关于自己的东西了。
最近参加了网易的有道难题。上周一共比了5场,2场练习赛+3场资格赛。

虽然是第一次参加有道难题,但是比赛的规则是ACM,甚至用的平台是北大的POJ,还是比较熟悉的。但唯一有一点区别的,也是很奇怪的一点,有道的OJ,注释只能写成/*…*/不能用单行注释,CE了几次。。不过CE不计算罚时,还好还好。

image

有道难题资格赛(1)

有道的资格赛每场比赛3道题,共3场,每场取前400名,共1200名进入复赛。我比了3场,大家应该能猜到,我都没进前400。但还是有收获的,第一场做出了前2题,最后只剩下半个小时做最后一题,在最后2分钟的时候做出来,但是很悲剧地在提交的时候选错了编译器,结果CE了。。虽然后面验证以后,答案也是错的。但还是觉得很遗憾。一看排名,1159。

有道难题资格赛(1) -- 我的排名

有道难题资格赛(1) -- 我的排名

有点难过,还以为做出2道题肯定能出线了呢。然后看了一下排行榜。发现和我一样做出2道题的,排在最前面的是275名,是可以出线的:

有道难题资格赛(1) -- 2道题

有道难题资格赛(1) -- 2道题

但是他们花的时间太短了,我根本不可能这么快做出来的。我这才发现,原来第一题是150分,第二题是300分,前两题加起来才450分,而第三题一道题题就有550分。换句话说,只要做出第三题就能直接出线。而且第一场比赛的第三题是有思路的,而且基本做对了,只是有几个细节问题没处理好,如果再给我半个小时,甚至是一个小时测试,一定能做出来。

image

有道难题资格赛(1) — 统计

抱着这种想法参加了后面两场资格赛,直接拼最后一题。因为就算我做出了前两题,我的罚时还是不能入围,而且没有时间做第三题。还不如孤注一掷,直接拼第三题。

我记得第二场的第三题很有意思,套用有道的招聘讲了个故事。说的是,今年HR招人用了个新规则,HR先招到一批人,每个人都有各自的特长。部门来要人,派出部门经理。把所有的部门经理和招到的新人随机排成一列。每个部门经理可以从自己的位置开始,向左右开始挑人,但是范围不能超过另一个部门经理。如果选中了一个人,那么这个人,连同之间的人都必须带走。这些人被选中了以后,当然不能被别的部门经理选了。然后每个部门都有自己的指标和需求,得挑某些有特长的人,问一共有几种选法。

看到题目以后,没思路。我的想法是先选出一个部门经理从自己的位置向左右分别开始挑,然后下一个继续挑,再下一个…这是顺着题目的思路做,但没想出可以套用的算法…结果很悲剧,没做出来。

第三场的第三题,也是蛮有趣的题目。说的是用火柴排数字,给你几根火柴,必须全部用上,能派出几种数字组合,当然0不能被排在最前面。问这些组合对给出的数求余以后的数是质数的组合有几种。

看到题目以后,马上有思路了,首先是一个排列组合问题。每一个火柴数字,都有固定的火柴根数,用固定的总根数能排出几种数字组合。首先要解决的是每排一个数字的时候,有几种选择?而没排完一个数字以后,接下来可以选择的数字有可能跟之前会有区别。所以这有不是一个简单的全排列问题。这里面还包含了背包问题,可以想象成,火柴数字是一个货物,而总根数就是背包,必须刚好把背包装满。顺着这个思路,我很快做了出来。可是现在,我才发现,原来这道题不仅仅是这两个问题,还有一个更大的问题。因为最多一共有10000根火柴,如果全部排1的话,可以排5000位的1。这又引出一个大整数问题。还涉及大整数判断质数,必须有除法和求余运算。这下可麻烦了,准备不够充分,没有现成的大整数类可以用,从头写一个肯定来不及。。。结果。。又悲剧了。

唉,特别难过,不过也是一份很宝贵的经历。特此记录。

漫画下载器 v1.5

迟到的1.5版终于来了。还是先上图:
image

关于1.5,要先说一句抱歉,这个月实在是很忙,断断续续进行着1.5的开发,效率很低,速度也很慢,让大家久等了。由于时间的关系,很多网友提出的暂停功能没有被加入,再说一声抱歉。由于之前的架构完全没有这个方面的考虑,虽然看起来只是一个小功能,但是要改起来还是比较麻烦的。。要进行整个架构的改写,需要比较多的时间。

但是,我相信1.5版不会辜负大家对我的期望的。1.5版重点加强了稳定性,提高了启动、运行和下载的速度,加入数据库升级功能,完美从1.4版升级数据,不丢失原有数据。并且增加了下载限速、使用代理连接和订阅功能。

订阅功能提示框如下:
image

下面重点讲解一下订阅功能,如果大家用过RSS,应该知道订阅的好处,就是不用自己去查看网站是否有更新,可以让程序告诉你网站更新了,然后你再去看就可以了。漫画下载器增加了一个这样的功能,可以自动帮你检查是否有最新话出来,可以选择在发现最新话的时候,就自动把这一话下载下来。这是不是很方便呢?这样你就不用在玩游戏的时候想着第xxx话出来了没有啊,我要去看看。。漫画下载器帮你搞定这一切。如果你不喜欢载下来看,我想漫画下载器的订阅也是一个不错的功能,在找到更新话时,可以在弹出的信息窗口直接点击链接,打开这一话的网页。而这个信息窗口类似QQ打开时右下角的提示窗口,如果没有操作,将在5秒之后自动消失。

下面看一下设置界面:
image
把“每话独立目录”移动到最上方,跟目录的设置放到了一起。
增加了下载速度限制的设置和代理的设置。

修复的BUG:

  • 修复了判断漫画下载是否完成不正确的问题
  • 改正了covers目录会被指定到跟漫画目录一起的问题,改成始终跟软件放在同一目录下
  • 修复了漫画或者剧集名称中包含”.”时,图片命名错误导致只保存一张图片的问题
  • 修复了漫画信息尚未加载完成时,点击收藏可能导致内存出错的问题
  • 修复了图片地址没有取到时,导致程序崩溃的问题
  • 修复了可能造成下载速度越来越慢的问题

改进的功能:

  • 加快漫画列表的载入速度
  • 搜索持续输入时不立刻进行搜索,提高操作流畅度
  • 增加下载限速
  • 增加代理连接功能(HTTP,IE设置)和测试连接
  • 增加最小化到系统托盘
  • 增加订阅漫画更新
  • 对数据进行压缩,减小了软件的体积
  • 增加数据库初始化/升级的UI提示
  • 初始化新数据库时,保留原有数据

下载地址

最后还是例行PS一下,应某网友(对不起啊,忘记你的网名,如果你看见了请及时提醒我)要求在压缩包里加入了一个更新日志,让大家可以更好的了解漫画下载器一路走来的变化。
其实之前每发布一个版本,都非常开心和激动,现在更多的是冷静和理性。因为用户越来越多,大家提出了很多很棒的建议,也指出了很多漫画下载器存在的问题。非常感谢大家的关注,大家的关注激励着我继续做下去,慢慢把漫画下载器完善,越做越好。我还是希望把发布的周期控制在一个月一个版本,所以每一个版本都必须做到稳定,不能有太大的问题。
希望大家继续关注和支持漫画下载器 ;-)
对了,忘了说,这回可以直接覆盖原来的文件,原来的收藏和常用列表以及配置信息都不会丢失。

漫画下载器 v1.4

千呼万唤始出来,1.4版终于跟大家见面了。按照惯例,还是先上图:
image

我更新的宗旨是小改动,大变化。一方面老用户不用重新学习软件的使用,另一方面可以延续上一个版本简单易用的体验,让新用户快速上手。
1.4版外表的区别还是很小的,但它的内部发生了翻天覆地的变化。很感谢使用了1.3版,并给我反馈的广大漫友。很多漫友反应内存占用太大,并且存在无故退出的问题。1.4版重点优化了内存,修复了内存泄漏的问题,内存不再不断增长,并加强了稳定性,修复了一些可能造成退出的错误,还有在外部包了一层全局错误控制,使得整个程序更加健壮。

在功能上,应漫友要求,增加了收藏功能。收藏很简单,只要点击右边漫画资料上方的星星,使其变成实心的,就收藏了这部漫画。漫画简介也被移动到了上方的小文档标志里面,鼠标移动到文档标志上方,就可以显示漫画简介了。1.4版还将记录你上一次完成下载的剧集,这样就不会因为太久没有关注这部漫画,而忘记看到第几集了。由于漫画是从漫画网站上抓取的,为了保护源网站的权益,在漫画资料中增加了“来源”的链接。另外增加常用漫画列表,可以把下载过的漫画按照下载次数排序,可以快速定位到常用却忘记收藏的漫画。目前漫画数量已经增加到了9200部以上,相信大部分漫画都可以从这里列表中找到了。还有一个好消息,就是可以同时下载多部漫画啦。下面请看详细更新情况。

修复的BUG:

  • 解决漫画或剧集名称太长时无法显示
  • 修复下载过程中的线程管理可能出现异常导致程序出错退出
  • 修复名称中有非法字符时出现的错误
  • 修复图片不存在时,重试导致图片数量超出上限
  • 修复Sqlite多线程插入导致程序出错的问题
  • 解决了内存泄漏的问题
  • 解决了漫画重名时,封面显示同一张图片的问题
  • 解决了搜索或者切换列表选项可能造成重复绑定列表造成的性能问题

改进的功能:

  • 同时下载多部漫画
  • 增加收藏功能,增加收藏列表和常用列表
  • 漫画列表的更新按钮从jennal.cn取得最新的列表,并在本地缓存
  • 右侧漫画信息增加“最近下载”和“来源”
  • 右侧漫画信息重新排列,并增加收藏按钮和简介按钮
  • 左中右三部分分别增加了一个读取图标,当该部分正在载入数据时,将显示该图标
  • 增加更多的漫画,增加站点来源,并组织成列表缓存在jennal.cn服务器上
  • 改变了目录命名的方式,主目录采用漫画名称,内部子目录采用剧集名称
  • 搜索漫画时按上下键,上下移动选中目标
  • 增加全局的出错控制,程序更加稳定
  • 增加同时下载多部漫画的功能

工作原理

自1.3版发布以来,有些网友反映图片下载不全或者某一话被跳过了。其实是还没有完成下载,如果能耐心等到全部下载完成,你就会发现不会有缺页或者缺某一话的情况。这是漫画下载器的工作原理造成的。它是一个多线程的智能程序,它默认使用5个线程分析网页,2个线程下载图片。而这5个线程则包括分析图片列表页(取得图片页)和分析图片页(取得图片地址,交给2个线程进行下载)。就象好多人排队去坐过山车,而这个过山车有5部车子,每部车子上只能坐一个人,但是这个过山车很特别,5部车子不在一个轨道上,所以谁能先跑完不是确定的,但是一旦有人跑完,排在队伍最前面的人就可以上去。

当然,不能排除出现意外的情况。例如有人坐了一半觉得不舒服,要下来。很幸运的是,这个过山车可以立刻让他停下来,然后换别人从头开始跑。但他来坐这个过山车是带着任务的,所以他又跑去队伍的最后面继续排队。这就是重试机制。也是这个机制造成了可能有些图片或者某几话没有按照顺序被下载下载,但你会发现,当你载完其他话以后,这些缺失的话会被补回来。除非这些图片或者话重试了太多次,那就有可能真的并不存在。

下载地址

最后,还是例行PS一下,有点抱歉的是这个版本不能保留上一个版本的设置,所以如果修改了设置,还请重新设置一下。
这个版本我花费了很多心血。最近一直熬夜修改BUG和增强稳定性,希望可以得到漫友们的支持和肯定。当然,有什么意见和建议和欢迎提出来。还是那句话,你们的支持是我最大的动力!

漫画下载器 v1.3

又是激动人心的时刻,漫画下载器 v1.3来了。废话不多说,先上图:
image

表面上看,这个版本同上一个版本并没有什么区别。细心的网友可能发现了,漫画的数量增加到了1540部,并且搜索的时候不再仅显示搜索到的漫画数量了,并且显示总漫画数量。不知细心的你是否还发现了搜索的秘密?对了,就是拼音搜索。新版本增加了拼音首字母和全拼搜索的支持。这个版本着重改善搜索漫画的用户体验,再也不用通过中文来搜索了,几个简单的拼音首字母,就能帮你快速定位到你想要的漫画。这只是用户体验改善的一小部分,下面来看看这个版本的更新情况吧。

修复的BUG:

  • 修复了漫画列表没有加载完成时就关闭程序,出错的问题。

改进的功能:

  • 优化了分析引擎,使得分析更加稳定和快速,并且易于扩展,为以后添加更多漫画作好了准备
  • 漫画数量增加到1540部,漫画的数量大大增加,希望漫友们都能找到自己喜欢的漫画。
  • 增加漫画在本地的缓存,大大加快启动时间
  • 漫画搜索增加了拼音搜索功能,包括全拼和拼音首字母的支持
  • 鼠标移动到漫画简介上时,右边将显示全文内容,对于陌生的漫画也能通过完整的简介来了解。
  • 环境需求降至.net framework 2.0,该版本为Vista以上系统自带
  • 为使用XP且不想安装.net framework的漫友提供了虚拟机,即使没有安装.net framework也可以启动程序了

下载地址:

PS:由于新版本漫画数量太多,说实话,我自己都没载完所有的封面,这里就不提供封面缓存的版本了。
这里说明一下,同上一个版本相比,体积明显大了好多,这是由于内置了.net framework虚拟机的缘故,虚拟机的体积占了9M之多。为了版本的统一,就不分离不带虚拟机的版本了。相信10M左右的体积,漫友还是可以接受的吧。

最后还想说的是,1.2版受到了广大漫友的支持和好评,我真的很开心。我收到的大部分反馈都是要求增加更多的漫画,所以这个版本的更新重点是提供更多的漫画,并且做了一些用户体验的微调,希望能给漫友们带来更好的体验。也希望漫友们能多提宝贵意见,只要能做到,我都会尽量满足你们的要求。

[转]javascript中判断变量是否为array

javascript中要判断一个变量是否为array通常是比较困难的,因为

通常的做法是判断

可是这个方法有一个问题,如果一个数组是来自另一个frame中的,那么它的constructor 将是另一个对象。

YUI中用了如下的方法:

简单来说,就是判断这个变量有没有 length 属性,同时有没有 splice 方法。可惜,这样的判断方法是可以用一个 object 来伪造数组的。

Google 的 Mark Miller 发现,用下面方法,可以简单又可靠的得到一个变量是否一个数组:

转自:http://stauren.net/log/fqibpxyz3.html

更新一下我的jlUtil

修正了几个BUG,已经在实际项目中使用,没有问题。