TheOnly92

TheOnly92

潘訚隽,1992年4月16日离开了妈妈温暖的肚子。习惯说废话,说话毫不客气,至今一事无成。 小的时候喜欢看中国古代文学。2000年接触电脑,在2003年学会程序语言。 对于物理抱着相当大的兴趣,却因学校的学会活动冷了下来,目前专心发展机械人研究组,希望能升格为正式学会。 目前研究兴趣包括各种作业系统,各种编程语言,网络服务及科技资讯。

Home page: http://theonly92.com

Posts by TheOnly92

僕は待ってる

每当有谁迷路的时候
我到哪里都会去寻找
每当有谁的脚受了伤
我也会把我的肩膀借给你吧

不论有多少困难在等待
不要把困难挂在口边
因为你们都是何时都要到那个梦想的地方
这么一起发誓过的同伴们吧

活着这件事
就是受伤这么回事
一直重复着错误
让周围的人受到困扰
“放下走吧”对着哭着这么说的你
我没办法放下

如果你的行李很重
我会帮你拿一半
所以再一次跨出你的步伐吧
没有所谓的失败者
不要输给自己

回想起来吧
自己的梦想…
你要在这种地方放弃吗?
即使绕远路即使休息一会
你能够再次跨出步伐的那一天
我一直在等待

活着这件事
就是受伤这么回事
一直重复着错误
让周围的人受到困扰
“放下走吧”对着哭着这么说的你
我没办法放下

ラムネの飲み方

今天你也请了假
不知从谁的口中得知
我变得很担心
如果感冒伤风就没办法
但是似乎有其他的理由

上个星期看到你时
你的行为有些奇怪
你开的玩笑和你的笑容
感觉上有些不自然

弹珠汽水没有一口气喝的吧
慢慢 慢慢喝就好了
望着蓝蓝的天空
按下瓶子弹珠歇一歇
如果心中的泡沫感到痛苦
那就试一试吐吐气

只有一封回了
手机的短消息
写着“没事”
如果说“没事”
那通常是因为有事

不要再逞强了
我就是因此在这里
没有爱情
诚实的面对不行的自己吧

人长大了就不喝弹珠汽水了
一定 一定不是因为讨厌
忙碌的日子疲惫的身子
要按下弹珠也感到麻烦
要轻松过着日子的方法
就是不要去努力

弹珠汽水没有一口气喝的吧
一半 留下一半就好了
就算气都跑了
如果胸口还是有着一粒弹珠
那现在任何事都别想
歇息一会儿吧

てもでもの涙

开始下起的绵绵细雨
就好比银色的绸缎
垂落下来
将窗口掩上
那就是我的初恋

伏在地上等待的
第二个路口
没被任何人理睬
往下一看
绣球花也在哭泣

即使这么想见你
即使这么爱你
你也只在眼前路过
就算是如此
我也一直望着你
从这个地方
即使这么想见你
即使这么爱你
你也不肯向这里望一下
明明在撑着雨伞
脸颊会湿
是没有任何办法
爱恨交织的眼泪

我一个人开始步行
残留着悲伤的道路
我的心中
开始迷惑
是谁也不知道的爱情

喜欢雨的
这个绣球花
在晴天时将眼睛闭上
是否在想着
遥远的雨云?

无论如何伤心
无论如何不可能
请让我保持着少女的心怀
和你相遇
记忆的足迹
我不会忘记
无论如何伤心
无论如何不可能
以后总会回忆起来吧
我的愿望
即使不能实现
也会持续闪烁
爱恨交织的恋爱

即使这么想见你
即使这么爱你
你也只在眼前路过
就算是如此
我也一直望着你
从这个地方
即使这么想见你
即使这么爱你
你也不肯向这里望一下
明明在撑着雨伞
脸颊会湿
是没有任何办法
爱恨交织的眼泪

让你久等了的 Set list

一直非常羡慕
前辈们的舞台
原创的歌曲
但是我们
好像被遗忘了一样
一直在退后
重复着同样的舞蹈课
也只是默默地
继续加油努力
也许何时会

让你久等了的 Set list
成真的梦想
为了我们而准备的
美丽的旋律
KII 的 Set list
大家的梦想
会很珍惜的(很珍惜的)
继续唱着
从今以后

