Skip to content →

Category: Blog

母亲说

妈是什么?

母亲因为肿瘤转移脑梗导致失明失语,我跟她视频叫了一声“妈!”,她看着手机屏幕,喃喃的如是说。我愣住了,前一天她虽然说话吐词不清,可是仍然辩得出我的声音,能够用简短的词语回答我。那一瞬间我的眼泪夺眶而出,替母亲感到委屈却又感到无能为力。“妈是什么”?我用苍白的语言无法回答这个问题,也许用母亲自己的话可以给这个问题一些注解。

我走了之后你们不要太伤心,人迟早都要走的。

母亲失语的前一个晚上跟父亲聊天的时候让他转告我。也许她当时已经知道自己时日不多了,即便是在那个时候,她依然在为我着想。从我出生那一天起,母亲便将她几乎所有的精力放在我身上。从小到大虽然条件不好,但是我有什么要求她都会尽力满足我。甚至有些回想起来并不合理的要求(比如给我买了录音机之后我又要买复读机),她都会努力且包容的满足我的要求。而她自己却舍不得给自己买一件新衣服,她自己的丝巾从结婚起一直用到现在,用了三四十年。这三十几年间搬家搬了两次,母亲的嫁妆依然在新家见证着母亲勤俭持家的成果。一辈子总是先为家人考虑,最后才考虑自己,默默的奉献了一辈子,所以妈是顾家的、无私的、伟大的。

我们没能给你挣下什么家业,你挣钱不容易,我这病反正看不好,就别看了。

那天母亲第一次突发脑梗,眼睛已经看不清楚东西,右手也伸不直了,她躺在病床上一边流泪一边这么跟我说。那是2021年6月27日,那天下午我要离开她回卢森堡办理家庭团聚许可。我只能安慰她,钱没有了可以再挣,人没有了就真的没有了。我让她不要有心理负担,积极配合医生治疗总会好起来的,身体好一点了我们卢森堡再见。那天我们一家三口在病房默默的流泪,眼泪中全是不舍和期盼。在母亲心里,她的生死甚至不如我的生活重要。

我许个愿,希望我的身体越来越好,为儿子减轻些负担。

母亲确诊一周年,我买了一个小蛋糕,在蛋糕上点上一支蜡烛,她十指紧握,对着蛋糕虔诚的说道。她总是怕给我添麻烦,自己生病了还对家人充满歉意。家人永远排在自己前面,这就是我的母亲。

我想学(缝纫),大人说好事怎么能都让我占了,我是后来自己摸索的。

那天母亲看到一个迷你缝纫机的广告,给我看了后我便买了一个。她用这个缝纫机缝了几条裤子,还把一条连衣裙改成了一件背心和一条裙子。我问她之前是不是跟师傅学过,她这样淡淡的回答我。原来母亲当年高考之后家人觉得她读书读的够多了,她想学缝纫大人也不支持。于是每当裁缝师傅到别人家做活的时候她就去旁边看着,再加上自己不断摸索,也就学会了。我小时候母亲给我和父亲做过花衬衫,原来这些都是母亲自学的。其实细想我并不吃惊,因为母亲一直都聪慧过人。她在学校的时候不仅学习优异,各项体育文艺活动也不落下。她曾自豪的跟我说当时唱歌高音别人都唱不上去,就她能唱上去。如果母亲出生在我们这个时代,她一定读了好大学,很可能成为理工科的学科专家,生活的一定比我好。也许是不希望我重复她自己人生中的遗憾,从小母亲便让我自己拿主意,而她则一直默默的鼓励我支持我。她对我的鼓励和支持让我远行,即便离别时母亲会依依不舍的送我离开并转过头去抹眼泪,她依然坚持让我自己把控自己人生的方向。

你放心,我还死不了,我知道我的身体怎么样。

去年年底在医院复查,查出癌细胞转移到了肝脏,医生认为她活不过三个月。我当时心急如焚,想回国陪着母亲,母亲却这样安慰我。事实证明母亲是对的,医生口中的三个月最后变成了八个月。母亲就是这么乐观、自信和了解自己。

我儿子在哪,我的家就在哪。

