oop从照猫画虎到庖丁解牛

http://ufqi.com/naturedns/search?q=-R/62St

oop从照猫画虎到庖丁解牛

回顾写程序之前的路基本都是由点及面,需求驱动和问题驱动的。这是懒人思维,某个功能被完成了之后则不再深究。至于优化则也是在应用中遇到问题然后走问题驱动的路子。这种照猫画虎的情形一直到前不久,连续并发地读了perl的oo设计,编译原理和swift语言参考,结合之前使用java的体会,竟有一种庖丁解牛般的豁然开朗。

对象object是某个类的实例。

类class是对相同事物的抽象。

抽象abstract是用相似的属性、行为、方法对待相似的事。

封装encapsulation 是将相互有关系的属性、行为、方法组合到一起。

继承inheritance 是龙生龙凤生凤、老鼠生儿会打洞。

重载override是大人吃饭用大碗、小孩吃饭用小碗。

多态polymorphism 是一职多能:如果多个对象对外提供了相同的接口,不管他们内部是如何实现的,他们都可以放入一个相同的场景被一致对待。一个生动的例子是显示动物园里动物的年龄–如果函数式编程需要遍历所用动物的生命周期并作换算,有oop之后只要对传入的对象调用theanimal.getAge即可。

反射reflection 是自我感知。程序能够像对待数据一样来操作另外的程序。类的加载及其状态的自述。

Object-oriented programming (oop) 的思想被发明出来并流行是因为他更接近现实世界。一些基础设施类极大地将程序员解放出来,更多的精力投入到业务逻辑(问题、需求)而非编程语言本身的细枝末节。

让程序自治,做更多的工作,这在编译时会有某种平衡的选择。同等情况下,oop的程序比之前的代码更耗费计算资源(低效),也就是用硬件资源换来开发与维护的便利便捷。

幸运的是,计算资源成本不断下降,程序设计人力成本不断上升。oop的提出使得使用自然语言编程成为可能。以上所列的各种名词虽然陌生但换成客观世界的事物就容易理解多了。各种编程语言都讲提供对oop思想的支持。

对oop的认识需要一个过程,这一过程深切体现了人是会变的这样的大主题。

在我进县城读高中之前看到城里女人化妆精致的像个鬼一样,大学毕业在城里工作久了回乡看到曾经熟悉的姑嫂妯娌不化妆粗旷的像个鬼一样;刚参加工作发现高级餐厅戴围嘴吃饭属于多此一举的做作,等我开始关注皮鞋上是否有灰尘时发现穿浅色衬衫吃饭没戴围嘴吃不定心啊…… (可以脑补胖少将戎装接受采访时胸前的油渍的画面)

photoshop-beauty

在学习上,对oop的认识也有这样的经历,从照猫画虎到了然于胸地庖丁解牛。swift中既保留了c中传统的struct集合变量又增加了对oop的class的支持可以预见未来编程语言的趋势。在语句断句上swift不再强制用;,但也支持使用\n作为语句结束。总觉得用可见字符;作为断句标志比用不可见字符\n作为结束更好,能够增加程序的可读性,去免歧义。

————

2015年3月29日夜于回京的火车上。

————

2016年4月初,读 Artificial Intelligence: A modern Approach , 其中对状态的描述中,将描述状态的种类分为 atomic, factored 和 structured , 如下图所示:

对象的表述-201604

这图能较好地解释,对象及其关系。

发表在 社会生活, 编程技术, 计算机技术 | 标签为 , , , , , , , , , | 留下评论

床上电脑桌大学生宿舍上铺懒人可折叠小桌子家用寝室简约学习书桌京东制作护发素发膜正品修复干枯免洗家用护发补水顺滑女士发热焗油膏捐助乌克兰Help Ukraine

nppftp, ssh,Short sftp packet!

NppFTP 在连接过程中报这个错误:

Connecting
[SFTP] Host key accepted
[SFTP] Successfully authenticated
[SFTP] Error initialising sftp: Short sftp packet!
Unable to connect

说明ssh认证已经通过,但sftp的服务有异常。

经检查,是由于sftp的服务没有开启。

