JO.Fly

一个想成为摄影师的程序员
avmo.net
JO.Fly
“avmo” 是什么意思? 偶尔一天想找一个简单的域名,无意中找到这个名字,现在4个字母.net的国际域名似乎很少,没有多想就注册了,后来努力的想象这4个字母代表什么意思,一直到现在都没找到,算了,一个名称而已,不一定非有含义不可.
在线QQ

分类 BLOG

照片 Photograph

颜色 颜 色

我的工作 我的工作

说实话,XHTML所建议使用的的标签应该是我比较喜欢的,它要求网页除了漂亮的表面外,还要有个比较“贴切的内在美”:尽量采用少量的标签,并且所使用的标签要贴切(文字就要用span,方框就要用div……)。但是它同时带来了一系列的问题: 1、设计难度加大,要求样式与标记分开, 2、浏览器之间的显示效果不同,要根据各种情况来写样式 3、开发时间拉长 在这样的思维方式下,HTML标记实际上就像是内容与CSS表的中间人、介绍人,也像是程序设计里的变量名,在变量名的后面是真实的内容,CSS通过这样的名称来识别并设计内容的显示效果。 有时候在为标记的CSS起名时在考虑,究竟应该描述它的内容,还是描述它的外表?比如为一个新闻标题添加蓝色的样式名,是应该叫“#NewsTitle”还是应该叫“.BigBlue”?通常情况下如果涉及到服务端程序,就会用到ID吧,否则会用到class。应该是这样! 另外,现在修正了一个习惯,当2个或多个标记具有同样的属性时,以前我会将他们写在一起,以为这样可以为CSS文件“减肥”,但后来发现,下次修改的时候,可能要到处去找含有它的属性,所以后来放弃了这样的作法,一个样式就具有自己单独的一些属性。 CSS只会被浏览器下载一次,肥一点点影响不大。 评论0 浏览0 发表时间2009-7-3 10:06:35

我的术士号被抢先绑定了

今天魔兽世界的新官方网(www.warcraftchina.com)站打开了,战网(www.battlenet.com.cn)也开始注册。本应该是件高兴的事儿,但我却很郁闷,因为我的术士号被别人抢线绑定了...... 术士号是我的主号,准备用这个号搞齐成就,在关服前,我的两块大陆的任务都差不多完成了,就还差东部王国的一些任务。外域的任务和副本成就全部入手,难道就这样没了??? 已经向客服提交了问题,暂时还没收到答复,找回来的希望其实很大,因为这是我亲自建立的号,但在找回来之前还是觉得不舒服。只有等待了。 我把以前四区的牧师号给绑定了,不过现在似乎还没有转服的服务,希望网易也能像以前一样可以转服、改名、手机绑定等。 评论1 浏览7 发表时间2009-7-2 16:37:57

chaoyi.net 最后一次的程序优化

已经开始了 chaoyi.net 的最后一次程序优化。 CSS上,主要针对IE8、IE7、IE6之间不同的显示差异 用*html来标示IE6; 用*+html来标示IE7 主CSS内容是以IE8为基础的。 貌似IE8下可以通过的,Firefox和Chrome都没有什么问题,但ul标记的左边距则有0px和-40px的差别。 程序里采用了大量数据缓存来减少了与数据库的交互,一般在IIS活动期间基本上不用再去查询数据库,直接将数据放入Application里,然后对DataSet操作(数据量比较大的站点千万别学)。 介绍超艺和可大的结构作了一些人性化的调整,尽量减少用户到处去查找内容的几率,相关内容都放在一个页面,或在页面内有直接的链接。 BBS和BLOG准备有一些较大的调整,让它看上去更像一个BBS。但同时又可以作为BLOG。写日志和发帖可以同时进行。 评论0 浏览12 发表时间2009-6-29 17:15:20

Avmo.net 完成程度已经达到80%了

