论怎么花10分钟做出两天的饭

出来了,感觉整天有好多东西需要学的,那么剩下做饭的时间就不多了哦。

上周开始时,我还尝试炒两个菜烧个汤,但是整下来大概要花大半个小时,还需要一直盯着,这样可不行啊,等我吃完坐下来开始写东西或者看东西时,已经只有2个小时了。
我开始琢磨怎么在不降低生活水平,不多花钱的情况下,用最少的时间烧今晚和明天中午的饭

我开始去城西最大的casino超市逛起来了。。。

然后就知道了怎么做了。

第一次用力过猛做太多了,但是味道还是挺赞的,结果第二天中午吃的有点撑。不要问我为什么一定要吃完,你自己做过饭就懂了。

这一锅用力过猛的料理就是:

虾仁青椒盖红烧肉饭

步骤如下,以飨各位在异国过在国内的同志

  • 老套路烧红烧肉,但是不必收汤,这点汤有点用的。嗯,只需要开头5分钟在,焖的10~20分钟该干嘛干嘛。
  • 趁汤还在,米下锅,注意根据最后想要的米饭的软硬调整米和汤的比例。这个确实不好掌握。我主要是通过抽样方法,一勺子下锅捞出来米汤比例合适就OK了。嗯,又只需要2~3分钟。
  • 为了拍照好看,等饭成型了,剥几个虾仁,切点蔬菜点缀到饭上面。嗯,要是有我这么熟练的刀工,只需要2~3分钟。

以上,10分钟一大锅哦,可惜只有我独享。

法国的冰淇凌好便宜

2欧6枚。

嗯,饭后甜点。
饭后甜点

突发山火

据说这里最近两个月只下过一两场雨,干燥的空气,通透的大气和夏日的骄阳,也许还有担心消防部门申请不到钱维护消防直升机的纵火者。
我第一次看到了稍成规模的山火,烟雾从卡达拉舍旁一路飘到了艾克斯。

怎么说呢,大巴在烟雾下穿过,我还是看到了比家里更蓝的天。希望随着我们这代,国家能建设得更好,也能时时拥抱清澈的蓝天吧。

立即模式(Immediate mode)界面

为了给我的新项目做UI库的选型,我调研了一些资料,最终陷入QT和imgui的纠结中。我决定点时间来整理一下思路。

好吧,来看看各种人是如何说的。

从reddit上的一篇帖子开始

QT和imgui各有褒贬,但是无疑对于游戏UI,大家对imgui还是很赞同的。对于桌面开发,大家就不一定了,一方面如果以往对QT有较深的积累,QtQuick也是directUI的较好选项。

近年来,网页前端和桌面开发有融合的趋势了,主要原因是互联网从业人员的巨大,javascript受众多。特别是V8引擎的横空出世,硬件逐步发展,使得js已入了开发者的法眼。由于js天然的异步特性,恰好与传统桌面应用相符,出现了Electron,HEX这样的桌面开发框架。

但是dear imgui,亲爱的,从另一个完全不同的角度带来了新的界面开发模式,立即模式(Immediate mode)。与传统模式需要管理一套界面数据结构不同,在立即模式下,界面对于开发者反而是透明的了。

以输入一串字符串为例(伪代码),

  • 传统MVC模式需要同时管理所需的数据以及界面本身两套结构,虽然QT、MFC等框架实现了一系列自动化的方法,替代了我们的部分工作,但是呢,我想说和立即模式对比一下。:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //界面结构声明
    Edit a;

    //另一处数据生命
    string str_a;

    //根据事件设置回调函数
    a.set_call_back(msg_end_edit,a.on_edit);

    //回调函数中传回数据
    on_edit()
    {
    str_a = a;
    }
  • 立即模式,嗯,这就齐活了

1
2
string str_a;
inputtext(a);

立即模式主要的问题是需要持续更新界面,并从中立即获得反馈,相比之下较传统方式耗一些CPU,但是经过优化后这方面的劣势并不突出。由于这一特性,imgui特别适合用于游戏界面的开发,因为游戏的三维画面是需要实时渲染的。

更进一步看一下使用QT的传统桌面应用开发者的看法

