|
|
我的评论
re: 快毕业了找工作,技术不错 Lostinet 2008-08-18 18:43
lostinet - gmail - com
re: 快毕业了找工作,技术不错 Lostinet 2008-08-18 18:26
不知道你是否愿意来CuteSoft的珠海办公室.
详细情况可加我MSN谈谈
我们还没有找到人哦..
难熬找个JS的人那么难...
新年要回家5天.
希望有兴趣的到时联系我.
@武眉博<活靶子.Net>
@仁面寿星
@橙子's Blog
谢谢支持.
我自己觉得公司很好的啦.
薪水比起北京上海深圳不是很高,
但是在珠海这个消费较低的城市,
在IT行业来说算是非常好的了.
上面列出的是经验较少的员工的工资.
如果有更多经验更多实力的,欢迎来咨询一下.
不过可惜来应聘的人始终不多.
可能是地区的问题,也有可能是招的人少的原因吧.
不过我觉得最大的问题是并不是人人都识货.
在匿名delegate中使用 < % = % > 的确Cool
re: 高报酬寻VB高手做个PARTIME项目 Lostinet 2007-12-08 22:07
VB的程序能在Vista上运行.
另外这个程序只是一个补充.
我们有C#的版本.
现在希望提供VB的让客户有多一个选择.
@good
未指教
@sa1
nvelocity和stringtemplate等模板引擎都不是针对HTML的.
他们的代码的格式排版不好.
特别在vs.net下格式化后会很乱.
TemplateEngine对HTML的支持就非常好.而且很容易学习.
@文晨曦
目前还没有例子.
迟点会有下载.
@STS
你可以参考一篇老文章 http://msdn2.microsoft.com/en-us/library/aa735772.aspx
如果你会反射的话, 那么会知道怎样实现的.
或者等我提供下载.
@Enzo
以后会有下载的.
不过文章中已经展示了绝大部分的应用情况
@静水≈深流
未指教
@袁永福
就是纯粹的模板,和XSLT没关系.
@文's sky
请关注, 大概是下个月吧.
@kwklover
如果你关注模板的应用,
那么你会从文章中看到一些不同的思想.
不是说编程最重要的是思想吗,实在是没兴趣些太多细节的东西.
re: 博客园新服务器上线 Lostinet 2007-12-08 00:31
说实在,如果是我就自己去组装一台了..
虽然不是100%稳定....
DUDU对用户有非常负责的态度.
@双鱼座
当需要的时候,才生成Shadow,已经太晚了.
加入有两个对象同时引用一个Entity.
如果某个对象对该Entity进行操作,并且失败了.
而该Entity的状态没有被恢复,
那么另外一个Entity再操作它的时候就会发生不可预料的错误.
@RicCC
关于分布式的实现, 请参考我那篇高级特征的文章.
@没剑
NewName
@cnlamar
RuntimeEntity是支持LINQ的语法查询的.
@quitgame
是自动改变成最新的值.能反应数据库的最新情况
而任何Dirty的值,都不会互相影响.
@progame:
同步带来的好处是很实在的.
当然这需要程序员明确地知道这件事.
RuntimeEntityPreview已经有方案去阻止某个对象进行自动的同步.
不过看来依然不够.我会在Transaction的范围上加一个锁,防止事务过程中的冲突.
@henry
p1和p2不是同一个reference.
无论是单线程,还是不同的线程,表现的行为是一致的.
更多的思考的原因,我会在下一篇文章,关于DomainModel的设计中提及.
@紫色阴影
这个和IdentityMap是两回事.
IdentityMap只不过是一种缓存.
而我的那个机制,是建立在,对象已经被加载,已经被其他对象引用了的基础上进行的.
IdentityMap要做到这一点,必须每次访问对象的时候都要Load一次.
而我的方案则只需要Load第一次.
@怪怪
就算是最近我想用RuntimeEntity做个简单的例子, 也怕会阻碍公司的新产品的发展。
你说的话提醒了我。
有时候竞争对手嘛,,真的说不定是可以合纵的伙伴。
我要重新思考一下策略才行了呵呵。
-----
另外不用怕代码烂就不开源。
我看过IBatisNet的代码,那个烂,还不是一样放出来了。
@Ariel Y.
这是一个比较折中的做法了。
即使是全部没有命中缓存,
由于WHERE OrderID IN (....)是CLUSTERED INDEX的查询,
并且第一句已经扫描过磁盘,第二句是非常快的。
如果有缓存的命中,那么带来性能的提升是非常高的。
@henry
不知道是褒义还是贬义。
如果有什么不妥,请指出。
@大石头
我所值的“其他ORM不能做到“,是指属性的同步的部分。
其他ORM做不到,是因为那些ORM针对的是POCO。
而我的RuntimeEntity不是ORM。Entity的属性的读写,是由RuntimeEntity来控制的。
所以RuntimeEntity能在不同的对象上返回最新的属性的值
@没剑
这个设计是经过充分的考虑的。
特别是针对Web程序。很多对象被加载使用后会立刻被抛弃。
一旦对象进入修改的状态,它的值就会复制一份,不会被同步的覆盖。
所以并发上不存在问题。
而这个设计更是考虑到相关对象的LazyLoad所产生的关联的时候。
例如
Product p=RuntimeEntity.LoadRow (1);
textBox1.Text=p.Category.Name;
这个。
p获取Category后,Category就会附加到p上。
如果其他地方更新了Category的值,那么p.Category也需要相应更新才行。
@Edward.Net
我这里没有介绍,并不代表没有处理。
实际上RuntimeEntity在后台处理的东西很多。
RuntimeEntity处理实物的时候,新修改的值是隔离的,完全模拟了SQL那边的行为。
所以如果是
using(RuntimeEntity.BeginTransaction())
{
Product p1=...
p1.ProductName="NewName";
p1.Save();
RuntimeEntity.CommitTransaction();
}
如果不到CommitTransaction这一步,p1修改的值,是不会影响其他地方的。
我现在很喜欢这个模式,
就是因为程序员只需要告诉RuntimeEntity他定义什么,执行了什么,
都是一些很简单的定义和操作方式。写一次代码不需要太多的改变。
因为现在定义的方案,和些代码的格式,都定下来了。
而很具体的操作,全部都是RuntimeEntity后台实现了。
这样即使有一些东西我没想到,我也可以以后加进去,自动去实现某些特征去保护程序的正确性。
re: RuntimeEntity Preview Lostinet 2007-11-28 17:26
@ditto0723 [未注册用户]
哦。看来是DotNet的版本问题。
安装了3.5后,2.0的System.dll也被更新了一下。
这个问题的确需要修正用于没有DotNet3.5的电脑上运行。
re: 博客园新服务器已下订单 Lostinet 2007-11-27 13:00
每次dudu要买服务器我都从心里面感到非常的佩服.
其实老服务器也不是存在很大问题.
新服务器很强大.
@winnerzone :
RuntimeEntity也有手写的版本,后来甚至加上了预编译的支持.
只不过是没有必要写出来了.
后来我已经补充, 即使大家都是预先编译的,
RuntimeEntity依然是DLINQ的 2到6 倍.
我觉得这样比较没太大意思.
因为实际开发中, 没有人会这么有心情写预编译代码的.
当然如果项目后期需要优化程序的时候, 预编译是很有用的.
所以RuntimeEntity现在也提供了一个CompileSql方法.
@怪怪
你说的话都挺有POINT的.
不过我不是上来宣传的. 否则我早就把准备好的教程之类的东西放上来了.
发这帖的主要目的就是分享我的心得. 让大家在思想上能有个冲击.
冲击我想是有的. 不少人把IBatis当神拜. 认为手写SQL肯定是最快的.
但是到现在竟然没有人问我到底是如何实现的?
竟然没有人对一些超出他们想象的东西产生好奇心?到底是为什么?
不过如果有人进来看完这帖, 觉得有点收获, 那发这帖已经算有意义了.
其实RuntimeEntity比IBatis,DLINQ快当然有着理论上的因素.
这也是我不会称RuntimeEntity为一种ORM框架的原因.
正如你说MS拥有庞大的技术背景能保证产品的稳定性.
DLINQ还更加是DotNet3.5中最重要的部分.
这个东西一定非常好的了.
但是它是不是最好的呢? 是不是能适合每一个人, 每一个场合呢?
RuntimeEntity它面临的局势比较麻烦.
它基于DotNet2.0,但是却晚生了2年.
它需要大量用户去保证它的稳定性,和帮助推广它.
可惜我又不愿意开源.
因为我希望自用. 它有多好只有我自己知道.
有时我还有一种做ERP的冲动.
因为我有了一个强大的框架去节省我一半的编程时间.
我突然觉得我如果做ERP开发会多了一种强大的竞争力.
说真的我就是有一种纯粹利益的想法,或者说是自私的想法在心头.
我不想我推广了这个东西给其他人,得不到任何好处,
过些日子反而让其他人拿着它和我竞争.
所以最近我只会把一些技术上的心得帖上来.
帖得隐讳点. 只能说, 心得只想分享给有心人.
即使是所有缓存都失效. 那也是等于不用缓存的情况而已.
@omnislash
IBatis默认是优化的.
现在已经提供了IBatis的测试工程的下载. 欢迎测试.
@jjx:
RuntimeEntity内置对象缓存,对象状态和属性同步机制.
这些特征在测试中也是浪费掉的.
@Jeffrey Zhao
呵呵.
有兴趣的话可以下载RuntimeEntityPreview试试.
反正现在东西是放出来的.
@Enzo
现在RuntimeEntity也可以使用lambda甚至是linq的语法.
@奇怪
这里的快和慢的结论 , 只是一个对比. 但其实大家都已经很快.
@dominic
同样是生成SQL, RuntimeEntity明显要快很多.
但即使在简单的条件的情况下, 影响速度的还有把数据转换为Entity的过程.
所以与DLINQ的对比结果会根据不同的情况变化.
@jjx
果然是. 初初我认为RuntimeEntity的Mapping会比DLINQ快很多.
但是我使用你给的地址里的方法测试了一下:
var cq = System.Data.Linq.CompiledQuery.Compile(
(LinqNorthwind.NorthwindContext nc)=>nc.Products.Where(p => p.UnitPrice > price && p.Supplier.City == city));
RuntimeEntity 4.423秒
Linq To SQL 4.884秒
才发现性能只相差10%了!
如果是对比 p => p.ProductID<3 这个简单情况 , 即使给DLINQ进行预先编译:
RuntimeEntity 1.028秒
Linq To SQL 4.465秒
当然RuntimeEntity并没有优化生成SQL的过程.
既然DLINQ提供了, 那么这个10%的结果也算是公平的.
虽然把条件单独写开会非常麻烦, 但是我想也是应该给RuntimeEntity实现同样的方案才行.
从上面的结果依然可以看到, DLINQ进行Mapping的性能依然比RuntimeEntity慢上4倍.
@Ariel Y.
从来就不相信DLINQ的那句广告词.
@补丁
正如上面所列的情况, 如果是简单的条件语句, DLINQ依然不够快.
@Clark Zheng
是的.
如果不是对性能有十分苛刻的要求,
使用什么方法去访问数据库,
基本是以方便快捷为主了.
我个人觉得Ibatis需要写太多配置文件,很麻烦.
@5254341
因为SQLSERVER2005重新命名了那个系统表.
所以会有错误.
我临时屏蔽了对那个表的访问, 请重新下载测试.
re: CuteSoft珠海办事处诚招2位界面程序员 Lostinet 2007-11-26 02:53
WhereSql和LoadReaderArray是新加的方法.
在 RuntimeEntityPreview 能下载的那个版本中, 并不包含.
WhereSql可以使用Linq的语法代替:
var q=from p in RuntimeEntity.All < Product > ().LinqSource
where p.UnitPrice > price && p.Supplier.City == city
select p;
但是这个q无法使用LoadReaderMode, 所以无法做性能上的对比.
而
LoadReaderArray可以这样代替:
RuntimeEntityQuery< Product > query = RuntimeEntity.All < Product > ();
query.SetLoadReaderMode();
query.ToArray();
LoadReaderMode的目的是不使用内置的缓存.
re: 可空类型之痛 Lostinet 2007-11-12 18:26
Nullable<T>类型box成object的时候,就会变成null.
re: 博客园社区公测正式开始 Lostinet 2007-11-12 11:33
very good.
举个很简单的例子
Product p=Product.LoadRow(pid);
textBox1.Text=p.Name;
...
这个过程中, 如果本机没有缓存,或者查询缓存服务器后发现缓存版本过期.
那么LoadRow就会从数据库中重新加载数据.
如果是询问其他服务器,不见得有什么好处.
由一开始RuntimeEntity的设计就比较倾向于DomainModel的方案.
只不过是RuntimeEntity的对象是直接依赖RuntimeEntity的.
程序员可以把RuntimeEntity当作纯粹的CURD工具, 或者是基于这些对象做DomainModel的设计, 都OK.
版本验证服务器是使用一个单独的服务器来运行一个软件, 使用TCP通信.
素以不会加重数据库的负担.
所以不要盲目相信FireFox
在安全的考虑方面,IE永远比FireFox要前卫.
IE存在的问题,只是软件质量问题, 而不是设计的原因.
我去找了一下 . 是在2.0.0.5中修正的. 没有更新FireFox的要注意了. 同样, IE6不是SP1的, 也有同样问题.
http://www.rooftopsolutions.nl/article/142
这个问题是很早之前就存在了.
但是今天用FireFox测试, 又发现不到这个问题.
也许FireFox在某个patch中解决了这个问题.
我说的拦截指的是浏览器的行为.
当在cnblogs.com上引用其他网站的资源时, 那么该网站就不能取得用户登录信息.
这样,在页面中包含其他网站的通信, cookie功能就会受限制.
Cool
我们也打算做这样的互动功能.
不过实在想不到如何解决cookie被拦截的问题.
任何版本都有版权的 = =!
东西做出来不可能不发布.
不过是否定制为一个特殊的版本.
要看情况决定.
re: RuntimeEntity Preview Lostinet 2007-11-09 18:44
这个东西目前主要作用是方便自己访问数据库.
所以非常针对SQL SERVER. 连一些背后的接口也直接暴露给SqlClient
至于考虑其他数据库, 这个要等它成熟了后再实现.
我们不考虑开源.而且以后还会针对高级特征进行收费的可能.
re: CuteSoft珠海办事处诚招2位界面程序员 Lostinet 2007-11-09 15:16
其实我们对界面程序员的要求不高.
3000元加福利大概等于税前4000元的样子.
这是最基础的情况.
当然来应徵的人的经验和能力都不可能只刚刚达到要求.
如果一个人工作的效率/质量/节约沟通成本,
效果是基础要求的2倍, 我们就给6千. 如此类推. 就这么简单.
可以和必须,是2回事.
我的方案 , 可以引用控件, 可以支持回发事件 , 可以支持ASP.NET AJAX.
这是多一种选择, 而不是要求必须使用这个方案.
因为既然是模板, 里面支持着各种数据绑定 , 条件 , 循环等等.
即使不使用任何控件, 依然可以达到任何模板引擎的效果.
这些不是本文重点 , 所以在这里就不介绍了.
另外文中没有介绍cs中的代码,所以一般理解起来不容易.
因为大部分逻辑代码都是在cs中进行的. 包括设置控件的值, 处理回发事件等等.
值得一提的是, 里面支持一种 {#bindedit objpath property}的语法,
根据配置,Attribute,代码等多种控制手段, 自动生成编辑属性的控件, 自动设置控件的值, 以及回发的时候与对象属性的同步等等.
关于ITemplate,这个依然是在aspx/ascx里设置. 可惜的就是view.html不能定制ITemplate的内容了.
恭喜.
楼主在社区中表现非常活跃,为人态度也非常好.是大家学习的榜样.
还记得以前用学习机的LOGO (连函数都没有,只有IF和GOTO,也没有结构和数组) , 实现了躲炮弹的游戏... 当然受语言的限制,炮弹数量有限.
re: 来到了上海 Lostinet 2007-09-02 10:25
+++
个人觉得,要么用xml,要么用attribute.
因为这2种方案都会有VS.NET的智能提示.
如果要自己做一个语法,学习起来会很麻烦.
re: QQ开始支持离线传文件 Lostinet 2007-08-29 16:47
其实还不是upload和download.
主要考虑的问题还是带宽和储存.
不过既然开放了mail,那么把传递文件做了,也只是顺便的事情了.
re: 签名功能发布 Lostinet 2007-08-25 02:52
Cool
刚刚看过.
原理是通过在VS安装Addin,在生成项目后,把dll分解,然后插入他们的代码.
感觉还不够轻量级.
如果不提出Linq Expression的情况, 你的文章会很容易误导人.
与其说Lambda是为了简化delegate{}的写法, 还不如说DotNet引入Lambda是完全为了Linq Expression.
re: 从.Net类库代码来看Asp.net运行时 Lostinet 2007-08-22 18:07
为什么叫ResumeSteps而不是RunSteps或者ExecuteSteps,
是因为ResumeSteps完全是为了支持HttpApplication的异步事件和IAsyncHttpHandler而设计的.
re: 简单地谈一下如何动态构造Linq查询. Lostinet 2007-08-22 17:32
@宋国安
是的.
无论是from表达式,还是直接使用Queryable+Lambda的方法,
最后构造的还是Expression < Func < > >.
不过用语言来帮我们构造,不是很好吗?
也可以引申开来,
凡是接受Expression < Func < > > ,或Func < > 作为参数的方法, 都可以应用Lambda表达式.
re: 简单地谈一下如何动态构造Linq查询. Lostinet 2007-08-22 16:55
@木野狐(Neil Chen)
下面的编译通过.
Expression < Func < Order, object > > shipnameexp;
bool orderbyname = false;
if (orderbyname)
{
shipnameexp = order => order.ShipName;
}
else
{
shipnameexp = order => order.OrderID;
}
当用OrderID的时候,检查表达式时候抛出错误.
re: 简单地谈一下如何动态构造Linq查询. Lostinet 2007-08-22 16:49
@ 随风流月
我这个只是例子, 目的就是要它生成选择Order各列的语句. 用于分析.
@木野狐(Neil Chen)
普通的TEXT很应该Encode一下吧.
不然我的帐号被偷了怎么办? 好在我用的是IE, 用FireFox的要注意点了.
re: 简单地谈一下如何动态构造Linq查询. Lostinet 2007-08-22 14:56
@木野狐(Neil Chen) :
string customername="Great";
string shippername="Express";
bool orderbydate = false;
using (NorthwindContext nc = new NorthwindContext())
{
var query = from order in nc.Orders select order;
if (!string.IsNullOrEmpty(customername))
{
query = from order in query where order.Customer.CompanyName.Contains("Great") select order;
}
if (!string.IsNullOrEmpty(shippername))
{
query = from order in query where order.Shipper.CompanyName.Contains(shippername) select order;
}
if (orderbydate)
{
query = query.OrderByDescending(order => order.OrderDate);
}
else
{
query = query.OrderByDescending(order => order.ShipName);
}
Console.WriteLine(query.ToArray().Count());
}
或者:
Expression< Func < Order, string > > shipnameexp = order => order.ShipName;
query = query.OrderByDescending < Order, string > (shipnameexp);
--奇怪.博客园没有处理 < > ?
bbb iii
|