泰游记之开篇:普吉岛、芭东海滩的红灯区与钢管舞

最近一次去泰国,是这次春节去的,在普吉岛上晒了一阵太阳,又去皮皮岛小住了几天。
普吉是一个有点儿开发过度的小岛,岛上东边西边的海滩是游客们最爱呆的地方,什么都有,缺点就是物价较高,我订了一家很差劲的酒店,班卡伦山酒店,在西海岸海边的小山上,到卡伦海滩闹市区不过三四分钟的车程,但是走下来还是有点吃不消。春节期间,朋友住在卡伦海滩南边的酒店,坐突突车5分钟不到的路程,要300泰铢,简直抢钱。但是这边的海难上就这样了。这个酒店我订的是高级别墅,但是也就风景还可以,条件其实很简陋,是那种下面由四根高高的水泥柱子支撑起来的小房子,左右前方是两棵巨大的树,透过两棵树的中间,刚好看到湛蓝的大海。顺小路走,往下几分钟就到了沙滩上,小崽子最喜欢的就是下来玩沙子。

卡伦海滩上靠北侧有个环岛,当地司机都叫它“Circle”,这里连着的垂直海滩的是一条美食街。这里的芒果糯米饭很好吃,刚来的时候小爱莎每顿必点。有些店外面会有一个大大木船造型,摆满了海鲜,有时还会看到一米多长的鲨鱼。小爱莎看到鲨鱼的时候很兴奋,非要来一份,结果发现其实跟鸡肉差不多的感觉。

后来换了个酒店,住到了芭东海滩的CNN,订的是夜市旁的店,但是居然说客满,给我们送到了在山边的那家店,离海滩较远了。酒店楼下有个应该是自营的SPA,滚嫂和我自然免不了要去享受一番;刚好赶上了chinese new year 促销,一个人,2个半小时,990泰铢。我们就做了,小家伙就在旁边玩。这次的体验非常爽,因为真得很放松,体验到了慢慢地轻松,最后缓缓入睡的感觉。后来两个人都睡着了,被叫醒,换到楼下去做足浴,发现是很大的一个真皮椅子,人整个陷进去的感觉,非常爽;按摩大姐把椅子调好,我就很快又睡着了。

晚饭前在楼下溜达溜达,发现旁边走二百米就是闻名全球的西蒙秀,于是临时起意去看西蒙秀,花了每人800泰铢。西蒙秀可能是最知名的人妖秀场了,连单身三十多年的二哥都知道。。。。不过因为之前在清迈看过人妖秀,又刚刚在幻多奇看过节目,所以后来觉得这个秀有点盛名之下,难符其实。我对西蒙秀主要的不满在于,一是没有围绕人妖这个主题来做文章,二是剧场也很拥挤。而幻多奇是大年三十去的,朋友说这天肯定有特别节目,于是满心期望,到最后也没发现有啥特别节目;吃的自助餐比较差,非常对不起300多人民币的一张票,可能主要就是来看节目吧。

晚上去夜市转了转,我们向来不爱买买买,加上朋友说这儿的东西也不便宜,所以这里久负盛名的江西冷,我们直接略过了,奔向了bangla街,也就是传说中的芭东海难的红灯区。【好吧,转之前我发现一个插曲,就是酒店旁边还有个地方,叫Bigeye,员工神秘神秘地推销一个秀,广告图腐的我都没好意思看,以我做数据分析师那毒辣又敏锐的眼睛,发现那绝对是一个非常非常非常。。。腐的地方!后来google搜索了一下,说是那个真人OOXX秀!居然这个表演也是醉了】

这条街到下午5点多,就会被封闭不让车通过了,封闭的方式就是。。。连着停了三辆突突,就是三轮摩托。晚上这里灯红酒绿,两边的high店音响震天响,人妖和妓女们在店门口搔首弄姿;卖香烟的,卖玩具的,玩魔术的,拉皮条的,不断地向游客们兜售,热闹非凡。来这里,当然是要去最著名的Tiger club去喝酒。

