一惊一诈
2008-08-25今天白天状态不大对劲,感觉提不起神来。 实际操作的过程中,数据写入不完整,即每次只写入了前4条记录,然后就写不进了。
下午在写一个超简单的控制台程序,
只是将数据从SqlServer中导出为CSV
for(......)
{
using(StreamWriter sw = new (..))
{
sw.WriteLine(xx);
//Consolse.WriteLine(xx);
}
}
打开文本文件发现数据根本没写完,
但控制台中Consolse.WriteLine却又是能输入的,说明数据是存在的。
为什么sw.WriteLine无法写入文本呢...
对着这段代码发了半天呆.....
猛地想起sw.Flush()方法...
StreamWriter.Flush 方法
清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。
于是加上sw.Flush(),成功。
发现脑子不大灵光了,难道是昨天晚上没有休息好的原因?
直到现在仍然心有余悸,至今分不清是梦境还是现实:
睡着睡着忽然醒过来,
睁开眼睛发现有一只虫子(也许是小强),从我身上掠过,
当我伸出后想去处理掉它时,它已经消失得无影无踪了。
后来就一直没睡好,一直想着床边的那只小强。
5点左右开始打雷,下雨......
百合
2008-08-24不记得从何时起开始爱上百合的
记忆里第一次买百合是在05年,当时在武汉卓刀泉花市,只有我和Apple二人。
当然,那时的我们不像现在这样。
准确地说是我对她有好感,经过花市,就进去买了几束百合。
Apple没想到我是买来送她的,记得当时她吃一惊,用报纸小心翼翼地将那几束百合包好,非常谨慎地踏上公交车。
后来得知,她回到宿舍后实在找不到花瓶,于是用暖水壶代替花瓶。
一晃3年了,我和Apple还是那么地钟爱百合,钟爱着百合的清香与淡雅。
近期回顾
2008-08-231、工作上没有以前那么忙了,项目已成功上线并处于试运营阶段。
2、未来丈母娘来上海二周,买了二周的菜,洗了二周的衣服,做了二周的家务,还病了一场,于今天上午送上去石家庄的火车。
3、家里被未来丈母娘整理后,有些东西我自己都不知道该去哪找了。
4、整理已前买过的书,发现90%的书可以按定价50%转手,有需要的朋友可以留言,主要是.net方向。
5、二根DDR2 533 512M台式机内存可转手,二根DDR2 667 512M笔记本内存可转手。
6、生活进入正常状态,以后尽量每天一博,当然不是做为任务完成。
7、psp无法播放mp4文件,考虑是不是进行升级。
使table也能overflow:hidden
2008-08-12overflow用在div上时很好用,但直接用在td上,好像没有任何效果。
td中的文本过长时依然自动换了一行
像下面这要设定一下就行了
Visual Studio 2008 Service Pack 1 Release
2008-08-12真是个好消息
刚出Beta版时就流口水了
快速详细信息
文件名: VS2008SP1CHSX1512981.iso
版本: SP1
发布日期: 2008/8/11
语言: 简体中文
下载大小: 898.1 MB
http://download.microsoft.com/download/1/9/d/19d22169-a4b2-455f-8c28-ed137bd91487/VS2008SP1CHSX1512981.iso
这个iso也太大了,898M,囧~~~
暖暖
2008-08-08不止一次提到“暖暖”了
第一次提到“暖暖”是指梁静茹的那首曲子
这次提到“暖暖”是来自内心与物质之间的强烈交汇
未来的丈母娘于昨日上午按时抵达上海,我和Apple都去接车了。
来时手里拎了一大包,背上还背了一个双肩大背包,那包还真够沉的。
乘地铁时恰逢上班高峰期,在人民广场站我被活生生地从门口挤出来,与她们母女俩分坐二班地铁-_-
到家后清理行李,找到一件毛衣和一条毛裤,Apple说:这是你的,我妈织的。
听后,我心里满是一阵感动,这次的感动比上次丈母娘给我买了一条裤子要强烈10倍,不!100倍!
公司事情比较多,只得于昨天13:00到公司工作。
走时,她休息了。
Apple说,就让她睡会,一晚上的火车肯定没休息好。
没想到,下午2:30就起来了,起来后就开始做家务 – -
咳~
周末好好陪她逛逛上海,当然,也会好好对待Apple ^_^
另外,b4一下中国银行:
话说上次在招商银行给房东前后二次转帐未到之后,房东尽全力通过各种渠道追这笔钱的下落,最后发现,这二笔钱打在她名下的另一个基本上不用的户头里。我想不通了:我填了正确的户名,正确的帐号,范围稍大的开户行:上海分行,怎么就会打到同名下的另一个帐户了…
天干物燥,小心上火
2008-08-01一季度的交房租日子已来临
先后在招商银行专业网银上向房东帐户进行转帐,房东帐号是中国银行的。
转帐二笔,共计5100元人民币。
十分钟前房东打来电话,说没有收到钱,一分都没有。
我昏~~
赶紧打了95555,转到人工还颇费一番工夫。
银行查询确实有二笔转帐记录,一再让我确认对方的帐号、户名是否正确。
输帐号、户名这种事情会不小心么。
对方无奈,让我再等二天。
等二天?我第一笔是7-21打过去,今天都没收到,这不是一、二天了。。。
看来,我得亲自去一趟银行了。
咳,当时图方便,不想跑银行,才想网上转帐,没想到出这档子事。
好不容易盼到公司调薪
工资单发放之后让我大跌眼镜
增加的那部份刚好用作住房公积金给交了!
我很不解,
我的公积金帐号都没我销户取现了,还能交?
当时销户时,公积金运用中心的工作人员一再让我确认是否一定要销户,
销户后就再也无法再开户了。
这一点我记得很清楚!
拨打外服的电话,答:针对我这种情况,可能会重新再开户!
Shit!
天热了,小心上火
浅谈BlogEngine扩展机制的实现
2008-07-29以前写过一个针对于Blogengine的Mp3播放器扩展
在Blogengine里,每一个扩展的Class都必须有Extension标记
ExtensionAttribute是一个密封类,继承自System.Attribute,System.Attribute没有任何实现,只是一个标记而已。
ExtensionAttribute类的代码:
[AttributeUsage(AttributeTargets.Class)] //指明该Attrubite只能应用于Class上
public sealed class ExtensionAttribute : System.Attribute
{
/// <summary>
/// Creates an instance of the attribute and assigns a description.
/// </summary>
public ExtensionAttribute(string description, string version, string author)
{
_Description = description;
_Version = version;
_Author = author;
}
private string _Description;
/// <summary>
/// Gets the description of the extension.
/// </summary>
public string Description
{
get { return _Description; }
}
private string _Version;
/// <summary>
/// Gets the version number of the extension
/// </summary>
public string Version
{
get { return _Version; }
}
private string _Author;
/// <summary>
/// Gets the author of the extension
/// </summary>
public string Author
{
get { return _Author; }
}
}
这个类非常之简单,只是一些描述性的信息,如作者、版本、描述等。 mp3player就是一个针对于Post的扩展了。 foreach (Type type in types) 到这里很明了了,扩展类决定于它有没有打Extension标记,是否创建实例取决于该扩展有没有被启用.
到这里,ExtensionAttribute类就可以应用在任何一个Class上了
看看mp3player.cs
/// <summary>
/// 增加flashMp3播放器
/// </summary>
[Extension("mp3 player", "1.0.0.0", "lemongtree.com")] //此处给mp3player类打上Extension标记
public class mp3player
{
public mp3player()
{
Post.Serving += new EventHandler<ServingEventArgs>(Post_Serving);
}
private void Post_Serving(object sender, ServingEventArgs e)
{
//此处略过
}
}
有朋友可能会问了:mp3player这个在什么时候实例化的呢?或是我如何得知这个扩展是不是Enable的呢?
整个实例化的过程在global.asax的Application_Start事件中
Assembly a = Assembly.Load(assemblyName);
Type[] types = a.GetTypes(); //获取当前程序集中的所有类型
{
object[] attributes = type.GetCustomAttributes(typeof(ExtensionAttribute), false); //获取含有ExtensionAttribute标记的类
foreach (object attribute in attributes)
{
if (ExtensionManager.ExtensionEnabled(type.Name))
{
a.CreateInstance(type.FullName); //创建实例
}
}
}
BlogEngine有很多地方是值得我们学习的.
SqlMemberShip RoleProvider for blogengine
2008-07-28自上次完成SqlDataProvider后 be_roles表 be_UserRole表 代码下载:
今天再次完成SqlMembershipProvider及RoleProvider
表结构
be_Users表
CREATE TABLE [dbo].[be_users](
[UserID] [int] IDENTITY(1000,1) NOT NULL,
[UserName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_be_users_UserName] DEFAULT (''),
[UserPassword] [varchar](100) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_be_users_UserPassword] DEFAULT (''),
[UserEmail] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_be_users_UserEmail] DEFAULT (''),
CONSTRAINT [PK_be_users] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[be_Roles](
[RoleID] [int] IDENTITY(1,1) NOT NULL,
[RoleName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL CONSTRAINT [DF_be_Roles_RoleName] DEFAULT (''),
CONSTRAINT [PK_be_Roles] PRIMARY KEY CLUSTERED
(
[RoleID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[be_UserRole](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[RoleName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_be_UserRole] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
MSSqlProvider.rar (12.60 kb)
修改web.config
......
<membership defaultProvider="MsSqlMembershipProvider">
<providers>
<clear/>
<add name="XmlMembershipProvider" type="BlogEngine.Core.Providers.XmlMembershipProvider, BlogEngine.Core" description="XML membership provider" xmlFileName="~/App_Data/users.xml"/>
<add name="MsSqlMembershipProvider" type="BlogEngine.Core.Providers.MSSqlProvider.MsSqlMembershipProvider,BlogEngine.Core" description="Sql membership provider"/>
</providers>
</membership>
<roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".BLOGENGINEROLES">
<providers>
<clear/>
<add name="XmlRoleProvider" type="BlogEngine.Core.Providers.XmlRoleProvider, BlogEngine.Core" description="XML role provider" xmlFileName="~/App_Data/roles.xml"/>
<add name="SqlRoleProvider" type="BlogEngine.Core.Providers.MSSqlProvider.SqlRoleProvider,BlogEngine.Core" description="" />
</providers>
</roleManager>
......
让我感动的一封Email
2008-07-27早上进入我的Gmail邮箱,发现有主题为关于幻想曲的RSS错误的一封邮件
点进去看了看,内容是
幻想曲:
您好!
一直关注你的博客,以前是通过书签打开网站直接看,最近一直是使用鲜果订阅,订阅的你的RSS是:http://feed.feedsky.com/yibin
刚看到你的新文章:Blog切换到SqlProvider ,链接地址不对,请核实。谢谢你一直为大家提供那么多优秀的文章!祝天天开心!
Blog切换到SqlProvider该文是昨天在Blog切换到SqlProvider之后写的第一篇日志
由于没有指定Slug,在处理这种情况时会默认从SQLServer中取Identity,可能在取值时出现了问题,
使地址出现错误,发布完后我检查了一下rss,并修正了该问题。
没想到还有这样热心的朋友专门发一封Email来提醒我,向hedongyang表示感谢!

