再见,再见

今天离职了,
还是很顺利的,比我预想的。

我说世界辣么大,我想出去走走。
一个头头(牛)一直在笑、一直在笑。
另一个(田)抽着烟、淡淡的有点惆怅……
规劝我说,女孩子还是找个安稳的、轻松的活,别弄技术。

总归还是伤感的,
但是我不后悔,
哎……
TAT


总归是要说再见的

这大概是我在这家公司将近2年的时间里,第三次萌发想走的情绪了。
第一次是半年前、第二次是3个月前、这一次便是现在了。
常说事不过三,虽然还没找到下家,但、这次是真的想走了。

如果让我细数这个公司里我不喜欢的地方,前几天能啪啦啪啦说上一整天。
现在心情淡了,也就没辣么大的怨念了……
无非就是要钱没钱;也不涨工资;就算涨工资都归在绩效也不涨基本工资;加班没有加班费;去年几乎周周单休平日下班后加班;工资年终比别人低很多也就算了,你按时发也好,每个月工资都会拖个1-2周才发;领导天天在办公室抽烟(=。= 这个极度不能忍),还有事没事发火;部门头头之间仇视;公司地方不够,我们没有工位,天天在会议室开发,别人一要开会,我们就要搬出去;说说干的活吧,作为程序员,我是不仇视技术的,但是尼玛我们照着美工大人的demo开发出的软件,丫的头头天天说这个不好、那个不易用,要我们照着别人的做,也就算了,后端组的改接口,永远都不通知我们,我们永远都是最后一个知道的,都是自己用的时候发现,欸不能用了,才知道的……
说起来这些槽点吧,都在这干了快2年了,也就忍就忍了,为啥啊,因为离家近啊,下班40分钟就能到家啊,哪份工作没有糟心的地方不是么,我每次都这么安慰我自己(。_。)

好吧,这次的导火索是,工作辣么久,我没请过年假、病假,事假总共大约不超过4天,这不是五一快到了嘛,现在工作也不算忙,想请4天年假,然后拼一起就可以回老家玩玩了。然后我满怀着对美好假期的憧憬、满满的开心,特意找了个领导心情还算尚可的时间,填表找他给我签个字、同个意啥的。and then,他拒绝了我。说4天时间太长了,他批不了。我就说那您能批多久,心理想着可以商量啊,大于1天都好说话啊。然后他就不说,反复说批不了。我磨啊磨啊,他最后说,如果我能让总经理同意了批了,他就批。到这里,单纯的我觉得还是算可以的,好歹他松口了嘛。于是,我就开始漫长的等待,一周啊一周,总经理没来上班过一天,这不,这周末,我们头又出差了……TAT
这就是故意的,就是不想让人请年假嘛。
瞬间我就冲动了,又开始反思了,为啥这么个要钱没钱工作糟心不给休假的公司,我还辣么忠心耿耿,总是舍不得那帮逗比的同事,哎,我也是醉了……

(* ̄m ̄)要不要走,要不要走……


I am the 1%

这周之间最火的莫过于“支付婊”事件了吧。实在懒得在总结一遍事件的全过程,便转述百度百科“支付婊”词条。

北京时间3月10日苹果在2015春季发布会上公布Apple Watch上市详情,微信、支付宝等成为首批第三方中文应用,3月10日晚支付宝钱包官方微博发帖称“支付宝钱包已经完成适配Apple Watch版本的开发工作,中国用户在订购Apple Watch后,可以在第一时间用到最受欢迎的移动支付功能。在此版本中,支付宝钱包将提供余额宝、付款码和汇率查询三项功能,以满足Apple Watch用户的需求。”

支付宝这一晒摊上大事,一大波Windows Phone用户因WP版支付宝更新过慢,纷纷聚集到该条微博下留言称其“支付婊”,“ibitch”。截至3月13日9时,该条微博下评论已超过170000条,大部分评论包含#支付婊#标签,一度冲上微博热门话题,目前标签已被屏蔽无法上热门。话题讨论1.4万,阅读超250万。

