All Posts

golang的坑

1. json.Marshal函数 返回空” {}” 比如 type TestObject struct { kind string `json:"kind"` id string `json:"id, omitempty"` name string `json:"name"` email string `json:"email"` } testObject := TestObject{ "TestObj", "id", "Your name", "email@email.com" } fmt.Println(testObject) b, err := json.Marshal(testObject) fmt.Println(string(b[:])) 结果 : {TestObject id Your name email@email.com} {} 原因: golang中使用字母是否大写定义导出, encoding/json库会忽略非导出的字段。 正确方法: 导出字段使用大写字母开头,如: type TestObject struct { Kind string `json:"kind"` Id string `json:"id, omitempty"` Name string `json:"name"` Email string `json:"email"` } ​

clojure 笔记

clojure修改maven repo的方法 使用国内clojure maven repo Maven官方库经常非常慢,阿里云也提供maven库镜像,可以在project.clj中添加下面配置使用阿里云repo: :mirrors {"central" {:name "central" :url "http://maven.aliyun.com/nexus/content/groups/public/"}}

emacs 笔记

emacs 设置代理 (setq url-proxy-services '(("no_proxy" . "^\\(localhost\\|10.*\\)") ("http" . "proxy.com:8080") ("https" . "proxy.com:8080"))) emacs 书签 与存储光标位置的寄存器略有不同 书签可以使用单词来命名,而不限于一个字符。起一个容易记住的名字 退出 Emacs 后,书签不会消失,下次还可以使用 C-x r m (name) M-x bookmark-set 设置书签 C-x r b (name) M-x bookmark-jump 跳转到书签 C-x r l M-x bookmark-bmenu-list 书签列表 M-x bookmark-delete 删除书签 M-x bookmark-load 读取存储书签文件 书签默认存储在 ~/.emacs.bmk 文件中 在配置文件中,可以设置书签存储的文件 ;; 书签文件的路径及文件名 (setq bookmark-default-file "~/.emacs.d/.emacs.bmk") ;; 同步更新书签文件 ;; 或者退出时保存 (setq bookmark-save-flag 1)

docker 使用笔记

1. docker下载image设置代理proxy $ docker pull busybox Using default tag: latest Pulling repository docker.io/library/busybox Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/busybox/images. You may want to check your internet connection or if you are behind a proxy. 如果系统是用systemd启动docker的daemon的话,docker不会使用系统默认的代理,需要做如下操作,参考https://docs.docker.com/engine/admin/systemd/#http-proxy: 1. 为docker创建systemd配置文件夹 $ mkdir /etc/systemd/system/docker.service.d 2. 创建 /etc/systemd/system/docker.service.d/http-proxy.conf 包含下面内容: [Service] Environment="HTTP_PROXY=http://proxy.example.com:80/" Environment="HTTPS_PROXY=https://proxy.example.com:80/" 对于不想使用代理的域名ip地址,使用NO_PROXY关键字 Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com" 3. systemd重新加载 $ sudo systemctl daemon-reload 4. 查看配置是否生效 $ systemctl show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80/ 5. 重启docker

ansible使用问题总结

1. Network is unreachable问题 问题 : 使用apt-get在目标主机可正常安装,但是通过ansible的apt模块报 Network is unreachable的问题 原因 : 目标主机上访问外网需要设置代理, ansible默认不会执行目标主机的.bashrc设置环境变量 解决方法 : 使用ansible的environment关键字来设置proxy 见官方文档: http://docs.ansible.com/ansible/playbooks_environment.html 官方的例子 - hosts: all remote_user: root tasks: - apt: name=apache2 state=installed environment: http_proxy: http://proxy.example.com:8080 也可以使用变量: - hosts: all remote_user: root # here we make a variable named "proxy_env" that is a dictionary vars: proxy_env: http_proxy: http://proxy.example.com:8080 tasks: - apt: name=apache2 state=installed environment: "{{proxy_env}}" 2. 安装mongodb - name: download key apt_key: keyserver=hkp://keyserver.

python 杂项记录

python 时间类型操作

经常碰到需要对日期时间的字符串操作,查了又经常忘记,所以写到这里当作自己的笔记。 datetime模块里有几个经常用到类, datetime, date, time date 日期类 (年,月,日) time 时间类 (小时, 分钟, 秒, 微秒) datetime 日期 + 时间 datetime类 从字符串到datetime strptime函数 datetime.datetime.strptime('06-05-2010', "%d-%m-%Y").date() datetime.date(2010, 05, 06) 第三方库 dateutil from dateutil import parser dt = parser.parse("Aug 28 1999 12:00AM") 可以通过pip命令安装dateutil安装 pip install python-dateutil 格式化 意义 例子 %d Day of the month as a zero-padded decimal number.前面填充0的日期 比如00, 01, …, 31 %m Month as a zero-padded decimal number.

python exec的使用过程中碰到的坑

python的exec可以直接运行一个文件中的python脚本,或者一个字符串里的python语句。为什么不直接调用这个文件,或者语句呢?一个典型的场景就是我们要运行的python脚本存在数据库中,当然也可以把文件内容从数据库中读取出来,生成临时文件,再运行。但是如果使用exec,就可以on fly的运行python脚本了。 exec 语法

使用requests的网络爬虫

requests 帮助主页: http://docs.python-requests.org/en/latest/user/quickstart/ 1. requests的json支持 requests本身自带了json支持,不需要额外的json库来做转换。比如得到的内容是json格式,可以使用 import requests r = requests.get('https://api.github.com/events') r.json() [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/... 2. form-encoded data requests库可以简单的将dict类型传递给get或post方法的data参数就可以实现自动实现传递form-encoded参数。但是,如果参数本身是一个数组的话,比如网站需要传下面的POST参数: 可以看出来,amarket和coupon_descr都是数组类型,有多个数值,这个时候需要通过将list类型赋值给对应的dict key,代码如下: data = {"is_funda_search":"0", "fundavolume":"100", "amarket[]":["sh", "sz"], "coupon_descr[]": ["+3.0%", "+3.2%", "+3.5%", "+4.0%", "other"], "rp":"50", "maturity":""} content = s.post(url, data=data)

spark读取hbase内容及在集群环境下的配置

spark读取hbase 对于读取hbase,spark提供了newAPIHadoopRDD接口可以很方便的读取hbase内容。下面是一个具体的例子: 首先,加入下面依赖: <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.4.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-common</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.1.2</version> </dependency> </dependencies> 下面的例子从hbase数据库中读取数据,并进行RDD操作,生成两两组合。 import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.util.Base64; import org.apache.hadoop.hbase.util.Bytes; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.Function; import org.apache.spark.api.java.function.Function2; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapreduce.TableInputFormat; import org.apache.spark.api.java.JavaPairRDD; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; import org.apache.spark.api.java.function.PairFunction; import scala.Tuple10; import scala.Tuple2; import java.io.IOException; import java.util.ArrayList; import java.