CSS中几个URL()的定位问题

今天被几个url()定位搞晕了,记录一下:

内联CSS中 url()相对HTML文件定位。

外联CSS中 url()相对CSS文件定位。

不管内外联中 filter:progid :D XImageTransform.Microsoft.AlphaImageLoader(src=''); 相对HTML文件定位

Posted in EXT | Tagged , , , | Leave a comment

Joomla 第一次接触

其实这不是第一次接触了,事实是,有很大一部分原因,是为了Joomla才学习的PHP。

Posted in Joomla | Leave a comment

今天才开始接触PHP

Basic,pascl,C,delphi,asp,C#,今天才到了PHP??这个顺序好像有点问题,不过没关系拉,好像就是$+C而已,不会很难搞吧?

刚刚才装好了PHPNow1.45,然后Hello了一下World,, 一切似乎很顺利,但不顺往往隐藏在顺利之下,果然,虚拟目录的设置就出了问题了,搞了个把小时都没搞定,改httpd.conf 似乎没用,不知哪里出了问题,不管了,迟啲先搞。

Posted in PHP | Leave a comment

[转]让SubSonic生成实体类自动加上注释

摘要:SubSonic自动根据表生成的实体类中没有注释,如果表的字段很多或是字段名句不是很规范的话,那么使用起来就很不方便了。本文针对SubSonic 2.0.3版本做修改,让生成的实体类自动根据字段的说明生成注释。

  1. 首先需要给TableSchema.TableColumn类添加一个名为Description的字段:
    打开SubSonic\Sql Tools\TableSchema.cs文件,找到TableSchema类中的TableColumn类,然后添加:

    private string description; 
    public string Description
    {
        
    get { return description; }
        
    set { description = value; }

    打开SubSonic\Constants.cs文件,找到SqlSchemaVariable这个类,给它添加一个成员:
    public const string COLUMN_DESCRIPTION = "ColumnDescription";

  2. SubSonic\DataProviders\SqlDataProvider.cs
    将TABLE_COLUMN_SQL_ALL的SQL语句改为:
        private const string TABLE_COLUMN_SQL_ALL =@"

    SELECT 
        columns.TABLE_CATALOG 
    AS [Database],
        columns.TABLE_SCHEMA 
    AS Owner, 
        columns.TABLE_NAME 
    AS TableName, 
        columns.COLUMN_NAME 
    AS ColumnName, 
        columns.ORDINAL_POSITION 
    AS OrdinalPosition, 
        columns.COLUMN_DEFAULT 
    AS DefaultSetting, 
        columns.IS_NULLABLE 
    AS IsNullable, columns.DATA_TYPE AS DataType, 
        columns.CHARACTER_MAXIMUM_LENGTH 
    AS MaxLength, 
        columns.DATETIME_PRECISION 
    AS DatePrecision,
        
    COLUMNPROPERTY(object_id(columns.TABLE_SCHEMA + '.' + TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity'AS IsIdentity,
        
    COLUMNPROPERTY(object_id(columns.TABLE_SCHEMA + '.' + TABLE_NAME), columns.COLUMN_NAME, 'IsComputed'as IsComputed,
        properties.value   
    as   ColumnDescription  
    FROM  INFORMATION_SCHEMA.COLUMNS columns 
    left   join   sys.extended_properties   properties   
      
    ON   object_Id(columns.Table_Name)   =   properties.major_id   
      
    AND   columns.Ordinal_position   =   properties.minor_id
    ORDER BY OrdinalPosition ASc

    ";
    找到函数:public override TableSchema.Table GetTableSchema(string tableName, TableType tableType),
    在column.IsReadOnly = (nativeDataType == "timestamp" || isComputed);这行后面添加:

    if (drColumns[i][SqlSchemaVariable.COLUMN_DESCRIPTION] != DBNull.Value)
    {
        column.Description 
    = (string)drColumns[i][SqlSchemaVariable.COLUMN_DESCRIPTION];

    修改生成代码的模板
    打开\SubSonic\CodeGeneration\Templates\CS_ClassTemplate.aspx
    找到public <%=nullableVarType%> <%=propName%>,添加如下莫道不消魂注释模板: 

            /// <summary>
            
    /// <%=col.Description%>
            
    /// </summary>
            [XmlAttribute("<%=propName%>")]
            
    public <%=nullableVarType%> <%=propName%> 

  3. 找到public struct Columns,改为:

      public struct Columns
            {
                
    <% foreach (TableSchema.TableColumn col in cols) {%> 
                
    /// <summary>
                
    /// <%=col.Description%>
                
    /// </summary>
                public static string <%=col.PropertyName%> = @"<%=col.ColumnName%>";
                
    <%}%>            
            } 

    编译解决方案,然后再用sonic.exe生成代码即可。效果如下:

表定义:

er

生成的实体类代码:

  

  /// <summary>
    
/// This is an ActiveRecord class which wraps the Users table.
    
/// </summary>
    [Serializable]
    
public partial class User : ActiveRecord<User>
    {
        
//
        /// <summary>
        
/// 自动编号
        
/// </summary>
        [XmlAttribute("Id")]
        
public int Id 
        {
            
get { return GetColumnValue<int>("ID"); }             set { SetColumnValue("ID", value); }         } 

        /// <summary>
        
/// 用户名
        
/// </summary>
        [XmlAttribute("UserName")]
        
public string UserName 
        {
            
get { return GetColumnValue<string>("UserName"); }             

set { SetColumnValue("UserName", value); }         } 

        /// <summary>
        
/// 登录密码
        
/// </summary>
        [XmlAttribute("Password")]
        
public string Password 
        {
            
get { return GetColumnValue<string>("Password"); }             set { SetColumnValue("Password", value); }         } 

        //
         public struct Columns
        {
            
/// <summary>
            
/// 自动编号
            
/// </summary>
            public static string Id = @"ID";
            
/// <summary>
            
/// 用户名
            
/// </summary>
            public static string UserName = @"UserName";
            
/// <summary>
            
/// 登录密码
            
/// </summary>
            public static string Password = @"Password";
        } 
     } 

补充一点:如果有中文的注释的话,可能会变成乱码,这时还需要将\SubSonic\Sugar\File.cs中的CreateToFile(string absolutePath, string fileText)函数修改一下:

public static void CreateToFile(string absolutePath, string fileText)
{
     File.WriteAllText(absolutePath, fileText, Encoding.Default);

OK

另:

在Sql2000中应该这样:
private const string TABLE_COLUMN_SQL_ALL = @" SELECT
columns.TABLE_CATALOG AS [Database],
columns.TABLE_SCHEMA AS Owner,
columns.TABLE_NAME AS TableName,
columns.COLUMN_NAME AS ColumnName,
columns.ORDINAL_POSITION AS OrdinalPosition,
columns.COLUMN_DEFAULT AS DefaultSetting,
columns.IS_NULLABLE AS IsNullable, columns.DATA_TYPE AS DataType,
columns.CHARACTER_MAXIMUM_LENGTH AS MaxLength,
columns.DATETIME_PRECISION AS DatePrecision,
COLUMNPROPERTY(object_id(columns.TABLE_SCHEMA + '.' + TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') AS IsIdentity,
COLUMNPROPERTY(object_id(columns.TABLE_SCHEMA + '.' + TABLE_NAME), columns.COLUMN_NAME, 'IsComputed') as IsComputed,
properties.value as ColumnDescription
FROM INFORMATION_SCHEMA.COLUMNS columns
left join dbo.sysproperties properties
ON object_Id(columns.Table_Name) = properties.id
AND columns.Ordinal_position = properties.smallid
ORDER BY OrdinalPosition ASc";

Posted in subsonic | Tagged , , , | Leave a comment

SubSonic 视频教程

SubSonic 视频介绍(Watch)  

Getting Started

Getting Started

Getting started is simple, and this webcast will show you how to get up and running in no time! Watch the video.

View SonicCast

Website Starter Kit

The Starter Site comes pre-wired with SubSonic, Membership, AJAX, Useful Utilities, and the FCK Editor. Watch the Video.

View SonicCast

Database Query Tool

You and your DB need to be friends again. We'll help you. We play matchmaker. Watch the video.

Posted in subsonic | Tagged , , | Leave a comment

[转]媒体专访:认识SubSonic开源项目

  SubSonic是一个类似Rails的开源.NET项目。你可以把它看作是一把瑞士军瑞脑消金兽刀,它可以用来构建Website和通过ORM方式来访问数据。在最新的版本2.0.3中,我们对执行引擎作了很大的改进,也修复了大量的Bug。

  Rob Conery和Eric Kemp是推动SubSonic的主要开发人员,与项目良好的发展有着密切的关系。

  InfoQ编辑提出了一些关于项目的问题,得到了Eric和Rob的积极回复:

  媒体:是什么驱使你们创建SubSonic?

  Rob:大约95%的应用程序都通过某种方式来访问数据库。由于某些原因,95%的Visual Studio和.NET工具做的事情是把数据从数据库中取出来然后把数据放到UI上显示。当我第一次看到SqlDataSource和GridView的实例,我觉得它们真的太牛了,然而它们打破了我所知的所有DAL惯例。ObjectDataSource是可以解决这个问题,但为什么我一定要使用另外一个工具来连接我的程序和数据呢?从一个构架师的角度,我看不到任何理由。

  我记得在Fritz Onion的站点上读到一篇博文,他使用BuildProviders做出了一个对象模型,我就在寻思“有一天我也要这样做!”。当我重构Commerce Starter Kit的时候,这天到来了,我尽我所能把一些数据访问代码调整到基类里面去。我以非常规的方式使用泛型,可能已经超越了泛型原来的设计意图,在这个过程中我偶然找到了一个非常酷的设计模式,用它可以生成很少的代码就能完成整个数据访问层的工作。当我让它正常工作起来,我发誓,我简直从我的椅子上跳起来了。

  之后我又花了两个星期来不断的测试,以解决其中的错误和性能问题,我记得我曾经想“在这里我已经得到某些东西了”。有段时间,我曾经做过一些Ruby/Rails的工作,我有一些想法能把RoR的优点带到ASP的世界来。虽然Rails最匹配的语言是Ruby——但是有可能RubyCLR(或者其他.NET的动态语言)有一天将能完善,到那时,我认为SubSonic将能发挥更大作用。

  媒体:SubSonic当前的进展如何?

  Eric:虽然SubSonic都还不满一周岁,在4月底它发布了2.0,相对于2006年12月的1.0.6版提供了一系列新特性来扩展其功能。从那时起,我们又发布了3个修正版本,2.0.3就是昨天才发布出来的。

  SubSonic是一个非常活跃的项目,在CodePlex已经持续排名前10了,和一些微软支持的项目并列在一起,如AJAX Control Toolkit、Enterprise Library和IronPython。虽然这很难说明它是真的流行,不过下载数量确实是很鼓舞人心的——SubSonic 2.0.2在不到3周的时间里被下载了几乎2500次,2.0.3在第一天里被下载了差不多400次。

  媒体:什么是SubSonic的吸引人之处?

  Eric:作为一个数据访问平台,SubSonic在DataSet的强大与速度,和ORM平台的高级功能之间寻求平衡,其结果是无需开发人员具备多少对象映射的经验,也不需要他们继续使用SQL。

  作为一个开发人员生产力工具,SubSonic通过从基础上支持软件开发的迭代本质,自动化了数据驱动的应用程序开发中重复性的、无趣的过程。通过这个自动生成的Web-Based的数据操纵的“架子”,轻量级和灵活的查询工具,以及一个不断丰富功能的用于通用业务数据验证和转换需要的类库,SubSonic让开发人员可以快速的构建他们的应用程序,而不是一些支撑的基础系统。

  媒体:有哪些人在使用SubSonic?

  Eric:要评价SubSonic的使用是困难的,我们只能从什么人在论坛中或者博客中分享经验来判断。不过,我们知道使用的范围是很广泛的。SubSonic支撑着几个开源项目,如dotnetkicks.com,并且目前正被集成到一个顶级的ASP.NET的博客平台上。使用SubSonic的既有业余开发的个人应用程序,也有一些500强企业。

  媒体:SubSonic未来会加入那些功能?

  Eric:除了计划中的对我们的查询引擎的一些改进,也会在2.1发布版中提供REST的相关功能,我们目前是按照一个基本指导原则来“逐步进步”。具体说来,这意味着一再强调我们“惯例高于配置”的“老调”,按照有助于提升开发人员的生产力的一些通用模式,来完成一个更完整和更具扩展性的“开箱即用的应用程序”。

Posted in subsonic | Tagged , , , , | Leave a comment

[转]Paypal,Godaddy,Yo2,从注册域名到和优博绑定全攻略

做好功课,其实非常简单。

  1. 准备支持美元国际支付的双币信用卡,目前国内有很多伪双币,不能在国外网站上用的。招行和建行的信用卡都是能用的。
  2. Paypal上注册一个”China(WorldWide)的账户,和信用卡关联起来。放弃以前易趣推广的那个贝宝账户吧,那个只能支持人民币的。
  3. 找个快一点的域名提供商,看看你要的域名还在不在,或者找一个好的域名。Godaddy的查询太慢了,可能国内用的人太多的缘故。推荐用NameCheap.com来查,速度很快,虽然你不一定在这里购买。
  4. 找一个Godaddy的优惠券:要注意的是,IDCSPY上的coupon code,也就是优惠券已经过期了。不过通过google搜索“Godaddy Coupon”总还是能找到,比如这里
  5. 找到域名之后,回到”狗爹地”(Godaddy)--对不起了NameCheap……按照IDCSPY提供的攻略注册你的域名。在最后付款的时候选择Paypal,Godaddy会在你账户里建立一个付款协议,默认额度是500美元。你可以改掉这个数字,建议改到10美元足够了。
  6. 域名已经归你了,按照godaddy发给你email里提供的信息,登陆到域名管理。把WWW的CNAME指向你要绑定的IP或者地址。
  7. 在Yo2这边,先到官方的淘宝店拍下你要的服务。目前好像只有base的。发信给管理员,确认后在支付页面买好服务,你就可以绑定了。

Godaddy的DNS解析非常快,Yo2这边设置好之后,两三个小时差不多就可以用了。

改Godaddy在你Paypal上额度是为了防止出现在月光身上出现过的恶意扣款事件。Godaddy可以借着查询你注册信息是否真实扣掉你的钱,所以手工限制额度也是不得已为之。

Posted in 网络备档 | Leave a comment

庆祝开博

一直想,做为一个8086时代过来的骨灰ITer,是不是应该要随下大流,有个博客呢,一直懒,一直没动,不好。

终于建了,好。

Posted in 阁楼夜语 | 2 Comments