netwjx

混乱与有序

滑雪备忘

| 评论

前阵子去滑雪, 提前在网上找了一些滑雪的注意事项和准备, 但是等自己亲身体验后感觉还缺点, 这里整理了一些注意事项和准备.

行程

一般滑雪场都在郊区, 从起床到进入雪场, 一般需要至少3小时, 雪场开始营业的时间是早8点左右, 结束是一般下午4 5点种, 中间可能需要在雪场用餐. 这个时间要计算好, 免得玩的不够尽兴.

滑雪多数时间是在上山, 途径拖牵, 缆车, 传送带(也叫魔毯). 滑下速度很快, 没有太多消耗体力的地方, 一般体能也能持续很长时间, 只要休息好了.

如果赶到人流多的时候, 在进入, 领服装, 雪鞋, 雪板, 换服装也会消耗很多时间.

吃喝拉撒

雪场一般都有餐厅, 价格不算很便宜, 不过附近一般也没什么地方有卖吃的, 有条件的话自己带吃喝.

不能吃太饱, 差不多吃吃就行了, 运动前的常识, 吃完不宜立即剧烈运动.

带上一些高能量食品, 如巧克力, 如果饿了可以先垫点.

带上水杯, 雪场有温水, 也可以自己带水. 水喝多了没事, 雪场应该有卫生间, 一般在雪道底部一侧. 刚进雪场的时候可以先踩踩点, 熟悉周边设施.

穿着

贴身衣物

内衣最好是透湿, 有弹性, 保暖还行的内衣, 滑雪是持续运动中, 只要吃够了, 外套防风 防水, 基本不会有冷的感觉, 滑完之后可以加件保暖夹层. 贴身不要穿纯棉的, 吸汗之后会湿, 容易着凉.

我穿的是 迪卡依Equarea面料的上身下身, 保暖一般, 滑雪不感觉到冷, 不活动的时候再加件抓绒上衣, 我穿的是 迪卡依Stratermic面料的抓绒衣.

保暖夹层

中间夹层一般建议穿背心, 不会影响到手臂的活动, 温度合适的话, 可以不用加背心. 背心一般是填充的羽绒.

也可以是类似冲锋衣内胆哪种抓绒衣物, 保暖程度主要考虑当天的气温如何.

防风防雨外套

外套主要是要防风和防水, 能保暖也行, 就可以少穿一件保暖夹层, 如果自己有冲锋衣裤也可以, 手脚和腰是缩口的最好, 防止摔倒之后进雪. 雪场也有滑雪服租用, 一般团购的票里面就带有滑雪服租用费.

不建议在日常外套外面穿滑雪服, 会十分影响四肢活动, 而且还可能太热.

一般滑雪服都使用尼龙魔术贴固定的, 租用的可能魔术贴老化而贴不牢, 可以考虑带条腰带, 比较宽, 有一些弹性, 对运动影响小最好. 如果有战术腰带也可, 方便下文要说的腰包. 衣服口袋都是拉链, 可以看看口袋是不是完好, 必要的话可以要求调换.

袜子

雪靴一般都比较硬, 加上持续的活动, 建议至少穿两双袜子.

  • 里面是加厚的线袜, 能防止脚魔伤, 线袜空隙大, 透湿效果也挺好.
  • 外套吸汗的袜子, 比如纯棉的, 还因为租用的鞋子可能有气味.

帽子

即使在无风的天气, 下滑的速度也会产生挺大的风, 最好能对耳朵保护下, 还能有一定的保暖, 可以减少大量的热量消耗.

一般如抓绒帽, 线帽都可以, 防风 不吸水的为主.

我的是这个围脖, 将收缩绳拉上就是个帽子了, 有长发的女孩子还可以把长发从缩口中拉出来, 滑行中更有型.

手套

不带手套的话, 手会很快冻僵, 摔倒沾到雪, 湿了之后就更容易冻伤, 所以最好有手套, 依旧是防水 防风的, 毛线手套空隙太大的不行, 会透风, 下滑时风会进入手套. 手套最好能方便挂到手上或脖子上, 避免丢失. 我的是这个手套.

