易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
Golang官网被墙解决办法

Golang官网被墙解决办法

GoLang的官网经常 会抽风,至于为什么,我想大家都明白的,所以有人还在code.google.com上维护了一份hosts列表,但是。。恐怕也就因为这些项目,导致了code.google.com也会偶尔抽抽风。

好吧。golang只是一个语言类的网站,何必呢?就象当年的python....

golang的官网在:golang.org,如果打不开但你又想看里面的内容,有几种办法
1、添加hosts记录:
173.194.75.141 golang.org
怎么添加我就不说了,没意思。如果你连这个也不会,那就不用看了

2、看chm,
astaxie维护了一份chm的手册,如果你只是看手册,那当然没问题:https://github.com/astaxie/godoc/downloads

3、godoc
如果你安装了go,那么你是不是忽略了godoc呢?OK在命令行下执行
godoc -http:=8080 ,这个8080就是你自己设置的端口,OK现在你在浏览器里打开http://localhost:8080,是不是看到了与golang.org一样的界面了?

4、还有没有其他办法?
http://go.neatcn.com
我自己也做了个反向代理 ,只是速度可能会较慢一点。

----

后续,刚才看到了这篇:http://zhan.renren.com/golanguage?gid=3602888498033773463&from=post&checked=true

居然很多想法都和我一样,只是他还提出了一个使用liteIDE这个软件,虽然我在用这个软件,但居然没有想过用它来看手册。。。真是的

liteIDE在这里有的下载:http://code.google.com/p/liteide,看页面的左侧,他有提示下载golang ide(或者你直接打开:http://code.google.com/p/golangide/),功能强大,虽然是一个新的软件,但是,它支持了:

  1. go
  2. lua
  3. markdown,markdown可以导出成pdf哦

还有什么不可能的?

Mou生成PDF时颜色偏淡的解决方法

Mou生成PDF时颜色偏淡的解决方法

Mou是一款很优秀的Markdown编辑软件,在MAC下面的展现比较趋向于完美,但一直以来生成PDF时,颜色都非常淡:
e986f470c668c8732b7d7c519a5eb60d
眼睛都快看花了,而LiteIDE里,作者说他是用的Mou授权的CSS文件,却生成出来是这样的效果:
d9a883526439d4ec2c8f18cb38f4ad4d
这相差也太大了。所以就发了封邮件给作者,作者回复的很快,然后发现我也被鄙视了。。。

你好!我猜你一定是 Mou 的老用户了(从 0.7.2 之前就开始用了),因为这个 CSS 早在 Mou 0.7.3(去年8月19号) 就已经更新过了(PDF颜色加深)。

但是为了保证用户之前自定义 CSS 的安全,Mou 不会主动覆盖旧的 CSS,如果想使用新的 CSS,需手动删除
~/Library/Application Support/Mou/CSS/
目录下旧的 CSS,重启 Mou,Mou 会创建新的 CSS。

这点已在 Release Notes 中多次提及:
http://mouapp.com/releasenotes/

看了一下mouapp的releasenotes,那一行果然是其他颜色的。。。天啊。更新这么多次了,都没有看过别人的releasenotes。。。郁闷
120fc120ecdae99829257bf53973fad0
于是进入目录,删除了CSS,重打开Mou,Export 一份PDF,果然正常了。Oh Yeah。。

作者还提供了修改CSS的方法:

另外如果需要自定义 CSS,不能直接修改 .app 包里的,如果真的那样设定,岂不是每一次更新,用户的自定义 CSS 都会丢掉?

正确的目录是
~/Library/Application Support/Mou/CSS/
如果你在 Preferences>CSS 里点击 Edit… 按钮,引导过去的也是这个目录而不是 .app 包里的。

关于自定义 CSS,可以直接修改现有的,也可以把新的 CSS 文件(文件名随意)拖到这个目录下,重启 Mou 后它会自动刷新 CSS 列表,当再次进入 Preferences>CSS 里时,就可以在列表中选用你新加入的这个 CSS 了。