多年之前我在南通工作,接母亲跟我在南通一起生活了大半年。当时公司老板娘问母亲想不想家,她这样笑着回答。母亲能这么想,以及她话中的哲理让我感到很幸福,家是温暖的,家人在哪里哪里就是家。我就是母亲的家,母亲在我心里。

Nice to meet you! My name is …

我跟母亲在南通时,公司有几个瑞典籍员工和实习生偶尔跟我们一起聚会,母亲总是会兴奋的用她高中时学过的英语跟不懂中文的同事交流。自从母亲离开学校就没有机会接触英语,但她仍然能够记起学生时代的课文,相对我的记忆力母亲简直是过目不忘。我很多时候会想,要是母亲出生在我这个年代,我的学习肯定比不过她。

你是不是有什么烦心事瞒着我?

大学时有一次心情不好,后来调整心情后跟母亲通电话,她还是从我的言语之间感觉出来了异常,她这样问我之后我的委屈一下子化成泪水喷涌而出。母亲总是能感受到我最细微的情绪,并通过简单几句话开导我。也有人说我母亲性子直说话也直,这是因为母亲能够很快的感知事情背后的缘由,理解事情的轻重缓急,找到最直接的解决问题的方法。也可能是因为说话直得罪了人,母亲反而时常规劝我遇事要沉着冷静,不紧不慢的去解决问题,说话也不能太直,要留有余地。

你考了这么多分?哈哈哈!

中考拿到结果后,母亲得知我考得不错,正坐在小板凳上摘菜的她站起来接过我的成绩单,得知我可以上重点高中之后笑着一屁股坐在了菜盆里。我的一点点小成绩竟然让母亲忘乎所以,当然我的成绩很大程度上要归功于母亲,是她给了我学习的头脑,让我认识到学习的重要性,给我力所能及的辅导,以及每天陪着我写作业到凌晨,在炎热的夏天打着蒲扇为我驱赶蚊虫,为我默默的加油鼓劲。

不想活,有本事你跳啊!

我初中有天晚上作业实在写不完而我又困的不行,于是准备睡觉并让母亲第二天早上早点叫我起床继续写作业。然而第二天母亲看我实在太累了,便心疼的让我多睡了一会儿。我醒了之后异常生气,发了一通脾气后哭着说我不活了。母亲看着我又生气又心疼,于是她拉着我来到桥边故意推着我让我跳下去。就那么一下我似乎被惊醒了,也不敢寻死觅活,只是呆在桥上撕心裂肺的哭。她让闻声赶来的舅舅把我带回家看着,然后去学校叫了我的班主任到家,给我进行了思想教育之后让班主任把我带回了学校。我曾思考母亲当时为什么会那样去激我,也许是因为她了解我跟我有一定的默契吧,知道我不敢做出格的事情。

我说被子上哪来的血,我一拉被子,你的眼泪就下来了。

这是母亲给我讲我小时候的事情。那时候我调皮,让父母操了不少心。有一次我骑车把膝盖摔了怕父母批评,就想瞒着父母,在他们面前强忍疼痛故作镇定。有一天我躺在床上准备睡觉,母亲悄悄把我的被子拉开,看到了我受伤的膝盖。原来她之前整理被子的时候发现了血迹,便开始观察我有没有什么异常,估计也明白了几分。那一次母亲没有批评我,而是带我去看医生。我不知道从那之后我有没有更懂事,但是回想起来母亲似乎从那之后对我更加宽容慈爱了。

钱在我这里只有进来的,没有出去的。

如果母亲一个月有两千块钱的工资,她一个人一年一定可以存三万以上。在我甚至母亲的同龄人眼里这简直就是不可能的事情,但是母亲几乎每年都是这样。我问她是如何办到的时候,她如此自豪的跟我说。她一辈子并没有高工资,却存下来别人双倍工资都存不下来的存款,后来还给我钱帮我买房。在很多人眼里母亲舍不得用钱,她却并不在乎。她说自己吃的穿的都不比别人差,她教会我什么钱该花,什么钱不该花,如何开源节流,更重要的是潜移默化中我从母亲身上体会到了什么是消费什么是投资,以及储蓄是何等重要。

你以后不要做丁克族,最好多生几个孩子。