滑雪镜

如果是初级滑道, 当天也没有风的话是没必要考虑眼镜, 后面的中级滑道就需要眼镜了, 主要是挡风, 不然滑下时风太大, 会流眼泪, 影响视野. 滑雪镜和前面几个的不太一样的是, 基本没什么别的场合可以使用(除非在东北, 大风下雪天气), 可以考虑租用滑雪镜. 如果有畏光, 雪盲, 看到大量雪会难受则一定要找个滑雪镜. 不建议传统太阳镜, 摔倒脱落的话有可能伤到眼睛. 滑雪镜不是潜水镜, 周围是海绵垫着的, 不会对眼球产生负压.

口罩/围巾

如果受不了迎风直接吸冷风, 则还需要口罩, 或者是围巾, 能对直接刮来的冷风有点削减的就行.

穿着总结

总结起来就是:

  • 贴身衣物 透湿, 弹性好, 不吸汗的.
  • 夹层根据天气情况穿件保暖的背心, 可以不穿保暖裤.
  • 外穿的都需要防风 防水.
    • 外套可以在雪场租用, 自备可以用冲锋衣.
    • 外套颜色不要白色的, 选择其它鲜艳点的颜色, 方便雪地中辨识.
    • 手套和帽子可以防止冻伤, 建议准备上.
  • 透湿的厚袜子.

随身物品

建议把平时多数随身物品都存上, 免得滑雪中掉落, 可以随身携带的有:

  • 手机(充满电的), 雪场比较大, 方便联系同伴.
    • 领到的储物柜钥匙很可能不在一起, 换完服装如果先不和同伴碰头, 进了雪场空间太大就很难找到了, 所以最好大家随身带手机.
  • 滑雪场寄存柜的钥匙, 计费卡, 没这个就回不了家啦.
  • 巧克力(高能量食品, 感觉冷或饿的时候可以先垫点), 不能放太热的地方, 会化掉.

水可以放寄存柜, 需要的话回来开柜取出来.

最简单的就是把所有东西都放到滑雪服的拉链口袋, 切记用完后要拉好拉链, 防止掉落.

如果东西多可以考虑用一个贴身的小双肩背包, 防水, 能在腰间绑一圈固定的最好.

如果对滑雪服的拉链口袋不满意, 可以用腰包, 一般军品店哪种战术腰带也行, 可以根据需要挂接腰包模块, 足够放手机和钥匙就行, 腰包一定要可靠, 不能中途物品掉落.

取雪鞋 雪板 雪杖

雪板和雪鞋可能会不匹配, 拿到之后建议在原地试试, 是否能卡紧, 卡不紧可以要求调整或者调换. 顺便了解下怎么脱离雪板, 然后在进入雪场.

一般雪板都是可以摔倒自动脱离, 正常的脱离是用雪杖扎到卡住雪鞋后跟哪个机关的小凹坑上, 使劲压, 可能需要双手压, 脚后跟就能起来了. 如果有同伴就让同伴用雪鞋帮踩压哪个机关.

领取这些东西一般会有一个领用凭据之类的, 这个要保存好, 最好随身携带. 雪板和雪杖不要丢失, 会扣钱的. 有些雪杖前面的帽会脱落, 能换个好点的就换吧.

雪场一般有雪板和雪杖的寄存处, 应该是免费的, 需要休息, 去卫生间等可以把雪板和雪杖先寄存. 或者是同伴帮看着.

用雪杖推行

不要把雪杖扎到自己的脚前面, 那样十分费劲, 雪杖最多扎到和脚后跟平行, 不要想着能一次把自己推多远, 少量多次就可以了, 后面可以学习脚怎么配合一些滑行的动作, 能省力很多.

不推荐新手只在平地上滑行, 极其消耗体力, 还会玩的很痛苦.

滑道中滑行

滑道会有难度标识, 建议新人从练习道和初级道开始, 这两个的坡度很小, 速度会慢一些.

