2014十一日本行小结 二 京都不好吃!

标题是我口胡的,请不要相信。

要说也只能说我这天选的馆子都太差,因为后面几天吃得很High。

早上起来,从大阪坐JR过去京都,半小时车程比平时上班都近。旅馆选了个和式的,松井别馆,评价高,房间大。存行李和CI时候的服务就证明虽然比其他天住的都贵了一倍,但还真是值回票价。

啊对了,为什么要存行李?因为一早就干过去京都,就为了在梦馆变装。GF和朋友都很期待,不过没我份儿……我的任务于是变成存行李和订餐馆。

馆子选哪家?京都祗园区域的米其林餐厅就不少,足以引发选择困难综合症。可惜大多数高端的米二米三馆子都需要提前预定,甚至不乏要交定金的。我在四条上溜达了一会儿,看到了之前读过豆瓣某达人写过吃后感的“味舌”,这家是米一,京怀石料理。帖子留下印象还不错,所以作为宴请老友兼媒人应该口味和逼格兼具。kyoto_mashita_front

进去后感觉还真是个闹中取静的地方。中午set从4K8到12K不等。不过由于厨师精力有限,同一桌只能点一样价格的。服务没得说,店内还有英语非常好的店员,所以趁机也问了不少馆子菜品相关的问题。

这个时候GF和老友已经变装完毕,惊艳!图就不放了,我们自己收着比较合适。

可惜就是,没吃太顺口。或许是怀石料理不适合我和GF这种无肉不欢的,要是让我选,还是大块吃肉来得痛——怀石料理打过卡才是目的。

其他方面则推荐来这家试试。菜品种类丰富,菜单几乎每月一变,注重“旬”的味舌会用当季素材进行料理。例如汤的话,到了四月就会变成樱花。摆盘绝赞,服务到位麻利,真挑不出来问题。吃完后大厨还会出来聊天,可惜日语水平还没到谈笑风生的水准,只好感谢店家的服务就算。

一共八道菜,不都放了,占地方。刺身:

kyoto_mashita_sashimi

这是八寸:

kyoto_mashita_

Read more >>>

密码保护:嗯

这是一篇受密码保护的文章。您需要提供访问密码:

德语自学一个月总结

德语学了一个月,基本上是在Duolingo学习语法和单词、用《新求精德语强化教程》(Stichwort Deutsch Intensivkurs fur Grundstufe)作为辅助练习册的方法。分几点说说感受。

格/性
对于英语作为一外的中国人来说,格/性这两个东西真……真不是个东西!英语中一个“a/an”和“the”就搞定的冠词,德语里面变化真是丰富,4个格 × 3种性就有12个变化(定冠词还得多一种复数,所以是16个变化)。就德语来讲其实变化已经非常规律,但仍然让我痛苦了好一阵。

人称代词变化还好些,因为英语本身也是有一定的格变化残留,接受起来并不太痛苦。就是“与格”这个东西是新知识,什么时候算是与格?一开始以为mit(with)后面就是,学着学着发现这只是一种情况;介词后面也有可能是与格;而刚刚提前学了一点新的语法知识才知道,双宾语(间接宾语)情况下第一宾语也要用与格。不适应感的消退估计还要一段时间,而具体“消退”的标准应该是能本能反应变格后的情况吧。

如果觉得光冠词有变化那就图样图森破,形容词也有变化,并且还针对定冠词/代词、不定冠词/不定代词/物主代词和无冠词三种情况分别做弱变化、混合变化和强变化!单纯地记忆三种变化并不难:弱变化阳性主格、阴性和中性主格宾格词尾-e,其余都是-en;混合变化阳性主格-er,阴性主格宾格-e,中性主格宾格-er,其余都是-en;强变化同不定冠词词尾。但要在句子中使用就非常痛苦,比如Ich sehe seine schwarze Katze(我看他的黑猫),先要反应“猫”是阴性,再想到它位于宾格位置,所以物主代词词尾-e,形容词词尾-e。如果是Katzen的话,那么物主代词不变,形容词变为schwarzen……天啊!

而当我知道名词可能也需要变化时候,都快想到放弃了。这种叫做“名词弱变化”的现象发生在阳性名词上,一旦发生那么属格一般加-es,而与格宾格加-es/-en/-e。比如Traum(梦)在属格情况下变为Traums,Elefant(象)三种格均加-en。似乎完全没有规律的感觉。