这篇帖子从传统桌面应用开发者的角度将两者的优劣进行了一定的分析。

  • 重新开始的痛苦:界面元素的管理、元素拷贝、UNICODE支持等等都需要重新开始写代码。
  • 重新开始真的很痛苦:字体渲染、载入icon、高DPI支持。还不知道怎么做啊。
  • 。。。

很具有代表性的一段,很多事情都是类似的,就像马的肩宽决定了现在铁轨主流宽度,作为IT工业一环的界面开发,也不得不背负太多历史的负担。程序员们互相支撑的过程确实很难一人说拥抱新东西大家就都有时间有精力来干这件事的。

好吧,既然闲着也是闲着,我决定还是趁着能折腾多经历一些,整一下imgui吧,毕竟UNITY也用的这个。

OpenGL 2 了解计算机三维渲染过程

这篇文章其实是阅读了谷歌排名第一的OpenGL教程的入门部分总结的读后感。
原文在这里, 中文版翻译在这里原文作者在这里

以前经常有大厚本的OpenGL红宝书啦、24入门啦、3个月快速开发啦这些东西,但是真正感觉还是这次看的资料有用一些。这一份东西把三维图形学从里到外讲了个透。

看这个教程的入门部分,我觉得最关键的是对显卡渲染流程的了解,总结在本文中供之后借鉴。借用一下教程中的图,是下面这个样子的:

1. VERTEX DATA

VERTEX DATA中可包含任意你需要的内容,包括模型顶点坐标、顶点属性(颜色、材质、纹理坐标、任意其他属性)。有了这些数据,可以在渲染的过程中做很多的事情。

2. VERTEX SHADER

这个步骤对每个参与渲染的顶点都做一次处理(SHADER其实就是一个小程序,其输入就是这每一个对象)。

这里只要出现了SHADER,就说明这个是我们可以控制的部分了,这个过程可以做两类事情:
生成渲染需要的顶点坐标,这个顶点坐标根据渲染的类型不同含义不同。如果是三角形渲染方式,那么每3个坐标为一个三角形的三个定点,如果是线段渲染,那每两个坐标为线段的两端点。
进行其他处理,将数据传递给之后的SHADER。

在这一步骤中,通过VERTEX SHADER进行顶点生成的目标是将需要可视化的内容放到(-1,-1,-1)到(1,1,1)中。及标准化设备坐标(Normalized Device Coordinate, NDC)中。形象一点说,OpenGL其实就是一个2X2X2的鱼缸,OpenGL渲染过程就是把鱼缸里的东西全部压扁到鱼缸的一个面形成图像。为了实现我们需要的视角,我们需要透过种种坐标变换,将实际三维空间按我们定义的视角映射到这个2X2X2的标准设备空间中。

3. SHAPE ASSEMBLY

就是将步骤1中生成的顶点按渲染方式组装成几何体,比如,如果渲染方式是三角形,这里会将每3个顶点组装成一个三角形。

4. GEOMETRY SHADER

这个步骤对每个前面步骤组装的集合体都做一个处理。

GEOMETRY SHADER默认可不设置,那么就会直接把ASSEMBLE后的SHAPE直接发给后面的步骤了。

GEOMETRY SHADER的输入就是前面ASSEMBLE后的个几何基本体(点/线段/三角形)。其可做的操作就是添加任意类型的几何基本体到当前的图形中,并交给后面的步骤处理。

5. RASTERIZATION

在这个步骤,OpenGL底层自动对所有几何按照(-1,-1,-1)到(1,1,1)这个范围进行裁剪。并将所有的基本集合体映射到光栅上,形成一个个片段(可以理解为一个个像素点)。这每一个片段都将在下一步骤进行处理。

这每个片段都将包含在步骤1的VERTEX SHADER中输出的属性值。对于非顶点的图形位置,其属性值是其所在基本体各定点的属性值的线性插值。
比如三角形内部点的纹理坐标就是各顶点纹理坐标的插值。用户也可自定义一些属性,比如三角形各顶点的属性也可以就是其坐标,那么内部顶点的属性也就会处理成其真实坐标。

6. FRAGMENT SHADER

