城市流浪猫
百度空间 | 百度首页 
 
文章列表
 
2009年12月01日 星期二 00:30

1、真的需要关系数据库吗?

关系数据库在很多领域(好吧,几乎是现在所有系统的标准配置)工作的很好,以至于甚至没有人去思考是不是真的需要这么做。

Twitter,Google,Facebook等诸多高并发,大访问量,高度动态的网站放弃了关系数据库。关系数据库带来了很多好处,当然也带来了很多坏处,关系数据库在处理极高并发请求的时候很容易形成性能瓶颈,更严重的是整个系统中最难扩展的就是数据库。应用扩展很容易通过横向扩展(加机器)来搞定,可是数据库不能,或是很有限。

上面提到的网站给了我们除了数据库以外的其它一些答案,或许可以给我们带来一些启发。

Google开发了BigTable,其它的则广泛的采用了NoSQL数据库(泛指非关系数据库)来解决极高压力情况下的性能问题和极大数据量下的数据存储问题。

其实从软件设计的角度来讲,仔细思考我们的系统,其实我们可以发现很多关系数据库限制了我们思维的地方,把思路走出关系数据库,或许我们的系统可能更优雅。

2、简单而广泛使用的三层(四层/N层)应用构架真的是银弹吗?

我深信一句话“没有银弹!”,或许这话让很多架构师绝望,可是这句话却给了工程师更多的灵感和威力!

现在主流的,但是真的就没有问题了吗?面向对象就真的和开发效率或是维护性矛盾吗?现在的系统真的简化了吗?

一个一个回答:首先,当然,大多数系统的分层设计可以简单的说就是混蛋设计;第二,面向对象和层次结构并不矛盾,只是可能划分方法不太一样,通过精心的设计,静态化的服务和面向对象,扩展性,易维护性不但不会变差,反而会更好,当然,我们需要一个强大的架构师,一定要让架构师走下神坛,培养更多的架构师,并让他们走出架构组,深入到项目中去,实际负责项目的设计架构工作,这样才有可能生产出优美的软件产品。最后,现在的这种纯层次结构,需求变更对开发人员来说是很郁闷的,而且几乎每次改动都要从DAL改到页面,貌似精心的分层不仅没有减少工作量,反正让开发非常麻烦的要去各层分散的修改维护。

3、应用的HotPlug真的有必要吗?真的没必要吗?

在WEB系统中,热插拔的组件化开发是否真的必要?是不是真的不必要?是不是非要OSGI?我们需要思考,或许我们可以找到更好的。

首先,我推荐在设计的时候考虑热插,虽然可能不需要。

至少,支持热插会让设计师在设计的时候尽量去减少依赖,尽量去提高内聚减少耦合。试想一样,如果我们的系统大到必须分布式的时候,分层的设计和热插的设计分别是什么样的?分层的系统,我们要把业务或是更底层一些的服务(非常多,因为仅仅是分了层,但是没有多少逻辑上的内聚性)整理成服务,分组,归类(很难,最初设计的时候没考虑到)然后拆分,应用系统就要跟着去修改接口调用,整理麻一样的依赖。而另一边,热插设计的系统,只用把功能组件的插入点稍加修改,就可以把功能组件完美的独立,因为它就是独立的……我们要做的只是适配一下让它适应远程调用的需求。

Osgi这样的动态服务架构可能真的不必要,现在很多基于OSGI的解决方案也不怎么成熟。但是OSGI的思想是非常有帮助的,我们完全可以在我们的传统SpringWeb应用上模拟他的很多特性而不引入OSGI带来的许多复杂性,正所谓取长补短。

 
2009年11月29日 星期日 06:45

看出来了吗? 下面图中上下两行图片的关系?

再来一张,这张去掉了更多的干扰,拼接效果比较理想,不过也去掉了太多信息。



是的,正如你所看到的,上面一行照片是下面照片的裁剪拼接合成的,如果你细细观察,还会发现其实左右两个边线也是可以拼接起来的,如果卷成个圆桶会是什么样呢?

先说到这儿,下回继续分解。

 
2009年11月29日 星期日 05:02

哎,杯具呀,找了国内各大博客网站,居然没有找到合适的博客站……国外的喜欢的又要被水产,想过用Appspot搭一个,但是也要被水产,没办法啊,伟大的天朝,渺小的Google……

换工作的事真让我头疼,呵呵,有些迷茫,有些思考让我更迷茫,现在我要做的也许只是下一个决定,不管走哪条路。面对迷雾,你有什么办法,不好使,重要的就是走出第一步,然后一步一步的走出去,总有明媚的阳光在迷雾之外。