从我4年前注册Avmo.net的域名以来,一直没有好好的去做过这一个网站,甚至没有想过用这个域名来干什么,仅仅交了几年的注册费而已。直到一个月前,感觉现有的工作和我想要的生活相去甚远,才开始考虑如何创办这样一个这样的个人站点。 一个月过去了,网站的基本功能已经差不多完成了,其实也就仅仅是个BLOG类型,有发表日志,照片等。今天准备完成最后的2个功能,一个是切换颜色风格的菜单,另一个就是搜索,一定要在18:00之前完成。因为接下来还有2个网站等着我去做,其中一个是我一直负责的chaoyi.net进行的最后一次程序调整,另一个则是为一家婚庆公司制作新的网站,婚庆网站要赶在8月份之前交工,这次的酬劳并不多…… 当我完成了Avmo.net以后,就会经常来这里发表一些内容,无论有没有人观看,至少它是我的第一个,也可能是我最后一个个人网站了。 评论0 浏览22 发表时间2009-6-24 11:07:35

去掉所有HTML标记 并指定长度

有时候需要控制字符串的长度,但问题是字符串中也许含有HTML代码,直接截取的话可能造成错乱的HTML标记。这种情况下可以先去掉所有的HTML标记,然后再截断。缺点是不能按内容中的样式显示,而只剩一下些文字。适用于只需要部分内容的情况下使用。 注意:Regex 需要导入 System.Text.RegularExpressions;
public static DataTable DtHtml(DataTable dt, string key, int sum)
{
	int num = dt.Rows.Count;
	Regex ar = new Regex("<[^>]+>", RegexOptions.Compiled);
	for (int i = 0; i < num; i++)
	{
		dt.Rows[i][key] = ar.Replace(dt.Rows[i][key].ToString(), "");
		if (dt.Rows[i][key].ToString().Length > sum)
		{ dt.Rows[i][key] = dt.Rows[i][key].ToString().Remove(sum); }
	}
	return dt;
}
评论1 浏览41 发表时间2009-6-19 15:57:22

本站用的的验证码程序

自己写了一个简单的验证码程序,仅仅用了大写英文字母,一般小型站点比较适合。用 <img src="/Chars.aspx" alt="验证码"/> 就可以显示了。 记得加入 System.IO; System.Drawing; System.Drawing.Drawing2D; System.Drawing.Imaging; 4个命名空间
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
public partial class Chars : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Random rand = new Random();
		string chars = "";
		while (chars.Length < 4)
		{ chars += Convert.ToChar(rand.Next(65, 90)); }
		HttpCookie cookie;
		if (Request.Cookies["Chars"] == null)
		{ cookie = new HttpCookie("Chars"); }
		else
		{ cookie = Request.Cookies["Chars"]; }
		cookie.Value = chars;
		cookie.Expires = DateTime.Now.AddMinutes(60);
		Response.Cookies.Add(cookie);
		Bitmap bmp = new Bitmap(50, 18);
		Graphics gra = Graphics.FromImage(bmp);
		gra.Clear(Color.FromArgb(199, 233, 236));
		gra.DrawString(chars, new Font("Tahoma", 10, FontStyle.Bold), new SolidBrush(Color.FromArgb(0,0,0)), 6, 1);
		MemoryStream ms = new MemoryStream();
		bmp.Save(ms, ImageFormat.Gif);
		Response.ClearContent();
		Response.ContentType = "image/Jpeg";
		Response.BinaryWrite(ms.ToArray());
		gra.Dispose();
		bmp.Dispose();
		Response.End();
	}
}
评论0 浏览37 发表时间2009-6-19 14:19:31

我的BLOG采用的分页方式