上滑道一般是三种途径:

  • 拖牵 拖牵是有一根垂直下来, 能伸缩的金属杆, 末端一个橡胶盘, 双腿夹住金属杆, 不用太紧, 然后橡胶盘会推着屁股前行. 这个是事实上山速度最快的途径, 就是需要滑到有点高的地方才有拖牵, 拖行中因为雪面会有轻微的起伏, 所以会有速度变化, 需要自己控制一点左右防止摔倒. 拖牵可以随时从拖牵道出来滑下.
  • 魔毯 我觉得就是传送带, 比较简单, 可以穿或者不穿雪板, 因为是传送带哪种, 所以速度比拖牵慢.
  • 缆车 缆车应该是很快的, 但是因为太多人都想乘缆车, 所以排队十分长, 如果队伍短可以用缆车.

还有雪地摩托, 但是好像这个只能进入专用滑雪道, 它上山是直接在滑雪道上逆行的.

雪场有教练服务, 费用还是很贵的, 建议找同伴中比较熟悉的人学习, 或者是在教练附近蹭学, 不要蹭太久了, 可以远处看着也行.

水平横在雪道下坡就可以停住, 实在停不住可以向左右一侧倒, 但要注意后面有没有跟随的人, 避免被后面的人撞上, 人多的时候就不建议这样做.

雪杖不要脱手, 会造成其它人摔倒.

本次去的滑雪场软硬件设施

这次去的是平谷渔阳滑雪场.

  • 面积很大, 高级滑道没有上去过, 主要是乘缆车人太多了.
  • 雪场随处都能看到有工作人员, 或者雪场的教练, 有什么麻烦可以找他们. 一般有统一独特的服装, 很好认.
  • 大厅和雪场都有卫生间, 雪场的卫生间过去比较方便.
  • 最底部有儿童乐园类似的地方, 会有小孩用的哪种比较安全的滑雪圈, 不过是额外收费的.
    • 其它还有拍照, 冰面碰碰车好像.
  • 有餐厅, 如果是自助餐要赶早, 不然就没什么好东西吃了, 可以看看团购卷里面是否包含, 正价是58/每人, 提前问好用餐时间.
  • 有卖小吃的地方, 我没仔细看, 不知道价格, 味道估计不会特别的好.
  • 生态餐厅就是内部有大量的植被, 人工河(好像是不动的, 但是里面有鱼).
  • 雪场有自己的班车, 早上7:30发车,16:00集合,16:30返程, 40/每人, 团购会便宜点.

酒店

雪场的酒店, 是别墅木屋哪种, 两层, 三室, 全部独立卫生间 淋浴, 如果是很多人会比较划算, 最近房子刚刚装修, 气味比较重.

其它就只能住附近了, 当然最后行程是当天, 不过夜.

后记

  • 去雪场切记不要落下东西, 我这次去就把东西给忘在雪场了.
    • 后来抱着希望给雪场打电话, 想不到他们帮找到了, 过段时间找快递发回来.

函数的Currying (Javascript 和 Scala)

| 评论

Currying或者Curry, 中文有翻译成科里化. 我最早了解它是在一篇讲Groovy中函数式编程的文章中, 之后又在Python遇到同样的东西. 最近在看Scala的介绍时又看到了, 而且发现Scala设计的明显更好, 然后就成了这篇文章, 使用Javascript作为主要语言是因为我使用Javascript的时间更长, 并且Javascript这门语言的表达能力奇强^-^.

我不确定把Currying记作科里化是否更容易理解, 所以下文还是依旧使用Currying吧.

Currying是函数式编程中一种高阶函数的典型应用, 如果非要把它对应到传统OO中的话, 那么它类似Builder模式, 一般译作构建器模式 建造者模式.

Builder模式可以简单理解为创建一个复杂的对象需要依赖多个参数, 要提供的参数又依赖于不同的方法, 使用Builder模式让每个方法只关注自己提供的参数, 最终根据全部参数创建出对象来. 对象实例最终是拿来调用的, 可以把这个过程想象成调用一个参数很多的函数.

