朋友们,我的D2之行

D2开始了,然后又结束了。很快,但留给我深刻的印象。这一届D2,我遇到了一些旧的
朋友,看到了一个新的开端。一些故事发生了,很快在消失。然而D2,很快的又会到下
一届了,我想……


一、故事的开始
==========

来到北京之后第一次上网,就从我的MSN空间里看到一条消息,是克军发来的。克军,我
并不认得,但他在消息中提到一件事:约我做第二届D2的讲师;提到一个人:Hedger Wang。

至于克军是Who,大家去看他的相册好了。满满当当的一大柜子:
http://flickr.com/photos/kejun/tags/d2

先说Hedger Wang。大概是在四年之前,或者再早一点。我大概是在做一个项目时,用到
了Hedger的一段JavaScript代码(是图遍历的),于是加了他的MSN,给他知会一下,征
求他的同意。随后我们成了朋友,我知道了他是在台湾Yahoo,而他知道了我是一个用Delphi
来做程序的开发人员。

后来Hedger就去了美国Yahoo,他去Yahoo之前我们还一直联系着,交换着旅游的照片,我
给他看西藏、内蒙,他就给我看台湾的照片,哈哈,很开心的一段时间。聊着天,讲着台
湾的选战……后来他就去了美国Yahoo。因为时差的缘故,我们能一起在MSN的时间就很少
了。而过了不久,因为一点非常意外的原因,又在MSN上认识了他哥哥。一谈起来,我们
的兴趣又有接近的地方,于是……


(有了绿叶,后面的Hedger就更夺目了~~)

然而毕竟还是不太常见Hedger了,最没想到的是Hedger会来D2做讲师,而巧合的是我也在
被邀请之列。于是,当然的,不因为别的任何原因,我也要去的。所以我回了个消息给克
军,不久便确定了我在D2上的演讲主题。


二、主题
==========

克军之所以找我,大概会与我在SD2C大会上做的《JavaScript引擎技术》有关,也或许是
出于另外一些朋友的推荐。但他没有限定我在D2上讲什么话题。而我呢,其实向来不喜欢
不停地讲同一个东西——从这一点上说,我做不了专职讲师或某某领域的布道者,所以我
的确不打算重复SD2C上的内容,或者以新书《JavaScript语言精髓与编程实践》为话题
——因为事实在SD2C上的讲演就是以这个为话题的。

既然不打算讲JavaScript开发方面的技术问题了,那么总得讲点什么。而我大概在三年前
就开始写一本名为“B端开发”的书,但后来放弃了(变成了现在这本新书)。而所谓“B端”
就是“浏览器端”,其实讲的就是前端开发,其中有很大一部分是设计思想相关的。后来,
在05年到07年我在盛大任架构师期间,参与了盛大盒子平台设计,这个过程中对用户界面
设计、功能设计、用户流程、用户体验等设计技术,以及有关将UI从应用功能中分离出来
的实现技术都有较长时间的涉及,这促使我在这次D2中将话题选在“设计与设计思想”上,
而不是某种具体、以实现方法为中心的设计技术或开发技术。

克军当然是不了解我这样选择的背景的,不过他还是支持了我的选择。尽管我认为他和Hedger
一样,对我的这个选择充满了担心。事实上,在D2第二天,Hedger就问我为什么会选设计
话题而不是技术开发呢,因为他觉得那本《JavaScript语言精髓与编程实践》上的内容就
很好,就很值得一讲。而我当时的回答,就是“不想讲重复的东西”。

当然,还是有一点私心的。我习惯自己做总结,对过去做过的事、或者历经过的思考做反
思——我想,一个人的经历是重要的,而不是这些经历的结果。而这些所谓经历的体现,
便是个人的反思了。所以这次我在D2中讲演,其实就是我的反思。


(D2开讲)


三、三本书
==========
作为一点小小的宣传,我带了三本书到现场。另外还给Hedger带了一本。因为来得比较
早,于是跟joy找了个位置坐下,不久便远远地看着Hedger来了,过去跟他打打呼的时候,
一点都不陌生,然后随便地聊天。他很惊讶我在书中讲到的用JavaScript实现Aspect,我
则告诉他不但有Aspect,还有完整的Interfaces。哈哈。