母亲这句话说了一半,后面半句应该是“不然老了之后没人陪在身边”。可能是怕我听了难受吧,作为独子却远在万里之外,在母亲最需要陪伴的时候缺席。在感情上,母亲希望我能留在身边;可是母亲太理智太无私,无时不刻不在为我着想,不愿因为自己打扰我的工作生活。

当时好几个比你大的都没报上名,我给你报上了。

小学入学报名的时候,招生的老师只给87年9月1号之前出生的学生报名,而我是9月底出生的,原则上得再上一年学前班等到下一年才能报名。轮到我的时候母亲灵机一动,报了我的农历生日八月初五,于是我就开始上小学了。母亲后来跟我说起这件事的时候很骄傲,因为她为我省了一年不必要的学前班。母亲虽然在大是大非前面坚持原则,但是却不拘泥于愚蠢的条条框框,敢于挑战一切不合理的规章制度。后来八月五日变成了我身份证上的官方生日,而母亲是北京时间2021年8月6日凌晨离开的。虽然弥留之际母亲已经完全不能说话、不能进食、不想吃药也没有力气睁开眼睛,但是我知道她是希望陪我过完我的生日再走的。母亲三十多年前给了我生命,含辛茹苦将我养育成人之后却悄无声息的离开了,也许母亲觉得她完成了她的使命可以安心的离开我了吧!

所以“妈是什么”?她生我、养我、教我为人处事,她疼我、爱我、事事都记挂着我,她包容我的所有缺点、也细腻的感知我的感受,她是我的灯塔、亦是我的港湾,她目送我扬帆、也静静地等我返航,她为我付出了一切,却仍觉得可以做得更多更好。那天我得知母亲再次脑梗失语后,害怕再也没有机会跟她说话,于是跟母亲说:“有您这么伟大的母亲把我养育大我已经知足了,有您这样母亲是我的骄傲和幸运!”母亲听到后点着头,泪水又下来了。母亲这一生所有的付出、心酸、无奈、认可、释然,都在无言中。虽然再也听不到母亲的淳淳教诲,吃不到她给我做的饭菜,但母亲并没有真正离开。她住在我心中,她的故事会被讲述、她的基因会被延续、她的精神会被传承,她无私的爱会像种子一样生根发芽并开出最绚烂的花!

附上母亲写给我的家书,她的教诲我毕生难忘!

Leave a Comment

Notes to myself: RTX 2070, Cuda, cudnn, caffe, and faceswap

Install NVIDIA driver for RTX 2070: https://www.geforce.com/drivers

Install CUDA 10.0: https://developer.nvidia.com/cuda-downloads

DO NOT re-install the drivers suggested by the CUDA installer:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n

CuDNN:

cuDNN Runtime Library for Ubuntu18.04 (Deb)

cuDNN Developer Library for Ubuntu18.04 (Deb)

Caffe:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_cublas_device_LIBRARY (ADVANCED)
linked by target “caffe” in directory /home/dli/Projects/caffe/src/caffe

Upgrade cmake:

face_swap

Leave a Comment

Configure Selenium and Chrome to use Tor proxy

I’ve been trying to configure Selenium and Chrome to use Tor as proxy and constantly getting error messages like the following:

WebDriverException: Message: invalid argument: cannot parse capability: proxy
from invalid argument: Specifying ‘socksProxy’ requires an integer for ‘socksVersion’
(Driver info: chromedriver=2.44.609545 (c2f88692e98ce7233d2df7c724465ecacfe74df5),platform=Mac OS X 10.14.0 x86_64)

In the end I have to use HTTP proxy instead of SOCKS.

Install and start Tor:

Install privoxy:

Configure privoxy (vi /usr/local/etc/privoxy/config) to chain it with Tor:

Start privoxy by default on port 8118:

Check if your traffic is proxied:

Now you should see a different IP than your real one.

Leave a Comment

Imposter Syndrome

Internet is a good thing: it allows us to see and experience things that were not possible decades ago. On the other hand, it’s sometimes also overwhelming. When I see capable people doing amazing stuff on the Internet, very often I feel I’m not worth of what people think I am. Occasionally I thought it’s because I’m shy and I’m usually not comfortable fully expressing my thoughts. In other occasions I’m simply not patiently enough to argue otherwise.