在这个步骤,对每个片段(可理解为像素点)进行处理,其输入就是VERTEX SHADER传来的属性。输出为一个4通道颜色信息。

7. TESETS AND BLENDING

根据深度等信息,将所有FRAGMENT混合成一张图像。

Shader程序是由GLSL语言编写的子程序。这些子程序以字符串的形式传递给OpenGL的API,并由OpenGL的API进行编译、链接,并在三维渲染流程中被调用。Shader给予了程序员极大的自由度来操作三维渲染的过程。GLSL其实是在2004年才正式引入OpenGL 2.0的。具体可以参考维基百科

人人人

来这里,结识了不少人哦,对团队的同事了解也更深入了。

房东

为了拿房租,房东和我在ITER入口会和了。见面后,她和我絮絮叨叨说了很多事情哦。

房东叫伊莲娜,在20年前博士毕业,研究的方向是植物学。后面她放弃了研究(我猜可能是家庭的关系吧)。她的女儿是00后,据她说圆圆胖胖的,但无论如何是自己的女儿啊,还是要爱她的。她在CEA做security方面的工作,我一开始还以为是安保,一解释原来是各种化学品药剂之类的安全保障工作。所以她就觉得女儿整天化妆啦,面膜啦非常不健康。
哈,一代代间总是有代沟的。

ITER副总干事

初识金老师是在走道上,看到他正拎着行李准备进门。一见面就很平易近人地问我是否刚到啊之类的。我进去后,他找我问了我们干啥的,并很热心地给我看他正在推进的工作。嗯,还好我之前并不知道他是副总干事,不然也不会那么找他问这问那的。他介绍了ITER知识产权登记的内容,希望能够在等级好后能够为将来聚变堆的建设提供良好的知识储备,以达到ITER初始的目标。

最近在看建筑史,里面讲了哥特式建筑的由来。从出现之初,教堂这样的传教场所就是为了营造一种神性的氛围而存在的。而在几百年(快一千年了)前,随着新材料的引入,修道院的僧侣们开始了一种新的营造方式,让更多光透入,并让拱顶更高并添加更多的天窗。确实,走进那样的建筑不由得不感叹,肯定是神迹才催生了那样宏伟的建筑。

但是在ITER总部,这里走廊的天花板我伸手就能碰到,而总干事的办公室就在核分析组同一层。对原理清晰理解的科学家和工程师正用自己的智慧脚踏实地地设计、建造这庞然大物。这里并没有必要营造巴黎圣母院那样的氛围哈。

倪师兄

嗯,其实话并不多,属于实干的人。对ITER的组织方式,他觉得目前ITER主要还是做集成,真正的技术,比如配方、工艺、软件还都是掌握在各参与方手中的。

Michael

Michael其实挺搞笑的,在办公室的气氛很轻松,他一直一脸“我好累”的表情,但对各位成员都很关照,并能够及时解决各种问题。

Akardy

他来这里是为了解决一些Upper Port核分析任务还未完成的问题。
上次来我们这里参会,还很感谢我们的招待o。我给他说我们是best freind嘛。

突尼斯来的Sllm

班车上碰到的哦,他来这里快一个月了。他是做ITER的ICP系统的,IDM就是其中的一个很小的子系统。他所负责的东西还包括ITER内的控制等等。
突尼斯总共200万人,所以研究经费不多,这也是他博士毕业后没有继续从事研究工作的原因。
所以说,中国虽庞大的基数能够支撑起我们这些研究人员的经费,也是感觉挺幸运的。

据他介绍,法语是突尼斯的第二语言,难得有人说英语的,他的英语基本上是靠大量的阅读以及到国外的交流中学习到的。但是他很爱自己的国家啊,虽然短期来这边出差,但是还是坚决要回去的哦,尽管法国这里他也挺习惯的,但是对于这里他并没有太多的留恋。

对于ITER散漫的工作作风,他也是颇有微词的:早上八点半到ITER还去食堂吃个早饭(他们这里叫餐厅是canting,感觉是从中国舶来的?),9点到办公室打开电脑工作1小时,好,去coffee break了,完了回来再工作半小时,好,吃中饭了。下午1点多姗姗来迟,又来两次coffee break,就下班了。
说在意大利啦也一样,上午9点开会大家10点到,到了不行,要coffee break,好嘛,开会就挪到下午两点了。

