当前位置: 首页 > news >正文

[技术八卦]放毒记

这是关于上周末Delphi版聚的记录。

放毒一词源于摄影器材论坛:旦凡有人在坛里大肆鼓吹某些高级器材——比如Leica机、Zeiss头一类的(此即为放毒),往往导致观者心痒难耐(此为中毒),最终忍不住大出血,也去败了回来(毒发)。

当然这回我放的毒都是技术毒。

算 下来我们这一帮人,大多已经不怎么拿DELPHI作为主要兵器了,于是便扯的都是别的技术。549谈的是MS的测试技术,大风则是谈JAVA,我当然谈开 源,主打便是FreeBSD/Linux、PostgreSQL、Python/Ruby等,顺道批判了一下RAD/IDE。

FreeBSD/Linux 的安全性那是地球人都知道——当然有人说,Windows配置得好也很安全,但是要把Windows配置到安全那么好,所需要的技术含量并不比 FreeBSD/Linux要少。更何况绝大多数人都是默认安装的,而Windows的默认安装有多不安全那是勿庸置疑的。而且我认为,相对来说,基于源 码安装应用程序的FreeBSD比基于二进制安装的Linux更加安全(见《安全意味着麻烦》)。

大风问我:*nux相对于Windows,除了安全性以外,还有什么好处?

我 开始还真愣了一下,安全就是最大的好处了嘛。不过想了想,还是想到一些,比如性能。我是在虚拟机上装FreeBSD的,因为是纯粹的服务器,没有装 Xwindow,性能还是相当不错的。而Windows即使是做服务器用,它的GUI部分也是集成在内核里的,白白消耗资源,一点都不环保。

再 有就是软件安装的方便性。比如在Ubuntu下,一个包管理器(其实还是更喜欢用apt-get install)可以安装几乎所有应用软件,哪像在Windows下,还要自己到处去找,说不定下载来的软件里还有流氓插件。至于FreeBSD就更好 了,Ports里都是源码安装的,自己更改编译选项,可以保证你不需要的东西一点都不会出现在你的电脑里。

考虑到人力成本的因素,用*nix做服务器的TCO可能的确会比Windows高,但是得到的结果绝对要好得多——远远超过那一点点TCO的差别。

至于PostgreSQL,我在《选择什么数据库》里也说过了,在管理的易用性和开发的方便性方面,它并不比MS SQL差多少,而功能和性能也差不了很多——更何况它还是跨平台的。而安全性则无疑要比MS SQL要好一些——特别是在非Windows平台下。

还有动态语言。现在已经习惯了,在自己用的每台电脑上装上Python,手边也写了一堆的小工具脚本——大多都是几行代码的东东,要是换成原生开发工具,还不知道要多麻烦,更别提跨平台了。

前 一段玩matplotlib感觉很爽,后来又因为Django/TurboGears的关系,又玩了一段SQLAlchemy(一个Python的ORM)。 ORM是个好东东,但是在原生开发中(包括基于虚拟机JAVA/.net里),ORM的实现都太丑陋,又难用,剩下的唯一好处大概就是性能了。但是在动态 语言中,ORM是如此的自然,仿佛数据持久化已经不存在一般,真正做到了专心处理逻辑而不必再为持久化所困扰。为了这个好处,我愿意牺牲那一点点性能的损 失——实际上,对于大多数数据库应用来说,数据库的性能往往才是整个应用的瓶颈。

再加上框架。RoR自不必说,Python下的 Django和TurboGears也都是好东东。也许用惯了IDE的人很难理解,这样的框架居然可以比IDE有更好的易用性。但事实就是如此。IDE看 上去简单,拖拖控件而已,但是还是有很多事情需要写代码,而且代码与界面搞在一起,简直惨不忍睹。而RoR类的框架下,要做的事情只是写几行代码。是拖几 个控件简单,还是写几行代码简单?后者只要一个最简单的文本编辑器就可以做到,而前者离开了IDE则一事无成。

说到编辑器,不免又谈到IDE里的代码编辑器。不过现在对我来说,最常用的编辑器已经是VIM了。^O^

放毒的目的就是要让人中毒。我放的这些可都是好毒,既不用花一分钱,还有种种好处,花些精力去学一学用一用是很值得的。

相关文章:

  • C# 环境变量
  • 从李开复看人生规划
  • C# Sublime Text环境配置
  • C# 常用数据结构之数组Array
  • IT管理“十大失误”及其对策
  • C# 常用数据结构之列表List<T>
  • 组织之间的关系就好像是个大家庭
  • C# 常用数据结构之字典Dictionary<TKey,TValue>
  • 领导作为“先知者”需知的九大管理之道
  • C# 列表List<T>排序整理
  • 企业在经营时 要为自己“挖一口井”
  • C# 字典Dictionary<TKey,TValue>排序整理
  • 协同软件市场一盘散沙 春种能否秋收心中没底
  • bat 与或非
  • 独立软件开发商,出路何在?
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Brief introduction of how to 'Call, Apply and Bind'
  • Cumulo 的 ClojureScript 模块已经成型
  • ESLint简单操作
  • JDK9: 集成 Jshell 和 Maven 项目.
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Rancher如何对接Ceph-RBD块存储
  • Spring框架之我见(三)——IOC、AOP
  • WebSocket使用
  • 从PHP迁移至Golang - 基础篇
  • 二维平面内的碰撞检测【一】
  • 欢迎参加第二届中国游戏开发者大会
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 如何学习JavaEE,项目又该如何做?
  • 写代码的正确姿势
  • 在electron中实现跨域请求,无需更改服务器端设置
  • k8s使用glusterfs实现动态持久化存储
  • #{}和${}的区别是什么 -- java面试
  • #include<初见C语言之指针(5)>
  • #NOIP 2014# day.1 T2 联合权值
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (MATLAB)第五章-矩阵运算
  • (分布式缓存)Redis哨兵
  • (五)网络优化与超参数选择--九五小庞
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)德国人的记事本
  • (转载)Google Chrome调试JS
  • .libPaths()设置包加载目录
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • ::前边啥也没有
  • [2021 蓝帽杯] One Pointer PHP
  • [Android Pro] AndroidX重构和映射