Tiger Club,现在在这里有两家店,估计是生意太好了,开了分店,两家店的外面都有巨大的老虎的模型。在这红灯区的外面,还有一家叫Tiger的海鲜店,店面也有一个巨大的老虎模型。

Tiger ,就是Thai girl的意思。这里提供的主要商品,就是诱人的泰国女郞。由于这里其实已经是普吉的名片,所以我对这个店倒比较放心,所以带着滚嫂和小爱莎来这里的一家店看看。这里的酒也不贵,90泰铢一份,点一份酒,就可以一直在这里坐着听音乐。整个店里非常大,现在有Thai girl站在上面扭来扭去的有12个吧,每个台子有10几个客人,所以全场应该有150人左右。消费倒也不高,比中国的酒吧都便宜多了,一支啤酒也就区区90泰铢,每个人都呆很长时间,所以翻台率是到不了2了,那么一天卖酒的收入应该是在3000~5000人民币这个级别【请原谅我技术男的数字敏感】,理论上这么大的场子,这么多的员工应该靠卖酒是过得比较苦逼的!中间的台子上在跳钢管舞,妹子的个子非常高,目测有1米8,另外还穿了得有15公分的高跟鞋。有个老外摸了一下跳舞妹子的脚裸,妹子立马下来追着要小费,老外掏出钱的时候,妹子扯开小背心让老外往里放。这儿的主题很直接,就是看上了谁,就让她下来陪你喝酒或陪你睡觉。下面的服务生会不断地向来喝酒的人推销,指着舞池中跳舞的人说,she is good,u want her?不过还好,因为我带着小崽子,并没有向我推销,但是他们推销的时候,实在就跟菜市场人的叫卖大白菜没啥区别,就当着所有人的面。也许,这事儿本来就跟卖菜没有什么区别吧。听说这里所有人包括吧台的服务员都是available ,给钱基本都可以提供陪睡【有很多只是大学生晚上过来兼个职】,但是我想,依这些吧台服务员的颜值,身材,谁会想花钱和她们睡觉呢?我们那个台子的妹子得有140斤吧?泰国人都很黑,实在不能理解这审美,也许浑身体臭的老外会喜欢吧。

喝完酒,背着小爱莎沿着红灯区继续往里走;路过一个路口的时候,发现进去大概50米有一个舞台,有几个人妖正在表演,就背着小崽子进去看了,进去点了一杯酒,只要70泰铢,就可以免费看表演。这儿表演舞蹈也还要可以,不过我倒是觉得服装造型挺用心,相比舞蹈更胜一筹;唱了一些很老的中国歌星的歌,像邓丽君的【在泰国的几个司机都很喜欢邓丽君,也不知道是不是为了迎合中国客人】。中间我去上了个厕所,进去的时候,我还以为走错了,因为看到一个长发女郞在那化妆;很快我就确认没走错,因为这个“女郞”上前楼住一个男的调戏了一把;于是我飞快地嘘嘘完跑了。

背着小爱莎在这溜达的时候,边上的各色人等都觉得她实在是太萌了,然后都过来打招呼,还要捏捏她的脸。在普吉这几天,小爱莎因为长得萌,至少接受了5次以上的礼物,我知道的有三次是送苹果给她,两次是送了一串小香蕉。爱莎还问,她们为什么喜欢挠我痒痒啊?

附图一:Tiger club的跳舞女郎

一个阿里大鱼的客户端

地址:https://packagist.org/packages/glz/dayu-client

README

这是一个超简单的客户端,只有不到70行的代码,实现了利用阿里大鱼发送短信的功能。但是,我只拼装了接口地址出来,接下来您可以用curl 等工具都能取到接口的内容,也可以用guzzleHttp,snoopy第三方包来取得这个url地址的内容。所以,我根本就没有添加任何进行接口访问的依赖。 最好看一下代码,因为实在太短了,没有理由不看啊。。。。