重新开博,今后准备写些专业一些的技术文章,打造自己的影响力,说我功利也好,说我不行也行,无所谓,反正了解我的人都知道我根本不在乎这些。不过第一篇,呵呵就这么浪费了……

 
2009年11月24日 星期二 01:19
不算重新开博……临时发的……
用了Alpha混合,透视投影,旋转变换,+简单的键盘控制

1
#include <stdio.h>
  2 #include <math.h>
  3 #include <GL/glut.h>
  4
  5 GLint keytable[128] = {0};
  6
  7 void resize(int w, int h);
  8 void onkey(unsigned char key, int x, int y);
  9 void onkeyup(unsigned char key, int x, int y);
 10 void onspeckey(int key, int x, int y);
 11 void onspeckeyup(int key, int x, int y);
 12 void draw();
 13 void ontimer(int timer);
 14
 15 void fire_key_event(int key);
 16
 17 GLdouble rotate = 0.0;
 18 GLdouble rotate2 = 10.0;
 19
 20 /**
 21  * the enterance of the application
 22  */
 23 int main(int argc, char** argv)
 24 {
 25         /* initialize glut */
 26         glutInit(&argc, argv);
 27
 28         /* initialize the window */
 29         glutInitWindowPosition(200, 100);
 30         glutInitWindowSize(800, 600);
 31         glutCreateWindow("sence editor");
 32
 33         /* initialize display mode
 34            we use DOUBLE BUFFERS, DEPTH, RGBA colors */
 35         glutInitDisplayMode(GLUT_DOUBLE | GL_DEPTH | GL_RGBA);
 36
 37         /* enable blend */
 38         glEnable(GL_BLEND);
 39         glDisable(GL_DEPTH_TEST);
 40
 41         glBlendFunc(GL_SRC_ALPHA, GL_ONE);
 42
 43         /* handle events */
 44         glutDisplayFunc(draw);
 45         glutReshapeFunc(resize);
 46         glutKeyboardFunc(onkey);
 47         glutKeyboardUpFunc(onkeyup);
 48         glutSpecialFunc(onspeckey);
 49         glutSpecialUpFunc(onspeckeyup);
 50
 51         /* main loop */
 52         glutTimerFunc(10, ontimer, 1);
 53
 54         /* glut main loop */
 55         glutMainLoop();
 56         
 57         return 0;
 58 }
 59
 60 /**
 61  * the application's main loop
 62  */
 63 void ontimer(int timer)
 64 {
 65         key_rotate();
 66
 67         glutPostRedisplay();
 68         glutTimerFunc(10, ontimer, 1);
 69 }
 70
 71 /**
 72  * paint the sence
 73  */
 74 void draw()
 75 {
 76         /* clear the sence */
 77         glClearColor(0.0, 0.0, 0.0, 1.0);
 78         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 79
 80         glLoadIdentity();
 81         glRotated(rotate, 0.0, 0.0, 1.0);
 82         
 83         glPushMatrix();
 84
 85         GLint i;
 86         for (i = 0; i < 10; i++) {
 87                 glRotated(rotate2, 0.0, 0.0, 1.0);
 88
 89                 /* paint a triangle */
 90                 glBegin(GL_TRIANGLE_STRIP);
 91
 92                 glColor4d(1.0, 0.0, 0.0, 0.2);
 93                 glVertex3d(0.0, 1.0, -1.0 * i);
 94         
 95                 glColor4d(0.0, 1.0, 0.0, 0.2);
 96                 glVertex3d(-1.0, 0.0, -1.0 * i);
 97
 98                 glColor4d(0.0, 0.0, 1.0, 0.2);
 99                 glVertex3d(1.0, 0.0, -1.0 * i);
100         
101                 glEnd();
102         }
103
104         glPopMatrix();
105
106         /* flush and swap the buffers */
107         glFlush();
108         glutSwapBuffers();
109 }
110
111 /**
112  * handle the window resized event
113  * we reset the viewport settings and projection matrix
114  */
115 void resize(int w, int h)
116 {
117         glViewport(0, 0, w, h);
118
119         glMatrixMode(GL_PROJECTION);
120         glLoadIdentity();
121         /* glFrustum(- w/(GLdouble)h, w/(GLdouble)h, 1.0, -1.0, 1.0, 100.0); */
122         glFrustum(1.0, -1.0,- h/(GLdouble)w, h/(GLdouble)w, 1.0, 100.0);
123
124         glMatrixMode(GL_MODELVIEW);
125 }
126
127 /**
128  * map key state to the keytable
129  */
130 void onkey(unsigned char key, int x, int y)
131 {
132         keytable[key] = 1;
133         fire_key_event(key);
134 }
135
136 void onkeyup(unsigned char key, int x, int y)
137 {
138         keytable[key] = 0;
139         fire_key_event(key);
140 }
141
142 void onspeckey(int key, int x, int y)
143 {
144         keytable[key] = 1;
145         fire_key_event(key);
146 }
147
148 void onspeckeyup(int key, int x, int y)
149 {
150         keytable[key] = 0;
151         fire_key_event(key);
152 }
153
154 /**
155  * handle the key event
156  */
157 void fire_key_event(int key)
158 {
159         if (keytable[27] || keytable['q'] || keytable['Q']) {
160                 exit(0);
161         }
162 }
163
164 /**
165  * keyboard controlled rotate
166  */
167 void key_rotate()
168 {
169         if (keytable[GLUT_KEY_LEFT]) {
170                 rotate += 1.0;
171         }
172
173         if (keytable[GLUT_KEY_RIGHT]) {
174                 rotate -= 1.0;
175         }
176
177         if (keytable[GLUT_KEY_UP]) {
178                 rotate2 += 1.0;
179         }
180
181         if (keytable[GLUT_KEY_DOWN]) {
182                 rotate2 -= 1.0;
183         }
184 }
 