一直感到很不甘
虽然很喜欢 revival
无法往前行
还有什么不足够的
要如何才能继续前进
非常焦虑的
每一天
第一次将服装
穿在身上的时候
好像新的生命
就此诞生

终于到来的 Set list
成长了的梦想
只是为了我们
所有的事情都有准备
KII 的 Set list
向着未来的路
这个机会(这个机会)
不会白白浪费的
多多指教

让你久等了的 Set list
成真的梦想
为了我们而准备的
美丽的旋律
KII 的 Set list
大家的梦想
最想要(最想要)
首先告诉的
就是你

風の行方

正在等待夏天的
天空和太阳和水平线
我一个人带着小狗
在白色的沙滩走着

海边的屋子的骨架
虽然至今还未完成
就好像过去的爱情
隐约还惦挂着

和你吃过的玉蜀黍
内部好像没有熟透
两人一起忍不住笑出来的
笑声很令人怀念

对风的下落
终于注意到了
你的笑脸
让我的伤痛都痊愈
对风的下落
充满了回忆
在我身边 你已经不在
谁能够让我的伤痛痊愈?
没有任何办法
好寂寞

长长的一年过去了
雨季也停就是耀眼的季节
波浪也将湿了的衣服脱掉
寻找那一天的波纹

你说不想被太阳晒黑
将帽子带的遮住了眼睛
亲吻的时候被阻挡了
我尴尬的抱着你

云也飘了
夏天也接近了
在心中深处的天气预告
显示着反气旋
云也飘了
你最爱的
烟花的照片如果想再拍的话
今年再来就好了
分手的理由
就忘了吧…

波浪拍着沙滩时
好像消失了一样
在沙滩上画出的心形和
你的足迹
I miss you!

对风的下落
终于注意到了
你的笑脸
让我的伤痛都痊愈
对风的下落
充满了回忆
在我身边 你已经不在
谁能够让我的伤痛痊愈?
没有任何办法
好寂寞

青春と気づかないまま

在我眼前那极高的梯级
要爬了多少 调匀呼吸
才能觉得轻松
夕阳斜射进窗口的对面
未来的景色能够看见吗?
梦想显得辉煌吗?

和回忆相反的
渐渐消逝的日子

让青春和草率的心
随着时间的流失
将一直撒娇的校服脱掉
成为大人
在那个时候大家一起唱着的
那首歌谣
直到现在才终于明白了其中的意义

在油毡地板上响个不停的拖鞋
似乎在为了追求什么而拼命跑
因为到了尽头而心受创伤
不知何时 在相簿中
和朋友微笑着互相拥抱
的照片 我一直望着

新的人生
虽然非常期待…

让青春和草率的心
随着时间的快步走
将刚画完的未来的地图修正
然后称为大人
在那时候 唱了不知多少遍
非常喜欢的那首歌
不知为何现在却无法记起歌词了

青春和草率的心
一直都消遣地
将眼前发生的重要的事情
全都忽略
终于爬上了楼梯的顶端
虽然来到了上面
如今我却无法唱歌了…

掌の砂

究竟要有多少个明天
才能够到达
在眼前 宽敞的道路
那遥远的彼方…
如果在途中停止
那梦想 就会到此结束
不管是多长的路程
都会有个开始
TRUE ROAD

张开的手掌
无法装下任何沙粒
但是只要用力 握紧拳头
就可以不放弃任何事情继续下去
从少年时期
一直 无法忘记
我愿望的沙粒
什么都没有变
如今也还在

有些时候 雨会倾盆
风也会吹起
即使心被悲伤沾满
即使迷失了方向…
找得见的光芒
要到处去寻找
微笑着的朋友 就在身边
将手伸出
TRUE FRIEND

有些人的手掌
一直都非常温暖
将一起生活的这段日子
照得如同太阳一般
流眼泪这件事
并不是什么害羞的事情
我愿望的沙粒
为了让花绽开
下起了雨

如同世界的人数
手掌和愿望也那么多
如果开始相信
那么就不会有争执…
TRUE LIFE

自己的手掌
究竟紧握着些什么?
放松 如果将手掌打开
就能看见当时下定的决心
为了成为大人
如同溢出来般的疑问
为什么会活着?
问一问沙粒
我为什么在这儿…

secret base ~君がくれたもの~

送给所有值得我称“朋友”的朋友们

