假期意识流

意识流

—假期生活乱纪

这个假期不堪回首,单调得可怕,除了4本书之外,记忆中仅存的就全是某大学的研究生会的网站了。网站说来更不堪回首,完全算得上“赶鸭子上架”的典型(我“可爱”的姐在网站“八字还没有一撇”的时候,居然就敢将“网站建设费”挥霍一空,后来备受挫折后,无力还债,于是栽赃到了我的头上- -!)。下面将网站建设过程中的点点滴滴乱纪下来,想到哪里写到哪里,逻辑未免混乱,各位大虾莫要见笑。目的也很简单,让各位看看一个新手眼中的网站建设过程。

1、 研究生会:

因为这个网站,我就已经堂而皇之成为某大学研究生会编制中的一员,这种“海纳百川”的“气势”令我无不拜倒- -!

2、 网站需求:

刚开始的网站需求很“明确”—“美观、大方、展现当代研究生风采”。让我感到在这种“派头”的指导老师手下干起事情来一定比较“自由”,但是后来事实证明我错了,这种指导老师也有开始变“聪明”的时候。

需求增加了一条—“采用最新的Asp.Net技术,并且务必使用SQL Server最新版本”,我在深入理解这条需求之后,对于各个软件、框架的版本甚是犹豫,不知beta版是否也计算在内- -!

3、 美工:

这个我没有发言权,反正阿梅和阿楠看过(因为当时我不会用PS分页- -!)

4、 VS .NET环境:

由于以前习惯于Borland的BCB,于是“疏”在于没RAD就不活了,“密”在于任何东西都希望有根有据,简单明了。对于VC++6.0从未涉猎,因为当时第一印象就觉得不像是拿来编程的,加之MFC的封装没有一定的实力,定会感到极其莫名其妙,那消息映射的编程方式更是使得局势错综复杂,不像VCL里面虽然依然有很多不懂,但至少容易把握过程。

介于上述原因,所以当我观之Visual Studio .NET的时候还是大吃一惊,惊叹微软也终于RAD了一把。于是看了本《C# Primer》上手就干。

但是现实总是残酷的,虽然很多东西感觉用起很顺手,但还是有很多极其不习惯:

首当其冲的就是一个解决方案里面的类、函数等等,不用.h,不用#include好像就能够在各个文件中可见,原因可能是采用namespace的组织方式,但是老是觉得没有#include <*.h>就是不爽(我理想中的世界应该是把文件include过来后,再在namespace里面避免污染,而不要在一个解决方案里面的文件到处都可见似的)。

其次就是所谓的大名鼎鼎的“Code Behind”,这个倒是在很大程度上解决了网页程序设计中的版权问题,并且使代码和外观分离,便于和传统窗口编程靠拢。但是对于新手而言,在不具备驾驭的能力的情况下,无非是场灾难,代码直接生成DLL,不用export,不用声明,只需assembly一下,就可以使用,随便咋看都极其莫名其妙。

介于以上,我终于放弃了使用VS .NET,本来想选择同出Borland之手的C# Builder,但是令人郁闷的是没有找到注册码- -!所以最后我还是选择了以前写ASP程序时候采用的Dreamweaver+EditPlus+MSDN,本来记事本足已,但是少了调试器,要是连行号都看不到,那我还是直接跳楼算了。

5、 风格:

回头看我写的代码,感觉很多地方看起来还是像用ASP写的:P,不过因为毕竟是ASP.NET的东西,还是初步感受了一下ASP.NET的便利,诸如:DataGrid、DataList、Page_Load、还有在连接SQL数据库时候的便利等等等等。

6、 语言:

这个是我最无语的一点,由于C# 是刚学的,所以开始的时候还是在尝试VB,在花了很长时间都没有发现下面代码为什么通不过之后,我还是痛下决心用C# 吧- -!

#region code
<script language=”VB” runat=server>
sub foo(object sender,eventargs e)
{
//----------
}
</script>
#endregion

接踵而来的转化工作,幸好还不算很困难,但确实很烦,下面将我在转化时的主要工作总结一下:

a) 大小写:VB里面的标识符不区分大小写,如:page_load、datagrid也可以通过,但是到了C# 里面就必须区分大小写了(这里是改得最郁闷的了,对照到MSDN一个一个挨到改,想当初写VB Script的时候不偷懒就好了)

b) 索引(Item):VB里面使用object(index)就可以索引了,但是到了C#里面索引可必须使用object[index]符号,不过如果你使用Item调用就一致了,不过新手一般都不会那样做。

其他可能还有很多转化工作,不过我倒是幸运的没有碰到。

7、 基本代码组织方式:

由于那个网站大量的都是带图像文本处理,所以基本上前台采用的是把分页后形成的静态页面里面的动态部分挖空,以iframe填充之,iframe的src里面要不就指向list.aspx文件(显示前多少项,以及more按钮),并传入类别、css、行数、列数作为参数控制外观;要不就指向multilist.aspx文件(显示所有内容,以DataGrid进行分页控制),传入的外观控制参数一致。并且二者都接受hot=1参数,若设置了,则排序的方式由order by subdate desc变为order by 点击次数 desc

8、 前台:

前台如前述方式架构,我觉得最有用的就是DataGrid与DataList的基本使用及外观控制,如果实在觉得不方便,新手还是用<ItemTemplate>来得快:),另外在进行数据绑定的时候,我基本上就只用到了下面一条语句:

<%# ((DataRowView)Container.DataItem)["foo"] %>

9、 后台管理:

a)FreeTextBox:

说起后台管理自然想到了熟悉的DormForce Blog的后台,那里的那个输入控件,令人感觉甚爽,在IE里面察看源,发现名字叫做FreeTextBox- -!这个名字实在是…