他觉得英法意德里,就德国人工作最认真了,并不在于工作时间长,而是在于每件事都要找到最好的方法(best practice),这样效率颇高。

西班牙来的冷却系统专家

哈,一个很爱笑的汉子。他找了ITER的工作,觉得很因垂丝汀,把老婆孩子一并都带来了。所幸他妻子现在主要是经营在youtube上的一个打毛衣的栏目,比当服务员之类的好多了,也很自由,所以能到处跑。小孩刚一岁,完全没概念,所以也无所谓了。

三天大乱炖

由于一些事情,博物馆没有去。延迟到本周末吧。三天的流水账混着写也别有风味哦。
周末时处理完事情,思考了人生后,怀着侥幸的心理去了博物馆,但是已经关门啦。这位老太太的照片非常给力,我给留下来了。

收拾完周末狂欢(无)的心情,我就前往ITER啦。
发达城市的早晨从洗地车的轰鸣中开始了。

左右对比一下还是觉得洗的挺干净的哦。

自行车巡警
我所在的办公室人不多,我的桌子正对着法国的乡村,景观开阔,工作一天也是心情舒畅的。
办公室全貌一览
嗯,ITER现在进展飞快,托卡马克大厅已经快建2层了,氚工厂、变电站都初现模样了。也能看到远处的线圈绕制大厅,有一种此生能看到聚变发电站的憧憬了。由于签了协议不准拍照,我就不放图了。
忙碌完一天,回程的路上偶然看到这个雕像,毫不留情地拍下来了,颇有一种外星来客的感觉。

去超市的路上,经过了很多条小巷,其实是我特意走的小巷啦。看到窗台的花朵

看到名胜古迹的说明

看到披着夕阳的树冠

延伸到远方的街道

看不到尽头的长街

看不到尽头的长街

和掩藏在小巷深处的餐厅

但是这一切,都没有品尝自己做出的辣椒炒肉的美味带来更多的幸福

OpenGL 1 从OpenGL的角度看三维计算机图形库的发展

对于可视化,从来没有系统地了解相关的知识,对相关工作确实也没有切实有效的思路。因此决定趁在法国期间系统地看一下相关的知识。在此作一些记录也算是督促自己的学习吧。

就从OpengGL这一历史悠久的API库开始我的旅程吧。

以史为鉴可以明得失,这次我不再跳过history了,从OpengGL官网的对其历史的介绍的文章一路看下来。

OpenGL是对底层图形硬件的封装,是对程序员开放的一些接口的规范以及各大厂商的底层实现的集合。
这篇文章从使用灯泡/纸带的时代说起,一直讲到了和Direct3D相爱相杀的过程中互取所长,进化至今形成OpengGL3.1版本的过程。

从无到有

计算机发明之初,技术人员和科学家们仅能够通过连着计算机的灯泡或者长长的纸带来获取计算机输出的信息。翻译难度无异于现在人肉识别二维码。一方面刚发明的计算机的计算能力略弱,如果还要从中抽一部分来翻译输出也嫌浪费;另一方面这星辰大海还等待能人异士的到来。

Ferdinand Braun在1897年发明了显像管(CRT),是近一个世纪的显示设备的主要形态。1951年MIT在为海军研发Whirlwind计算机期间,使用了CRT进行了简单的程序输出,从而避免了翻译灯泡和纸带等冗余工作。尽管Whirlwind由于运行成本过高而不甚成功,但是作为一个开创式的里程碑,CRT在之后的半个世纪成为了计算机输出的主要设备。很多时候,要理解一件事情还是需要看一看实物,比如要知道,当时的计算机的内存是下面这玩意~~

Whirlwind内存模块

此后,1961年Ivan Sutherland发明了可和计算机交互的Sketchpad,成为了鼠标的前身。从此,计算机不仅可以看,还可以实时交互地看,往后一切这一切就飞速发展起来了,直到可视化可以媲美甚至超越现实,而与这虚拟的现实的交互可以媲美现实。。。

飞速发展的个人电脑