随着和你在一起的夏天的结束 未来的梦想
伟大的希望 我不会忘记
深信我们会在 10年后的8月 再次相遇

成为最美好的回忆…

和你相遇的时候 只是一瞬间 在回家路上的路口
你对我开口说「一起回吧」
我 非常害羞地
用书包藏着自己的脸
心里却 非常 非常的 高兴

啊~ 烟花在夜空 非常漂亮地绽放 有一点痛苦
啊~ 风也随着时间一起 流走

非常高兴 非常快乐
冒了险也 做了很多很多事情
在两人 秘密的 基地里

随着和你在一起的夏天的结束 未来的梦想
伟大的希望 我不会忘记
深信我们会在 10年后的8月 再次相遇

你一直到最后 在心里
喊着「谢谢」这件事情 我知道
忍着泪水 笑着说再见
非常痛苦吧 成为最美好的回忆…

啊~ 暑假也 只剩下那么一点 就会结束
啊~ 太阳和月亮 感情很亲密

非常悲伤 非常寂寞
吵了架也 做了很多很多事情
在两人 秘密的 基地里

你一直到最后 在心里
喊着「谢谢」这件事情 我知道
忍着泪水 笑着说再见
非常痛苦吧 成为最美好的回忆…

突然的 转校 没有任何办法
我会写信 也会打电话的
不要忘记啊 我的事情
一直在 属于两人的 基地中

随着和你在一起的夏天的结束 一直聊着天 看着夕阳也瞭望天上的星星
你的脸颊边 留下的眼泪 永远都不会忘记
你一直到最后都 大力的向我挥着手 一定不会忘记
所以 就这样 在梦中 一直永远地…

随着和你在一起的夏天的结束 未来的梦想
伟大的希望 我不会忘记
深信我们会在 10年后的8月 再次相遇

你一直到最后 在心里
喊着「谢谢」这件事情 我知道
忍着泪水 笑着说再见
非常痛苦吧 成为最美好的回忆…

成为最美好的回忆…

Footnote: 希望我们10年后能够再次相遇

From PHP to Go

Disclaimer: This article is not and does not intend to be an introduction to the Go programming language.

Recently I’ve been learning the Go language created by Googlers, it’s a nice and elegant new language that seems to have a bright future.

Coming from a PHP background, there are a few things that I totally don’t understand (initially). PHP is a loosely typed programming language, you can convert int to string anytime anywhere and convert back as well. It’s the first time I meet up with a static typing language, that caused me quite some trouble in the beginning but I have been getting used to it ever since (and maybe beginning to appreciate it as well).

Besides that I have totally no concept about pointers as well, I’ve dealt them a little in PHP but in other languages like C, C++ it’s all about pointers. That makes it difficult for me. Luckily, Go has very little to do with pointers, I was quite relieved when I knew about that.

PHP array equivalence

Well, there are arrays in Go, but they’re different from PHP. For instance, to create an array one can do something like this:

1
for ($i=1;$i<=10;$i++) $array[] = $i;

It is possible to append to an array directly with $array[] and you don’t have to initialize nor declare the length of the array before you use it. In Go it’s a totally different thing (basically, in all other languages it is a totally different thing), you need to declare and initialize the array before use.

1
2
3
4
tmpArray := [10]int
for i := 1; i <= 10; i++ {
    tmpArray[i-1] = i
}

Note that you can’t just append items to arrays with tmpArray[], you have to specify an index. But what if I don’t know exactly how big my array is gonna be? That’s when you should use slice. A slice allows you to dynamically extend your arrays, and make it as long as possible.

1
2
3
4
tmpArray := make([]int, 0)
for i := 1; i <= 10; i++ {
    tmpArray = append(tmpArray, i)
}

Note that I declared and initialized a tmpArray with 0 length, then I looped 10 times and added items to it. But I suppose that this operation is expensive because if you need to extend the slice’s size it will initialize a new slice with the larger length, copy all items over and give it back to you, so it’s always good to either determine how large you need the slice to be before you begin.

What about associative arrays? Associative arrays in PHP are extremely useful and I personally use them all the time. In Go however, they aren’t called arrays, they’re maps.

To initialize a map, you do make(map[string]string), code example as below:

1
2
maps := make(map[string]string)
maps["test"] = "Hello!"