于是Google后下载了一个,感觉封装得很好,使用也很方便,直接register就可以用了,令我倍感ASP.NET还是很爽的,也对Web Control产生了一丝眷恋。但是问题也出来了,他的“插入图片”按钮令人极其郁闷,只能插入图片URL,而没有提供上传,本来想在FTB控件旁边单独提供一个UploadImg按钮,提供上传然后返回URL,供使用FTB插入之需。

但是在看了“宝玉”的文章后突然发现FTB对于Button提供了接口ToolBarButton,于是可以把上传的工作集成到按钮里面。用宝玉提供的方法,在VS .NET里面“依样画葫芦”很快便搞定了,其实就是直接从ToolBarButton直接继承构造新的Button就可以了。

但是问题是我没有用Code Behind的方式,而且找了半天也没有发现,如果不用Code Behind,把类的定义写在哪里?所以只有自己想办法,看了半天英文版的FTB帮助,终于找到了方法:

<FTB:TOOLBARBUTTON title="插入图片"
runat="server" ScriptBlock="myOpenFunc();" ButtonImage="insertimage" />

其中的ButtonImage指定名称后会自动从aspnet_client目录调用图片资源,若要更换可以直接替换文件即可,不过注意保持长宽比(不然会很难看的)。另外我感觉aspnet_client这个名字很可疑,可能有特殊的用途,诸如用于客户端的啥子东西,没有敢改名字:(

其中的ScriptBlock直接在FTB生成的Html页面里面加入内容,如上例就生成如下咚咚:

… = new FTBButton(… function(){myOpenFunc();} …)…

myOpenFunc()为调用此FTB控件页面上<script>内定义的函数。藉由此实现runat=server代码对于本机函数的调用,即通常所谓的Response.Write法。

另外,我还需要从本机函数调取runat=server中控件的属性。想了半天,找到了如下的不是办法的办法:

function myOpenFunc(){
var dt=eval('myForm.myDataTable');
var tempurl='../inc/uploadimg.aspx?tab=';
tempurl = tempurl+dt.value;
window.open(tempurl,'_uploadimg','width=300 height=50');
}

其中myForm、myDataTable分别为runat=server里面Form和DropDownList的Id名称,使得本机获得的html页面里的form和select的id为这二者,从而为本机函数的实现提供可能性。

在uploadimg.aspx中只需完成上传文件,调用opener.top.InsertText(…)方法传入图片地址即可,而在myOpenFunc()所在页面中定义InsertText方法完成插入。

b) 编辑区域:

编辑区域的实质,宝玉已经说得比较清楚了,其实就是一个document.designMode设为on的Iframe。因此可以方便的用本机函数进行各种编辑工作以及调用focus()获取焦点。

c) DropDownList的数据绑定:

由于需要,选定一个DropDownList后要对另外一个重新进行数据绑定,实现方式如下:

指定DropDownList的属性OnSelectedIndexChanged=”SelectionChangeFunc” AutoPostBack=”true”,SelectionChangeFunc会传送给一个delegate型别从而起到类似函数指针的作用。

void SelectionChangeFunc(Object sender, System.EventArgs e)
{
myDataClass.DataSource = CreateDataSource(...);
myDataClass.DataTextField = "TextField";
myDataClass.DataValueField = "ValueField";
myDataClass.DataBind();
myDataClass.SelectedIndex = 0;
}
ICollection CreateDataSource(…)
{
System.Data.DataTable myDt = new System.Data.DataTable();
myDt.Columns.Add(new System.Data.DataColumn("TextField", typeof(String)));
myDt.Columns.Add(new System.Data.DataColumn("ValueField", typeof(String)));
...
myDt.Rows.Add(CreateRow("…", "…", myDt));
...
System.Data.DataView myDv = new System.Data.DataView(dt);
return myDv;
}
System.Data.DataRow CreateRow(String Text, String Value, System.Data.DataTable dt)
{
System.Data.DataRow myDr = dt.NewRow();
dr[0] = Text;
dr[1] = Value;
return myDr;
}

d) DataGrid的CommandButton:

column字段:<asp:ButtonColumn HeaderText="Del Button"
Text="Del" CommandName="DelBtn" />

指定DataGrid属性OnItemCommand=”Grid_DelCommand”

通过Grid_DelCommand函数处理所有的CommandButton信息,而Grid_DelCommand函数只需根据CommandName指定的值选择操作即可。

void Grid_DelCommand(Object sender, DataGridCommandEventArgs e)
{
if(((LinkButton)e.CommandSource).CommandName == "DelBtn")
{
...
}
}

这里有两个问题:

其一,好像DataGrid被提交的时候也会调用此OnItemCommand函数,因为当时由于只有一个command,没有用if判断CommandName值的时候,一提交就要出错,而且是在这个函数里面出错的。所以建议就算只有一个command也用if后者select判断一下。

其二,我本来是把<asp:ButtonColumn>定义为“PushButton”的,但是在进行强制类型转换的时候没有找到相应的类型,不管是Button、PushButton都不对,所以只好换用默认的LinkButton才调试通过。

e) DataGrid的分页:

设置DataGrid的

AllowPaging=True
PagerStyle-Mode=NumericPages
PagerStyle-HorizontalAlign=Right
OnPageIndexChanged=”Change_Page_Index”属性

定义下列函数:

void Change_Page_Index(Object sender, DataGridPageChangedEventArgs e)
{
myDataGrid.CurrentPageIndex=e.NewPageIndex;
...
myDataGrid.DataBind();
}
void PagerButtonClick(Object sender, EventArgs e)
{
String arg = ((LinkButton)sender).CommandArgument;
switch(arg)
{
case ("next"):
if (myDataGrid.CurrentPageIndex < (myDataGrid.PageCount - 1))
myDataGrid.CurrentPageIndex ++;
break;
case ("prev"):
if (myDataGrid.CurrentPageIndex > 0)
myDataGrid.CurrentPageIndex --;
break;
case ("last"):
myDataGrid.CurrentPageIndex = (myDataGrid.PageCount - 1);
break;
default:
myDataGrid.CurrentPageIndex = Convert.ToInt32(arg);
break;
}
myDataGrid.DataBind();
}

这里注意的是换了页要重新DataBind()一下。

f) SQL:

不多说了,下面是我觉得常用的函数:

System.Data.DataSet MyQuery(String querystring)
{
String connectionString = @"...";
System.Data.IDbConnection dbConnection = new
System.Data.SqlClient.SqlConnection(connectionString);
System.Data.IDbCommand dbCommand = new
System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = querystring;
dbCommand.Connection = dbConnection;
System.Data.IDbDataAdapter dataAdapter = new
System.Data.SqlClient.SqlDataAdapter();
dataAdapter.SelectCommand = dbCommand;
System.Data.DataSet dataSet = new System.Data.DataSet();
dataAdapter.Fill(dataSet);
return dataSet;
}
int MyDelete(String delString)
{
String connectionString = @"...";
System.Data.IDbConnection dbConnection = new
System.Data.SqlClient.SqlConnection(connectionString);
System.Data.IDbCommand dbCommand = new
System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = delString;
dbCommand.Connection = dbConnection;
int rowsAffected = 0;
dbConnection.Open();
try
{
rowsAffected = dbCommand.ExecuteNonQuery();
}
finally
{
dbConnection.Close();
}
return rowsAffected;
}
int MyInsert(...)
{
String connString = "...";
System.Data.IDbConnection dbConnection = new
System.Data.SqlClient.SqlConnection(connString);
String queryString = "INSERT INTO [...]([...], ...) VALUES (";
queryString +="@..., ...)";
System.Data.IDbCommand dbCommand = new
System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = queryString;
dbCommand.Connection = dbConnection;
System.Data.IDataParameter dbParam_... = new
System.Data.SqlClient.SqlParameter();
dbParam_...ParameterName = "@...";
dbParam_...Value = ...;
dbParam_...DbType = System.Data.DbType.String;
dbCommand.Parameters.Add(dbParam_...);
...
int rowsAffected = 0;
dbConnection.Open();
try {
rowsAffected = dbCommand.ExecuteNonQuery();
}
finally {
dbConnection.Close();
}
return rowsAffected;
}

10、 其他点点滴滴:

a) 去掉图片加链接后外包框:

<img border=0>

b) 去掉IE图片悬停工具栏:

<img galleryimg=”no”>或者<meta http-equiv="imagetoolbar" content="no">

c) 去掉链接点击后的虚线:

<a href="…" onFocus="this.blur()"></a>

d) 使iframe自适应长宽:

<iframe src="..."
onload="this.height =
this.document.body.offsetHeight;this.width=this.document.body.offsetWidth;">
</iframe>

另外千万注意不要漏了</iframe>,网页被撑开了,我查了半天才发现是这个原因。

e) 连续滚动:

一般的marquee会两次滚动间会有一段时间的空白,采用此处的代码可以使得其连续滚动。

上面这些就是这个网站的点点滴滴,没有什么技术含量,只是写篇乱纪,以标明这个颓废的寒假。

绚色你的生活

# DO NOT EDIT THIS FILE! It was created by Ethereal
@[email protected] eq 80 or tcp.port eq 443@[22328,55704,24713][65083,65535,42083]
@[email protected] eq 53 or udp.port eq 53@[63477,65535,101][0,32767,0]
@Bad [email protected] or icmp@[0,0,0][57311,25186,25957]
@Microsoft@smb or nbns@[0,5080,65535][65535,65535,65535]
@IPX@ipx@[60652,0,1542][65535,65535,65535]
@DHCP@bootp@[39064,15934,40863][65535,65535,65535]
@Intel ANS probes@ans@[56173,56173,56173][0,0,0]
@Background Noise@stp or arp or eth.dst eq ff:ff:ff:ff:ff:ff@[65535,65535,65535][26214,26214,26214]
炫色1

# DO NOT EDIT THIS FILE! It was created by Ethereal
@httptcp@ tcp.srcport == 80 or tcp.dstport == 80@[38385,62683,65534][0,0,0]
@DNS@dns@[19194,65534,32100][0,0,0]
@ARP@arp@[65202,65533,24456][0,0,0]
@icmp@icmp@[65534,8609,6712][0,0,0]
@STP@stp@[65534,65534,65534][8262,42200,9408]
@[email protected] == 139 or tcp.dstport == 139 or tcp.srcport == 138 or tcp.dstport == 138 or tcp.srcport == 137 or tcp.dstport == 137 or udp.srcport == 139 or udp.dstport == 139 or udp.srcport == 138 or udp.dstport == 138 or udp.srcport == 137 or udp.dstport == 137@[7961,5947,65534][64045,65535,62556]
@smtp@ tcp.srcport == 25 or tcp.dstport == 25@[65534,10208,51170][62059,62059,62059]
@pop@ tcp.srcport == 110 or tcp.dstport == 110@[65534,7268,54440][0,0,0]
@nntp@nntp@[49886,47154,63549][992,992,992]
@snmp@snmp@[62556,52730,2142][7636,32644,64045]
@igmp@igmp@[45944,5999,65534][0,0,0]
@telnet@ tcp.srcport == 23 or tcp.dstport == 23@[9274,47661,3862][0,0,0]
@tftp@tftp@[59220,3637,65534][0,0,0]
@ftp@ftp@[62721,6393,65534][0,13490,65038]
@Q931@q931@[14275,65534,25039][0,0,0]
@rsvp@rsvp@[60324,7655,65534][63348,65535,9481]
@CMIP@ udp.srcport == 164 or udp.dstport == 164@[47957,9122,9122][60977,63600,0]
@tcp@tcp@[40555,49091,65534][0,0,0]
@udp@udp@[39040,49264,65534][64542,64542,64542]
炫色2

