Submitted by gouki on 2013, May 5, 10:03 PM
其实看到这篇文章很久了,我一直忍着没有把它转过来。。在我眼里,这些什么《提问的智慧》,《提问的技巧》等等东西,就象小时候语文老师教的小说四要素一样:时间、地点、人物、情节,英文里称4w(when,where,who,what)。因此,在我看来,提问这玩意无非也就是我在什么时候,什么平台,当前的环境下,发生了什么问题。能够把这个事情说清楚的,即使你没有说,我刚才怎么处理怎么处理,还是没有搞定这个问题,我想别人在你能够描述这么清楚的情况下,也会帮忙解决你的问题的。
好吧。先转一个《提问的智慧》,我晶,居然还有版本修订:http://www.wapm.cn/smart-questions/smart-questions-zh.html,实在太长了,我懒得转了,就最后一句吧:
XML/HTML代码
- 伊夫林.米切尔(Evelyn Mitchell)贡献了一些愚蠢问题例子并启发了编写“如何更好地回答问题”这一节,米哈伊尔.罗门迪克(Mikhail Ramendik)贡献了一些特别有价值的建议和改进。
然后再来两个小要点,因为我看现在QQ群里,如果别人提问不回答,这些人还会骂娘。有时候不知道到底是谁在提问,是谁需要回答:
XML/HTML代码
- 如果得不到回答
-
- 如果得不到回答,请不要认为我们不想帮你,有时只是因为被问到的小组成员的确不知道答案。没有回复不等于不被理睬,当然必须承认从外面很难看出两者的差别。
- 一般而言,直接将问题再张贴一次不好,这会被视为毫无意义的骚扰。耐心一点,知道你问题答案的人可能生活在不同的时区,有可能正在睡觉,也有可能你的问题一开始就没有组织好。
- 还有其它资源可以寻求帮助,通常是在一些面向新手的资源中。
- 有许多在线与本地的用户组织,虽然它们自己不编写任何软件,但是对软件很热心。这些用户组通常因互助和帮助新手而形成。
- 还有众多大小商业公司提供签约支持服务(红帽与 SpikeSource 是两家最出名的,还有许多其它的)。别因为要付点钱才有支持就感到沮丧!毕竟,如果你车子的汽缸垫烧了,你多半还得花钱找个修理店把它弄好。即使软件没花你一分钱,你总不能指望服务支持都是免费的。
- 象 Linux 这样流行的软件,每个开发者至少有一万个以上的用户,一个人不可能应付这么多用户的服务要求。记住,即使你必须付费才能得到支持,也比你还得额外花钱买软件要少得多(而且对封闭源代码软件的服务支持与开源软件相比通常还要贵一点,也要差一点)。
-
- 如何更好地回答
- 态度和善一点。问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。
- 对初犯者私下回复。 对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找 FAQ 都不知道。
- 如果你不确定,一定要说出来! 一个听起来权威的错误回复比没有还要糟,别因为听起来象个专家好玩就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。
- 如果帮不了忙,别妨碍。 不要在具体步骤上开玩笑,那样也许会毁了用户的安装──有些可怜的呆瓜会把它当成真的指令。
- 探索性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西──你也可以。试试将很差的问题转变成好问题,别忘了我们都曾是新手。
- 尽管对那些懒虫报怨一声“读读该死的手册”(RTFM)是正当的,指出文档的位置(即使只是建议做个谷歌关键词搜索)会更好
- 如果你决意回答,给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计,应推荐更好的工具,重新组织问题。
- 帮助你的社区从中学习。当回复一个好问题时,问问自己 “如何修改相关文件或 FAQ 文档以免再次解答同样的问题?”,接着再向文档维护者发一份补丁。
- 如果你是在研究一番后才做出的回答,展现你的技巧而不是直接端出结果。毕竟“授人以鱼,不如授人以渔”。
最后,转原文吧。。。
由于一直从事技术和平台产品方面的工作,我们部门经常会收到公司内外同事和同仁的问题邮件,有些好的问题能让你发现自己技术上的缺陷、产品的bug或提升的空间,去思考、回答和解决这样的问题真是一件让人愉悦,充满挑战和成就感的事情。但是非常遗憾的是,这样的好问题却是凤毛麟角。我经常会被一些莫名其妙的问题搞的啼笑皆非,比如:
- 程序运行过程中突然内存溢出,该如何解决?
- 如何配置JVM的虚拟机参数?
- 程序部署到Linux上后,页面出现中文乱码,是不是中间件的配置出现问题了?
- 集群节点不能自动复制,如何解决?
最可气是第四个问题,经过了解环境逐一排查,最后发现两个节点根本就ping不通嘛,这种“异常”在现场该是多么容易发现啊!
当然,类似的傻问题我年轻的时候也问过,谁会不犯错呢,真正让我认识到这一点的重要性,还是在工作中与国外程序员的邮件交流。在2005年期间,与国外程序员共同维护公司内部的一个平台级产品,邮件往来必不可少,慢慢的我发现国外的程序员提的问题或报的bug都非常有规律,每个问题或bug都有非常清晰的标题,正文是环境描述,已经采取了什么措施、结果,相关日志,Core dump,图片等等,一般读完邮件就能非常清楚的了解对方想要表达的意图和希望你能提供的帮助,而且你也知道该做什么,如何回复等等。久而久之,自己也不好意思再去写那些傻问题了。
那么作为技术人员,如何去问一个让双方都满意的好问题并最大程度的得到回复呢?这一点对提问者重要,对被问者同样重要,大好人生,谁也不愿意为一个烂问题浪费时间。
简单总结一下,如果你按照以下步骤进行,提出的问题一定会更靠谱一些,提出好的问题是你提升的第一步,其实这个过程在提问之前已经开始了:
- 遇到问题不要急着问别人,在时间允许的情况下看是否自己能够解决,一方面锻炼自己分析问题和解决问题的能力,另一方面,一旦问题解决了,问题就不是问题,而是你的经验和知识库。况且现在互联网有那么多的技术资料和各类问答网站,想碰到一个别人没碰到的问题,已经非常困难了,除非是内部产品。
- 如果做了努力依然不能解决,或者客观条件不允许你自己解决了,那么首先要选择提问对象,不管是社区还是公司同事,确保他是你所知道的最佳解决人选。
- 你需要一个好的标题,用清晰的短句描述你遇到的问题
-
至关重要的正文
(1)用清晰的语言描述你遇到的问题 (2)提供软件环境,包括操作系统、数据库等相关软件及其版本号 (3)问题是否可以重现,采用什么方式重现 (4)采用了什么措施解决问题,最终结果(可提供日志、程序、截图等描述) (5)尽可能提供问题相关的可分析文件,包括日志、截图和Core dump等 (6)不要长篇大论,简明扼要,描述主要问题
-
最后,不要忘了说请和谢谢,毕竟你需要别人帮助你解决问题,没人欠你什么。
---EOF---
上面这段来自:http://www.cnblogs.com/chijianqiang/archive/2012/09/24/question.html
Tags: 问题, 提问
Misc | 评论:0
| 阅读:13503
Submitted by gouki on 2013, April 7, 9:02 AM
偷了个懒,代码扔在github上了。
用法也很简单:
$fetion = new PHPFetion('用户名','密码'); $fetion->send('对方手机','信息'); 会自动识别自己还是对方。(非好友不能发哦)
也实现了$fetion->multiSend,但我偷了个懒,直接循环用send发送了。
事实上,可以在刚登录的时候,利用group先将好友列表拉回来,然后就方便了。但觉得这样就复杂了。何必呢。。一般在用飞信的时候,也很少会用到群发功能吧。所以,我还是循环的send。黑黑
代码地址:https://github.com/neatstudio/yiiextension
欢迎围观
Tags: 飞信, fetion
PHP | 评论:0
| 阅读:13765
Submitted by gouki on 2013, January 9, 6:15 PM
因为go的fmt.Printf支持的参数与c的printf(sprintf)不太一样,所以复制一下做个备份。
查起来快一点:
http://www.open-open.com/lib/view/open1352593106824.html
- mport "fmt"
- 简介
- Package fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C但更简单一些。
- 输出
- 格式:
- 一般:
- %v 基本格式的值。当输出结构体时,扩展标志(%+v)添加成员的名字。the value in a default format.
- when printing structs, the plus flag (%+v) adds field names
- %#v 值的Go语法表示。
- %T 值的类型的Go语法表示。
- %% 百分号。
- 布尔型:
- %t 值的true或false
- 整型:
- %b 二进制表示
- %c 数值对应的Unicode编码字符
- %d 十进制表示
- %o 八进制表示
- %q 单引号
- %x 十六进制表示,使用a-f
- %X 十六进制表示,使用A-F
- %U Unicode格式: U+1234,等价于"U+%04X"
- 浮点数:
- %b 无小数部分、两位指数的科学计数法,和strconv.FormatFloat的'b'转换格式一致。举例:-123456p-78
- %e 科学计数法,举例:-1234.456e+78
- %E 科学计数法,举例:-1234.456E+78
- %f 有小数部分,但无指数部分,举例:123.456
- %g 根据实际情况采用%e或%f格式(以获得更简洁的输出)
- %G 根据实际情况采用%E或%f格式(以获得更简洁的输出)
- 字符串和byte切片类型:
- %s 直接输出字符串或者[]byte
- %q 双引号括起来的字符串
- %x 每个字节用两字符十六进制数表示(使用小写a-f)
- %X 每个字节用两字符十六进制数表示(使用大写A-F)
- 指针:
- %p 0x开头的十六进制数表示
- 木有'u'标志。如果是无类型整数,自然会打印无类型格式。类似的,没有必要去区分操作数的大小(int8, int64)。
- 宽度和精度格式化控制是指的Unicode编码字符的数量(不同于C的printf,它的这两个因子指的是字节的数量。)两者均可以使用'*'号取代(任一个或两个都),此时它们的值将被紧接着的参数控制,这个操作数必须是整型。
- 对于数字,宽度设置总长度,精度设置小数部分长度。例如,格式%6.2f 输出123.45。
- 对于字符串,宽度是输出字符数目的最低数量,如果不足会用空格填充。精度是输出字符数目的最大数量,超过则会截断。
- 其它符号:
- + 总是输出数值的正负号;对%q(%+q)将保证纯ASCII码输出
- - 用空格在右侧填充空缺而不是默认的左侧。
- # 切换格式:在八进制前加0(%#o),十六进制前加0x(%#x)或0X(%#X);废除指针的0x(%#p);
- 对%q (%#q)如果可能的话输出一个无修饰的字符串;
- 对%U(%#U)如果对应数值是可打印字符输出该字符。
- ' ' 对数字(% d)空格会留一个空格在数字前并忽略数字的正负号;
- 对切片和字符串(% x, % X)会以16进制输出。
- 0 用前置0代替空格填补空缺。
- 每一个类似Printf的函数,都会有一个同样的Print函数,此函数不需要format字符串,等价于对每一个参数设置为%v。另一个变体Println会在参数之间加上空格并在输出结束后换行。
- 如果参数是一个接口值,将使用内在的具体实现的值,而不是接口本身,%v参数不会被使用。如下:
- var i interface{} = 23
- fmt.Printf("%v\n", i)
- 将输出23。
- 如果参数实现了Formatter接口,该接口可用来更好的控制格式化。
- 如果格式(标志对Println等是隐含的%v)是专用于字符串的(%s %q %v %x %X),还提供了如下两个规则:
- 1. 如果一个参数实现了error接口,Error方法会用来将目标转化为字符串,随后将被按给出的要求格式化。
- 2. 如果参数提供了String方法,这个方法将被用来将目标转换为字符串,然后将按给出的格式标志格式化。
- 为了避免有可能的递归循环,例如:
- type X string
- func (x X) String() string { return Sprintf("<%s>", x) }
- 会在递归循环前转换值:
- func (x X) String() string { return Sprintf("<%s>", string(x)) }
- 错误的格式:
- 如果提供了一个错误的格式标志,例如给一个字符串提供了%d标志,生成的字符串将包含对该问题的描述,如下面的例子:
- 错误或未知的格式标志: %!verb(type=value)
- Printf("%d", hi): %!d(string=hi)
- 太多参数: %!(EXTRA type=value)
- Printf("hi", "guys"): hi%!(EXTRA string=guys)
- 缺少参数: %!verb(MISSING)
- Printf("hi%d"): hi %!d(MISSING)
- 使用非整数提供宽度和精度: %!(BADWIDTH) or %!(BADPREC)
- Printf("%*s", 4.5, "hi"): %!(BADWIDTH)hi
- Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi
- 所有的错误都使用"%!"起始,(紧随单字符的格式标志)以括号包围的错误描述结束。
- 输入
- 一系列类似的函数读取格式化的文本,生成值。Scan,Scanf和Scanln从os.Stdin读取;Fscan,Fscanf和Fscanln 从特定的io.Reader读取;Sscan,Sscanf和Sscanln 从字符串读取;Scanln,Fscanln和Sscanln在换行时结束读取,并要求数据连续出现;Scanf,Fscanf和Sscanf会读取一整行以匹配格式字符串;其他的函数将换行看着空格。
- Scanf, Fscanf, and Sscanf根据格式字符串解析数据,类似于Printf。例如,%x将读取一个十六进制数,%v将读取值的默认表示。
- 格式行为类似于Printf,但有如下例外:
- %p没有提供
- %T没有提供
- %e %E %f %F %g %G是等价的,都可以读取任何浮点数或者复合数(非复数,指科学计数法表示的带指数的数)
- %s 和 %v字符串使用这两个格式读取时会因为空格而结束
- 不设格式或者使用%v读取整数时,如果前缀为0(八进制)或0x(十六进制),将按对应进制读取。
- 宽度在输入中被解释(%5s意思是最多从输入读取5个字符赋值给一个字符串),但输入系列函数没有解释精度的语法(木有%5.2f,只有%5f)。
- 输入系列函数中的格式字符串,所有非空的空白字符(除了换行符之外),无论在输入里还是格式字符串里,都等价于1个空白字符。格式字符串必须匹配输入的文本,如果不匹配将停止读取数据并返回函数已经赋值的参数的数量。
- 所有的scan系列函数,如果参数包含Scan方法(或者说实现了Scanner接口),该参数将使用该方法读取文本。另外,如果被填写的参数的数量少于提供的参数的数量,将返回一个错误。
- 所有要被输入的参数都应该是基础类型或者实现了Scanner接口的数据类型的指针。
- 注意:Fscan等函数可以从输入略过一些字符读取需要的字符并返回,这就意味着一个循环的读取程序可能会跳过输入的部分数据。当数据间没有空白时就会导致出现问题。如果读取这提供给Fscan系列函数ReadRune 方法,这个方法可以用来读取字符。如果读取者还提供了UnreadRune 方法,该方法将被用来保存字符以使成功的调用不会丢失数据。为了给一个没有这些功能的读取者添加这俩方法,使用bufio.NewReader。
这样就看起来方便多了,而且。速度也快。。。。
几个GO的资源站:
- http://www.cnblogs.com/ztiandan/category/436475.html
- http://www.dotcoo.com/?tag=golang
- http://www.diandian.com/tag/golang
- http://code.google.com/p/golang-china/
- http://www.zhaokunyao.com/archives/category/go-lang
还有一些知名的和不知名的就不贴了。比如astaxie的GITHUB上的教程。大家都知道。。
Tags: fmt
| 评论:0
| 阅读:16290
Submitted by gouki on 2012, August 30, 11:14 AM
在讲今天的内容前,请允许我说几句:what the fuck,再说一句:“你哭著對我說童話裡都是騙人的”
前两天说过为了速度我建了索引,虽然给id建了unique的索引,但是数据还是不由分说的插了重复的。好吧。因为数据在unique前就进数据库了。所以。。。我必须要再加上dropDups这个条件。
于是乎,我就先开始删除索引,然后灾难就来了:
b.archive.dropIndex({id:1,unique:true})
{ "errmsg" : "index not found", "ok" : 0 }
> db.archive.dropIndex({"id":1,"unique":true})
{ "errmsg" : "index not found", "ok" : 0 }
> db.archive.dropIndex({"id":1,"unique":true},{name:"id"})
{ "errmsg" : "index not found", "ok" : 0 }
> db.archive.dropIndex({"id":1,"unique":true},{"name":"id"})
{ "errmsg" : "index not found", "ok" : 0 }
> db.archive.dropIndex({category_id:1})
{ "errmsg" : "index not found", "ok" : 0 }
> db.archive.dropIndex({"category_id":1})
{ "errmsg" : "index not found", "ok" : 0 }
> db.archive.dropIndex({"key":{"status":1}})
{ "errmsg" : "index not found", "ok" : 0 }
为什么为什么????
为什么我会这么做?是因为:http://www.mongodb.org/display/DOCS/Indexes
这里面写着:
Dropping Indexes
To delete all indexes on the specified collection:
db.collection.dropIndexes();
To delete a single index:
db.collection.dropIndex({x: 1, y: -1})
Running directly as a command without helper:
db.runCommand({dropIndexes:'foo', index : {y:1}}) db.runCommand({dropIndexes:'foo', index : '*'})
我晕啊。这是肿么了。。。
后来还是神仙和赵拂衣说了一句,试一下dropIndex("xxx"),果然。。。Over了。你说,你这不是忽悠人嘛 ,为了这个,我折腾了一个晚上啊。。。。
害得我当时只能dropIndexes,先删除所有的,再重建索引。。。数据又多,我等了好久好久啊。
Tags: mongo
Baby | 评论:0
| 阅读:39993
Submitted by gouki on 2012, August 12, 10:49 PM
这个文章一定要转啊,难得说有推荐喝酒的文章。当然也只是说说了,毕竟真的在公司里喝酒,恐怕是任何公司都不能接受的吧?
不过。我还是要转一下下哦。我总认为写程序的时候喝少量的酒,可以使得人从单核 变双核。哈哈。在非IT公司,是坚决不能接受喝酒的吧?
原文这么说:
在硅谷这个云集了各大IT公司和IT精英的地方,似乎对酗酒这一行为不会表现出特别反感的情绪。虽然的确是有一小群人认为酒精就是将人拖入 黑暗边缘的邪恶之液。《经济学家》杂志就指出也许我们会在周末喝醉,但那完全没关系。但是现在似乎这样的情况越来越多都是发生在我们的商务时间。另外, 《消费者心理学》也曾指出如果一位政要候选人如果在一个晚宴采访中喝酒,那么人们就会认为他没有另外一个候选人睿智。
不过,有些人认为适度饮酒可以舒缓精神上的压力。对于笔者我来说,一点Saracina的黑皮诺或者是一小杯Idle Cellars的2008解百纳可以让我能够清除掉一些障碍,从而重新理清我的思路。
不过,这种情况还是需要科学理论来支持。
近日,一篇来自《意识与认知》的一篇论文中解释了为什么酒精可以让人们的精神可以得到舒缓的原因。在文中,研究人员将研究对象对位中毒酒精中毒的人群-- 酒精在血液中的含量0.075mg/mL/h。在研究过程中,被研究对象接受了远程合作测试,从而检测出他们是否能够在解决问题的时候表现出一定的创造 性。而研究最终得出的结论是醉酒程度越轻的人则在同样的时间内解决的问题越多、越快。当被问及他们是怎么想到问题解决方法的时候,他们纷纷表示当时就是有 一种灵光乍现的感觉。
也许,在硅谷的产生的好想法也都是在这样的情况下产生的。
---EOF---
原文来自:http://www.cnbeta.com/articles/201130.htm,你如果是老板,你会怎么样?偶尔可以还是一直可以?你会提供酒吗?黑黑
Misc | 评论:0
| 阅读:12352