3月12日14点17分,支付宝钱包官方微博转载了一条网友在去年底发布的微博,并配文称“1%的奇迹,来自于100%的努力,和99%的运气。你为什么选择1%的生活?”

不少WP用户都认为支付宝这是在含沙射影的回应WP客户端更新太慢的事情,原因就是WP用户数量太少,只有1%那么多。。

apple watch

起初,在广大wper爆支付宝钱包apple watch那条微博的时候,我还是想对置身于事外,一边想着说,网民还是不理智;一边等着看戏的心理。当时,对于这个事件的发展,我一直以来以为不过是两种可能:

  • 支付宝道个歉,或者说是发条说,有在计划更新wp支付宝钱包app的微博。
  • 支付宝完全无视掉wper的留言谩骂啥的。

要说我为啥是看戏的心理,很显然,我作为一个wp用户,当初在选择小920的时候,我就已经完全了解到整个wp国内软件生态圈的匮乏,我就知道,我不可能与我那些ios、android好友们互通软件app啥的。毕竟,选择了情怀就要为情怀买单,不是么。所以,在当初支付宝钱包app那种不更新、不理睬、功能缺失的状态,我相当理解,并且仍觉得,有在为这样一个小众平台开发app,已经蛮让人感动了。

好吧,不过我仍然没有猜对下面的剧情。

对我来说,所谓事件最大的爆发点在于,后来支付宝发的关于“1%的奇迹,来自于100%的努力,和99%的运气。你为什么选择1%的生活?”的微博。

1%的奇迹,来自于100%的努力,和99%的运气。你为什么选择1%的生活?

这条微博,直接让我燃了。我选择1%的生活,我为我1%的选择而买单,支付宝你有何姿态来指责我。这就是一个在中国近乎快要垄断支付类的大公司的事件处理么。今天,wp是小众平台,wper是小众平台用户;也许明天ios、android也变成小众平台,用户也变成小众平台用户了呢。你看不上小众的平台,可以公开说不支持或者是什么样的,而不是站起来嘲笑那些小众平台用户的选择……

so,我毫无意外的加入了微博#i am 1%#、#支付婊#的阵营中,你赢了。

支付婊

WP未来会怎么样,谁也不知道。风水轮流转嘛,塞班以前是那样的火,安卓刚出来的时候,我还很看不起,但是你瞧,现在安卓ios的风生水起。对任何平台的蔑视,不要那么轻易的说出口,万一你没看准呢,就像之前支付宝钱包的产品经理吞x事件。win10快来了,到那时win10与wp10之间的应用大部分会通用,也许,也许现在小众的wp手机,会变成一台小电脑呢。也许这一切只是说说,然后wp消失在时间的洪流里……

未来谁也不知道,别那么早下定论,I am still the 1%.

p.s.作为一个wp用户,我想为wp应用生态圈说几句公道话。虽然说wp应用数量比不过安卓苹果,但是现在仍然有大量优质应用。日常使用完全无障碍、office、pdf啥的都不是问题。游戏方面,从我刚买手机到现在快2年了吧,可以用肉眼可见的速度看到越来越多的新游戏新应用上线,再加上unity的跨平台,很多大型点的游戏也有wp的移植版。当然,很大一部分的优质应用都是外国人开发的,且有一部分没有中文汉化,好吧作为一个英语渣,并没有觉得用起来难受,学学英语没什么不好的。wp系统的流畅度还是很高的,比安卓的流畅度高很多、跟ios手感上差不多,自从更新了wp8.1 Denim后,我热衷于调戏小娜(≧∇≦)


对于又可以换肤,每种皮肤下又可换多种颜色的一种qml实现策略

好吧,其实这个是之前做的项目中遇到的一个小问题。当时的情况是这样的,我们一直用qml开发app,然后头头希望我们的程序能够有换肤功能,并且在每种皮肤下,都可以替换不同颜色。也就是标题所说的“又可以换肤,每种皮肤下又可换多种颜色”。

嗯,分析下要实现的需求。