发音
德语的发音真的比英语规矩多了,基本没有特别情况,就算是有同样字母发不用音的时候也都是固定组合。特别的小舌音老实说真的不好听,而且据前辈介绍就算用“ha”蒙混过关也没关系。但如果想真的说一口地道德国普通话,还是得有环境,并且尽力去模仿他们发音。顺带一提,之前在阅读《日语概说》一书中时候看到这样的事实:日语和汉语中发音的“拍”——或者说不用的发音音节——数量较少,日语110多个,而中文普通话是500左右。

所以我想到,老外说日语很快就可以说得听不出口音,中文则是因为有音调的关系稍难。而西方语言,例如英语和德语,都有上万个“拍”。导致东方人去学习的话就算尽力模仿也无法做到全都达到成为Native Speaker级别的要求。英语口语牛逼到可以和英美人对骂程度也还是能听出来些许口音。当然这只是我胡思乱想的推论,见过的英语口语牛逼人也不多,如果不靠谱请见谅。

动词变形
动词根据人称的变形比英语复杂些,不是简单的三单、非三单而是针对每种人称的单/复数都有不同的形式。但不论是强变化(不规则,例如essen->isst、schlafen->schläft等)还是弱变化(规则,例如lieben->liebt),变化形式总是一定的。强变化动词大概有200个,那么按照变化规律分组背下来就是了。当然这只是说说简单,没有大量练习和实用达不到目标,更不要提动词还有过去式和过去分词的变化。

复数
几乎被复数击倒,有-n的,有-e的,有-se的,有去掉词尾加-es的、有元音变化且加-e的,还有不变的……在找到规律前只能背。

介词
又一个门槛!介词数量多,每个词的用法又有好几个,例如vor有在……前的意思,又能表原因,还能当副词的“之前”讲。而介词后面接名词的格也有讲究,有些词搭配方向性动词(gehen、kommen、laufen……)时候后面接宾格,而表示状态的时候要接与格——即“静三动四”。不过类似于Hinter den Jungen kommt der Wolf(狼跟在男孩们后面)这种句子,虽然是kommen但由于hinter不是指示主格名词的移动,所以还是算“静三”,只有类似于Er liegt das Buch hinter den Tisch(他把书放到桌子后),时候算是“动四”。

顺带一提,Hinter den Jungen kommt der Wolf这句子把我搞糊涂了很久,因为Den Jungen可以是Jung的复数与格形式,也可以是Junge的单数宾格形式。所以在这里我纠结了很久不知道这里的Hinter应该是静三还是动四。后来看了Duolingo上相关讨论才确定是与格。

语序
对于我这样的初学者来说,读德语文本简直就是找主语游戏,就拿上面“狼”那个句子来说,主语竟然在最后!而Im Juli trinken wir Wein(我们在7月喝酒)主语又跑到了动词和宾语之间。还没有学到动词不定式和从句,我已经快吐血。

与英语的相似性
见到和英语差不多的词学起来很愉快,如Elefant/Elephant、Nummer/Number,Definte/Definieren、Gut/Good、Kritik/Critic……数量还相当多,基本可以归纳的是ph->f、单独的c->k这两种变化。而语序上(正常的SVO语序)基本和英语类似——当然我还没有学到更高级的语法,例如zu不定式,冠词引导从句等,但就目前来看没有什么太大差别,所以备一本《实用英语德语语法比较》应该比较好。

不适应的地方
类似省略介词的地方,比如Ende September/Restaurant meinen Vater,习惯英语中End of September/Restaurant of my father’s,少了of总感觉缺点什么。还有如Es ist mir egal,直接把人称与格作为针对对象,类似英语中”not a matter to me”,少了个“to”总感觉怪。

之后的计划
跟着《标准德语语法》重温基础的部分,达到各种变形可以条件反射的程度。单词量要靠阅读来补,有WWW在那么阅读材料就不是问题。听力不知道有什么好的初学者向的可选,类似之前看的Fate/Stay Night UBW德语版这种ACG材料就不错。

p.s
我终于知道“我练功发自真心”和“我到河北省来”的原文了!(”Oh mein Gott, was ist geschehen!” 和 “Und doch habe ich allein”)。

《深度探索C++对象模型》学习笔记(5-7章)

第5章 构造析构和拷贝

虚函数