原因是在一些64位的系统上,sftp的默认目录指向  lib64, 而应用程序本身仍在 lib 下面,所以出错了,做如下调整即可。

# override default of no subsystems
#Subsystem sftp /usr/lib64/ssh/sftp-server
Subsystem sftp /usr/lib/ssh/sftp-server

发表在 服务器运维, 计算机技术 | 留下评论

UfqiNews有福常在Google Books亮月亮科技Apache Softwares

几组公用的DNS服务

前段时间,新浪云计算的 @丛磊 同学来布道 SAE (Sina AppEngine),其中提到高可用的在线服务时,首先从DNS要做起,然后解构了Tencent的基于HTTP的DNS服务,认为做得不错,但是私有的。其他同学和广大用户可以在运营商之外选择一些稍微靠谱的公共DNS服务(仅递归解析,不涉及到域名管理),以下列举一些:

1. Google Public DNS   8.8.8.8    备用8.8.4.4
Google提供的公用DNS,全国各个地方ping基本上都是几十ms。如果不介意访问国内网站速度慢,首选ing,毕竟Google还是值的依赖的。

2. 百度 公共DNS 180.76.76.76
不理解为何备用的DNS填写的是 114的?

3. 114  DNS      114.114.114.114   备用114.114.115.115
从现阶段来看,还是最适合国内用户使用的DNS,国内网站明显快于Google DNS,ping值特别快,国外网站访问也优于本地ISP提供的DNS。

4. 阿里 公共DNS          223.5.5.5       223.6.6.6
阿里公共DNS是阿里巴巴集团推出的DNS递归解析系统,目标是成为国内互联网基础设施的组成部分,面向互联网用户提供“快速”、“稳定”、“智能”的免费DNS递归解析服务.

5. open DNS     208.67.222.222     备用208.67.220.220
老牌DNS了,不过访问国内网站真的很差劲,ping值一般大于200ms,建议常出国的朋友使用。

5. DynDNS    216.146.35.35   216.146.36.36
该厂的服务或也可以信赖。

6. 诺顿 DNS    199.85.126.10 and199.85.127.10
杀毒软件出品的DNS,国内除了移动外,其它ISP不知原因ping不通,谁能告诉我原因,难道还得安装诺顿才能使用?

 

发表在 服务器运维, 计算机技术 | 留下评论

老板选址BossXuanzhiUfqiFina有福金融UfqiWork有福工坊UfqiNews有福常在

json在PHP, Perl,Shell和Javascript中的应用

最新在写一些东西, -URL4P , -MobXpc 以及 -People-FwNews 时,分别遇到在PHP, Perl,Shell和JavaScript中使用JSON的情况,分别记录之。

1. PHP中的JSON
新版的PHP中已经内置了JSON操作的两个函数:
$jsonText = json_encode($dataArray);
$dataArray = json_decode($jsonText);

2. Perl中的JSON
需要在Perl中安装 JSON 模块,然后在程序中
use JSON;
my $json = JSON->new->allow_nonref;
my $dataHash = $json->utf8->decode($jsonText);
my %dataHash = %{$dataHash};
my $jsonText = $json->utf8->encode($dataHash);

3. Shell中的JSON
Shell中读取JSON需要借助外力,使用 jq 命令( jq is a lightweight and flexible command-line JSON processor.),然后在Shell的相关程序中,
config_instance_id=`/usr/bin/cat myconfig.json | /path/to/jq ‘.instance_id’`;
如果不这么做,可能需要组合应用sed, awk, grep 才能完成上面的任务。

4. JavaScript的JSON
JavaScript中操作JSON,可以自行写逻辑,也可以借助外力现成的包,比如 http://www.json.org/js.html 这里就有一个封装好的包,
在即将发布的新版(2015)的ECMAScript(JavaScript)标准中会提供对JSON的原生支持,操作起来是这样:
var myJSONText = JSON.stringify(myObject, replacer);
var myObject = JSON.parse(myJSONtext, reviver);

在格式文本表达上,预计JSON比XML走得更远。

One More Thing,
5. Java的JSON处理
使用 org.json 编译到当前项目中即可使用,详情在  http://www.json.org/java/index.html

发表在 服务器运维, 编程技术, 计算机技术 | 一条评论