# DO NOT EDIT THIS FILE! It was created by Ethereal
@Linksys [email protected] contains 00:04:5A || eth.addr contains 00:06:25 || eth.addr contains 00:0C:41 || eth.addr contains 00:0F:66@[65535,50372,0][0,0,0]
@d-Link [email protected] contains 00:05:5D || eth.addr contains 00:0D:88 || eth.addr contains 00:0F:3D || eth.addr contains 00:00:50:BA || eth.addr contains 00:80:C8@[65535,50372,0][0,0,0]
@Netgear [email protected] contains 00:09:5B@[65535,50372,0][0,0,0]
@Unwanted Protocals@spx || ipx || aarp || aim@[65535,65535,65535][65535,0,0]
@SpanningTree Topology [email protected] == 0x80@[0,0,0][65535,63222,0]
@HSRP state change@ hsrp.state != 8 && hsrp.state != 16@[0,0,0][65535,63222,0]
@ospf state change@ ospf.msg != 1@[0,0,0][65535,63222,0]
@MS Master Browser [email protected]@[62965,63222,42148][65535,0,0]
@NW [email protected] || cdp || hsrp || vrrp || ospf || bgp || eigrp || rip || rtmp || eth.addr == 01:00:0c:cc:cc:cc@[43573,39932,39932][0,0,0]
@IP Time-to-Live < [email protected] < 5@[63736,26728,34952][0,0,0] @TCP [email protected]@[63736,26728,34952][0,0,0] @Bad IP [email protected]_bad@[63736,26728,34952][65535,65535,65535] @Bad UDP [email protected]_bad@[63736,26728,34952][65535,65535,65535] @Bad TCP [email protected]_bad@[63736,26728,34952][65535,65535,65535] @TCP Seg [email protected]@[63736,26728,34952][65535,65535,65535] @TCP Seg [email protected]@[63736,26728,34952][65535,65535,65535] @TCP Long Frag [email protected]@[63736,26728,34952][65535,65535,65535] @[email protected] & 0x02@[36663,59478,37540][607,3474,607] @[email protected] & 0x04@[61717,47055,24609][0,0,0] @[email protected] & 0x01@[56433,42925,57086][0,0,0] @HTTP@http@[30428,62589,62589][0,0,0] @TCP@tcp@[57455,60592,62451][0,0,0] @UDP@udp@[52264,63736,63736][0,0,0] @arp@arp@[65140,65535,49151][0,2987,65535] 炫色3

选一款喜欢的,然后开始绚色生活吧!
不过要是阿梅能帮忙配配色就更好了,呵呵!(题外)

FeedDemon醒目

FeedDemon是一款Blog阅读工具,主要特点:

1.使用简便,易学易上手
2.更加明了的显示更新
3.帅气…ft…
4.看UESTC的新闻,可是顶呱呱的哦…
http://www.news.uestc.edu.cn/RSS.aspx
5.群组报纸,把新的内容整合为一张报纸,一目了然
6.过滤器,比如不想看到XX的…就可以…
7.回复、管理、看回复都是直接从FeedDemon的浏览器点击标题访问Blog页面进行(依然在FeedDemon内部,所以还是一般拉,实在不行就用WBEditor),不是很方便。
不过以上这个缺点经过一段时间的使用,会渐渐适应(比如我),如今FeedDemon越用越顺手了,特此强烈推荐:

在154的ftp的soft提供下载,好不容易才找到破解哦…
目前已更新为最新版本1.10

相关连接:
http://www.feeddemon.com

下面是其介绍:

Simplify the way you read the web!
FeedDemon enables you to quickly read and gather information from hundreds of web sites – without having to visit them. Don’t

waste any more time checking your favorite web sites for updates. Instead, use FeedDemon and make them come to you.

FeedDemon makes RSS/Atom feeds as easy to access as your email.

Pre-configured with dozens of popular feeds, so you can start using it right away
Newspaper displays news items from dozens of sites in a single web page for easy reading
Watches collect news items containing specific words or phrases, alerting you to items of interest so you don’t have to look

for them
News Bins store your favorite news items for future reference
Integration with Feedster and other popular RSS search engines
Built-in tabbed browser for surfing the web within FeedDemon
Support for Atom 0.3 and all versions of RSS
Easy to use for beginners, yet powerful enough to please the most sophisticated news junkie
FeedDemon is a native Windows application, so it runs fast and does NOT require the bulky .NET runtime.

FeedDemon™ 1.10 Release Notes
Copyright © 2003-2004 Bradbury Software, LLC
Build date: June 3, 2004
What’s New in FeedDemon 1.10
Added: Basic support for Atom 0.3 feeds
Added: “Update All Channel Groups” (Shift+Ctrl+F5) added to Tools > Update menu
Added: Search box added to channel bar, which enables searching downloaded news items in the current group or all groups.

Right clicking on the search results displays a context menu which includes options to convert the search results to a watch

or a news bin.
Added: Web search added to browser toolbar
Added: Generic “Date” column to news item list, which contains pubDate if it exists, received date otherwise. This new column