随着计算机的计算能力的飞速发展,计算机发展至四代计算机,出现个人计算机。为了让计算机能够更容易地为普通人掌握,20世纪80年代计算机的交互界面由命令行的方式发展出了图形交互界面。嗯?和我的时间线不太一致,我上初中时香港都回归了,都快来千年虫了我们学校还用着DOS操作系统。

当然,80年代单机游戏主要都运行在特殊的硬件上(FC啦之类的)。而三维图形主要还是应用在可视化领域,因为个人电脑那点运算能力还不够格运行实时的三维图形系统。

而这一状况到90年代得到了极大的改观,因为这时个人电脑的计算能力有了长足的进步,而游戏也开始做到PC上了。比如划时代的3D游戏Doom。

这个时候有啥问题呢,主要就是不同的图形系统是运行在不同的硬件上的。各家硬件厂商是卖电脑送软件,程序员是直接基于各自的程序库来直接操作图形硬件的。这样很多人的青春都花费在了给不同的硬件做移植上了。

OpenGL的第一个时代

OpenGL的前身是Silicon Graphics(SGI)开发的IRIS GL,当时SGI凭借自身硬件系统的性能优势,使IRIS GL成为了业界事实上的3D图形库标准。但是尽管该图形库非常流行,但是由于SGI的图形库与其硬件深度结合,其竞争对手均使用了各自的程序接口并逐渐追上了原本处于领先位置的SGI。

这样的情况下,SGI棋走险招,在1992年将IRIS GL中与计算机图形不相关的部分剥离形成了OpenGL并对外开放。OpenGL就此向跨平台、标准实时图形库的方向迈进了。

从此,软件开发商(操作系统开发商)必须在他们的系统上提供OpengGL实现;而硬件开发商需要对OpenGL提供驱动支持。OpenGL就此走上了康庄大道,程序员和老板们也都为能用上好用的图形接口程序而欢呼雀跃。

OpenGL的特点

第一个特点就是灵活

灵活是因为SGI开放的并不是源码,而是一些实现这一套OpenGL的API的准则。因此不同的软件平台可以有不同的实现。而实现的不同并不影响基于这同一套API的应用级程序的实现。

此外,OpenGL支持扩展,不同的硬件供应商可以根据特定的需求提供扩展的API。当然啦,这种东西可以说灵活了,对跨平台的程序又是一道移植的门槛哦。

第二个特点是开放

开放嘛,就不提了,各种硬件商、软件商都可以实现自己的OpenGL底层和API。横跨ios, linux, windows等平台,甚至衍生出ES和WebGL这种种体系。你说不开放我把键盘吃了。

和Direct3D的故事

微软为了稳固其桌面操作系统的地位,硬是收购了RenderMorphics 并将其Reality Lab捋了捋形成了Direct3D。在发展之初Direct3D不给力阿,程序员怨声载道,不得已微软还是实现了一套1.1版本的OpenGL库,当然啦,这是最后一次他们更新的OpenGL。

为了杀人于无形,微软搞了一个MCD,本来这是个挺好的东西,可以让用户分离硬件加速与软件计算方式,但是呢,不让OpenGL用硬件加速方式,硬生生把OpenGL搞成GDI一样的效率。当然啦,SGI不是吃素的,搞出一个ICD,让OpenGL还是可以在Windows上进行硬件加速,哈,就是这样,OpenGL和Direct在windows上开始了长期的竞争。

微软不是吃素的,应硬件的发展率先在Direct 3D上搞出了非立即模式的渲染方式,发展了shaders方法等等。而感觉OpenGL这样的组织方式反应略迟缓,在这一点上晚了一步哦。

为了理解立即模式的缺点,这是原话

To get things to render on the screen up until this point, programmers issued lists of commands from their program that would be interpreted by the GPU, called the immediate mode. This methodology performed fine for smaller data sets, but with larger data sets, performance was hindered by the performance of the CPU since all function calls originated from the program itself.

奋起直追到4.0

最好的朋友其实是敌人,这一点我们老板也经常提起。就像谷歌之于百度,像苹果之于三星。
Direct3D简直是教OpenGL的最好的老师,OpenGL在3.1版本中逐渐废弃了立即模式,而在4.0中,干脆已不支持立即模式。
现在开始学OpenGL的话,可以抛弃以前那一套立即模式的API了,让我们拥抱新的支持大数据量的buffer和shaders吧。