换皮肤的话,那就要求在制作页面+组件的时候要小心,尤其是组件的时候,将逻辑功能control和显示样式style进行拆分。然后把style统一放在某个文件夹下,通过一个变量存储style文件夹的地址,然后换肤的过程就是替换style文件夹地址的过程。嗯,类似如下:

项目结构

图中嘛,皮肤1和皮肤2文件夹内都有一套对应组件的style文件。然后替换不同的地址,造成了组件样式的变化。同时,因为把所有逻辑功能等放在了control文件里,所以样式style文件中,只有外观的定义修改起来也相对简单,并且接口什么的不会因为样式的改变而改变。

再说说换颜色,这个很好实现,我们原来在编写代码的时候,颜色值都是硬编码在代码中的,那么只要把之前用到的颜色值进行归类,然后替换成全局的颜色变量就好了。

不过现在的问题就是,将两者组合起来后,因为不同的皮肤,对于颜色的多少啊,位置啥的定义都不相同,所以提取出来的颜色该以什么结构放在项目中。为了解决这个问题,我在每个皮肤文件夹内都有一个调色板文件,然后在全局有个取色器文件。然后根据当前所选的皮肤来进行取色。嗯,大概的结构如下:

带调色板的项目结构

大概就是这样的一个结构,不过在具体实现的时候当然没有就这样把取色器代码放在根上,这样多乱啊=3=

代码如下:

//ColorPalette.qml 即上文所说的取色器
pragma Singleton
import QtQuick 2.4

Item {
    id:colorRoot
    
    property string __colorType: "blue" //主题颜色
    
    property string __colorComponentUrl: "."+"/ColorTable.qml" //主题URL
    
    property Component __colorComponent: null
    
    property var __colorTable
    
    function initComponent() {
        if (__colorComponent === null) {
            colorRoot.__colorComponent = Qt.createComponent(colorRoot.__colorComponentUrl)
            if (colorRoot.__colorComponent.status === Component.Ready) {
                colorRoot.__colorTable = colorRoot.__colorComponent.createObject(colorRoot);
            }
        }
    }

    function color(type) {
        colorRoot.initComponent()
        try {
            if (colorRoot.__colorTable[colorRoot.__colorType].hasOwnProperty(type)){
                return colorRoot.__colorTable[colorRoot.__colorType][type]
            }else{
                return "#000000"
            }
        }catch (err) {
            return "#000000"
        }
    }
}

下面是每个皮肤里的调色板示例:

//ColorTable.qml 即调色板
import QtQuick 2.4

QtObject {

    readonly property var blue: {
        1:"#cee9f9",
        2:"#90bcd6",
        3:"#c0d0df",
        4:"#ffffff",
        5:"#57a2d8",
        6:"#007aff",
        7:"#aae0ff",
        8:"#227bdd",
        9:"#3a6ca9",
        10:"#7099bf",
    }

    readonly property var red: {
        1:"#ffe3e3",
        2:"#ffa3a3",
        3:"#f5d0d1",
        4:"#ffffff",
        5:"#57a2d8",
        6:"#007aff",
        7:"#aae0ff",
        8:"#227bdd",
        9:"#ffbcc0",
        10:"#eb7777",
    }
}

可以看到在这个皮肤的调色板中,一共定义了2种色调,一个叫做blue,一个叫做red,然后每种色调里面都用到了10种颜色。假设在组件里的某个颜色你需要用9号颜色,可以类似ColorPalette.color(9)这么写。

最后要注意的事,由于当时项目不要求有动态换肤,或者说是用户自己在程序里换肤这个功能,所以你看到在上面的ColorPalette.qml代码中,创建调色板的Component只有一次,而没有监控__colorComponentUrl里的主题url的变化,当它变化的时候重新createComponent

嗯,酱油结束,继续干活去,嘿!( ̄▽ ̄)"


hey,年会

在这周六这个奇葩的时间点。
公司一如既往的开了年会。
嘿、所谓年会,没有别人家的年会的那种有抽奖啊、表演啊、等等什么。
嗯,只有一场无营养扯皮忽悠报告大会&&清汤淡水。
哎,为啥好的都是别人家的年会!!!