捐助乌克兰Help Ukraine老板选址BossXuanzhiUfqiFina有福金融UfqiWork有福工坊

化干戈为玉帛:平息争执的四个方法

dispute

上周六(2015Mar14)雾霾的很厉害北京,人大的大人们还在照常地开着会,似乎不受天气的影响。我们没法外出活动,就和Yoyo同学约好了在楼道里进行跳绳比赛。

说好了谁先跳到200谁赢,然后商定由我先开始。我很努力,居然第一跳成绩越过70,80,90,99,100个!当我兴奋地喊出破纪录的跳绳成绩时,在一旁转悠一圈的Yoyo说,只有80,她计数的就是八十,尽管她中途离开我的视线,我也离开她的视线,她坚持说通过我每次落地的声音准确计数,我只有80下成绩。

我很不解,明明自己精确地计数是100个,她怎么能说只有80呢?双方开始互不相让,甚至得寸进尺,由说理发展成争吵,然后就是互相“肢体接触”地推搡…. 一场大战迫在眉睫、一触即发!

她恨不得给我两个耳光,就像我想揍她一顿一样,在关于荣誉的比赛中,她总是据理力争,我也不想轻易退让,因为我太有理由相信自己的边跳边数的准确性了;而她也认为自己根据跳绳人的双脚落地的声音来计数的也没错,而且我之前的确没有一跳可以上80、90以上。

想起这些,我觉得应该怀疑自己,会不会是自己错了?顺着这个思路我想跟Yoyo一起上一堂花干戈为玉帛的体验课。

我先对Yoyo说,现在谁也无法说服对方,这样一句一句的争论没有意义,我先承认,可能我错了,或者是98个,或者102个。同时,是否可能Yoyo同学也会有犯错的可能,比如是78个或者82个?她不承认,说没有错,她不可能错的。我说,不对,Yoyo,每个人都可能犯错;我曾经在下班时忘了打卡,Yoyo没有犯错过吗?我记得上次你的考试只有98分哦…..

于是,Yoyo勉强地接受了,我会犯错,她也有可能犯错,每个人都可能犯错。这样说的话,我们两个人的计数成绩都可能有错,那谁的错了,谁的对了呢?仍然是互相指责。于是我们进入第二步,怎么能达成一个双方都能接受的结果。

首先,Yoyo提出,让我再跳一次,我不答应,理由是吃第一碗面跟吃第二碗面的感觉肯定不一样,我当时跳完100个之后已经是气喘吁吁,如果跳第二次肯定无法达到100个,所以这个方案没法通过;

其次,我提议,能不能双方各让一步,Yoyo不要坚持80次,视为90次可以吗?我也不要坚持100次,减少10次,可以吗? 我觉得不行,Yoyo也坚持相信自己没记错,求平均数的法子仍没法达成一致;

再次,我们商量,如果有第三个人计数就好了,可是没有。没关系,我们可以将这个状况说给第三个人来听,请其来裁决,这个方案,我们都觉得能接受;

第四,我们还商量出第四种办法,就是比如仍互不相让,但可以利用“分歧终结者”——石头、剪子、布——这样的神器,来解决我们的矛盾,通过划拳,碰运气的方式来达到一致的看法。

后来,我们一致通过,将现状及矛盾转给Yoyo的妈妈来做决定,事前承诺,无论Yoyo妈妈做出什么判断或者决策,我们都支持并视为终裁。其结果是,我的这次跳绳成绩被计为80次。

尽管直到现在我仍认为,那次跳绳我的成绩真的是100次,但还是在后来输了,被Yoyo后来反超,我的第二次跳如预期的那样差。我不明白Yoyo信誓旦旦地说她的计数80次时从哪里来的自信?

人将自己视为真理,可能是所有争执的起源,所有战争的导火索。

虽然我输了那次比赛,我想以后、若干年后,或许Yoyo还会遇到与别人其争执的情况,或许她能够知道争执的根源以及解决的四个主要方法。

—-

2015年3月19日夜于通利佛尼亚州(Tonlifornia).

===============================

后记,再下一个周末,我们为了继续跳绳而有没有计数的烦恼和争执的诱因,购买了能够自动计数的跳绳。