But it’s not just me. A lot of people are experiencing the same feeling and I’m starting to realize that I may be suffering from the imposter syndrome. After all, after so many years my personality has changed a lot. I’m no longer shy. I’m much more confident than I was. And I’m also a more capable person so I deserve a better life. It doesn’t feel right to be satisfied with what I’m getting. I’m better than that!

Meeting with people confirms that. There are a lot of people pretending to be expert in something and it seems they are enjoying quite a lot, although I can spot right on that they’re not what they believe they are. They’re not ashamed, why should I feel bad for myself? I’m much better a person than those real imposters, of course I deserve better things!

It’s more than a year since I wrote a blog post last time. A lot has happened during the past year. After years of depressing research career, I’ve published in a good conference and successfully defended my PhD. I’ve started working (again) in the industry. I’ve also found a long term direction that should keep me busy in the next five years. We’ve also got our foothold in Luxembourg, although there remains a lot to complete, it’s a good starting point. I’ll try to blog more often about what’s happening in my life, just to keep track of my thoughts and experiences, so that I can look back to them later and say “boy, I didn’t know I was so naïve a while ago.”

I’ve also updated my blog theme and fixed the HTTPS issue with WordPress and Cloudflare: I only needed to install the CloudFlare Flexible SSL plugin and enable “Automatic HTTPS Rewrites” on Cloudflare. Now the website feels more responsive and neater. That’s a good starting point to (re)start blogging!

Leave a Comment

Docker Postgres “PANIC: could not locate a valid checkpoint record”

It seemed that my Postgres database was not properly shut down when rebooting and when I tried to use docker-compose to start it again, the following message was shown in docker logs:

To fix this, first shut down this container (docker-compose down), then start the container in interactive mode:

After the transaction log is reset, everything should be fine. Now you can start your containers again (docker-compose up -d).

Leave a Comment

Everything is bigger here

During my first one and half days days in the US, or more specifically, Redwood City in SF bay area, it seems that I’m not having any resonance with the local people’s esthetical  tastes: I maybe wrong, but I think their surroundings basically suggest “the bigger the better”.

Before coming t0 the US, my daily supervisor said his impression of the Silicon Vally is just very big highways. Indeed as I went out the airport, it’s difficult to ignore the wide 8 or 10 lane motorway (or freeway as shown on traffic signs). But it’s not just the highway that’s bigger than that in China or Europe: cars are bigger, traffic signs are bigger, parking space is bigger, yards are bigger, hotel rooms are bigger, beds are bigger and higher, chairs are bigger, drawers are bigger, even AC and TC remotes and their buttons are bigger, wild grass are higher… Maybe I’m prejudiced, these bigger objects are not necessarily beautiful, instead they look weird to my eyes. Delicacy seems to be from another world. Wider highway does not seem to make the traffic flow better, roads are wide but not flatly paved, pedestrian ways are wide but are sometimes only available on one side…

Looks like I’m not appreciating the locals’ tastes…

Leave a Comment

Exporting and Importing Elasticsearch Indicies

In my project I need to run some local tests with data from a production elasticsearch cluster, so I exported data from the production server and imported to my local cluster. This can also be used when backing up and restoring data. Here’re the instructions.

Before you start, check out the official documentation: Snapshot and Restore.

Backing up/exporting data:

  1. Modify your eleasticsearch configuration file (normally elasticsearch.yml) and add a path.repo line, for example:
  2. Make sure this path has the correct permissions so that elasticsearch can read and write.
  3. Create snapshot:
  4. Copy the files in the configured location to your local machine.

Restoring/importing data:

  1. Modify your local elasticsearch configuration similarly like step 1 when backing up.
  2. Place the snapshot files to the repo path.
  3. Close your indices:
  4. Import data:
  5. Reopen your indices:

It is important that your the elasticsearch version on your importing party is compatible with the one exporting data, i.e., in this case your local machine has to be the same version or newer. If not, you need to upgrade elasticsearch first. The official documentation says:

The information stored in a snapshot is not tied to a particular cluster or a cluster name. Therefore it’s possible to restore a snapshot made from one cluster into another cluster. All that is required is registering the repository containing the snapshot in the new cluster and starting the restore process. The new cluster doesn’t have to have the same size or topology. However, the version of the new cluster should be the same or newer than the cluster that was used to create the snapshot.