2009年09月25日 星期五 01:12
因本站曾出现过激言论,故本站自今日起自觉关闭,望见谅!
 
2009年09月14日 星期一 14:09
一个周末,更新比较大,主要提供了一个重大特性,呵呵

现在,JAILS支持子视图(控件)了。无限级嵌套,任意页面嵌套,上下文独立。
 
2009年09月11日 星期五 13:06
FK,还让不让上网了,能打开的全他妈脑残站,有用的全他妈屏蔽,什么世道
 
2009年09月07日 星期一 00:17
搞了一下,弄了个不错的效果出来,备份一下。

Rxvt.background:black
Rxvt.foreground:gray
Rxvt.colorBD:yellow
Rxvt.colorUL:green
Rxvt.multichar_encoding:gb2312
Rxvt.scrollBar:True
!!Rxvt.scrollBar_right:True
Rxvt.scrollBar_floating: False
Rxvt.scrollstyle: next
Rxvt.saveLines:1500
!!Rxvt.color0:black
!!Rxvt.color1:red
!!Rxvt.color2:#3a5da3
!!Rxvt.color3:#4b76cc
!!Rxvt.color4:RoyalBlue4
!!Rxvt.color4:#123f75
!!Rxvt.color5:magenta
!!Rxvt.color6:#a1b5dd
!!Rxvt.color7:#8a95aa
!!Rxvt.color8:#616668
!!Rxvt.color9:#075982
!!Rxvt.color10:#0f82bc
!!Rxvt.color11:#13a9f4
Rxvt.color12:DodgerBlue
!!Rxvt.color12:#3d99c6
!!Rxvt.color13:#63c2f2
!!Rxvt.color14:#6caccc
!!Rxvt.color15:#dbeff9
!!Rxvt.font:12x24
Rxvt.font:-b&h-lucidatypewriter-medium-r-normal-sans-17-120-100-100-m-100-iso8859-1,xft:WenQuanYi Bitmap Song-17:Normal
!!Rxvt.mfont:xft:WenQuanYi Zen Hei-17:Normal
Rxvt.menu:/etc/X11/rxvt.menu
Rxvt.preeditType:Root

效果图
 
2009年09月05日 星期六 23:56

概念:

在实现一个WebFramework的时候,要支持Control,那么如果在Control里向Request上下文里添加或修改了变量,不应该影响其父元素里的上下文。

例如:一个页面包含一个Control,页面处理的时候向上下文里放了个变量A=1,然后在Control里也向上下文里添加了变量A=2,控件渲染完成后,要求页面的上下文中A的值仍为预期的1。

实现方案:

引入一个上下文堆栈,在每一级的元素渲染前压入自己的上下文,上下文出入栈时自动与请求上下文同步。

 
2009年09月05日 星期六 13:35
在家闲着的感觉还不错
 
     
 
 
个人档案
 
zhzhxtrrk

四川 成都 
上次登录:
19小时前
加为好友
 
   
 
文章分类
 
 
 
 
 
 
 
     
 
最新评论
 
文章评论|照片评论


回复zhzhxtrrk:订阅是不需要以更新为理由的
 

回复Ray:真对不住呀,一直没更新啥子有价值的东西……
 
 

居然才发觉,老大博客又开通了。
 

鼓掌~~!!!
 
呵呵,似乎是。。。
 
《银河系漫游指南》啊
 
     
 
留言板
 

猫啊~我的博客和id都换了~~ 修改下拉~~
 

汗....你咋一直链的那个哦,我一直以为你链的是百度的呢...那个我的确是早就没用了的=...
 

回复0soul:但是我上面链接的是你自己域名那个啊,从来不更新的……
 

不是吧......我更新的可比你勤快多了呀 只是放假的时候没更新而已...
 

回复0soul:你那个从来不更新……就 干掉了。。。
 
     
 
订阅我的空间
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     


©2009 Baidu