June 11, 2014
Swift编程语言中的optional(可选)
"可选 使用可选来处理值可能缺失的情况。可选表示:\n有值,等于 x 或者\n没有值 注意:C 和 Objective-C 中并没有可选这个概念。最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回 nil, nil 表示“缺少一个合法的对象”。然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C 方法一般会返回一个特殊值(比如 NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift 的可选可以让你暗示任意类型的值缺失,并不需要一个特殊值。\n来看一个例子。Swift 的 String 类型有一个叫做 toInt 的方法,作用是将一个 String 值转换成一个 Int 值。然而,并不是所有的字符串都可以转换成一个整数。字符串 \u0026quot;123\u0026quot; 可以被转换成数字 123,但是字符串 \u0026quot;hello, world\u0026quot; 不行。\n下面的例子使用 toInt 方法来尝试将一个 String 转换成 Int:\nlet …"
June 10, 2014
Swift中的字典
"//1.创建字典\nvar dict:Dictionary\u0026lt;Int, String\u0026gt; = [:“美国“,1:“中国“, 2:“英国“]\nvar country = [\n“china”: “中国“,\n“en”:“英国“,\n“usa”:“美国“\n]\n//创建一个空的字典\nvar emptyDictionary = Dictionary\u0026lt;String, Float\u0026gt;()\nvar emptyDictionary2 = [:]\nfor (key,value) incountry {\nvar result = key + value\n}\n//2.获取字典中的所有键名和键值及字典元素个数\nvar keys = Array(country.keys)\nvar values = Array(country.values)\nvar cnum = country.count\n//3.访问字典\nvar value = dict[]\nvar value2 = country[“china”]\n//4.修改字典,修改后,字典中的位置会发生改变\ncountry[“china”] = “中华人民 …"
June 10, 2014
swift中的数组操作
"var shopCart: String[] = [“苹果“, “桔子“, “荔枝“]\nvar shoppingList = [“catfilsh”, “water”, “tulips”]\n//创建一个空数组\nvar emptyArray = String\n//数组遍历\nfor str inshopCart {\nprintln(str)\n}\n//带索引值的遍历\nfor (index, value) inenumerate(shopCart) { println(“(index+1):(value)“) }\n//判断数组是否为空及数组元素个数\nifshopCart.isEmpty {\nprintln(“购物车中无任何商品,请购买”)\n} else {\nprintln(“您当前购物车中共 (shopCart.count) 有件商品”)\n}\nprintln(“=================”)\n//数组元素添加,{苹果 桔子 荔枝 芒果}\nshopCart.append(“芒果“)\nfor str inshopCart {\nprintln(str)\n} …"
May 28, 2014
Linux中让crontab以秒为单位执行任务
"Linux下实现秒级定时任务的两种方案(Crontab 每秒运行):\n第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间。\n#!/bin/bash while true ;do command sleep XX //间隔秒数 done 或者使用for语句\n#!/bin/bash for((i=1;i\u0026lt;=20;i++));do /home/somedir/scripts.sh \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 sleep 3 done 第二种方案,使用crontab。\n我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次。\n以下方法将每20秒执行一次\ncrontab -e * * * * * /bin/date * * * * * sleep 20; /bin/date.sh * * * * * sleep 40; /bin/date.sh 说明:需要将/bin/date.sh更换成你的命令即可\n这种做法去处理隔几十秒的定时任务还好,要是每1秒运行一次就得添加60条记录。。。如果每秒运行还是用 …"
April 8, 2014
日600亿消息,月4.65亿用户——WhatsApp的Erlang世界[架构设计](最新版)
"来自 High Scalability。相较 上篇,这篇内容更新、更全。 译文 a\n【编者按】在之前我们有分享过HighScalability创始人Tod Hoff总结的 WhatsApp早期架构,其中包括了大量的Erlang优化来支撑单服务器200万并发连接,以及如何支撑所有类型的手机并提供一个完美的用户体验。然而时过境迁,两年后WhatsApp又是如何支撑10倍于之前的流量,以及应用的飞速扩展,这里我们一起看Tod带来的总结。以下为译文:\n两年内的飞跃 天价应用当下的规模显然不能与两年前同日而语,这里总结了一些WhatsApp两年内发生的主要变化:\n**1. **从任何维度上都可以看到WhatsApp的巨变,但是工程师的数量却一直未变。当下,WhatsApp有更多的主机、更多的数据中心、更多的内存、更多的用户以及更多的扩展性问题,然而最引以为豪的却是那支10人工程团队——每个工程师平均负责4000万个用户。当然,这也是云时代的胜利:工程师只负责软件的开发,网络、硬件及数据中心运维全部假手于人。\n**2. **在之前,面对负载的激增,他们必须让单服务器支撑尽可能多的连接数,但是现在他 …"
March 8, 2014
golang中for循环方法的差异
"用for循环遍历字符串时,也有 byte 和 rune 两种方式.第一种试为byte,第二种rune。\ngolang中string rune byte 三者的关系 https://blog.haohtml.com/archives/17646\npackage main import ( \u0026#34;fmt\u0026#34; ) func main() { s := \u0026#34;abc汉字\u0026#34; for i := 0; i \u0026lt; len(s); i++ { fmt.Printf(\u0026#34;%c,\u0026#34;, s[i]) } fmt.Println() for _, r := range s { fmt.Printf(\u0026#34;%cn\u0026#34;, r) } } 输出结果:\na,b,c,æ,±,,å,,, a b c 汉 字 "
February 18, 2014
纽约时报网站改版背后的web技术
"原文地址: “The Technology Behind the NYTimes.com Redesign”\n纽约时报英文网站今年进行了一次改版,这次改版不仅仅是给一艘大船重新刷了遍油漆那么简单,除了外观上的重新设计,我们也对代码进行了大量的重构,采用了新的框架,让网站更快,也为以后代码的维护、升级便利性进行了重新设计。 Reed Emmons,是这次改版的负责人,在这篇文章将分享我们如何让纽约时报这首老船更快更酷。\n很少有机会能够在像纽约时报这么老资格和规模的网站进行一场「从头来过」的重构和设计工作,我这里说的从头来过,不仅仅是视觉设计上的重新设计,更是一个重新发明整个数码传媒平台。纽约时报的上次一次视觉改版是在2006年,但是我们得回溯到2000千禧年才有如此规模的从底层的重构和改版。我们决定重构用户端和服务端以支持我们新的服务、设计和新闻报道,比如说更佳的网站性能、响应式布局等等。尽管有些旧有的代码依旧保留或者进行了深度重构,大部分老的代码都被删除或者仅仅是用来做参考。\n静态页面发布:历史的教训 直到今天为止,纽约时报的大部分网页内容还是静态 html 页面,这些页面储存在我们数 …"
December 23, 2013
git stash和git stash pop的用法
"推荐阅读: http://www.cppblog.com/deercoder/archive/2011/11/13/160007.html\n原文: http://gitbook.liuhui998.com/4_5.html\n一、基本操作\n当你正在做一项复杂的工作时, 发现了一个和当前工作不相关但是又很讨厌的bug. 你这时想先修复bug再做手头的工作, 那么就可以用 git stash 来保存当前的工作状态, 等你修复完bug后,执行’反储藏\u0026rsquo;(unstash)操作就可以回到之前的工作里.\n$ git stash save \u0026#34;work in progress for foo feature\u0026#34; 上面这条命令会保存你的本地修改到储藏(stash)中, 然后将你的工作目录和索引里的内容全部重置, 回到你当前所在分支的上次提交时的状态.\n好了, 你现在就可以开始你的修复工作了.\n… edit and test …\n$ git commit -a -m \u0026#34;blorpl: typofix\u0026#34; 当你修复完bug后, 你可以用git stash apply来回 …"
December 14, 2013
Nginx利用多核cpu提高性能_配置参数worker_cpu_affinity
"上篇文章我们介绍了Nginx 的优化方法,这里主要对worker_cpu_affinity参数详细介绍一下.(官方http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity ) 简介 Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能。cpu是任务处理,计算最关键的资源,cpu核越多,性能就越好。\n规则设定 (1)cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭\n(2)worker_processes最多开启8个,8个以上性能就不会再提升了,而且稳定性会变的更低,因此8个进程够用了\n演示实例 两核cpu,开启两个进程 worker_processes 2; worker_cpu_affinity 01 10; 01表示启用了第一个cpu内核,10表示启用了第二个cpu内核\nworker_cpu_affinity 01 10;表示开启了两个进程,第一个进程对应着第一个cpu内核,第二个进程对应着第二个cpu内核\n两核cpu,开启八 …"
November 22, 2013
redmine与git组合配置
"参考:http://www.redmine.org/projects/redmine/wiki/HowTo_Easily_integrate_a_(SSH_secured)_GIT_repository_into_redmine\n在redmine 的”配置”选项里,填写git仓库位置的时候,一定要在写完整的.git路径,如 /data/www/redmine/repos/agent/.git ,否则redmine会无法发现git仓库.\n相关文章:\nhttp://blog.csdn.net/benkaoya/article/details/8762935"