Notice that you can assign new items right away. If you want to assign when you declare the variable, you can do so:

1
maps := map[string]string {"test": "Hello!"}

A very handy and useful functionality in Go.

Regular Expressions In Go

I can’t cover too much in this area, as I have also yet to explore on regular expressions in Go yet. But I can provide some basic information on how to use regular expressions in Go.

In PHP, we do preg_match("/([a-zA-Z0-9]+)/", $string, $results) to find all alphanumeric characters. The equivalence in Go is the following:

1
2
3
import "regexp"
rx_alphanumeric := reegxp.MustCompile("([a-zA-Z0-9]+)")
match := rx_alphanumeric.FindStringSubmatch(stringToFind)

You then have all the matches in match, which is an array of type [][]string, all the match results are stored in match[1] just like in php. Besides FindStringSubmatch, there are still a lot of functions you should read the documentation.

isset()

Performing an operation on an uninitialized variable will cause the whole program to terminate immediately. PHP has a useful function called isset(), but how do we use the equivalent on Go?

It turns out, in Go, assignments actually return 2 variables. The 2nd variable indicates if the operation is a success. So if you’re not sure whether the variable notSet is set or not, do the following:

1
2
3
4
5
if val, exists := notSet; exists {
    println("Is set!")
} else {
    println("Not set")
}

Conclusion

The only painful part of transitioning from PHP to Go is that every time you make some changes you have to recompile it to see the effect. In PHP you just have to tap Cmd+R in your browser to see the changes in effect. Besides that, resources on the Go programming language is still scarce and libraries aren’t quite available yet.

Other than that, I don’t see any reasons why we shouldn’t use Go.

踏上 NoSQL 之路

最近的项目中,异想天开突然想要引进一些新的技术。这个项目其实我已经开发了 3 个月了,是一个非常普通的 PHP + MySQL 的 Web 项目。所以我一开始所想的不是要将 MySQL 去掉完全利用 NoSQL,而是在想如何在我的项目中利用 NoSQL。

在这之前,我对于 NoSQL 几乎没半点概念,只知道 NoSQL 似乎是为了解决 RDBMS 扩展问题 (scaling problem) 而出现的。除此之外真的一点也不知道 NoSQL 有什么功用。于是乎我就开始在网上搜索资料,对 NoSQL 进行学习。有不少说明何谓 NoSQL 的资料,过程中我也了解到 NoSQL 有 4 种 [1],这 4 种都有不同的功能。

在清楚何谓 NoSQL 之后就开始进行思考了,究竟要如何在项目中利用 NoSQL?恰巧在 HN 上读到一篇文章 [2],发现原来 Redis 可以这么利用,而且文章也指出 Redis 在处理排行榜中的各种优势,于是就决定将项目中有关排行榜的那一部分从 MySQL 移植到 Redis。

之前,我对于排行榜的处理方式是将分数与玩家资料放在一起。由于某些页面有必要获取玩家的排名,因此就预先将排名算好当做玩家资料的表格的另一个栏储存起来。每次分数有所更动就必须全部重新计算,计算时间其实相当长。

在 Redis 则利用 Sorted Sets,只须将玩家的 ID 和分数记录下来,每次更动也无需进行任何计算,要获取玩家排名也不过直接 zrevrank ID 就可以了,非常方便。利用 Redis 之后,我也可以增加一些新的功能,比如根据玩家的种族进行排名,诸如此类在 MySQL 上会相当麻烦且花时间的功能都能够轻易实现。

成功利用 Redis 之后,我就看了看其他的 NoSQL 如 MongoDB,发现其实项目中暂时没有适合利用这种 NoSQL 的地方。当然,如果硬要利用 MongoDB 那还是可以的,但是其实没有这个必要。MongoDB 是一种 Document store database,这类数据库相关资料都必须放在同一个 Document 中,举例来说就是博客中 Article, Comments 和 Author 都必须在同一个 Document,在这个 Document 中的关系是每个 Article 都有多个 Comments 和一个 Author。对于我目前这个项目来说,各个元素之间有相当复杂的关系,如果要利用这种数据库会搞到一个 Document 非常巨大,结果可能不理想。

直到目前来说,还没有想到项目中还有哪一个部分可以移植到 NoSQL 去。但是就目前这个状况,我也挺满足的了。

TheOnly92's RSS Feed
Go to Top