is the only date column shown by default – both the “received” and “published” columns are hidden. This also affects the

default sorting and grouping (both are now set to the generic date), which may change how you’re used to seeing news items

sorted.
Added: The “Group By” selection now enables grouping news items by title. Items with the same title, or items with the same

title preceeded by RE:, are grouped together. Use this along with the new “Forum” style when browsing feeds generated from

newsgroups or online forums.
Added: Support for IE’s form auto-completion inside FeedDemon’s browser
Added: Shift+Ctrl+H shortcut for “hide read news items.” Note that you’ll need to assign this shortcut yourself if you

previously customized FeedDemon’s shortcuts.
Added: “Match all keywords” option added to watches. When enabled, only news items containing all keywords will be matched.
Added: After creating a watch channel, you are now asked if you’d like to run the watch on existing news items
Added: Support for the “feed URI scheme” (feed:// protocol). At startup, FeedDemon prompts to make it the default aggregator

if it’s not the registered application for the feed protocol. This prompt may be disabled on the General tab in Options.
Added: Double-clicking a news item now browses to its link. If you have “Open external links in default browser” selected,

this will launch the page in your default browser, otherwise it will show in FeedDemon. If is held down, the opposite

will occur.
Added: “Forum” newspaper style
Added: “Mega” newspaper styles (3)
Added: “Popbox” newspaper styles (2)
Added: “Nightfall” newspaper style
Added: “Manage cache” added to File menu, which enables moving FeedDemon’s cache folder
Added: Support for XP SP2’s local machine zone lockdown
Added: FeedDemon now enables drag-and-drop of URLs onto its main window. If the URL is a newsfeed, then FeedDemon will show

the “New Channel” wizard; if it’s an OPML file, it will show the “New Group” wizard; otherwise, it will navigate to that URL

in the integrated browser.
Added: Drag-and-drop reordering of channel bar groups
Added: Desktop alert can now be dragged
Added: “Show validation errors in new channels” added to General page in Options. When this is enabled (which it is by

default), FeedDemon will check new channels for well-formedness and display an error dialog if any problems are found. This

dialog includes a link to the Feed Validator, so authors can check their feeds for additional problems. Note that this dialog

doesn’t prevent subscribing to a feed – it simply warns that the feed contains errors which might affect how FeedDemon

displays it.
Added: FeedDemon’s popup blocker can now be overridden by holding down
Added: Support for BlogJet, BlogWizard and ecto (1.0 RC4 or later) as “BlogThis” tools
Added: Timeout setting added to connection options
Added: “Import OPML File” added to File menu (this was possible in 1.0, but wasn’t explicit)
Changed: The default newspaper filter is now “Unread News” instead of “Today’s News”
Changed: The default value for automatically marking items as read has changed from five seconds to three seconds
Changed: The cleanup wizard now remembers your selections
Changed: Hiding the filter bar now removes the keyword filter
Changed: The max # of channels per group has been increased from 500 to 999
Changed: Rearranged browser-related toolbuttons to accomodate new “Web Search”
Changed: Removed “View address bar” (address bar is now always visible)
Changed: In previous releases the newspaper filter would be hidden when not applicable, but now it’s simply disabled
Changed: When a channel fails to update due to a connection problem (404, etc.), the error icon is no longer removed after

clicking it in the channel bar
Changed: Pressing Enter while typing keywords into a watch now adds the current entry to the list of keywords
Changed: The collapsed/expanded state of channel bar groups is now retained
Changed: The system tray “info balloon” has been replaced with an Outlook-style desktop alert
Changed: Trial version now allows 20 days rather than 30 uses
Changed: OPML files that are missing type=”rss” are still imported, so long as each outline node uses the xmlUrl attribute.
Fixed: Cleanup wizard fails to remove news items
Fixed: “CDATA error” in newspaper with feeds containing a null (hex 00) character
Fixed: EOF error when showing newspaper if cache folder contains a single quote or ampersand
Fixed: News item sort order not retained
Fixed: Auto-discovery shows incorrect newsfeed URL when browsing pages which contain Google AdSense ads
Fixed: Local feeds are always re-parsed even when they haven’t been modified since the last update
Fixed: If a channel is deleted, the summary will contain a “ghost” of that channel if FeedDemon is abnormally shutdown
Fixed: Read items sporadically being marked as unread
Fixed: Double-clicking a news item when the preview is hidden doesn’t re-display the preview
Fixed: Newspaper filter dropdown doesn’t appear after moving cache to a UNC folder
Fixed: Current news item doesn’t appear in browser after clicking splitter to unhide the browser
Fixed: Search channels extend beyond height of “New Search Channel” dialog
Fixed: Access violation when clicking newspaper filter selection immediately after typing a URL in the address bar
Fixed: IntelliPoint 4.x “Scroll one page at a time” (WHEEL_PAGESCROLL) not supported in news item list
Fixed: Watches fail to treat the | character as a word delimiter when matching whole words only
Fixed: Channel bar hints show last update date/time as GMT instead of local date/time
Fixed: FeedDemon fails to detect the in OPML files whose titles are contained in CDATA sections<br /> Fixed: Favorites menu incorrectly draws items containing an ampersand<br /> Fixed: FeedDemon resets the language the first time a new beta is started, but the welcome wizard still shows the previously</p> <p>-selected language<br /> Fixed: FeedDemon incorrectly handles OPML links which use the feed:// protocol<br /> Fixed: Hiding browser leaves browser toolbar showing<br /> Fixed: Feeds with line feeds in their titles can’t be added<br /> Fixed: Back/forward buttons aren’t correctly handled with all mouse drivers<br /> Fixed: Double-clicking system tray icon when alert is showing doesn’t bring FeedDemon to the front<br /> Fixed: Address bar shows incorrect URL after prolonged use with multiple browser tabs<br /> Fixed: After right-clicking on empty browser tab to show context menu, context menu appears again when left-clicking anywhere</p> <p>else<br /> Fixed: Single key reading with spacebar doesn’t work with search results<br /> Fixed: Items in search results don’t show their source channel name in FeedDemon’s newspaper<br /> Fixed: Channel bar context menu doesn’t display when clicking a group caption<br /> Fixed: Title not extracted from entries in Atom feeds<br /> Fixed: Search box disappears after clicking “Search” button with no search keyword specified<br /> Fixed: Context menu doesn’t appear when right-clicking on search textbox<br /> Fixed: Group captions in the channel bar always use MS Sans Serif font<br /> Fixed: Clicking a feed validator link displays the “New Channel” wizard<br /> Fixed: Refresh toolbutton fails to refresh the browser when viewing an external site<br /> Fixed: pipe characters in channel names cause channel bar tooltip to be truncated<br /> Fixed: When current month is January, the “Last month” filter fails to show news items published in December. Likewise, the</p> <p>“Last week” filter fails to show items published the last week of December when it’s currently the first week in January.<br /> Fixed: Max HTTP connections setting (Tools > Options > Connection) doesn’t register keyboard input<br /> Fixed: Synchronize with OPML doesn’t show or use htmlUrl, causing channel <link> to be left empty<br /> Fixed: Synchronize with OPML always considers newsfeed URLs containing & as new<br /> Fixed: When using XP’s classic theme, or when running on a version of Windows prior to XP, the channel bar and the news item</p> <p>list use different scrollbar styles<br /> Fixed: When creating a new channel group, the OPML URL is always set to the same URL as the last time the dialog was shown,</p> <p>regardless of whether a URL is in the clipboard<br /> Fixed: Channel properties shows overlapped text on large font displays<br /> Fixed: Deleting a channel group fails with read-only OPML files<br /> Fixed: Resizing main window causes browser splitter to jump to right side<br /> Fixed: Web pages that use JavaScript to resize themselves or hide their scrollbars may display incorrectly in FeedDemon<br /> Fixed: Garbage in status bar and other UI elements on Japanese Windows<br /> Fixed: FeedDemon doesn’t restore from a minimized window when called by another application</p> <p>——————————————————————————–</p> <p>Known Issues<br /> FeedDemon’s date calculations are ISO 8601 compliant, which means that they treat Monday as the first day of the week. As a</p> <p>result, grouping news items by date may show Sunday of the current week as “Last Week.”<br /> Although FeedDemon supports Unicode (see below), Unicode characters in channel titles may not display correctly in</p> <p>FeedDemon’s channel bar.<br /> Since Windows 98 and Windows ME don’t fully support Unicode, FeedDemon must be run on Windows 2000, Windows XP or Windows</p> <p>2003 for it to correctly display Unicode newsfeeds.<br /> In rare cases, JavaScript bugs in Web pages may result in FeedDemon displaying a “Floating point exception” error message.</p> <p>This error message may prevent these pages from being displayed in FeedDemon’s browser, but it is otherwise harmless.<br /> FeedDemon internally maps elements in Atom feeds to RSS, so features of Atom newsfeeds that aren’t available in RSS may not</p> <p>be supported.<br /> Technical Support<br /> Please refer to the following online resources for the latest technical support information:<br /> Support Home – http://www.bradsoft.com/support/<br /> Frequently Asked Questions (FAQ) – http://www.bradsoft.com/support/faq/<br /> Support Forums – http://www.bradsoft.com/forums/<br /> Minimum System Requirements<br /> 300MHz PC running Windows 98, ME, 2000, XP or 2003<br /> Internet Explorer 6<br /> 64MB RAM or OS minimum (whichever is greater)</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="byline"><span class="author vcard"><img alt='' src='https://secure.gravatar.com/avatar/035e731108bff041628485895106672c?s=49&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/035e731108bff041628485895106672c?s=98&d=mm&r=g 2x' class='avatar avatar-49 photo' height='49' width='49' loading='lazy' decoding='async'/><span class="screen-reader-text">作者 </span> <a class="url fn n" href="https://blog.axqd.net/?author=1">axqd</a></span></span><span class="posted-on"><span class="screen-reader-text">发布于 </span><a href="https://blog.axqd.net/?p=320" rel="bookmark"><time class="entry-date published updated" datetime="2004-06-25T17:34:09+08:00">2004-06-25</time></a></span><span class="cat-links"><span class="screen-reader-text">分类 </span><a href="https://blog.axqd.net/?cat=6" rel="category">挨踢技术</a></span><span class="tags-links"><span class="screen-reader-text">标签 </span><a href="https://blog.axqd.net/?tag=design" rel="tag">design</a>、<a href="https://blog.axqd.net/?tag=feed-daemon" rel="tag">feed-daemon</a></span><span class="comments-link"><a href="https://blog.axqd.net/?p=320#comments"><span class="screen-reader-text">FeedDemon醒目</span>有3条评论</a></span> </footer><!-- .entry-footer --> </article><!-- #post-320 --> </main><!-- .site-main --> </div><!-- .content-area --> <aside id="secondary" class="sidebar widget-area"> <section id="calendar-2" class="widget widget_calendar"><div id="calendar_wrap" class="calendar_wrap"><table id="wp-calendar" class="wp-calendar-table"> <caption>2024年 3月</caption> <thead> <tr> <th scope="col" title="星期一">一</th> <th scope="col" title="星期二">二</th> <th scope="col" title="星期三">三</th> <th scope="col" title="星期四">四</th> <th scope="col" title="星期五">五</th> <th scope="col" title="星期六">六</th> <th scope="col" title="星期日">日</th> </tr> </thead> <tbody> <tr> <td colspan="4" class="pad"> </td><td>1</td><td>2</td><td>3</td> </tr> <tr> <td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td> </tr> <tr> <td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td> </tr> <tr> <td>18</td><td id="today">19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td> </tr> <tr> <td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td>31</td> </tr> </tbody> </table><nav aria-label="上个月及下个月" class="wp-calendar-nav"> <span class="wp-calendar-nav-prev"><a href="https://blog.axqd.net/?m=202211">« 11月</a></span> <span class="pad"> </span> <span class="wp-calendar-nav-next"> </span> </nav></div></section><section id="categories-2" class="widget widget_categories"><h2 class="widget-title">分类目录</h2><nav aria-label="分类目录"> <ul> <li class="cat-item cat-item-14"><a href="https://blog.axqd.net/?cat=14">.NET框架</a> </li> <li class="cat-item cat-item-8"><a href="https://blog.axqd.net/?cat=8">Apple</a> </li> <li class="cat-item cat-item-15"><a href="https://blog.axqd.net/?cat=15">Flash</a> </li> <li class="cat-item cat-item-11"><a href="https://blog.axqd.net/?cat=11">Microsoft</a> </li> <li class="cat-item cat-item-12"><a href="https://blog.axqd.net/?cat=12">Office</a> </li> <li class="cat-item cat-item-13"><a href="https://blog.axqd.net/?cat=13">WEB</a> </li> <li class="cat-item cat-item-5"><a href="https://blog.axqd.net/?cat=5">心情日记</a> </li> <li class="cat-item cat-item-6"><a href="https://blog.axqd.net/?cat=6">挨踢技术</a> </li> <li class="cat-item cat-item-7"><a href="https://blog.axqd.net/?cat=7">潜意识流</a> </li> <li class="cat-item cat-item-3"><a href="https://blog.axqd.net/?cat=3">生活点滴</a> </li> <li class="cat-item cat-item-9"><a href="https://blog.axqd.net/?cat=9">网络</a> </li> <li class="cat-item cat-item-10"><a href="https://blog.axqd.net/?cat=10">自由世界</a> </li> <li class="cat-item cat-item-4"><a href="https://blog.axqd.net/?cat=4">道听途说</a> </li> </ul> </nav></section><section id="archives-2" class="widget widget_archive"><h2 class="widget-title">归档</h2><nav aria-label="归档"> <ul> <li><a href='https://blog.axqd.net/?m=202211'>2022年11月</a></li> <li><a href='https://blog.axqd.net/?m=202102'>2021年2月</a></li> <li><a href='https://blog.axqd.net/?m=202101'>2021年1月</a></li> <li><a href='https://blog.axqd.net/?m=202012'>2020年12月</a></li> <li><a href='https://blog.axqd.net/?m=202004'>2020年4月</a></li> <li><a href='https://blog.axqd.net/?m=201905'>2019年5月</a></li> <li><a href='https://blog.axqd.net/?m=201709'>2017年9月</a></li> <li><a href='https://blog.axqd.net/?m=201704'>2017年4月</a></li> <li><a href='https://blog.axqd.net/?m=201612'>2016年12月</a></li> <li><a href='https://blog.axqd.net/?m=201512'>2015年12月</a></li> <li><a href='https://blog.axqd.net/?m=201508'>2015年8月</a></li> <li><a href='https://blog.axqd.net/?m=201107'>2011年7月</a></li> <li><a href='https://blog.axqd.net/?m=201105'>2011年5月</a></li> <li><a href='https://blog.axqd.net/?m=201101'>2011年1月</a></li> <li><a href='https://blog.axqd.net/?m=201012'>2010年12月</a></li> <li><a href='https://blog.axqd.net/?m=201011'>2010年11月</a></li> <li><a href='https://blog.axqd.net/?m=201010'>2010年10月</a></li> <li><a href='https://blog.axqd.net/?m=201009'>2010年9月</a></li> <li><a href='https://blog.axqd.net/?m=201008'>2010年8月</a></li> <li><a href='https://blog.axqd.net/?m=201007'>2010年7月</a></li> <li><a href='https://blog.axqd.net/?m=201006'>2010年6月</a></li> <li><a href='https://blog.axqd.net/?m=201005'>2010年5月</a></li> <li><a href='https://blog.axqd.net/?m=201004'>2010年4月</a></li> <li><a href='https://blog.axqd.net/?m=201003'>2010年3月</a></li> <li><a href='https://blog.axqd.net/?m=201002'>2010年2月</a></li> <li><a href='https://blog.axqd.net/?m=201001'>2010年1月</a></li> <li><a href='https://blog.axqd.net/?m=200912'>2009年12月</a></li> <li><a href='https://blog.axqd.net/?m=200911'>2009年11月</a></li> <li><a href='https://blog.axqd.net/?m=200910'>2009年10月</a></li> <li><a href='https://blog.axqd.net/?m=200909'>2009年9月</a></li> <li><a href='https://blog.axqd.net/?m=200908'>2009年8月</a></li> <li><a href='https://blog.axqd.net/?m=200905'>2009年5月</a></li> <li><a href='https://blog.axqd.net/?m=200904'>2009年4月</a></li> <li><a href='https://blog.axqd.net/?m=200902'>2009年2月</a></li> <li><a href='https://blog.axqd.net/?m=200901'>2009年1月</a></li> <li><a href='https://blog.axqd.net/?m=200812'>2008年12月</a></li> <li><a href='https://blog.axqd.net/?m=200808'>2008年8月</a></li> <li><a href='https://blog.axqd.net/?m=200807'>2008年7月</a></li> <li><a href='https://blog.axqd.net/?m=200805'>2008年5月</a></li> <li><a href='https://blog.axqd.net/?m=200804'>2008年4月</a></li> <li><a href='https://blog.axqd.net/?m=200803'>2008年3月</a></li> <li><a href='https://blog.axqd.net/?m=200802'>2008年2月</a></li> <li><a href='https://blog.axqd.net/?m=200711'>2007年11月</a></li> <li><a href='https://blog.axqd.net/?m=200710'>2007年10月</a></li> <li><a href='https://blog.axqd.net/?m=200707'>2007年7月</a></li> <li><a href='https://blog.axqd.net/?m=200706'>2007年6月</a></li> <li><a href='https://blog.axqd.net/?m=200705'>2007年5月</a></li> <li><a href='https://blog.axqd.net/?m=200704'>2007年4月</a></li> <li><a href='https://blog.axqd.net/?m=200703'>2007年3月</a></li> <li><a href='https://blog.axqd.net/?m=200702'>2007年2月</a></li> <li><a href='https://blog.axqd.net/?m=200701'>2007年1月</a></li> <li><a href='https://blog.axqd.net/?m=200612'>2006年12月</a></li> <li><a href='https://blog.axqd.net/?m=200611'>2006年11月</a></li> <li><a href='https://blog.axqd.net/?m=200610'>2006年10月</a></li> <li><a href='https://blog.axqd.net/?m=200609'>2006年9月</a></li> <li><a href='https://blog.axqd.net/?m=200608'>2006年8月</a></li> <li><a href='https://blog.axqd.net/?m=200607'>2006年7月</a></li> <li><a href='https://blog.axqd.net/?m=200606'>2006年6月</a></li> <li><a href='https://blog.axqd.net/?m=200605'>2006年5月</a></li> <li><a href='https://blog.axqd.net/?m=200604'>2006年4月</a></li> <li><a href='https://blog.axqd.net/?m=200603'>2006年3月</a></li> <li><a href='https://blog.axqd.net/?m=200602'>2006年2月</a></li> <li><a href='https://blog.axqd.net/?m=200512'>2005年12月</a></li> <li><a href='https://blog.axqd.net/?m=200511'>2005年11月</a></li> <li><a href='https://blog.axqd.net/?m=200510'>2005年10月</a></li> <li><a href='https://blog.axqd.net/?m=200509'>2005年9月</a></li> <li><a href='https://blog.axqd.net/?m=200508'>2005年8月</a></li> <li><a href='https://blog.axqd.net/?m=200507'>2005年7月</a></li> <li><a href='https://blog.axqd.net/?m=200506'>2005年6月</a></li> <li><a href='https://blog.axqd.net/?m=200505'>2005年5月</a></li> <li><a href='https://blog.axqd.net/?m=200504'>2005年4月</a></li> <li><a href='https://blog.axqd.net/?m=200503'>2005年3月</a></li> <li><a href='https://blog.axqd.net/?m=200502'>2005年2月</a></li> <li><a href='https://blog.axqd.net/?m=200501'>2005年1月</a></li> <li><a href='https://blog.axqd.net/?m=200412'>2004年12月</a></li> <li><a href='https://blog.axqd.net/?m=200411'>2004年11月</a></li> <li><a href='https://blog.axqd.net/?m=200410'>2004年10月</a></li> <li><a href='https://blog.axqd.net/?m=200409'>2004年9月</a></li> <li><a href='https://blog.axqd.net/?m=200408'>2004年8月</a></li> <li><a href='https://blog.axqd.net/?m=200407'>2004年7月</a></li> <li><a href='https://blog.axqd.net/?m=200406'>2004年6月</a></li> <li><a href='https://blog.axqd.net/?m=200405'>2004年5月</a></li> </ul> </nav></section><section id="linkcat-2" class="widget widget_links"><h2 class="widget-title">同学</h2> <ul class='xoxo blogroll'> <li><a href="http://blog.sina.com.cn/dominicren/" rel="friend met noopener" target="_blank">任毅</a></li> <li><a href="http://www.pannyluo.cn/" rel="friend met noopener" target="_blank">罗光艳</a></li> </ul> </section> <section id="linkcat-184" class="widget widget_links"><h2 class="widget-title">资源</h2> <ul class='xoxo blogroll'> <li><a href="http://blog.axqd.net/comments/feed/">Comment RSS</a></li> <li><a href="http://blog.axqd.net/feed/" rel="noopener" target="_blank">Entire RSS</a></li> <li><a href="http://validator.w3.org/check/referer">XHTML Validator</a></li> </ul> </section> <section id="meta-3" class="widget widget_meta"><h2 class="widget-title">其他操作</h2><nav aria-label="其他操作"> <ul> <li><a href="https://blog.axqd.net/wp-login.php">登录</a></li> <li><a href="https://blog.axqd.net/?feed=rss2">条目feed</a></li> <li><a href="https://blog.axqd.net/?feed=comments-rss2">评论feed</a></li> <li><a href="https://cn.wordpress.org/">WordPress.org</a></li> </ul> </nav></section> </aside><!-- .sidebar .widget-area --> </div><!-- .site-content --> <footer id="colophon" class="site-footer"> <div class="site-info"> <span class="site-title"><a href="https://blog.axqd.net/" rel="home">碧云涛小屋</a></span> <a href="https://cn.wordpress.org/" class="imprint"> 自豪地采用WordPress </a> </div><!-- .site-info --> </footer><!-- .site-footer --> </div><!-- .site-inner --> </div><!-- .site --> </body> </html> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>