乌兰察布周末游

为了看夜景

某天,领导一直对看夜景念念不忘。他指出,国贸三期看夜景消费太高,从飞机上看夜景会更划算。
于是,我提出了种草已久的 PEK-UCB 航线。这条航线是”网红航线“,它是北京出发最短的一条国航系航线,众多国航金卡喜欢用这条航线刷航段。
看到了周六早上出发周日晚上返回的机票价格不错,就定下这个行程了。

2019.02.23 07:05 NAY-UCB
2019.02.23 22:00 UCB-PEK
往返含税403元。

南苑机场

南苑机场是中联航的基地,民航也是中联航独家运营的。所以,也不难理解,南苑机场就像个三线城市汽车站。

早晨有不少航班,自助值机的机器只开了几个,要排一阵队才能拿到登机牌。过安检的时候,扫描登机牌,没有找到信息,要去人工值机柜台重印登机牌。

过了安检上楼,已经开了不少餐饮。KFC一个市区买10元的早餐,这里卖36元。西部马华吃个面也要50的样子。候机大厅弥漫着老坛酸菜牛肉面的味道,机智的我也带了两个杯面做早餐。

准时登机。后来因为要除冰,将近7:30才起飞。

继续阅读“乌兰察布周末游”

AWS SNS 自定义邮件格式

AWS 的 SES (Simple Email Service) 可以提供邮件收发服务。对于邮件收发的反馈,如 Bounce message, 可以发送到 SNS (Simple Notification Service) 作进一步处理。SNS 可以指定某个邮件地址作为订阅者,将消息发送到该邮箱中。然而,SNS发出来的邮件是 JSON,可读性不好,例如:

{"notificationType":"Delivery","mail":{"timestamp":"2019-02-18T06:03:02.669Z","source":"kfc@feichashao.com","sourceArn":"arn:aws:ses:us-west-2:xxxxxx:identity/feichashao.com","sourceIp":"205.251.234.36","sendingAccountId":"xxxxxx","messageId":"01010168ff335c8d-f00ce1c1-e103-49cd-912f-9f397c7a463c-000000","destination":["feichashao@gmail.com"],"headersTruncated":false,"headers":[{"name":"From","value":"kfc@feichashao.com"},{"name":"To","value":"feichashao@gmail.com"},{"name":"Subject","value":"free kfc"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"text/plain; charset=UTF-8"},{"name":"Content-Transfer-Encoding","value":"7bit"}],"commonHeaders":{"from":["kfc@feichashao.com"],"to":["feichashao@gmail.com"],"subject":"free kfc"}},"delivery":{"timestamp":"2019-02-18T06:03:03.917Z","processingTimeMillis":1248,"recipients":["feichashao@gmail.com"],"smtpResponse":"250 2.0.0 OK  1550469783 q2si13329671plh.79 - gsmtp","remoteMtaIp":"74.125.20.27","reportingMTA":"a27-30.smtp-out.us-west-2.amazonses.com"}}

怎么能让这个提醒邮件变得更加友好呢? SNS目前不支持自定义邮件格式。一个思路是,将 SNS 的消息发送到 Lambda 上,让 Lambda 处理好格式后,再发送到指定邮箱。即 SES -> SNS -> Lambda -> SES.
继续阅读“AWS SNS 自定义邮件格式”

关于我性取向的常见问题及回答

为了仪式感,我在一个周五的晚上朋友圈公开了我的性取向(俗称“出柜”)。下面就有关问题进行回答。

Q0: 真心话大冒险?
我是认真的。我听过“狼来了”的故事,不会在朋友圈开这种玩笑。

Q1: 什么时候发现这个属性?
回想起来,最早在高中的时候就怀疑自己。在别人都卿卿我我去小树林牵手的时候,我毫无所动一心只想学习。

身边的朋友们似乎对女性都很感兴趣,而我走在路上对身边的女性基本无感,反而会关注男性。不确定这是一种什么样的感觉,迷茫。

高中的时候,(嘿,这段删掉)。

直到N年之后,广电局“推荐”了《上瘾》这个电视剧,瞬间找到了答案,就是这种感觉。后来看果壳等科普资料,知道了同性恋是普遍存在,也就明白了。

Q2: 0 还是 1?
大概率是0, 仍未确认。

不过这属性据说也不是非1即0的,看情况吧。

Q3: 为什么以前不说出来?
害怕。

身边有一些我很在乎的朋友表达过不能接受同性恋的人,或者也开过类似玩笑。我很害怕失去朋友。

不确定其他人的想法,网上有很多反同恐同的声音,我害怕别人不一样的目光。

Q4: 为什么现在要说?
小时候,我妹用左手拿勺子,用左手写字,我妈会打她以“纠正”她的错误。后来,我妈跟大姑妈说起这件事,大姑妈告诉我妈左撇子很正常且普遍存在,我妹就不再被“纠正”了。都2019年,应该很少人认为左撇子是不正常的吧?

我上大学之前,认为北京冬天很冷不能洗澡,认为内蒙人民骑马上学,认为新疆人民都能歌善舞。现在我离不开北京的暖气,看到内蒙同学坐宝马上学,看到新疆同学整天打游戏不唱歌跳舞。