2 Comments

Installing Theano and CUDA on Mac OS X

I started trying Theano today and wanted to use the GPU (NVIDIA GeForce GT 750M 2048 MB) on my Mac. Here’s a brief instruction on how to use the GPU on Mac, largely following the instructions from http://deeplearning.net/software/theano/install.html#mac-os.

Install Theano:

Download and install CUDA: https://developer.nvidia.com/cuda-downloads

Put the following lines into your ~/.bash_profile:

Note that the PATH line is necessary. Otherwise you may see the following message:

ERROR (theano.sandbox.cuda): nvcc compiler not found on $PATH. Check your nvcc installation and try again.

Configure Theano:

Test if GPU is used:

A more realistic example:

So it seems this GPU does not outperform the CPU. Well,GT 750M may not be the best GPU you can get… Someone else here has a similar experience.

 

5 Comments

Another Mid-Autumn Festival

Five years ago I wrote “Lonely as the moon” in my blog during my last year of master’s study, feeling lonely, confused and frustrated due to the study, insufficient hope of finding a job, and most importantly, not having someone by my side whom I can talk with and listen to. I prayed to the moon in hope of finding a girlfriend, and magically it worked within a few months. Now that this girlfriend has become my wife, the emptiness still rises from deep inside.

I’ve never foreseen this coming. I thought distance wouldn’t matter to loving hearts. Maybe not much, but little by little things can go from bad to worse. Today I really felt threatened. It made me horrified to just think about the one I love could leave me, and that not living together opens harmful uncertainties. I wish I had communicated more and made her happier. I wish I had continued my job in Finland so that she didn’t have to go back to China. I wish I had appreciated her love earlier so that she doesn’t think I’m still as stubborn as I used to be. I wish I had given her everything. I wish I had focused on solving current problems and hadn’t thought about our future plans too pessimistically.

Now I have a more clear goal: just to keep her happy and feel being loved by me. I’m going to fixed what I’ve screwed up. I’ll talk equally without judgements and listen with appreciation. Offer to help but not mandate. Become more attractive, supportive, romantic, confident and cheerful. Make more money or at least explain the plans and follow them up. Care about her and let her know to make her secure. Love her. Create a family atmosphere for us.

She is my wife and I’m her man.

Today the moon is as bright as it was five years ago. I’m sure it has heard me well.

Leave a Comment

The plethora of opportunities

For most of us, we live in a society with abundant resources: delicious food to taste, delicate clothes to put on, various activities to attend to, wonderful places to visit and numerous things to do. Yet, all these abundance are not necessarily good for us: we’re getting distracted to the extend that we don’t know what exactly we’re chasing for.

Some people say we are getting superficial — that we are trying endlessly from one thing to another and shortly getting tired of each of them. But this superficialness doesn’t come from nothing. We’re superficial not because there exist many temptations, instead, we’re not able to resist these temptations that trick us into thinking about illusions and trajectories of ourselves. We try to find life meanings by doing things but often end up in vain, maybe the right way to go is not finding meanings: maybe it’s the other way round. How we do things and live our lives is simply the meaning.

The meaning of a nomad’s life is traveling and not settling anywhere. The life meaning of a adventurer is adventure. A person focusing constantly on something becomes an expert.

Opportunities are always there, but we are not. It’s not an opportunity without the capability of taking advantage of it, be it the accumulation of prior experiences or fast learning and adapting abilities.

Indeed there are too many opportunities, however, one does not need thousands of opportunities to succeed. One is enough. Prepare for it, focus on it, reach for it before it comes to you and let it work for you.

Leave a Comment

Migrating/Installing Prestashop to Amazon AWS EC2

Recently I migrated a Prestashop website to AWS/EC2 and the process is quite smooth. Here’s how to do it.

1. Get your Website data: including Prestashop website files and a latest database dump. Remove all the files except index.php in /cache/smarty/compile and /cache/smarty/cache. (See here.)

2. Launch your EC2 instance. But before doing that, check first if a pre-configured or managed Prestashop is available in your preferred region (more info here). If not, choose the appropriate instance type and get it running. In my case I chose Ubuntu Linux.