还有一篇关于只应用于 PDF 的自定义 CSS 技巧的 Blog:
http://chenluois.com/blog/mou-pdf-export-page-break/

享受Mou吧

Go语言的fmt包中文教程

Go语言的fmt包中文教程

因为go的fmt.Printf支持的参数与c的printf(sprintf)不太一样,所以复制一下做个备份。
查起来快一点:

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的资源站:

  1. http://www.cnblogs.com/ztiandan/category/436475.html
  2. http://www.dotcoo.com/?tag=golang
  3. http://www.diandian.com/tag/golang
  4. http://code.google.com/p/golang-china/
  5. http://www.zhaokunyao.com/archives/category/go-lang

还有一些知名的和不知名的就不贴了。比如astaxie的GITHUB上的教程。大家都知道。。

Yii不启用LOG,记录当前所有的错误信息

在不启用LOG的情况下,如何记录错误呢?
我们都知道可以在出错的时候跳转到site/error下面那么也就相当于在输出error前将错误记录下来。
这时候我们当然是可以通过error_log来处理,也可以通过 自己写一段file_put_contents来将错误记录下来:error['errormsg'],将它保存就OK了。但有没有其他办法?

嗯,不需要自己控制程序,只要写三行代码就OK

$logger = new CFileLogRoute();
$logger->init();
$logger->collectLogs(Yii::getLogger(),true);

在判断完是否正确的时候就可以用这些代码将LOG存储下来。多方便 啊

adobe大发慈悲,CS2全线免费了

adobe大发慈悲,CS2全线免费了

说起来也算是悲哀吧。CS2其实是国内真正算是第一批写hosts破解的adobe软件系列。那时候开始大家就学会了用hosts来破解。
不过,总算也是厚道人,对于普通用户来说CS2足够他们用了。上次用CS2软件也还是在06年,一转眼6年过去了。可惜cs2里面没有fireworks,和DW,也算是有点可惜。当然,我认为从DW8后,所有的DW版本都可以不要用了。。。其实,再深究一下,DW4后,更新就很小了。何必呢?DW4才多大?

这次免费的软件共有:

Creative Suite 2
Acrobat 3D 1.0 for Windows
Acrobat Standard 7.0
Acrobat Pro 8.0
Audition 3.0
GoLive CS2
Illustrator CS2
InCopy CS2
InDesign CS2
Photoshop CS2
Photoshop Elements 4.0/5.0
Adobe Premiere Pro 2.0

不过让人郁闷的是,MAC版 的只支持power PC的芯片,好可怜啊。。。
建议去注册一下吧,不然。adobe也就希望你们注册一下:
http://www.adobe.com/cfusion/entitlement/index.cfm?e=cs2_downloads