Avmo.net 的分页计算方法,这样做在计算方式上比较复杂,但对于用户更适合使用习惯,并且看上去比较直观 r : 数据绑定的Repeater first : 到第一页 previous : 向上一页 next : 向下一页 last : 到最后一页 pages : 超链接用的Label url : 当前页面地址 id : 被请求的内容ID(多用于分类的ID) dv : 数据源 DataView pageSize : 每页显示的项数 page : 当前的页数
public static void Pages(Repeater r, HyperLink first, HyperLink previous, HyperLink next, HyperLink last, Label pages, string url, int id, DataView dv, int pageSize, int page)
{
    PagedDataSource ps = new PagedDataSource();
    ps.DataSource = dv;
    ps.AllowPaging = true;
    ps.PageSize = pageSize;
    int x = ps.PageCount;
    if (page <= 0)
    { page = 1; }
    else if (page > x)
    { page = x; }
    ps.CurrentPageIndex = page - 1;
    string Url = url;
    if (!url.Contains("?id"))
    { Url = url + "?id=" + id; }
    if (url.Contains("&page"))
    { Url = url.Remove(url.LastIndexOf("&page")); }
    pages.Text = "";
    int i = (page / 10) * 10 + 1;
    int y = i + 11;
    if (page % 10 == 2)
    {
        if (page < 10 && page != 2)
        { i += 10; y += 10; }
    }
    else if (page % 10 == 1)
    {
        if (page > 10)
        { i -= 10; y -= 10; }
    }
    if (y > x)
    { y = x; }
    for (; i <= y; i++)
    {
        if (i == y)
        {
            if (i == page)
            { pages.Text += i; }
            else
            { pages.Text += "<a href=\"" + Url + "&page=" + i + "\">" + i + "</a> "; }
        }
        else
        {
            if (i == page)
            { pages.Text += i + " · "; }
            else
            { pages.Text += "<a href=\"" + Url + "&page=" + i + "\">" + i + "</a> · "; }
        }
    }
    r.DataSource = ps;
    r.DataBind();
    first.NavigateUrl = Url + "&page=1";
    previous.NavigateUrl = Url + "&page=" + (page - 1);
    next.NavigateUrl = Url + "&page=" + (page + 1);
    last.NavigateUrl = Url + "&page=" + x;
    if (page == 1)
    {
        first.Visible = false;
        previous.Visible = false;
    }
    if (page == x)
    {
        next.Visible = false;
        last.Visible = false;
    }
}
评论0 浏览33 发表时间2009-6-19 11:12:11

古老的仇恨 - 卡利姆多的开拓

尽管获得了战争的胜利,但艾泽拉斯的各个种族却发现他们的世界早已被战争所摧毁。亡灵天灾和燃烧军团毁灭了洛丹伦的文明,卡利姆多也几乎遭受同样的命运。这里有饱经创伤的森林需要治愈,有无边的仇恨需要忘却,人民需要新的家园来定居。战争重创了每一个种族,但他们无私地合作,想要创造一个新的开端。这一切都从联盟和部落之间极为来之不易的停战开始。   萨尔领导着兽人来到卡利姆多大陆,他们在牛头人同胞的帮助下建立了一个新的家园。兽人们以萨尔被暗杀的父亲的名字将这新的国家命名为杜隆坦,他们定居下来,并试图重建他们那一度辉煌的文明。现在恶魔的诅咒被终结了,部落从一股好战的狂热力量变为了一个松散的联盟,生存与繁荣是他们的首要任务。在高贵的牛头人和狡猾的暗矛部落巨魔的帮助下,萨尔和他的兽人们期盼着一个和平的新纪元的到来。   吉安娜·普罗德摩尔手下残存的联盟力量定居在南卡里姆多。他们在东海岸的尘泥沼泽附近建立了简陋的港口城市塞拉摩。人类和矮人同盟合力在这片充满危险的土地上生存,尽管杜隆坦和塞拉摩的防御力量彼此暂时停战,但这个脆弱的殖民地的平静并不意味着最终的和平。   人类和兽人间的和平被一支抵达卡利姆多的庞大联盟舰队所破坏。海军上将戴林·普罗德摩尔(吉安娜的父亲)率领这支舰队在阿尔塞斯毁灭洛丹伦之前离开了那里。海上数月的航行令人筋疲力尽,但是普罗德摩尔仍然寻找着一切他可以找到的联盟幸存者。   海军上将普罗德摩尔的舰队对该地区的稳定造成了严重的威胁。作为一位在第二次战争中声名显赫的英雄,吉安娜的父亲是部落的死敌,他决心在兽人站稳脚跟之前摧毁杜隆坦。   普罗德摩尔强迫吉安娜做出一个艰难的抉择:支持他对抗兽人并且背叛她的新同盟,或者与她的亲生父亲交战来维护联盟和部落之间来之不易的脆弱和平。在一番思想斗争之后,吉安娜选择了后者,她帮助萨尔打败了她疯狂的父亲。不幸地是,海军上将在吉安娜向他证明兽人已经不再是嗜血的怪物并与他和解之前就战死了。出于吉安娜对部落的忠诚情义,兽人们同意让她的部队安全地回到塞拉摩的家园。 评论0 浏览33 发表时间2009-6-18 12:47:24