Javascript中完全可以按照传统OO的方式实现Builder模式, 但使用Currying更轻量级 简单, 考虑下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function filter(list, func) {
    var ret = [];
    for (var i = 0; i < list.length; i++) {
        var v = list[i];
        if (func(v)) {
            ret.push(v);
        }
    }
    return ret;
}

function modN(n, x) {
    return x % n === 0;
}

var nums = [1, 2, 3, 4, 5, 6, 7, 8];

console.log(filter(nums, function(x) {
    return modN(2, x);
}));

console.log(filter(nums, function(x) {
    return modN(3, x);
}));

Dropbox, Stack Overflow 和 Ruby on Rails 杂念

| 评论

它们有什么联系? 其实没什么特别的联系, 所以是杂念, 没什么头绪, 就是想到了, 我一个个说来.

Dropbox的故事

Dropbox是很出名的网盘服务, 也可以叫它云端存储服务, 它的客户端能够自动同步多个电脑间的文件夹, 当然这个功能在现在十分常见了, 只是在他出现之前, 多数网盘服务都是以Web形式为主的. 它给免费用户提供2G空间, 通过邀请其它用户可以扩容空间, 基本上后来的网盘都是这种套路. 额外还有根据订购的套餐按月付费.

Y Combinator是一家很有意思的风险投资公司, 它只向最早期的创业团队投资. 而Dropbox是它最成功的投资之一.

Y Combinator的创始人是Paul Grahm, 被誉为硅谷创业之父, 他曾经从事过程序员的工作. 阮一峰的网络日志 我要翻译Paul Graham了上面介绍的很不错, 引用首段:

下面,我就告诉你,我为什么那么想翻译Paul Graham。

他1964年出生于英国,在康奈尔大学读完本科,然后在哈佛大学获得计算机科学博士学位。1995年,他创办了Viaweb,帮助个人用户在网上开店,这是世界上第一个互联网应用程序。1998年夏天,Yahoo!公司收购了Viaweb,收购价约为5000万美元。

此后,他架起了个人网站paulgraham.com,在上面撰写了许许多多关于软件和创业的文章,以深刻的见解和清晰的表达而著称,迅速引起了轰动。2005年,他身体力行,创建了风险投资公司Y Combinator,将自己的理论转化为实践,目前已经资助了80多家创业公司。现在,他是公认的互联网创业权威。

Javascript异步加载

| 评论

这是8月份写了一份草稿, 但是一直都觉得这个主题组织起来比较纠结, 现在觉得不该再拖了, 先把之前的理解都整理出来吧.

异步加载这个名称不是很贴切, 实际上有三部分, 非阻塞(不暂停页面渲染) 下载 执行. 只是叫异步加载字数少点, 请不要完全从这个字面理解其意义.

主要用于外链的js文件, 会带来下面的好处:

  • 页面内容显示更快, 特别对于定义在<head>和文档开始处的外链js.
  • 使用第三方Javascript时, 如果第三方无法访问, 也不会使页面很长时间是空白.
  • 使用一些手法可以控制页面内容的显示顺序, 比如重要的先显示.
  • 模块化Javascript, 使用Javascript模块加载器管理大量相互依赖的Javascript.

如果仅仅想页面内容显示的更快, 可以简单的把脚本放置在文档结尾, 比如</body>标签前.

异步加载的js文件有一个限制的:

  • 不能使用document.write(), 因为页面已经加载完成, 再调用会覆盖现有页面的内容.

下面是异步加载的一些实现方式.

使用script标签的defer属性

1
<script type="text/javascript" defer src="javascript.js"></script>

使用了defer属性的<script>标签下载时不会暂停页面渲染, 当页面解析完后执行, 即常说的DOM Ready之后, window load之前.

如果有多个<script defer>将会按照DOM中的顺序执行, 多个前后依赖的脚本可以放心使用.

笔记本购买备忘

| 评论

很早就想过要对笔记本购买做个备忘, 方便自己也方便别人查阅, 前几天列了个大纲, 现在把具体的填完.

这不是针对特定品牌, 特定型号的备忘, 只是对购买笔记本中注意点的记录, 从软硬件, 到卖场交易等等.