Creative Suite 2 Mac CS2_install_Mac.pdf 1130-0412-8377-1896-9751-5759
CS_20_IE_NonRet_D1.dmg.bin
CS_20_IE_NonRet_D2.dmg.bin
CS_20_IE_NonRet_D3.dmg.bin
VCS2.dmg
CS_2.0_IE_Extras_1.dmg.bin
Win CS2_install_Win.pdf 1130-1414-7569-4457-6613-5551
CreativeSuiteCS2Disc1.exe
CreativeSuiteCS2Disc2.exe
CreativeSuiteCS2Disc3.exe
VCS2.zip
CS_2.0_WWE_Extras_1.exe
Acrobat 3D 1.0 for Windows Win AC3D_1.0_Volume_NACK_WWE.zip 1159-1414-7569-3493-5006-5653
Acrobat Standard 7.0 Mac 12001748.dmg 1016-0414-2428-7157-5404-6669
Win 22001904.exe 1016-1415-6379-6184-1333-2468
Acrobat Pro 8.0 Mac APRO8_Mac_WEB_WWEFG.dmg 1118-0416-1130-3724-2927-7040
Win APRO23_Win_ESD1_WWEFG.exe 1118-1414-1955-8737-8172-0350
Audition 3.0 Win ADBEAudition_loopolgy.exe 1137-1004-8571-6848-7845-8029
ADBEAudition_ESD1_WWEFGJIS.exe
ADBEAudition_loopolgy.7z
GoLive CS2 Mac GL_CS2_UE_NonRet.dmg.bin 1033-0415-6162-2671-3431-0993
Win GL_CS2_UE_NonRet.exe 1033-1418-1610-5696-5209-0095
Illustrator CS2 Mac AI_CS2_IE_NonRet.dmg.bin 1034-0416-0740-0527-2887-2375
Win AI_CS2_IE_NonRet.exe 1034-1415-6230-2341-2884-9398
InCopy CS2 Mac IC_CS2_UE_NonRet.dmg.bin 1036-0414-4367-5110-5897-2432
Win IC_CS2_UE_NonRet.exe 1036-1419-3531-6378-2148-9313
InDesign CS2 Mac ID_CS2_UE_NonRet.dmg 1037-0413-9961-4063-8457-1098
Win ID_CS2_UE_NonRet.exe 1037-1412-5094-8316-6812-7982
Photoshop CS2 Mac PhSp_CS2_English.dmg.bin 1045-0410-5403-3188-5429-0639
Win PhSp_CS2_English.exe 1045-1412-5685-1654-6343-1431
Photoshop Elements 4.0/5.0 Mac PSE4_Mac_WWE_ESD1.dmg.bin 1057-0410-8218-6295-1699-9560
Win PSE_5.0_WIN_ESD1_ENG.exe 1057-1414-3729-7573-7352-1206
Adobe Premiere Pro 2.0 Win PPRO_2.0_Ret-NH_UE.zip 1132-1280-4900-7476-5108-8019


mac用户你得看好了:

CS2 System Requirements

  • Mac OS X v.10.2.8–v.10.3.8. PowerPC® G4 or G5 processor
  • Microsoft® Windows® 2000/Windows XP. Intel® Pentium® III or 4 processor

悲催 .

泄密信息查询

今天有朋友在群里贴了这么一个网址:http://xiemi.unnoo.com/
说是密码泄漏很多。然后查了一下,靠。还真TMD泄漏了一两个。国内这些论坛、网站,怎么这么没有节操呢。怎么都TMD明文存密码呢。真TMD不要脸 .。。

这个网站申明说:

声明:泄密库发布目的是让用户能通过多种方式查询自己的密码、隐私是否泄露。泄密库内容源于互联网,非泄密库主动采集。泄密库不对数据的真实性和有效性负责。泄密库不会记录用户信息。泄密库的数据库经过模糊化处理,请勿拖库。

其实这些人都不是好东西。NND,你知道了就知道呗,宣扬干嘛呢?哎。怪不得我现在越来越不想在国内的网站混日 子了。所以现在几乎我在国内的网站的密码都一样。随便你们折腾 .。。不关我事了

GO 的一个小陷阱

GO 的一个小陷阱

在群里突然看到一段代码:

package main

import (
"fmt"
)

var DomainId int

func init() {
DomainId, err := GetDomainId()
if err != nil {
DomainId = -1
}
fmt.Println(DomainId)
}

func GetDomainId() (int, error) {
DomainId = 1
return DomainId, nil
}

注意看红色背景的一条,理论上这段代码没有错,但事实上会报错了。

[上海]Asta谢() 22:29:50
我知道
[上海]Asta谢() 22:29:55
我踩过这个坑
[上海]Asta谢() 22:30:04
init里面不能用:=

所以,上面的代码应该是写成:

func init() {
var err error
DomainId, err = GetDomainId()
if err != nil {
DomainId=-1
}
}

对比两段红色背景的代码。主要是做个笔记 .怕会忘 .

Asta谢 是谁?看这里:https://github.com/astaxie/build-web-application-with-golang ,这里有一篇他的教程,适合广大人民群众查看

2013年展望,2012年回顾

2013年展望,2012年回顾

2013年就这样的来了,没在去年12月底的时候消失。所以日 子还是得一天天的过。