3. Install the AMP (Apache, MySQL and PHP). On Ubuntu you can simply do it with a few simple commands:

Make sure that you remember your password for MySQL root user and phpmyadmin user.

4. Copy your database dump and website files to your EC2 instance using scp, for instance:

5. Create a MySQL user for Prestashop, you don’t want to use the root user for this purpose. You can do this using phpmyadmin or a command line. Also, create a database for Prestashop and grant the user you’ve created just now all privileges on this database.

6. Import your database from the dump:

7. Extract your website files on your EC2 instance. In my case, inside /var/www/html/. If there is an index.html file inside this directory, remove it first. Make sure you set the correct user and group to all the website files:

Note that if don’t set the correct permissions, you may get complaints from Apache, like the following:

PHP Fatal error:  Uncaught exception ‘SmartyException’ with message ‘unable to write file /var/www/html/cache/smarty/compile/46/d9/69/wrt54ecd6c1856a72.61943173’ in /var/www/html/tools/smarty/sysplugins/smarty_internal_write_file.php:44

Stack trace:

#0 /var/www/html/tools/smarty/sysplugins/smarty_internal_template.php(201): Smarty_Internal_Write_File::writeFile(‘/var/www/html/c…’, ‘<?php /* Smarty…’, Object(Smarty))

#1 /var/www/html/tools/smarty/sysplugins/smarty_internal_templatebase.php(155): Smarty_Internal_Template->compileTemplateSource()

#2 /var/www/html/classes/controller/AdminController.php(1936): Smarty_Internal_TemplateBase->fetch(‘controllers/mod…’)

#3 /var/www/html/classes/controller/AdminController.php(2337): AdminControllerCore->initModal()

#4 /var/www/html/classes/controller/Controller.php(163): AdminControllerCore->init()

#5 /var/www/html/classes/Dispatcher.php(373): ControllerCore->run()

#6 /var/www/html/admin123/index.php(54): DispatcherCore->dispatch()

#7 {main}\n  thrown in /var/www/html/tools/smarty/sysplugins/smarty_internal_write_file.php on line 44

8. Enable mcrypt for PHP:

9. Update your Prestashop settings in the config/settings.inc.php file. Set the correct database information.

10. Enable mod_rewrite:

Also, make sure to add something like the following in your apache site configuration file:

And then remember to restart your apache server.

11. Install sendmail:

12. Go to your Prestashop back office and reconfigure your domain. Go to Preferences -> SEO & URLs and scroll down to Set shop URL section.

Now everything should be OK, your new Prestashop website is available on your new domain!

If you have any issues, just drop a line here or email me.

4 Comments

Luxembourg at first glance

Now it’s been two weeks since I arrived at Luxembourg. In general the experience has been positive, except that it’s been raining for a consecutive of ten days and snowing for the rest days. It’s a bit humid,but not to the extend that I should complain. At least the air is free of smoke and particles.

It’s quite where I live, although it’s just fifteen minutes walk to the old town as well as the railway station. Almost everything is in walking distance, supermarkets, banks, hospitals, schools, government offices,Asian markets. There’s also a police school just 200 meters away. I suppose it’s a safe neighborhood.

Work is also nice, though one has to be selfmotivated. Coworkers are extremely nice, but many of them prefer speaking French, which I believe is good for me since I’d like to pick up the language. I already applied for a university language course. There’s also opportunities to meet great minds. This morning there was a distinguished lecture, where one professor talked about privacy in internet using big data.

The startup business is going slowly but according to the plan. Office isn’t too far away and fits our purpose. Orders for office computers are placed this evening and we can start the real work shortly. It’s good to have someone supporting the business, with both funding and experience.

One thing brothers me is that the washing machine is broken and it’s talking forever to fix it. The agent promises anything but I’ve now learned to be wiser and not to believe her words.

Life is much easier when you have someone helping you out. For that I’m extremely grateful for the help I received from my friend.

And I miss my girlfriend. It’s a journey we’ve chosen together, and there has to be temporary sacrifices for a better tomorrow. So for now just follow what we’ve planned. I believe we’re heading for the better.

Leave a Comment