结语

这里面一句话说的非常好:The requirement for visual feedback is so important that it is hard to acknowledge the existence of something if you cannot see it. Bacteria, for instance, were purely speculative before their visual discovery in the seventeenth century by Antonie van Leeuwenhoek who invented the microscope, but became an integral part of modern science.,可视化对于人来说,是对现实存在的感知的重要的不可替代的途径。

看了这么久,总想一两句总结一下这段历史。我想应该也就是两句话吧,一方面,程序员要用得爽、一方面架构设计要能支持高效的运算。哼,这不是废话嘛,老了,只能说说废话了。

不好的事情引发的一系列想法

家里老人情况比较严重了,今天就不说其他事情了。回忆一下以往的印象和经历吧。

想起来五六年前我还痴迷于摩托车之类的事务,虽然现在偶尔还会心动一下,但是更多的是对摩托车那恼人的轰隆声的厌恶了。感觉经过这几年我和之前那天不怕地不怕的少年渐行渐远,我已经不是我了?数年前,身在事外时,很多事情道不尽摸不透,总有朦胧的美感,但是俯身探到其脚下又发现那高不可攀的巨像面目狰狞浑身不是迷雾而是热辣辣的蒸汽喷发。无法驾驭的巨龙对普通人来说仿佛是地底岩浆塑成的恶魔,你不是乘着巨龙遨游云巅而是在旷野上被龙火炙烤。碧玉深潭是擅泳者的冒险天堂,确是泥牛葬身之处。那么问题来了,谁说你不行呢?也许只是内心的畏惧和表面的高墙的限制吧。

过去几年对人在世上与他人的关系这件事情认识上有了深刻的转变,独行侠这条路也许只有天才才能走到头吧。一般人还是互相抱团取暖,才能得到善终。
虽然心有不甘,但是如果要免俗,对技能的锻炼所要付出的努力是相当大的。

想法的改变对于老人来说真是很困难,在二三十年前,一块钱和现在的一块钱的意义改变得太大了。人心也被飞速发展的社会生产力改变得太多了。

今天的目标是米和肉

顺利,肉米菇姜

在NARUTO碰到一个中国妹子,我刚开口用国人口音的英语就被认出是老乡啦,挺赞的。一听我在找哪买米,立马告诉我这里最大的monoprix连锁店里有,就在正大街上呢,3分钟就到。感谢言多不表,我立马去了那。
最大的店果然不一样啊,和我们那商场有的一拼了,一楼是各种衣服鞋子内衣等等,楼下就是我的riz咯。

本镇最大MONOPRIX

为了买米我连翻译都带好了,Ou puis-je acheter du riz?
然并luǎn,我根本不会念。店里的妹子说得了,直接说英文吧。然后就操着比我流利一百倍的英文给我带路、找东西。
米和肉啊,都来我袋里。
法国资本家良心阿,两斤米要2.89€。
“I just want the cheapest rice, they are not cheap.”
“Totally not cheap, but the best rise, very soft.”妹子笑得欢快。
好吧,我还找到了生姜,我妈的最爱。她烧菜一流,我就信她的拿来一起准备晚上大展身手啦。
战利品如下:两斤米够我吃一周了吧?”Not cheap”啊。

购物清单

之后就是烧饭了,终于能吃上饭了,之后三个多月的生活算是有保障了。
首先是烧饭,这里没有电饭锅,就拿不锈钢锅凑合烧了,一勺米,两勺水,十分钟即可入口了。这米非常软,烧之前是千万不能泡的,不然就会变成粥。
拿两个蘑菇,还有一个明天煮汤喝。取二两肉切片,蘑菇切片,生姜切片。色拉油入锅大火烧热后放入姜随即放入肉爆炒两分钟后加盐加酱油加蘑菇再炒一分钟,加水焖至收汤即成蘑菇红烧肉。配上还算清爽的番茄鸡蛋汤。就是我的晚饭了。



明日的目的地

一处博物馆
博物馆位置