随后就是开场、讲演。我的段落控制得还不错,时间刚刚好。用了三个问题,把三本书送
了出去。三本书的签名是很有趣的。第一本签的日期是2008.03.29,是这本书发布的时间,
而且的确是当天(就是优快云的英雄大会那天了)给china-pub签售时签的,当时自己买了
两本,留给自己的,没想到用上了。而第二册签的是D2大会的当天时间,第三册则没有签
时间。我当时解释说,我希望今后还能有机会见到大家,如果这样,我可以再把第三册的
时间签上。

事实上,这三本书也是一个“源、流、汇”的意思,不知道得到赠书的朋友可有留心这点
小小的设计。至于那个“汇”字,在古文中是与“会”通假的,也算是大家能再会于D2的
一个期愿吧。


四、源、流、汇
==========

源、流、汇其实是这次的一个非常重要的话题。但我临时地缩减了它的时间,因为这毕竟
相对更“空”一些,不太适合在一个技术为主的论坛上多讲。所谓源、流、汇,其实首先
是以内容为中心的互联网络的一个抽象。你可以看到WEB的核心就在这三个字上头,因为
事实上WEB的核心就是内容。

做源的有没有?有,例如每一次变革的这些先驱者们——在所谓WEB2.0的时代,你不认为
那些RSS、Ajax技术等等的倡导者就是“源”吗?就如同当年TCP/IP、以及URL之类的协议
被创生的时代,谁又能洞见到今天WEB的发展呢?然而,正是那些TCP/IP、URL等才是WEB
之源。

再如流与汇,实际是一个事物的常态与瞬态的关系。汇其实总是流的一部分——没有真正
的汇,它只是瞬态的。我之所以拿Yahoo来做汇的例子,便是想说Yahoo把一个瞬态的东西
做成了常态,没有变化——只能试图无限地做大,而又不能真正地“无限”,所以结果是
它的发展道路上总是有阻碍的。而这阻碍,就好象冰之于水露,石之于河泽,如果你看成
是瞬态,就解脱了;看成是常态,就僵死了。

很高兴还是有人从这个话题中看到了佛禅的味道,看到了我想说的一些东西。这,我已经
很是满足了。大家不访看看putcn的博客:
http://putcn.spaces.live.com/blog/cns!8E4E6BD4CF08FC13!994.entry

源、流、汇引导出的话题,就是WEB1.0是以内容为中心的。然而,接下来的话题是WEB2.0,
我表达的观点是:WEB 2.0是以用户为中心的,从内容粘性走从功能粘性,从广告模式走向
体验店模式。这是基本的观点,在这个观点之后展开的,就是WEB 2.0中的设计方法与关注
点。这些就是具体的技术话题了。

然而那样漫长的讲演之后,可有人想过一个问题吗?——所谓功能,难道不是内容的一种形
式吗?所谓“以用户为中心”,如果看成“以满足用户需求的功能——这样一种内容”为中
心的话,那么整个的模式不仍旧是源、流、汇的问题吗?

任何东西,简单到一定的程度时,便没人会留意到了。例如源、流、汇,原本只是水流的形
式,水无常形,势无常态,而这三个字,却概念了全部的水系。为什么呢?


(被偶然拍到的三人组,偶听讲的时候也很认真地...)


五、UC/UCC/D2,E2,C2
==========

我并不是太喜欢搬概念的一个人,我读书的时候就尤其痛恨概念。但是,在我开始思考问题
的时候,我不得不借用或创生一些概念名词。只有有了这些名词,我才能把问题陈述清楚。
我后来专门地看过思想方法的书籍,这是因为抽象思维的第一要素就是概念定义——如果没
有明确的概念与定义,那么不可能进行有效的抽象思维。

所以我不得不将我这两年多来的工作定义在UC/UCC之样的名词上。其实说穿了,所谓“玩虚
的”,就是因为那些一直在“做实”的人看不明白:那些所谓的虚,其实是做实之后的总结。
到了一个两个的名词上的时候,已经是精化了——所以也就显得虚了。

我完全不反对说“深入浅出”。然而于我自己而言,仍然在反思的阶段,仍然在“定义名词
概念并深入思考”的阶段,我又何能给大家“浅出”呢?所以我一再强调,D2上的话题,是
我的反思。但于听众而言,能理解多少,取决于经历了多少,以及反思了多少。我没有办法
把这些讲得更“浅出”,因为我的功力还不够。