来,清汤淡水笑一个,cheese~

清汤淡水

还有一点值得吐槽的事,这清汤淡水还跟去年的清汤淡水一模一样,
哎,公司喂,你得多穷了。

然后再吐槽下,无营养扯皮忽悠报告大会。
台上一群总。
嗯,请原谅我实在不能把称呼和相貌相对应,实在是平时完全见不到。
反正就是A说了xxx,然后B接着说xxx,然后C说A和B说的xxx让自己觉得xxx了。
就是这种剧情的发展。
好吧,然后会议中心都有提供纸笔啊啥的。
然后我就边听边在纸上画画,嗯啊不,是做笔记,嗯。
每个总开始讲话,我就画个头╮(╯▽╰)╭,
这是我的会议纪要~

会议纪要

春天,快到吧……


用qml仿照ios开关按钮效果

新年过后刚上班,略感无聊,然后手里玩着苹果的测试机,突然觉得苹果的开关按钮效果很惹人,遂打算实现一个。

苹果开关按钮效果

我随便从网上找了一个苹果按钮的gif图,嗯,这个就是我想要实现的效果。

首先,从外观效果来分析一下吧。

  • 底板是椭圆的,并且左右两端是半个圆。
  • 按钮是圆形的。
  • 关闭状态(按钮在左侧)的时候,底板是白色的,并有灰色的边框。
  • 打开状态(按钮在右侧)的时候,底板是绿色的,看不出有没有边框。
  • 在关闭状态,按下按钮或拖动按钮到右侧,变为打开状态。
  • 在打开状态,按下按钮或拖动按钮到左侧,变为关闭状态。
  • 按下按钮不释放(pressed && !release)的时候,按钮会横向变肥一下,释放后,变回最初的宽度。
  • 按下按钮不释放的时候,底板的椭圆会从边框按照边缘的椭圆形慢慢吞噬成灰色。
  • 如果边按下不释放,边快速拖动按钮,被拖动过的左侧区域不会显示吞噬的效果。
  • 按钮的圆形外侧有阴影。

大概观察了下,按钮好像差不多就这些属性。

恩,QtQuick 2.4里,我记得好像是已经新添加了一个类似开关按钮的控件,本来是打算用那个控件重新设计style实现,不过后来我找了半天也没找到那个控件,忘记叫啥名字了。(已经记起名字叫做Switch。)于是,最后决定还是自己完全重新用Rectangle画一个开关按钮粗来。

根据上面分析的结果,可以这样设计这个组件:整个组件分为3层,底下的背景层、上面的圆按钮、还有在背景层和按钮之间要有一层遮照层。背景、和按钮很好理解,至于为什么还要有一层遮照层呢,主要是因为按下按钮并快速拖动的时候,那个背景吞噬的效果并不是所有控件覆盖的,而是只是在未被拖过的背景才显示,=。=我是实在没啥好的解决办法了,所以才在加上了一层遮照层。

恩,感觉整个设计里面没有啥太大的难度,哦,就是有一点,不是在按下的过程中有吞噬的效果么,本来想可能需要再放一个Rectangle实现。后来发现,其实我可以用背景矩形的边框做文章。于是,当按钮被按下的时候,背景矩形的边框越來越大越来越大,然后吞噬了整个面板~~嘿嘿

同样,在实现的时候,我还是将控件分为了control和style部分,所有行为的处理都在control里,而样式效果放在了style里。

代码如下:

这是control的代码

//RadioButton.qml

import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Controls.Private 1.0