安装方法:

composer 安装 :

 composer require glz/dayu-client dev-master"

如果不会composer,直接从github上把文件拉下来也行,反正源代码目录就一个文件。

使用方法

直接上代码了

$smsSend = new DaYuClient("NjOBTNw0YRvJW0Un","VRhOKIuIe3DHumO8CIZ4R3eq8NCvWA");
$url =  $smsSend->getUrl4SendSms("手机号码", "示例短信签名", "SMS_****",
json_encode(["code"=>12345]),
    rand(1111,9999)
);// 这里的几个参数要改一下 ,倒数第二个参数 ,是对templateParam 进行json_encode后的字符串,是因为我的短信模板是"您的验证码是$code",所以我传的templateParam参数就是{"code":12345} .

/**
接下来,
*/
$guzzleClient = new \GuzzleHttp\Client();
$response = $guzzleClient->request('GET', $url);
$aliyunResponse = json_decode( $response->getBody(),true);
print_r($aliyunResponse);

入坑心得

  1. 坑点之一:生成时间字符串的时候,要UTC的时区,所以,看代码,我们临时切到UTC了。
  2. 坑点之二,他们的接口可能经常换,所以,我也不知道什么时候就不能用了。。。。
  3. 不小心就把appkey 和我的secret写出来了 还好我第一时间删除了。

再回乡

很多年没有坐过从县城回老家的小巴了,以前回来,都是从高速一路飞奔到离家最近的出口,下了高速片刻功夫就到家。坐在颠簸而嘈杂的小巴上,感觉世界一下子都慢了下来。就那么路过连绵起伏的小山丘,穿过刚刚掉落油菜花吐出油菜荚的田野,沿着小河蜿蜒而上。

饭后来到那条记忆里一直在哗哗响的小河边,春汛带来了满河床的水;庆幸的是,河水依然泛绿,水质尚佳,河里出产肥美的鳜鱼,远近驰名。

我伫立在河边,安静地听河水唱歌。太阳已经越过了小村后的高山,晚霞将半边天映得发红,河岸里长满柳树丛,半截淹在水里。树丛里腾起灰白的水汽,犹如仙境。

就是眼前的这河水,夺走我两个亲人的生命。第一个是我未曾谋面的小姨,在几十年前的农历8月,过来照顾她刚刚生小孩的姐姐,步行了10几里山路,来到河边。艄公索要1毛钱,她没有,选择自行涉水过河,淹死在这世代依赖的河里。第二个,是我的三叔,在河对岸干完农活,河水已经涨了几米深。这个正在筹备婚礼的年轻人,在下游水坝上被发现。

回家的的这一路,遇见很多人,听说很多人的变迁。很多是新闻,但其实又不新鲜。有的人暴富而嗜赌,有的人离婚,有的人自杀,有的人老婆跟人跑了丢下两岁的孩子,有的人年纪轻轻喝了点酒睡上一觉就死去。让人唏嘘,却又不意外。以前小说上才见的各种各样的剧情,就在身边一样样地接连上映。

我默默地拍了一张照片。从此,记忆里的河,将永远地跟随我。不管什么时候,掏出手机,就可以抚摸它。

写点儿软件给自己用

有好长一段时间,我都有点心有不甘,想折腾点东西。

也有时候,我心想,做为一个搞开发的,应该要完成两个目标,就算是对自己有交待了。一个目标是,写的东西,要让千万的人用。另一个目标是,要自己给自己写点东西用。

万幸的是,因为职业的关系,有幸参与了一个日活跃用户过亿的产品,所以,第一条,算是借着一份工作达到了。而且,还搞了不少有意思的故障。比如,有一次把商品搜索的代表B店的那个小图标的显示条件配置错了,第二天早上被眼尖的评论家们发现了,于是网上出来好多评论,说唉呀这个电商流量要碎片化啊,唉呀这个世道要变天啊。还好平时上班经常刷微博,赶紧改过来了。不过从此,就对电商四大傻有了新的认识。