去年一年时间里,蛋疼了很多次。也越来越发现自己的身体日趋向下,缺乏锻炼经常 加班,导致身体无比虚弱
所以告诉自己,2013年:
1、在年底前,彻底转职,不再专职写程序
2、要锻炼身体,身体倍棒,吃嘛嘛香,不象现在,脸部肌肉都功能性紊乱了。
3、写一个图片管理程序,尽量以功能为主。不再是单文件版了。考虑到后期为加插件,所以最近正在筹划中
4、和bopo商讨的某程序会上线。

其他的不多说了。可能考虑会和一哥们开个茶叶店吧。如果有哥们想喝铁观音或者其他之类的茶叶,倒是可以找我。哥们的媳妇是福建人,黑黑

试用gist

其实gist功能早就见过了。类似功能的网站也非常多,但那些是不要注册 的。不过github这个gist嘛,注册了也有好处。自己把自己曾经写过的代码,还算好的代码,或者有想法的代码缓存下来。对自己以后 回顾的时候也有好处。

毕竟存在自己的电脑上也容易丢掉。这样多了一个碎片的管理,多少也有点好处。
比如,我就有这样一段:

<?php

$str = "101|1;0|4;1|0;0|0;0|0";

//第一种

$array = explode(';', $str);

$items = array();

foreach ($array as $v) {

list($k, $v) = explode('|', $v);

if (emptyempty($v)) {

continue;

}

$items[$v] = $k;

}

echo "<pre>";

print_r($items);

echo "</pre>";

//第二种

parse_str(preg_replace(array('/\d+\|0/','/;/','/\|/'),array("","&","="),$str),$result);

echo "<pre>";

print_r($result);

echo "</pre>";

看上去有点乱。不过。。。到:https://gist.github.com/4405542看就好很多了。。
我看看在代码里能不能引用:

Mysql数据库索引查询优化的分享

Mysql数据库索引查询优化的分享

这是昨天SAE分享的一篇文章,开始的时候,我看了一遍,发现好象没有什么特别的内容,但再仔细看的时候,发现居然可以这样做。。。

问题描述:

我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_id上建了索引。

执行一条SQL:

select * from program_access_log where program_id between 1 and 4000

这条SQL非常慢。我们原以为处理记录太多的原因,所以加了id限制,一次只读五十万条记录

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 4000

但是这条SQL仍然很慢,速度比上面一条几乎没有提升。Mysql处理50万条记录的表,条件字段还建了索引,这条语句应该是瞬间完成的。

问题分析:

这张表大约容量30G,数据库服务器内存16G,无法一次载入。就是这个造成了问题。

这条SQL有两个条件,ID一到五十万和Program_id一到四千,因为program_id范围小得多,mysql选择它做为主要索引。

先通过索引文件找出了所有program_id在1到4000范围里所有的id,这个过程非常快。

接下来要通过这些id找出表里的记录,由于这些id是离散的,所以mysql对这个表的访问不是顺序读取。

而这个表又非常大,无法一次装入内存,所以每访问一条记录mysql都要重新在磁盘上定位并把附近的记录都载入内存,大量的IO操作导致了速度的下降。

问题解决方案:

1. 以program_id为条件对表进行分区

2. 分表处理,每张表的大小不超过内存的大小

然而,服务器用的是mysql5.0,不支持分区,而且这个表是公共表,无法在不影响其它项目的条件下修改表的结构。所以我们采取了第三种办法:

select * from program_access_log where id between 1 and 500000 and program_id between 1 and 15000000

现在program_id的范围远大于id的范围,id被当做主要索引进行查找,由于id是主键,所以查找的是连续50万条记录,速度和访问一个50万条记录的表基本一样

总结:

这是一个在千万笔记录表中由于使用了索引导致了数据查找变慢的问题,有一定的典型性和大家交流下!

-----------

看我标红的那一段,原来还能够这样做,以前真的没有注意过,也从来没有想过,先利用主键做一次过滤。这样效率会好很多啊

上述内容来自:http://ourmysql.com/archives/108?f=wb,该网站还有很多技巧值得一看。