那么UC/UCC/D2,E2,C2是什么呢?下面这张图就讲的是这个,看幻灯的朋友可以翻到第55页。
听说过些天现场的录像要出来,那就更好了。——我说过,我不喜欢重复讲,所以大家便去
听好了。哈哈。
图呢,在Borin的博客里有,我就不单贴了。在这里去看便是:
http://rlog.cn/234
这套幻灯比较大,我找不到地方放了,回头等D2官方发布吧。这里应该会有新消息:
http://club.cn.yahoo.com/day2

六、朋友
==========

中午吃饭的时候叫了克军,但他却坚持要跟Yahoo的同事们一起坚守战线,所以未能成行。博
文这次安排了几位编辑策划过来,她们对我讲的话题倒是很有兴趣。只可惜午饭没能约在一起
——Hedger下午还有讲演,急急地便促着要走了。

正好看到了图灵的总编刘江老师,便拖到一起,满天满地地找饭馆happy去了。与Hedger谈笑
之间,才知道台湾人民对大陆的误会有多深。因为Hedger见到一本外版书被国内翻译出版了,
出版社是“人民邮电出版社”——就是图灵的上家了,便认定是“盗版”了,说他认为出版
社不可能由“邮电”这样的机构来做,肯定是盗版者随便取的名字。

哈哈。刘江老师大大地喊冤。是啊,在台湾或许是不能。但在大陆,出版机构最早都是国企
或政府机构下的单位,象清华出版社这种挂在院校下的并不象想见的那么多的。要按照Hedger
的理解,大概机械工业、电子工业这些,也全成了盗版总源头了。哈哈哈。

所以刘江老师便跟Hedger谈开了整个中国出版业的发源与经历,什么体资改革呀之类,也不
管我们的台湾朋友听不听得懂。不过说实在的,Hedger对中国近代的、以及建国以后的历史
很感兴趣,我们谈得很广泛。相互推荐了很多的书。

下午再回会场,又见了月影。在前端开发者的会议上,要是不出现他,大概就是不正常的了。
跟他聊了聊他的书,聊了聊一些JS的东西,他便要到前排去听Hedger讲了。我在听Hedger的
内容时打了个盹,没法子,他讲的前半部分是基于PHP的RPC,我很早先便用过。而后半段,
则讲的是客户端数据(请求)缓存,以及相关问题的解决方案。这倒是很有些新意的。

在听Hedger的讲时,Nate Koechly坐在我的旁边。他总是面带笑意的,很亲切。但我的E文
实在不过关,尝试问了一下他能否用中文交流后,放弃了——我居然用中文问他的,哈哈,
他要听得懂才怪,后来想想,这个E文的问句我还讲得出来,只是不习惯,所以当时便没这
么讲。Nate给我发了一个YUI的即时贴,很有趣,他的本本上全是贴的类似东西。后来Nate
的讲演我全程听了,结合着他的幻灯,他讲的内容我大概还听得明白。简单的说,就是YUI
很好很强大。往复杂里看去,大家去找视频吧。顺便做个广告,他的讲演是当天最好的,
幻灯也做得最好。哈哈。

总的来说,吃了好几顿饭。台湾朋友的礼数总是很讲究,我请了Hedger饭饭,他便非要回请
不可,这个就不跟他争了,成人之美,也是好事。这顿饭约在周日晚上,席间有两位Yahoo
的工程师作陪,可惜他们没带名片,Hedger也没有一一介绍,所以尽管我们谈得很欢,但名
字却没有记得。哎~~~朋友嘛,一定要知名的么?

所以,名字并不重要,重要的是我们成了朋友。下一届D2,我们再会。如同我最后签名的那
本书一样,时间并不重要,重要的是我相信这个时间一定会到来的。


(我与笑呵呵的刘江老师)