更新日志

最近的修改在列表开始

  1. 2012-12-07 补充一些卖场交易注意事项
  2. 2012-12-03 增加颜色, CPU规格链接
  3. 2012-10-16 增加验机篇章

外观

购买时需要首先确定一些重要的外观需求, 比如大小, 接口设计, 键盘.

屏幕

屏幕从整体上决定了后面要说的体积和重量, 所以放在最开始.

屏幕尺寸, 14英寸的为主, 15英寸的会有额外的小键盘区域, 13及更低的可能会没有光驱.

屏幕长宽比, 之前的都是4:3的, 现在的主要是16:9和16:10, 这个影响最大的是打算另外买笔记本包的时候, 一定要确定电脑包的长度是否足够, 避免到时候不能用.

屏幕解析度, 目前主流是1366x768, 13 14 15英寸多数都一样, 未来可能会有解析度更高的屏幕出现.

液晶屏幕面板, 现在主要是TN面板, 主要响应速度快, 也有一些是IPS面板, 显示色彩更多, 更逼真, 就是响应慢点, 可能会有轻微拖尾.

哑光和镜面屏, 主要是在背后有强光的时候, 屏幕是否会反光. 另外, 哑光屏仔细看可能会看到很多彩色的点, 镜面屏一般比较清澈.

在Firefox下设置location不生效

| 评论

项目中使用的窗口组件加载内容是使用iframe实现的, 以前遇到的各种问题总是在IE下, 但是之前又发现一个很奇怪的问题, 仅在Firefox下出现.

具体表现为窗口组件关闭时再将相关的父级或iframe重定向到新的地址, 结果在Firefox下没看到重定向, 也没在错误控制台看到任何错误信息.

前提: 以下所有的都不涉及跨域的问题, 只描述Firefox下运行的情况, 目前我的Firefox版本是15.0.1.

关键结构如下, $表示jQuery:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
    function dialog()
        var ifrm = $('<iframe id="Dialog1">').appendTo('body')[0];
        ifrm.openWindow = window;
        // ...

    function dialogClose(frameElement, url)
        $(frameElement).remove();
        (frameElement.openWindow || window).location = url;
</script>

<iframe id="main">
    <button onclick="parent.dialog()">打开</button>

<!-- 打开窗口时 -->
<iframe id="Dialog1">
    <button onclick="parent.dialogClose(frameElement, 'other.html')">关闭并重定向 #main 的地址</button>

一些需要说明的实际情况

  • 窗口是指顶级页面的windowiframe中的window. 窗口下是指window.document和下面的所有DOM元素.
  • #mainparent.dialog()实际是自动探测或指定在哪个父级打开窗口.
    • Dialog1parent.dialogClose实际是哪个窗口打开就重定向那个窗口, 或者指定重定向哪个窗口.
  • <iframe id="Dialog1"> 是按照实际打开的情况自动分配的id, 这里使用固定的id方便说明.

上述代码运行后的结果没有产生重定向, 加了try catch后:

An error occurred throwing an exception

出错行在 (frameElement.openWindow || window).location = url;.

自动运行和关机批处理

| 评论

之前在使用下载软件的完成后自动关机时, 关机失败, 还有导致无法启动, 可能是第三方软件在关机时的实现不够可靠吧. 也懒得找网上专门的自动关机软件, 就写了个自动关机的批处理, 也顺带实现自动运行程序的功能.

使用方式:

  • 复制下来用记事本保存为bat文件, 可以放桌面.
  • 自动关机

    双点批处理, 按照提示输入要等待的分钟数, 可以输入3*60+15这样的数学表达式, 只能是整数, 确定后就会在指定时间之后关机.

  • 自动运行程序

    将打算自动运行的程序或快捷方式拖到这个批处理文件上, 然后会出现和自动关机相似的提示, 一样的输入, 确定后不要关闭, 时间到之后会自动运行这个程序并关闭自身.

    命令行下也可以, 第一个参数是要运行的程序, 后续的是要运行程序的参数. 然后按照提示信息来, 和上面的一样.

Fork me on GitHub