对于抽象类而言,是否应该自己负责初始化类内的数据成员?(别忘了抽象类也可以有非纯虚函数和数据成员)

  • 一般情况下被认为子类要负责从基类继承来的数据成员的初始化
  • 或者基类必须提供一个显式的构造函数用于自己数据成员的初始化
  • 最好的方法则是将行为和数据分离,提供接口专门用于定义方法
class A_B
{
public:
    virtual ~A_B() = 0;
    virtual void Say() const = 0;
    inline char const* GetData() const { return iData; }
protected:
    A_B( char* aData ) : iData( aData ) {  }
protected:
    char* iData;
};
inline A_B::~A_B() {}
 
class C_D : public A_B // concrete derived class
{
public:
    C_D( char* aData, char* aData2 ) :
           A_B( aData ), iData2( aData2 ) { cout< <"c_d ctor"<<endl; }
    virtual ~C_D() { delete iData2; }
    virtual void Say() const { cout<<"c_d says: "<<iData<<endl; }
    void Say2() const { cout<<"c_d says2: "<<iData2<<endl; }
public:
    char* iData2;
};

纯虚函数

  • 拥有定义的纯虚函数(这还叫纯虚函数么)可以在子类中进行调用。不过就是什么用都没有罢了。
//定义
inline void A_B::Say() const { cout< <"hey!"; }
//调用,发现hey!并没有打印出来
virtual void Say() const { A_B::Say(); cout<<"c_d says: "<<iData<<endl; }
  • 实际上是否让纯虚函数拥有(没用的)定义由程序员说了算。
  • 但唯一的例外是纯虚析构函数,必须像上面那样进行显式定义 A_B::~A_B() {}
    • 否则就会出现错误,严格来说并非编译错误,而是链接错误。
    • 原因很简单,析构函数和构造函数一样,子类的都会由编译器进行扩充,调用基类的版本。
    • 不希望这么定义的话,解决方法只有生命非纯虚的析构函数

Virtual Specification

  • 不加选择地将函数设定为virtual在效率上会不升反降,不能依赖编译器的优化
  • 应付const也会令人头疼,例如在基类中不需要修改的const ref或者const pointer,到了子类就需要修改了。目前最好的方法是不用const(……无语)
  • 需要考虑到的(不全)
    • 抽象类的构造函数需要负责初始化自己的数据成员,可以声明为protected避免外部访问
    • 缺少多态需求的函数不要设定为virtual,尤其是inline函数
    • 慎用const,除非确定派生类也不会修改const修饰的对象

Read more >>>

最近

最近一篇blog是1月写的去年阅读总结。这俩月并非抽不出时间写点东西,问题在于拿不出东西可写。于是觉得写写最近做的事、玩的游戏、看的书,凑数成一篇blog吧。

微软和Nokia合作,成了Mikia(黑桐干也:谁叫我?),于是之前Qt辛辛苦苦整出来的那一套QtQuick又成了后妈生的。QtQuick和QML虽然是被逼出来的一种界面、引擎代码分离解决方案,但实际上可玩性相当高。QML的语法容易学(至少比XAML更容易懂),对于美工、UX或者原型设计师来说好用,再会点JS,可以替代Flash作为界面原型和UI演示的制作工具(如果再有个Blend那样的工具就更好了)。比如这个例子,模拟WP7主屏,都是利用QML自带动画和标签实现的效果。

春节期间补了一下神作《空之境界》。之前一直没看是因为误解了标题中的“空”为“天空”的空,于是脑补了最不喜欢看的宇宙大战、机器人肉搏之类的场景……年三十儿那天偶然点进去了《空镜》的Wikipedia页面,发现那个空不读sora而是kara,也就是“色即是空”的那个“空”,于是一下子就哲♂学了。动画已经补课完毕,开始看小说版。

一般来说,死程序员在完成本职工作外都会对更底层的东西感兴趣,比如做C#的通常都会学学CLR;写脚本的会自己拆拆Python、Ruby的源代码;做C/C++的都会搞搞汇编、编译器之类的;做汇编的学机器码;玩机器码的……用针扎出来win98?于是我下定决心开始重新学习8086和80×86汇编了。教材用的是王爽著《汇编语言》。推荐个神器emu8086。

STG尝试中——体会就是,数学功底太差和想象力不足(比如我)不适合做弹幕类STG!