此举一下子另跳绳欢快了不少,再也不用为计数是80和100而困惑了,透明度大大增加。

科技的进步是可以改变社会生活的。

发表在 社会生活 | 3条评论

得力彩色铅笔油性彩铅学生用专业手绘48色水溶性彩铅笔24色画画笔36色小学生安全无毒水溶款绘画素描儿童铅笔医用外科口罩一次性医疗专用口罩防尘透气成人三层防护透气医生床上电脑桌大学生宿舍上铺懒人可折叠小桌子家用寝室简约学习书桌京东制作

-MobXpc:给没秘书的人的跨屏传送工具

-MobXpc 是一个便捷的跨屏数据传送工具,为那些很忙碌而又没有秘书的人士制作的。零安装、免通道,随时随地进行跨屏文件、文本和数据的传输。

mobxpc-201503(这张图就是手机截图后经由 -MobXpc  传到PC上)

基于浏览器的 -跨屏数据传送 的便捷传送工具。主要应用场景:

  • 多个用户之间,甲、乙、丙、丁、A、B、C、D等之间互传分享;
  • 多个设备之间,手机、Pad、PC、笔记本、智能手表和智能电视等设备之间共享;
  • 多个用户在多个设备之间传送共享;
  • 其他需要跨屏传送的场合。

Mob 和 PC 分别代表移动终端和固定终端, X 代表双向流通的意思,-MobXpc 可以将数据从 Mob 发向 PC , 也可以从 PC 发向  Mob 。

电子设备的普及,越来越多的网民,互相需要传送、分享;每个人可能有两个以上的屏幕设备,互相之间需要共享。在这些设备上传送、共享内容有各种各样的实现方式:数据线、云盘、即时通信工具的文件传输助手、电子邮件等。

其中每一个方法都对用户或者设备有一定的要求,数据线得随身带着;云盘需要安装客户端,需要等待文件在不同客户端上的异步通信;即时通信工具需要先安装,然后建立好友关系之后才能传;电子邮件需要设备支持(安装客户端),然后设置SMTP/POP/IMAP等帐号信息等等。

另外还有一些,比如基于蓝牙的或者红外的对接,基于彩信的文件发送等方式,这些相对上面的方法较原始。当然不能忘了复制传播的祖宗软盘、光盘和U盘,这就更老远了,已经逐渐被淘汰。

-mobxpc 是基于浏览器,使用HTTP协议传输,以WebApp形式呈现,集合了 -自然域名 ( -NatureDNS ) 、 二维码 和 -URL4P 等功能,让用户在跨屏传送时能够无障碍地进行。 -MobXpc 也是 -google 的 Web Fundamentals (-R/d2SY ) 的一个实践,亦是研究项目“多屏互动课题”的成果之一。共享数据的两端:

1. 无需安装客户端
2. 无需建立“关系”
3. 随时随地

-MobXpc 还有如下 -自然域名 可以使用: -跨屏传送 , -跨屏数据传送 , -跨屏数据传输 , -跨屏传输 , -Mob2PC , -PC2Mob  。

大约在四年前,我想做一个类似百度知道、-Quora、-experts-exchange、-stackoverflow 和 -知乎 一样的问答社区,在建外SOHO向一个投资人说这个项目时,我问老板,当你有问题时,你一般怎么做?当时期望的回答是,网上找找或者需要一个问答的社区之类的,老板说,他有疑问或者有什么想知道的问秘书或者助手就行了。我一时无法接下去了。事后知道,问答社区这样普惠型的产品并不是面向所有人的。

同样地,-MobXpc 也不是面向所有的人,那些有秘书/助手的人,要做个跨屏传送的工作,交给秘书/助手就行了。而没有秘书的人,或者给老板做秘书的,最好能知道有 -MobXpc 这么个工具可以用它快速解决掉老板的问题。

进一步地想,有秘书/助手的人,除了吃喝拉撒需要亲历亲为,其他的是否都可以交待出去?

mobxpc.20150130

发表在 -NatureDNS/-自然域名, 服务器运维, 社会生活, 编程技术, 计算机技术 | 2条评论

UfqiNews有福常在Google Books亮月亮科技Apache Softwares