#include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i,s,t) for(register ll i = s;i <= t;++i) #define per(i,t,s) for(register ll i = t;i >= s;--i) const ll N = 1e5 + 5; ll n; bool flag; ll num[N] = {}; ll cnt[N] = {}; string s = ""; deque <ll> q1; deque <ll> q2; inline ll read() { ll x = 0; ll y = 1; char c = getchar(); while(c < '0' || c > '9') { if(c == '-') y = -y; c = getchar(); } while(c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ '0'); c = getchar(); } return x * y; } inline void write(ll x) { if(x < 0) { putchar('-'); write(-x); return; } if(x > 9) write(x / 10); putchar(x % 10 + '0'); } int main() { cin >> s; n = s.size(); s = " " + s; rep(i,1,n) cnt[s[i] - '0']++; rep(i,0,9) num[i] = cnt[i]; rep(i,1,9) { if(cnt[i] > cnt[9 - i] && num[10 - i] > num[i - 1]) { q1.push_front(i); q2.push_front(10 - i); cnt[i]--; num[10 - i]--; flag = true; break; } } if(!flag) { rep(i,1,9) { if(cnt[i] && num[10 - i]) { q1.push_front(i); q2.push_front(10 - i); cnt[i]--; num[10 - i]--; break; } } } rep(i,0,9) { rep(j,1,min(cnt[i],num[9 - i])) { q1.push_front(i); q2.push_front(9 - i); } cnt[i] -= min(cnt[i],num[9 - i]); num[9 - i] -= min(cnt[i],num[9 - i]); } while(cnt[0] && num[0]) { q1.push_back(0); q2.push_back(0); cnt[0]--; num[0]--; } rep(i,0,9) rep(j,1,cnt[i]) q1.push_front(i); rep(i,1,9) rep(j,1,num[i]) q2.push_front(i); while(!q1.empty()) { write(q1.front()); q1.pop_front(); } putchar('\n'); while(!q2.empty()) { write(q2.front()); q2.pop_front(); } return 0; } #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e3+5; int read() { int ret=0,f=1;char c=getchar(); while(!(c>='0'&&c<='9')) { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') { ret=ret*10+c-'0'; c=getchar(); } return ret*f; } string s; int len,cnt[N],p[N]; deque<int> d1,d2; void solve() { cin>>s;len=s.size(); for(int i=0;i<len;i++) cnt[s[i]-'0']++; for(int i=0;i<=9;i++) p[i]=cnt[i]; int flag=0; for(int i=1;i<=9;i++) { if(cnt[i]>cnt[9-i]&&p[10-i]>p[9-(10-i)]) { d1.push_front(i);d2.push_front(10-i); cnt[i]--;p[10-i]--;flag=1;break; } } if(!flag) { for(int i=1;i<=9;i++) { if(cnt[i]&&p[10-i]) { if(cnt[i]&&p[10-i]) { d1.push_front(i);d2.push_front(10-i); cnt[i]--;p[10-i]--;break; } } } } for(int i=0;i<=9;i++) { for(int j=1;j<=min(cnt[i],p[9-i]);j++) { d1.push_front(i); d2.push_front(9-i); } int k=min(cnt[i],p[9-i]); cnt[i]-=k,p[9-i]-=k; } while(cnt[0]&&p[0]) { d1.push_back(0),d2.push_back(0); cnt[0]--,p[0]--; } for(int i=0;i<=9;i++) { for(int j=1;j<=cnt[i];j++) { d1.push_front(i); } } for(int i=1;i<=9;i++) { for(int j=1;j<=p[i];j++) { d2.push_front(i); } } while(d1.size()) { cout<<d1.front();d1.pop_front(); } cout<<endl; while(d2.size()) { cout<<d2.front();d2.pop_front(); } } signed main() { solve(); return 0; } 为什么第二段代码AC,第一段代码WA? # CF138B Digits Permutations ## 题目描述 Andrey 最喜欢的数字是 $n$。Andrey 的朋友们在新年送给了他两个相同的数字 $n$。他把它们挂在墙上,满怀喜爱地注视着它们。 后来,Andrey 看腻了同样的数字,于是他开始交换这两个数字中的数字顺序,先在第一个数字里换,再在第二个数字里换,然后又在第一个数字里换,如此反复(每个数字可以进行任意次数的交换)。某一时刻,他发现,如果将这两个经过重新排列的数字相加,所得的和末尾的零的数量在所有可能的排列中达到了最大。 给定数字 $n$,你能找出满足上述条件的两个数字排列吗? ## 输入格式 第一行包含一个正整数 $n$,即原始数字。该数字的位数不超过 $10^{5}$。数字没有前导零。 ## 输出格式 输出两行,每行一个 $n$ 的数字排列,使得这两个数字相加所得的和末尾零的数量最大。排列可以有前导零(如果有的话,全部输出)。两个排列可以相同。如果有多组答案,输出任意一组即可。 ## 输入输出样例 #1 ### 输入 #1 ``` 198 ``` ### 输出 #1 ``` 981 819 ``` ## 输入输出样例 #2 ### 输入 #2 ``` 500 ``` ### 输出 #2 ``` 500 500 ``` ## 说明/提示 由 ChatGPT 4.1 翻译
最新发布
10-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值