我思考了十分钟,觉得偏见和误解很可能是由于“没见过”导致的,还有就是媒体的误导。

我害怕说出来是因为担心被误解,消除误解的方法则是让别人“见识过”。所以,要解决这个问题,就要 be visible,让身边的人知道,同性恋的人同样热爱生活,同样符合鸽子真香复读机三大人类本质。

Q5: 我喜欢你吗?
这里的“喜欢”特指爱情。

男性读者可能会好奇我喜欢你吗? 默认情况下不喜欢。

某些影视作品可能会把 gay 塑造成“见到男性就勾搭”的形象。要知道,“性取向”跟“性骚扰”是两回事,后者可能违法。另外,异性恋也不会喜欢/勾搭所有异性,同理可得。

Q6: 性别认同?
被问了“有没有注射过雌性激素”...... 看来误解真不少。

“性别认同”(Gender Identity) 和 "性取向"(Sexual Orientation) 是两回事。世界上也存在很多性别认同与多数人不一样的人。对于我,我认同自己是男性。

至于化妆品,我觉得跟“性别”“性别认同”"性取向"都没什么关系,与精致程度更加相关。我出门都不洗头,别指望我懂化妆品。

至于女装,反正我不喜欢。

Q7: 喜欢的类型?
先不公开说,遇到了就遇到了,遇不到也习惯单身了。况且我觉得单身很爽......

Q8: 补充?
跟我妹说这件事,她的反应是:不就是男的喜欢男的,多大点事儿别给自己加戏。

我期待这样的世界。

如何使 Hive 对 DynamoDB 进行并发读取?

问题背景

DynamoDB 创建了类似如下的表:

{
"accessid": "c63b88a3-1503-4c2c-a7c2-3a1ffde7bff9", // Primary key.
"date": "2018-12-12",
"when": "2018-12-12 17:22:15",
"context": "something"
}

这个表用来记录访问记录,以 accessid (随机字符串) 作为 Primary key. Date 记录当条记录的生成日期。

我们希望通过 Hive 每天将前一天的数据从 DynamoDB 备份到 S3 上,具体方法可参考文档[1].

hive> INSERT OVERWRITE TABLE  s3_table
    > SELECT * FROM ddb_table WHERE date="2018-12-12";

Dynamodb表里存放了很多天的数据,执行以上操作会消耗很长时间,如何能加快速度?比如让 Hive 进行并发读取?
继续阅读“如何使 Hive 对 DynamoDB 进行并发读取?”

Hive 去除 CSV 字段中的双引号

问题

在 AWS 中,可以开启详细账单的功能。开启详细账单后,AWS 每天会多次将详细的账单数据存入到指定的 S3 bucket 中[1]。
账单数据是一个 CSV 文件,示例如下:

"InvoiceID","PayerAccountId","LinkedAccountId","RecordType","ProductName","RateId","SubscriptionId","PricingPlanId","UsageType","Operation","AvailabilityZone","ReservedInstance","ItemDescription","UsageStartDate","UsageEndDate","UsageQuantity","Rate","Cost"
"Estimated","xxxxxxxxxxxx","xxxxxxxxxxxx","LineItem","Amazon Simple Queue Service","16850885","1846142824","1292565","CNN1-Requests-Tier1","GetQueueAttributes","","N","First 1,000,000 Amazon SQS Requests per month are free","2019-01-01 00:00:00","2019-01-01 01:00:00","60.0000000000","0.0000000000","0.0000000000"
"Estimated","xxxxxxxxxxxx","xxxxxxxxxxxx","LineItem","Amazon Simple Queue Service","16850885","1846142824","1292565","CNN1-Requests-Tier1","GetQueueUrl","","N","First 1,000,000 Amazon SQS Requests per month are free","2019-01-01 00:00:00","2019-01-01 01:00:00","180.0000000000","0.0000000000","0.0000000000"

第一行是每个字段的名字,后面的行是相应的数据。
继续阅读“Hive 去除 CSV 字段中的双引号”

旧金山-洛杉矶7天倒时差游记

这是一次因为特价机票而出发的旅行。

特价机票

美国一直都不在我的目的地列表里。7月的某一天,我搜了一下 北京-旧金山 的往返机票,含税2500元,截了个图给室友看看这世界居然有这么便宜的洲际机票。没想到室友心动了,诱惑我一起买票去一趟。然后我们就办起了美签,准备去一号公路自驾。

签证

美国签证的攻略网上大一堆。我填了DS-160表格,打印了银行流水和工作证明,约了早上7点半的面试。去到大使馆蒙了,前面排队的人都准备了非常多的资料,连全家福都带上了。面试官问我要个人简历,我说没有,随后得到一张绿色的字条,回头要发邮件补材料:个人简历,公司介绍,机票酒店预订单和行程单。好吧,要啥给啥。查询签证的状态是 Administrative Processing,就是传说中的被 Check 了。等了一个月,才拿到签证,一年有效期。
继续阅读“旧金山-洛杉矶7天倒时差游记”