第二条呢,好长时间一直在努力,不过也就是前几天才刚刚发现,其实我一直在用自己写的东西呢。比如这个,一个用结构化的方式显示json串的小工具,在用工具之前是这样的:

启动工具之后,就可以:

这个小工具大大地方便地了我的工作,最近3年来几乎一直在用。

比如这个:做为一个网站开发,天天在开发环境,测试环境,线上环境间切来切去,于是切换host绑定,几乎成为必备功能。于是就有了这么个东东,也是陪了三年了。

比如这个文本或照片快速http分享,我还网上照了个绿油油的小图标:

这个工具界面也超简单【我一向不爱写界面】:

如果有文件要分享,直接往里拖,如果用了系统的截图功能,直接点击输入框,Ctl-V,软件会自己把图片内容发到服务器上,返回截图地址【还会自己把图片地址复制到剪贴板】。

再比如这个:

这个东西,当然也是我从到处扒拉的代码,从界面到各种特性,都是从各个开源库里拼凑出来的,还起了个名儿叫Nodebook.git;一开始写它是因为网上的Markdown编辑器,都不能很好地嵌入代码【嵌入的代码不能高亮】,所以这也算是程序员定制款吧。嗯,我还曾经很烧包地引入了Jieba这个python的分词库和一个全文检索。

特性有很多自己想要的,比如,自动加载某个目录下所有的markdown文件:

能够代码高亮:

这个也曾陪了我好长的时间,直到后来不怎么分享代码类文档了,才不怎么用它。

这么回头一看,我还是很能折腾的,做为一个服务端开发,折腾了这么多界面的东东。虽然,没有其他人用。。。。起码我自己还是忠实用户嘛。

Drill: Hive 插件

Drill 1.1 及后续的版本支持Hive 1.0;要使用Hive的自定义SerDes或是输入格式、输出格式来访问Hive 的表,所有的Drill节点必须在Drill安装目录的jars/3rdparty 目录下放上Hive的SerDes或是输入格式,输出格式的Jar包。

你可以通过选择WEB办控制台里的”Storage” tab来更新Hive配置。从禁用的手件列表里, 点击”hive”后面的”Update”按钮。Hive默认的插件的配置应当像下面这样:

{
      "type": "hive",
      "enabled": false,
      "configProps": {
        "hive.metastore.uris": "",
        "javax.jdo.option.ConnectionURL": "jdbc:derby:;databaseName=../sample-data/drill_hive_db;create=true",
        "hive.metastore.warehouse.dir": "/tmp/drill_hive_wh",
        "fs.default.name": "file:///",
        "hive.metastore.sasl.enabled": "false"
      }
    }

Drill连接到Hive的远程元数据

Hive的元数据是在Hive之外做为一个独立服务存的的。Drill可以能冠军Thrift来访问元数据。元数据和Hive数据库是通过JDBC来交互的。

按照这一章后面的步骤来将Drill指向到Hive的元数据服务的地址。在Hive 插件的配置中,设定Connection参数,来给Drill提供一个connection。在这里,如果你并不是通过HBaseStorageHandler来查询Hive 表的,你就已经完成配置了;如果你通过HBaseStorageHandler来查询Hive表,你需要配置Zookeeper quorum 和port这两个属性,因为HBaseStorageHandler需要这两个参数。Drill也使用这些参数来发现HBase 服务。如果你使用HBase 插件,请在Hive插插和HBase 插件里使用相同的Zookeeper quorum 和port 参数(如果你想要Hive 查询访问和HBase一样的源的话)。

注意,请确认你在注册Hive的元数据的时候,Hive元数据服务已经跑起来了。

Hive 远程元数据配置

要连接Drill到一个Hive 远程元数据:

  1. 在hive.metastore.uris配置项里指定的系统上执行这个命令:

hive --service metastore

  1. 在Drill的Web控制台上,点选 “Storage” 标签页。