巫妖王的胜利

即便是在如此虚弱的情况下,阿尔萨斯最终仍以策略战胜了伊利丹,并率先抵达了冰封王座。阿尔萨斯用他的魔剑霜之哀伤击碎了囚禁巫妖王的冰牢,并得到了耐奥祖附魂的头盔和胸甲。阿尔萨斯将拥有无尽力量的头盔戴到了自己的头上,成为了新的巫妖王。正如耐奥祖一直计划的那样,他和阿尔萨斯的灵魂合体成为一个强大的生物。伊利丹和他的军队被迫耻辱地逃回外域,阿尔萨斯则成了这个世界上最强大的生物之一。   现在的阿尔萨斯作为新的不朽的巫妖王占据着诺森德,据说他正在那里重建寒冰皇冠城堡,而他所信任的副官克尔苏加德则统领着瘟疫之地的天灾部队。希尔瓦娜斯和她的反叛亡灵力量仅仅控制着提瑞斯法林地,那只是被饱经战乱的洛丹伦王国的一小部分。 评论0 浏览29 发表时间2009-6-18 12:47:09

瘟疫之地的内战

巫妖王耐奥祖知道自己已经时日不多了。被囚禁在冰封王座之中的他怀疑基尔加丹会派出手下来毁灭自己,伊利丹的咒语造成的伤害破坏了冰封王座,巫妖王的力量因而一天天地丧失。于是,急于自保的耐奥祖将他最强大的手下——死亡骑士阿尔萨斯召唤到身边。   阿尔萨斯的力量随着巫妖王的虚弱而渐渐流失,他陷入了洛丹伦的一场内战中。女妖希尔瓦娜斯·风行者领导着半数的亡灵军团发动了一场试图颠覆阿尔萨斯统治的政变。正当战斗扩散到整个瘟疫之地时,阿尔萨斯被巫妖王所召唤,领导权被移交给了他的副官克尔苏加德。   最终, 希尔瓦娜斯和她的亡灵叛军(他们被称作被遗忘者)将洛丹伦都城的废墟占为己有。被遗忘者在都城的残骸下建立起了自己的基地,他们发誓要击败天灾并将克尔苏加德和他的仆从赶出大陆。   力量遭到削弱的阿尔萨斯仍决定去援救他的主人。他到达诺森德后却发现伊利丹的血精灵和那迦已经先他一步到了那里。于是,阿尔萨斯和他的蜘蛛怪只得与伊利丹的部队争夺时间,他要率先到达寒冰皇冠冰川并保护冰封王座。 评论0 浏览24 发表时间2009-6-18 12:46:56
bogtom
CSS 2.0 Valid XHTML 1.0 Transitional JO.Fly 制作
Copyright © 2007 - 2009 Jo.Fly Corporation, All Rights Reserved.
TEL:13872212343 | QQ:79740092
E-Mail: avmo.net@163.com | Jo.Fly@live.cn