Control {
    id:root

    implicitWidth: 140
    implicitHeight: 80

    style: Qt.createComponent("RadioButtonStyle.qml", root)

    /*! 是否被选中 */
    property bool checked: false
    /*! 是否被按下,按下并不一定选中 */
    readonly property bool pressed: mousearea.pressed || upperma.pressed

    MouseArea {
        id: mousearea
        anchors.fill: parent
        onClicked: root.checked = !root.checked
    }

    Loader {
        id: maskloader
        property Component __mask //上层按钮
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.leftMargin: __style && __style.bkBorderWidth ? __style.bkBorderWidth : 0
        anchors.rightMargin: parent.width-upperloader.x-upperloader.width
        anchors.verticalCenter: parent.verticalCenter
        sourceComponent: __style && __style.mask ? __style.mask : __mask
    }

    Loader {
        id: upperloader
        property Component __up //上层按钮
        property real bkBorderWidth: __style && __style.bkBorderWidth ? __style.bkBorderWidth : 0
        anchors.verticalCenter: parent.verticalCenter
        sourceComponent: __style && __style.upper ? __style.upper : __up
        x: root.checked ? root.width-width-bkBorderWidth : bkBorderWidth

        onXChanged: {
            if (x===root.width-width-bkBorderWidth) {
                root.checked = true
            }else if (x===bkBorderWidth) {
                root.checked = false
            }
        }

        MouseArea {
            id:upperma
            anchors.fill: parent
            drag.target: parent
            drag.axis: Drag.XAxis
            drag.maximumX: root.width-upperloader.width-upperloader.bkBorderWidth
            drag.minimumX: upperloader.bkBorderWidth
            onClicked: root.checked = !root.checked
        }
    }
}

style的代码

//RadioButtonStyle.qml

import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Controls.Private 1.0


Style {
    id:style
    property real bkBorderWidth: 2 //背景边框宽度
    property real btnBorderWidth: 1 //按钮边框宽度

    property color borderColor: "#B4B4B4" //边框颜色
    property color checkedColor: "#4BD962" //选中颜色
    property color defaultColor: "#FFFFFF" //未选中颜色

    property Component upper: Rectangle {
        height: control.height-style.bkBorderWidth*2
        width: control.pressed ? 4/3*height : height
        radius: height/2
        color: style.defaultColor
        border.width: style.btnBorderWidth
        border.color: style.borderColor

        Behavior on width {
            PropertyAnimation {
            }
        }

    }

    property Component mask: Rectangle {
        height: control.height-style.bkBorderWidth*2
        width: parent.width
        radius: height/2
        color: control.checked ? style.checkedColor : style.borderColor
    }

    property Component background: Rectangle {
        height: control.height
        width: control.width
        radius: height/2
        color: style.defaultColor
        border.width: control.checked || (control.pressed && !control.checked) ? height : style.bkBorderWidth
        border.color: control.checked ? style.checkedColor : style.borderColor

        Behavior on border.width {
            PropertyAnimation {
                duration: 350
            }
        }
    }

    //布局面板
    property Component panel: Item {
        anchors.fill: parent

        Loader {
            anchors.centerIn: parent
            sourceComponent: background
        }

    }
}

运行截图:

未选:

未选

选中:

选中

按下的过程中:

按下的过程

最后,我有两个效果没有实现,被我放弃了。

  • 按钮圆圈的阴影,我没有加,我试着加了DropShadow,结果整个圈的边缘都看着像狗啃的一样,所以删掉了。
  • 在按钮滑块自动移动的时候,我没有加动画效果,原因是加了效果后,如果再按下按钮而又不释放的话,会看到奇异的按钮慢慢滑动的效果。原因是,我目前没有太好的办法区分按下造成的滑块移动和点击造成的滑块移动的区别。

QAQ谁有好方法,可以教教我~


假期马上结束了QAQ

假期综合症再次伸出了他的魔爪
TAT,不要啊~~~~~~~~~~~~~~~~
可不可以不上班


FarBox: Simple is Everything

首先,我要说,这不是一篇软文。作为一个苦逼的程序员,我总是会对各种各样的技术与产品感兴趣,愿意尝试其中。在这之前,我也仅仅试用一下,然后内心感叹一下。当某一天,我正跟别人交流说xxx好时候,经理突然问我,"你为何觉得xxx好呢,它究竟好在哪"时,一瞬间,我竟无言以对,仿佛所有的描述都无法真正的印证它好。时间推移,我记住的仅仅是它好,而遗忘了为何好。于是,从现在起,我会尽量记下,对于那些让我忽然感动的瞬间,以及它们为何感动我。

我为什么会突然在意起FarBox

我总是喜欢在网上看一些大牛的文章,一次偶然的机会,我点进了,Hepo的博客之中。我该怎么形容第一次见面的感觉呢,白、纯净、震撼。

farbox blog

这种极致的白,瞬间吸引了我。在我浏览完整个页面后,我点进去了主页上唯一一篇文章《十二月的十二月里,谈谈Python与创业》。我一直非常狂热的热爱着python,于是这样一篇标题的文章,我对它完全没有抵抗力。其实,到目前为止,我并没有对FarBox有任何兴趣,每天出现在互联网上各种各样的blog工具太多了。在文中,提到了PyCon的杭州站与Hepo自己的《FarBox & Python》,不出意外,我看了下Hepo的那篇技术分享。

why i'm interested in farbox

这才是真正直戳我心灵的地方!

代码,是艺术的一部分。

该怎么样形容这种感受呢,我一直认为,代码,不仅仅是为了实现程序的功能;好的代码、它自己的结构、变量命名啊,等等啥的,就像是一首好听的歌,跌宕起伏。我一直试图像别人描绘这种感觉,却找不到一种合适的语言来表达。而这一刻、这一句话,我觉得完全足够描绘我内心中对于代码的所有幻想。就是它了!这瞬间,我竟然有些热泪盈眶。

感动过后,我开始关注Hepo和他的产品FarBox来,有着这样想法的一个人,他的产品又会是什么样呢。

FarBox

有一句话我很喜欢。

是,现在想写东西的人实在有太多可选择的博客平台了
——多到我们终于什么东西也没写成。

FarBox的主页,跟它的理念一样,就是简单。干净到仿佛一切都不存在,除了文字。

farbox index

FarBox是什么,在我看来,它是一个博客平台。或者说,一个云服务+动态md翻译器+网页托管(也许,我的描述不准确),当然还有一些灰常酷酷的功能。怀着试一试的想法,我注册了FarBox。

嗯,这里要吐槽的是,整个界面全是E文,我试图在其上找到任何sign up或者register的地方,但是就是没找到。于是,我万念俱灰的点向了sign-in。好吧,然后邮箱登录的地方看到了有一个提示,如果是第一次输入邮箱就是注册( ̄▽ ̄),嗯,你赢了。

登录后,进入到了,自己home页,依然是白,大面积的白。

farbox home

这个页面的布局,我觉得并不好看,或者说是为了追求一种简单,而造成了空间的浪费。我的屏幕辣么大,你就放6个图标,底下还有一屏的内容(-。-;,滚屏好累的你造么。好吧,终归是没有全部都是E文,我先去我的网站创建了一个站子。

add new site

嘿,一定要说说,这个弹出提示我好喜欢:-),辣种很纯净的感觉,我就不想吐槽工作时候做的那个弹出框了,真的莫名的提不起爱来,好吧。嗯,我尝试过了,这个弹出框在遮罩层上并不能移动,它始终保持在center-in整个窗体中,如果父窗体过小,(((o(゚▽゚)o)))它会被腰斩看不见哦。不过我觉得,也只有我闲的没事回去开好小的窗体这么干了。

site setting

添加完后的网站会出现在你的sites列表中,上面的四个按钮分别是Dash Board, Statistics, Template Editor, Text Editor。

在体验一个博客产品时,除了一般的使用感觉外,有两点是我很在意的地方,一个是设置页,一个是其他用户用户的使用它做的站子。设置页的设置,能够看出它的定位,就是说,它是主要是为了做什么和为了哪种用户存在的。而他人的站子,可以让我很直观快速的先对这个产品能做到怎样的极致有个大致的判断。(≧∇≦)我是个很懒的人啊,能不做就尽量少做~

setting

FarBox的设置页很简单,简单到几乎没有什么功能了,对比wp的厚重的后台页。可以设置网站的基本信息、模版、每页显示内容数、第三方评论、黑名单、访问密码、域名等,0.0好像没啥可等了。这种简单的感觉让我觉得很清新、很喜欢,这也是当时为啥抛弃wp转向了te的原因之一。这里有一点我很喜欢,我发现拖拽图片自动可以生成图片地址,这简直是太帅太方便啦。

关于模版,FarBox可以自己编译模版,我大概的看了眼模版&api,语法貌似跟web.py的模版很像,嗯,我就是随便看看,要是不像就是我错了(=。=)。

哦,还有一点,现在的FarBox已经转变为收费服务啦,新用户可以免费试用30天,具体的收费价格的话,我瞅瞅:

Basic $1/year Senior $39/year Pro $99/year
文件数 300 3,000 Unlimited
月流量 100MB 20GB 100GB
$5/per-5years $39/yearly $99/yearly

感觉,如果让我再说说FarBox,我也说不出什么了,作为一个博客,除此之外,剩下的只有文字了。它提供了一张白纸,等着你落笔。

博客之外

我觉得FarBox最帅的地方在于,它用从Dropbox读取的文件夹结构来作为网站的结构。于是,我就在想,用户轻松在后台进行的删文件夹、添加文件夹、移动等等的操作,对于FarBox后台是多大的劳累啊,(°_°)我脑海中瞬间浮现了勤劳的粉刷匠。越是简单的表象,后台逻辑越是复杂。所以对于是动态网站的FarBox来说,这个设计想法是我觉得最牛气的创造了。

最后我一定要吐槽的

  • 整个界面,中/英文混杂在一起,尤其是登录页、系统邮件啥的完全没有一点中文,我并不讨厌这种设计,但是如果你是全英文的我也能理解,既然已经是混合的状态,为何不出一个中/英文切换来,要么纯英文、要么纯中文,这样biger才高呀~

  • FarBox是基于Dropbox的网站托管,那又高又大的城墙啊,简直是太不方便了,而且由于好像FarBox自己的服务器也在国外,有的时候,国内访问速度并不好啊。

  • 这真的是一款很酷的产品。但是如果我有一天打算放弃te,我还是会选择:git+markdown+一款静态网页生成器,我想我更想要的是最大限制的自由和折腾的乐趣。

更多阅读


好吧,继续画线条

昨天是第二次课,本来以为可能有聚餐去不了了,结果没想到大家都有事,所以取消了,就还是去上课去了。

嗯,上课内容不出意外,还是画了大半节课的线条。
哎呀,垂线真难画啊。
画的各种歪,而且还会随着纸纹和笔头的纹路跑起来-_-#
这对小完美主义的我来说,简直是灾难。

倒霉线条图

上面就是我那蚯蚓线条,
就这样画到快要下课,终于开始可以画立方体了。
到下课为止,背景还没画完,就搁老师那,没带回来了。

哎,这老师画画格外喜欢让用手纸蹭,
真不喜欢那种蹭后柔柔的感觉啊,
粗旷点的多霸气~嘿嘿!


啦啦啦,去学画画啦

说了好久的要学画画,昨天终于天时地利人和的去了第一次。
好吧,刚到那,老师说,你先随便画画,看看你水平。
我瞬间就不好了,尼玛( ̄▽ ̄)我画什么啊我,瞬间脑中奔跑过去了1w只草泥马有余……

当时的感觉就跟有人跟我说,“哎你教教我程序怎么写好波?”
然后我帅气而又淡定的说,“你先随便写个三角形程序,我看看你水平……”

嗯,就是这个感觉,然后我不淡定的画了个正方体。
然后他很不客气的说,我画的线不直,嗯,然后我练了一节课画线。
一边让我练还一边说,画线很重要balabala什么的,叫我不要鄙视画线,不要看不起画线啥的,要坚持住。
其实当时,我内心就在说,咱抗的住,咱当初学书法的时候,练了1个月不到的隶书笔画呢,快走快走别说了,让我当个安静的画线女汗纸,可好?

于是就这么画了一节课的线条=。=