年度归档:2016年

Tkinter效果总结

Tkinter是Python附带的标准GUI工具包。它易于使用,但支持的部件较少。其他的比较有名的GUI工具包有wxPytohn,PyQt,PyGTK。下面总结了一些常用的GUI效果的实现方式。

 

Splash

Splash就是程序启动界面(主界面显示前的界面),比如手机APP打开后显示的LOGO画面(大多是广告),splash通常可用来放品牌logo或公司信息。

# import Tkinter
def splash():
    root = Tkinter.Tk()
    root.overrideredirect(True)
    width = root.winfo_screenwidth()
    height = root.winfo_screenheight()
    root.geometry('%dx%d+%d+%d' % (width*0.8, height*0.8,
                                   width*0.1, height*0.1))
    # 保存成gif格式。(但是没法显示动图,待解决。)
    image_file = "hi.gif"
    #assert os.path.exists(image_file)
    # use Tkinter's PhotoImage for .gif files
    image = Tkinter.PhotoImage(file=image_file)
    canvas = Tkinter.Canvas(root, height=height*0.8, 
                            width=width*0.8, bg="white")
    canvas.create_image(width*0.8/2, height*0.8/2, image=image)
    canvas.pack()
    # 设置splash显示的时间,单位是毫秒(milliseconds)
    root.after(4000, root.destroy)
    root.mainloop()

在主程序启动前调用splash()

splash效果

某软件的启动界面(splash)

 

无边框

只需要加入下面一行代码。

root.overrideredirect(True)

 

无边框效果

某个简陋的无边框软件……

 

 

 多标签面板

首先定义一个类,建议把它保存成单独的文件,然后把它放在系统环境变量里,这样可以方便调用。

from Tkinter import *
class Notebook(object):
    def __init__(self, master, side=LEFT):
        self.active_fr = None
        self.count = 0
        self.choice = IntVar(0)
        if side in (TOP, BOTTOM): self.side = LEFT
        else: self.side = TOP
        self.rb_fr = Frame(master, borderwidth=2, relief=RIDGE)
        self.rb_fr.pack(side=side, fill=BOTH)
        self.screen_fr = Frame(master, borderwidth=2, relief=RIDGE)
        self.screen_fr.pack(fill=BOTH)
 
    def __call__(self):
        return self.screen_fr
 
    def add_screen(self, fr, title):
        b = Radiobutton(self.rb_fr, text=title, indicatoron=0,
                        variable=self.choice, value=self.count,
                        command=lambda: self.display(fr))
        b.pack(fill=BOTH, side=self.side)
        if not self.active_fr:
             fr.pack(fill=BOTH, expand=1)
             self.active_fr = fr
        self.count += 1
 
    def display(self, fr):
        self.active_fr.forget()
        fr.pack(fill=BOTH, expand=1)
        self.active_fr = fr

下面是一个示例:

from Tkinter import *
from notebook import * # 如果notebook类在同一个文件就省去这行
# 生成一个顶层窗口,放入notebook
root = Tk()
root.geometry("400x400+500+300")
nb = Notebook(root, TOP) # 标签的位置可选:LEFT、TOP

# 每一个框架(Frame)代表一个标签面板
f1 = Frame(nb())
b1 = Button(f1, text="Button 1")
e1 = Entry(f1)

b1.pack(fill=BOTH, expand=1)
e1.pack(fill=BOTH, expand=1)
# 在将框架添加到记事本之前,先把部件放进去
# 不要单独放入框架

f2 = Frame(nb())
b2 = Button(f2, text="Button 2")
iconImage = Tkinter.PhotoImage(master=f2, data=icon)
Tkinter.Button(image=iconImage).pack()
b3 = Button(f2, image=iconImage)
 
b2.pack(fill=BOTH, expand=1)
b3.pack(fill=BOTH, expand=1)

f3 = Frame(nb())
lb1 = Label(f3, text="欢迎来到标签3...")

lb1.pack()
# 添加标签面板和面板名称
nb.add_screen(f1, "标签 1") 
nb.add_screen(f2, "标签 2") 
nb.add_screen(f3, "标签 3")

root.mainloop() 

标签面板示例

 

 

新手备注

在Python中使用文件时要把文件的完整路径写出来。或者在调用前使用os模块的chdir函数。

import os
os.chdir("C:\photos\")
os.chdir(os.getcwd()) # better

如果要发布给别人用,那就使用相对路径。使用下面这个函数包裹你要使用的文件路径(相对于程序根目录的路径),这样即使你换了文件夹,文件还是会得到正确的调用。

import os
import sys

def resource_path(relative_path):
    """
    定义一个读取相对路径的函数
    1、引用文件用如下格式:resource_path('resources/complete.wav')
    你只需要填入相对于程序根目录的文件路径。
    2、打包exe的说明:在生成的.spec文件exe = EXE()中加入下面这行:
    [('resources/complete.wav',r'C:\Users\Administrator\resources\complete.wav','music'),],
    列表中的三项分别为代码中的引用,文件实际的地址,类别
    这样打包后文件会被正确引用。
    """
    if hasattr(sys, "_MEIPASS"):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

 

注:标签面板的代码来自《Python Cookbook》

如何获得优质的睡眠?

书籍信息

书名:Powerful Sleep – Secrets of the Inner Sleep Clock
译名:有效睡眠 内在睡眠时钟的奥秘
作者:Kacper M. Postawski
译者:Jude
一句话介绍:关于睡眠的是什么、为什么以及怎么办?

 

我看

作者很啰嗦,废话很多,很多东西一再的重复。所以,对于想提高睡眠质量的人来说,只看我的总结就够了。(注:下面的内容不全是书里面的。)

 

基本概念

睡眠周期

睡眠周期

特点:深度睡眠的时长决定我们的睡眠质量;睡眠是逐渐变得越来越浅的。

 

体温(生理)节律

 

体温节律


特点:体温和人的身体疲劳度成反比。体温升高时,人会感觉兴奋和有活力;体温降低时,人会感觉困倦和疲劳。午后会有短暂的体温下降,夜间开始稳定下降。

 

褪黑激素

褪黑激素是松果状腺和视网膜里激素的统称。褪黑激素的功能是让我们睡觉并且在睡觉时恢复身体精力。如果你的褪黑激素含量太高,就会感到困倦,精力不足。当人身处黑暗之时,褪黑激素开始分泌。一旦眼睛接触不到阳光,褪黑激素含量就开始升高。褪黑激素含量和白天接触阳光的水平密切相关。

特点:褪黑激素含量和疲劳程度成正比,和接触的光量成反比。

 

从上面的概念我们可以知道:

  1. 在深度睡眠起床会很困难,起床后会感到疲劳和困倦。在睡眠周期的末期(REM)醒来,会让你感觉精神饱满。所以尝试调整闹钟(早起或晚起,以20分钟为单位)找到自己的REM时间,或是使用睡眠周期闹钟(比如iOS下的Sleep Cycle)。
  2. 体温升高会让人感觉精神饱满,所以起床后接触阳光,适量活动,可以提高精神。白天多晒太阳可以降低褪黑激素的含量,并且会减缓体温降低。体育锻炼同样可以减轻紧张感和压力感。作为过多脑力活动的中和剂。

因此:

  • 如果生活是里缺乏活动和光照,那么感到疲劳并不是因为缺少睡眠。而是说明你该运动了。同时要多晒晒太阳。
  • 起床困难很可能不是懒病作怪,或是意志力薄弱,而是因为闹钟没在合适的时间响起。

 

那么,怎么更好的睡觉?

健康的生活方式

  • 早晨起床后喝一杯水,白天喝大量的水(但睡前一小时不要喝太多水)。
  • 锻炼的最佳时间是清晨,最好是室外运动(接触阳光),这可以快速的提高体温。
  • 烟、酒、咖啡因、安眠药都会对睡眠带来负面影响。
  • 适量的运动(但避免在睡前三个小时锻炼。),适量的接触阳光。
  • 含有大量糖和碳水化合物的食物和会产生气体和难消化的食物会加重睡眠时的消化负担。
  • 趴着睡不利于呼吸。
  • 正确面对生活压力,不把它带进卧室。

 

小睡

规律的午睡可以增加白天的精力。但时间不超过45分钟,避免进入深度睡眠。午睡后如果感到疲劳,那就去晒晒太阳,活动活动。就个人经验来看,要不要午睡是因人而异的。

 

建立一个良好的睡眠环境

  • 除了睡觉和做爱,不要在床上做其他事。
  • 安静凉爽黑暗的房间更容易使人入睡。
  • 尽量买最好的床上用品。

 

养成良好的睡眠习惯

  • 保持稳定的睡眠作息,固定睡觉和起床的时间,不要周末补觉,也不要睡回笼觉。
  • 不要在睡前接触电子设备(很容易让你忘记时间,光刺激也会让你变得兴奋)。
  • 睡前洗个热水澡有利于降低体温,但要在睡前一小时进行。
  • 晚饭少吃,减轻睡眠时的消化负担,睡前不要喝大量的水。
  • 睡觉时间在6~8个小时为佳。

 

更快的入睡

  • 固定睡前的事项,不做计划外的事情
  • 翻身的时候要轻柔缓慢,同时做个深呼吸。
  • 思维规律是:一旦集中思考,想法源源不断。解决方法很简单,集中注意力去想轻松的东西,不要尝试逼自己睡着。想象轻松愉快的事情,你的目标不是睡觉,而是放松。
  • 尝试减缓思维速度,不断的慢速重放自己的某个想法。
  • 如果躺在床上超过三十分钟没有睡着,那就起来去做其他的事。直到困意再次来袭。

 

如果你住在宿舍,你可以尝试:

  • 和室友沟通,协调好噪音控制和关灯时间
  • 备好耳塞,眼罩或床帘
  • 搬宿舍或租房子

 

拥有优质睡眠的一天是这样的:

  • 起床,通过调整或使用软件使闹钟在REM阶段响起。
  • 早晨起床后,及时接触阳光,适当的运动。
  • 白天喝足量的水,三餐适量,不吃难消化的食物。
  • 晚上睡觉前三小时不吃食物,不剧烈运动,睡觉一小时前可以洗个热水澡。
  • 上床后,不做其他的事情,如果不做爱的话,就开始放松身体和呼吸,直到入睡。

简单来说就是:好的睡眠 = 运动 + 阳光 + 合理饮食 + 健康的生活方式

 

放松的方法:

  • 放松身体法:从头顶开始感受并放松身体的每一个部位。
  • 呼吸法:注意力放在hu
  • 冥想:冥想的方式有很多种,我也不是很熟悉,就不做介绍了。
  • 白噪和自然声:有很多APP提供了这样的音频,比如TaoMix。

 

一些有益的尝试:

  • 测试自己的体温周期(使用体温计),相应的安排自己的日常活动。
  • 测试自己的睡眠周期(使用Sleep CycleAPP),找到合适的睡眠节奏。

 

作者在书里提到了他做事情的方法。他说不论做什么事情,都有三个基本步骤:

  1. 掌握正确的信息
  2. 制定正确的计划
  3. 实际的执行

所以这篇文章算是第一步,剩下的就靠你自己了。

AutoHotkey——进阶应用与思考

简单易学的AHK

作为一门脚本语言,本来可以按照通常的学习路径来学习:变量、控制语句、函数……但是因为它本身的特点,对于只想来满足自己的某些需求的人来说,也可以只从需求出发,学习需要的内容。同时,学习AHK可以得到很及时的反馈,让你很容易从中获得一些成就感。相比其他语言,你要做出一个GUI界面,恐怕需要一段时间的学习,当其他人还在控制台的黑窗口里接受用户输入的时候,使用AHK的你只需要一个MsgBox或是InputBox就可以弹出窗口来实现用户交互了。

 

 

脚本精选

(大部分来自帮助文档及官方论坛)

小众软件 AutoHotkey 专区:提供了一些贴合国内实际的脚本。

AHK 快餐店系列索引:包含在上一篇文末推荐的懒人包里。

1 Hour Software (1 小时软件) — 作者: skrommel: 这是大量有用的脚本集合, 带有简短的说明和截图地专业呈现出来.

Titan 的脚本: 这个集合包含许多有用的脚本, 例如:
1) XML 阅读器/写入器: 通过简单的界面来获取和写入 XML 文件中的值, 就像 JavaScript.
2) 锚: 让 GUI 控件紧贴可调整大小的 GUI 窗口的右边或底部的边缘.
3) 函数: 包装函数的集合, 其中的每个函数是从含有 OutputVar 的 AutoHotkey 命令包装而成.
4) 天气: 在托盘菜单中显示当前天气状况或在富 GUI 中显示预报。

Toralf 的脚本: 这个集合包含了有用的脚本, 例如:
1) AHK Window Info: 显示窗口, 控件等等的信息.
2) 电子节目指南: 浏览您当地的电视节目/时间表 (支持多个国家).
3) 自动语法整理器: 改变脚本中命令的缩进和大小写形式以使它使用一致的格式/风格。

Sean 的脚本: 包含有用的脚本, 例如:
1) 网络下载/上传流量计: 在小且置顶的进度条中显示网络下载/上传的流量 (单位为 KB).
2) StdoutToVar: 重定向命令或应用程序的输入到脚本的变量中.
3) 截取屏幕的矩形区域: 用来截取部分屏幕并保存为文件 (BMP/JPG/PNG/GIF/TIF) 的函数. 它也能截取透明窗口和鼠标指针.
4) 颜色放大器/选取器: 放大光标周围的区域, 允许选取单个像素并识别它的颜色.
5) 嵌入 Internet Explorer 控件: 嵌入 MSIE 控件到脚本的 GUI 窗口. 此控件能进行网页显示或其他兼容于浏览器的功能。

Using Keyboard Numpad as a Mouse (把小键盘作为鼠标使用) — 作者: deguix
: 此脚本用您的键盘来实现鼠标操作, 几乎相当于真正的鼠标 (在一些任务中甚至更方便). 它支持多达五个鼠标按钮和鼠标滚轮的转动. 它还具有能自定义移动速度, 加速和 “轴反转” 的特点。

SKAN 的 N 个技巧提示
:包含实实用效果和常用功能的示例代码和技术。

论坛的 Scripts & Functions 版块
: 这是一个近 1000 个可运行脚本和函数的可搜索集合. 由 AutoHotkey 用户建立和维护, 这个存档每天都在增长和改进。

Rosetta Code AutoHotkey Category
:演示了许多独辟蹊径的用法,很有趣。

JGPaiva’s AutoHotkey Coding Snacks
:众多简单实用的小工具。

一键登录网站(以登录淘宝为例):因为淘宝现在使用账号密码登录需要点击一下右上角的按钮,所以先使用上面那个脚本获取屏幕坐标,然后根据自身情况调整参数就可以了。其他网站需要作相应的调整。

;获取鼠标坐标,用于下面的登录事件
:://xy::
MouseGetPos, xpos, ypos 
Msgbox, The cursor is at X%xpos% Y%ypos%. 
return

;一键登录淘宝
:://tb::
Run https://login.taobao.com
WinWaitActive 淘宝网 - 淘!我喜欢 - Google Chrome
sleep 5000 ;视网速调整等待的时间(毫秒)
Click 1410, 378 ;不同分辨率的屏幕坐标不同,可使用上面的脚本获取屏幕坐标
sleep 100
send ^{Space} ;设置英文输入
Send {Tab}1515******* ;替换你的用户名
Send {Tab}****** ;替换你的密码
MouseClickDrag, left, 1645, 634, 1428, 634 ;拖动验证滑块
Send {Enter}
return

 

AHK和Python的比较(GUI)

和Python相比,AHK更像是搭积木。你可以用极少的入门知识和查阅帮助文档来制作自己想要的GUI工具。以一个计时器为例,我同时用Python(Tkinter)和Autohotkey写了两个简单的计时器。用户输入一个时间数(分钟),计时结束后会弹窗提示时间到了。下面是各自的代码

Python:

import tkMessageBox
from time import sleep
from Tkinter import Tk, Entry, Label, Button, X, Y

def time_counter():
    time = Entry.get(time_et)
    root.destroy()
    sleep(int(time) * 60)
    label = tkMessageBox.showinfo("Attention!", "Time Over!")

root = Tk()
root.title("Counter")
prompt_lb = Label(root, text="Enter a number(mintutes):")
time_et = Entry(root)
start_bt = Button(root, text="Start", command=time_counter)
prompt_lb.pack()
time_et.pack()
start_bt.pack()

root.mainloop()

运行结果:

python运行效果

为了避免出现控制台窗口弹出,要把文件保存成.pyw

Python运行效果

因为关闭了主窗口(root),消息窗口又在左边新建了一个空白窗口

 

AutoHotkey:

InputBox UserInput, Counter, Enter a number(minutes):
IfEqual, Errorlevel, 0
{   
    sleep UserInput * 60000
    SoundBeep
    MsgBox Time Over!
}
return

 

运行结果:

ahk运行效果

默认的窗口布局很美观

ahk运行效果

 

代码的行数倒是次要,从学习量来说,后者大部分函数都帮你封装好了,只要你填几个所需的值就搞定了,而且默认的尺寸位置也比前者美观的多。在转换成exe文件上,Autohotkey也很方便。Autohotkey里甚至还有现成的splash函数。当然,这只是在简单的应用上,复杂的应用AHK就未必能很好的胜任了。

不同语言都有各自的优缺点。但对于使用Windows系统,不想花费大量精力学习编程,而又想制作些小工具满足日常需求的人,简单易学的Autohotkey是个好选择(说不定你对编程的兴趣就这样产生了)。

AutoHotkey——自动化你的生活

文明通过增加我们不假思索就能完成的的重要操作的数目而取得进步。
——阿尔弗雷德 · 诺斯 · 怀特海

ahk_logo

 

和上面那句话相对应的,我们应该尽量减少重复的没有价值的操作,或是降低这种操作的成本。为了这个念头,我们使用makefile来编译程序,学习各种编程语言来减少重复劳动,在开发软件时加入快捷键支持。根据二八原则,我们在避免重复劳动上投入20%的精力可以为我们带来80%的效率提升。我们应该把这20%的时间和精力用来学习AutoHotkey。

AutoHotkey是一款免费的、Windows平台下开放源代码的热键脚本语言。从名字可以看出来,它可以用来设置热键。但是因为它是一门脚本语言,所以就不止设置快捷键那么简单了。帮助文档这样介绍它的功能:

  • 通过发送键盘键击和鼠标点击自动化几乎所有的操作。您可以手工编写宏或者使用宏录制器。
  • 为键盘,游戏杆和鼠标创建热键。几乎任何按键、按钮或组合键都可以设置为热键。
  • 在您键入缩写时扩展缩写。例如,键入 “btw” 能自动地生成 “by the way”。
  • 创建自定义的数据输入表格、用户界面和菜单栏。详见图形用户界面。
  • 重新映射您键盘、游戏杆和鼠标上的按键和按钮。
  • 通过WinLIRC客户端脚本对手执遥控器的信号作出反应。
  • 运行现有的 AutoIt v2 脚本,并用新功能增强它们。
  • 将任何的脚本转换为EXE文件,使其在没有安装 AutoHotkey 的计算机上也能运行。

很早就把它下载下来,却一直没有用。直到上次要用一个简易键盘来控制电脑的时候,才去学习了一下。这时才发现它真是太强大了。这个简单的教程会帮助你从实践出发快速的熟悉这门语言。建议你按照下面的学习步骤学习,不要遗漏每一项

 

最简流程示例

  1. www.autohotkey.com下载或点击这里下载(AutoHotkey1.1),然后安装。
  2. 使用编辑器或记事本新建一个脚本文件,格式为.ahk,编码格式为UTF-8
  3. 编辑脚本,在脚本中写入下面这行:
     #h::Run www.greyli.com
  4. 保存后双击运行。
  5. 这时按下Windows键和h键就会打开我的博客。

在上面这个命令中,符号#表示Windows键,#后紧跟着h表示组合键。符号::用来分隔热键和命令(左边是热键,右边是命令)。Run命令用来打开一个文件或网页,中间空一个空格。

 

基本术语

  • 脚本/宏(Script):你要编辑的一个格式后缀为.ahk的纯文本文件(编码格式为UTF-8)。你把代码写进这个脚本里,双击执行后,你的热键就生效了。
  • 热键(hotkey):用来触发操作的按键或组合键,也就是快捷键。
  • 命令:你为某个热键指定的一个动作(action),比如打开程序,打开网页等。
  • 热字串(hotstring):类似于热键,当你输入热字串并按下回车或空格后触发相应的命令。用过老型号的黑莓的人对热键和热字串一定不陌生。
  • 宏录制器(AutoScriptWriter):可以录制回放你的操作的工具,非常适合新手入门学习。目前AutoHotke_L版本已去除,详情请见这里
  • 多行热键:当通过热键触发多个命令时,这时的格式是命令从第二行开始,每个命令一行,最后以占据一行的return结束。
#h::
RunWait Notepad
Msgbox Goodbye!
return
  • 参数:自定义的数值,传递给命令执行,比如sleep后面的时间数就是参数。参数与命令通过空格或逗号隔开,多个参数使用逗号隔开。
  • 注释(comment):注释是用来对你的代码进行解释和说明的文字。单行的注释以;开头,多行注释用/**/括住。
;这是单行注释
/* 这里 
是 
多行注释 */

 

常用命令

Run

用来打开一个程序、文档、网页或者快捷方式

Send

发送键击或一段字符

Msgbox

消息窗口

Inputbox

用户输入窗口

Sleep

脚本等待指定的时间,然后执行下面的命令。后面接时间参数(毫秒)。

Click

在指定的位置点击鼠标

 

常用符号

#

Windows

^

Control

!

Alt

+

Shift

&

用来连接两个按键组成组合键(使用除了上面四个按键外)

<和>

分别表示成对按键中左边和右边的的按键

Tab和Enter等

没有特殊符号。使用Send命令时用大括号括起来以和字符区分开。

注:前四个为修饰键,可以和其他按键直接相连(比如写成#a),其他按键要做修饰键时需要用&连接(比如a&b)。

 

基础应用示例

为常用软件、网站设置快捷键

按下Windows和k打开Notepad++:

#k::Run D:\Program Files (x86)\Notepad++\notepad++.exe

按下Windows和h,或输入hui后按下回车或空格(推荐使用空格)可以打开我的博客:

#h::Run www.greyli.com
;下面使用热字串运行同样的命令,这时要采用多行分隔
::hui:: 
Run www.greyli.com
return

按下Alt和m打开一组网页和程序:

!m::
Run www.google.com
Run http://fm.douban.com
Run D:\Program Files (x86)\Notepad++\notepad++.exe
return

建议用热字串来启动常用的程序,把快捷键留给常用的操作。为了防止打字时冲突可以在热字串前加特定的符号,比如斜线。使用热字串启动命令要使用多行热键格式。

 

用热键或热字串保存常用文字

按下Alt和k发送我的签名:

!k::
Send Sincerely,{Enter}Richard Hui.
return

写下@g后按下空格或回车,自动转换为我的邮箱

::@g::withlihui@gmail.com

按下Alt键和g后填入我的账户和密码并登录(先把光标点在第一个输入框里)。

!g::
Send withlihui@qq.com {Tab}mimashi123 {Enter}
return

(下一篇会有一个一键登录网站的示例)

 

Tips与建议

  • 命令不区分大小写。
  • 所有的符号均为英文符号
  • 一个脚本里可以写入多个热键。
  • 发送的字符里包含的按键前要有一个空格。
  • 不分配热键的命令将从上往下依次执行。
  • 修改后的脚本要重新运行(双击执行脚本文件)才能生效。
  • 开机运行脚本:把脚本的快捷方式放到启动文件夹(开始菜单—所有程序—启动)
  • 中文支持,安装Autohotkey_L(1.1)版本。
  • 编辑器推荐:SciTE4AutoHotkey

更有趣和复杂的的进阶应用请见下一篇。

 

继续前进

你可以从这些地方继续学习:

写作的乐趣

到现在为止,已经在这个博客写了42篇文章了(the Answer to Life, the Universe and Everything …)。虽然离100篇的目标还差的远,但我已经收获了很多东西,而且深刻的体会到写作的乐趣了。 

之所以现在才体会到写作的乐趣,要归功于我的中学教育。那些写作文的经历让我对写作(写作文)越来越讨厌,每一次都是煎熬。慢慢地,甚至对自己的写作能力产生了怀疑。作文题常常是一些空洞无聊的话题,甚至是自己厌恶不赞同的观点,不仅要写出800字来,最后还要接受一个保守无知的家伙的评判。这评判要先看你的书写,再看你的字数,然后看你的用词和分段(就是看你有没有用什么“高级词汇”,段落划分是不是“标准格式”)。你说你见解独到?抱歉,独不独到谁改卷子谁说了算。假如你批判政党和国家,噢,他们说你思想不积极,那样得不到高分。戴着镣铐的时候,我只想批判和咒骂,谁想跳舞呢?

大多数人的爱好和兴趣就是这样被学校毁掉的。它让你用你喜欢的东西去做你讨厌的事情,让你去争名次拿奖金。胜利的你开始感到厌倦,失败的你开始怀疑自己的能力。多少年后,老朋友见面问起,你就说你没有天赋,得了吧。假如你不是还被蒙在鼓里的话,那就是在为自己的懒惰和懦弱找借口。

没有天赋是大家最常用来掩盖自己懒惰的借口,没有之一。类似的借口还有脑子不好使,笨,不适合我。事实上,只要你会说话能思考,你就会写作。把你的思想用话说出来,和用笔写出来没多大区别。你可以尝试用笔记下你对某件事情的看法,稍加整理和润色,就成了一篇文章。你嫌自己写的不好?可谁生下来就会跑呢?再说了,优秀的写作需要优秀的思考和优秀的文笔,这需要大量的阅读、思考和积累,但平庸的文章也有存在的意义,就像普通人也可以有尊严的生活在这个世界上一样。

你问写作有什么好处?大约有一打。

写作整理你的思想。当你写作的时候,常常是不知不觉就把自己的思想梳理了一遍。你不想把一堆浆糊抹在纸上和屏幕上,你开始小心翼翼的整理和分段。这有助于你养成整理分类的爱好,你的爱好逐渐扩展到了书桌和房间里,你的家人或是室友会感到开心的。

写作促进你思考,完善你的想法。你本来想抱怨一下你家门前的垃圾站常常没有人来清理,村民又把垃圾扔得到处都是。思考了一下,你又谈了基层政府的落后和低效率,痛斥农民的素质低下,不守公德。写完觉得还少了点什么,所以你去了解了西方国家的政府制度,又找来费孝通的《乡土中国》,打算研究一下中国传统社会的变迁(一开始你只是想发个牢骚的)……

写作逼迫你学习更多知识。当你写作时,你不得不去了解一些陌生的概念,陌生的概念里又夹杂着更多的陌生概念,你就这样掉进了超链接的迷宫,等你惊讶时间的流逝后重新回到文章里,你发现你又有了新的想法。

写作锻炼你的逻辑。当你说话的时候,你的大脑常常没时间来照顾你的逻辑,但一旦文字落到纸上,掉进发光的屏幕里,你就开始观察你的逻辑。你和自己的观点搏斗,这让你的思想和逻辑更强壮。

写作帮助你了解自己。你在写作时,你使用的文字,不经意间流露的观点和想法,这些都在反映出你自己的特点。当你面对自己写下来的抱怨和牢骚时,你开始以客观的视角来反省自己。这也有助于你排解不良情绪,清理心里的疑惑和误解,缓解不必要的压力。

高中时读了很多关于写作的书,但并没有什么进步,现在看来,主要是因为读的太少,思考太少,写的也太少。虽然现在词汇量很低,语法不严谨。但我想只要保持阅读和写作,进步总会发生的。

写作可以是发泄,可以是建造,可以是和解,也可以是飞翔。当你虔诚的写下去,它会给你你想要的东西。

想起小时候,有一次写作文,作文题是续写一个故事(关于小兔子,小老虎之类的森林故事),写满作文格子后,我又把整张试卷几乎所有的空白都填满了。我现在差不多恢复了小学时的写作状态,真好:)

大学应该怎么度过?

大学的珍贵之处在于,这也许是你人生中唯一的几年“自由”时间。在这个时间里,没有父母和学校的过度限制,暂时不用考虑生计,而且身边有丰富的学习资源,你可以专注于自己的学习和成长。但是大多数人都意识不到这个问题,或是已经放弃这个机会,自暴自弃,借各种名义来逃避成长,沉溺在各种欲望和快感里。

 

几件重要的事

找到生活的重心

大多数人过去的十几年里都是过着一种被安排和控制的生活,压抑着自己的天性。时间久了也就失去了独立思考的能力,习惯了被安排的生活。这时候是该重新认识一下自己了。

我是一个怎样的人?
我想成为一个怎样的人?
我最大的爱好是什么?
我理想的生活是什么样的?

这些问题都该好好考虑考虑。不用立刻找到答案,但至少在生活中去思考它们。更进一步,你可以通过回答这十二个问题来认识自己。最重要的是,要知道对自己来说生活中最重要的事情是什么,做好它。

 

学做人

很多人在前十几年里都没有考虑过该怎么做人,还有些是从没长大过的巨婴,在性格上和为人处世上有很多缺点。先不说和人交往的修养,应该从最起码的礼貌开始学习。学做人这种事是没法速成的,可以先从身边找到值得尊敬的人,从他们的言行举止中获得经验。我的一个习惯是:记下自己做错的事情,经常拿出来反省。而更深刻的成长要通过优质的阅读获得。

 

自我克制

和认识自己一样,自我克制也是一个重要的话题。中国古话就有“万恶淫为首”,但是这句话里的淫并不是指淫欲(淫欲招谁惹谁了?),而是指过度。“凡事不过分”,这也是刻在阿波罗神庙的三句箴言之一(最有名的一句是“认识你自己”)。没有节制是很多罪恶的源头,比如酒瘾,烟瘾,性瘾……学会控制自己的行为,是心智成长的的第一步。就像《少有人走的路》里说的:自律,是解决人生问题的首要工具,也是消除人生痛苦的重要手段。

假如不能自律的话,以后又有什么资格来教育孩子呢,自己都没做到的事情,怎么好意思一脸严肃的告诉孩子:认真学习,不许玩游戏,不许逃课……

 

建立原则

没有原则,人会在诱惑面前变得贪婪,放纵自己懒惰自私的本性,为了达到目标不择手段;没有原则,人就会去作弊,说违心的话,伤害无辜的人,执行上面给你的任何命令。原则就是我们自己的道德,应该让原则驱动我们的日常行为和选择。除了做人,生活的很多方面都要有原则,原则指导我们更好的学习和工作。

 

养成习惯

从一定意义上说,习惯决定你的人生。你的每一天都是由许多习惯组成的。早起还是晚起、上厕所时看书还是玩手机,喜欢吃蔬菜还是肉,晚饭后散步还是看电视。它无声无息的决定了你现在和多年后的一切:你的思想,你的事业,你的身材,你的健康状况。我建议把习惯养成加入日常管理的一部分,把你想要成就的事业,想要获得的能力,理想的自己的等等分解成一个个习惯,慢慢的把他们融入到生活里去。剩下的就交给时间吧。

 

应该培养的能力

写作能力

大多数人对于写作的兴趣和信心都被应试教育毁掉了,剩下的一些要么只会写空洞虚伪的文字(比如入党申请书),要么只会无病呻吟。现在是重新学习写作的好机会。写作不仅是一种能力,也是一个高效的学习工具。好处一大堆,比如说它可以整理和完善你的思想,扩展你的思考,细化你的情感,锻炼你的逻辑,等等等等。

 

鉴赏能力

缺乏鉴赏(审美)能力,会严重影响生活质量,甚至会危害生命。故事是这样的,一开始你只是看烂片,听垃圾音乐,读三流小说,穿难看的衣服,慢慢的,你开始沉溺于朋友圈和QQ空间,转发低俗无聊虚假的文章,投身于虚伪的社交里。再后来,你和同样品味低下的人结了婚,粗劣浮夸的家具堆满了房间。给孩子看喜羊羊和猪猪侠,孩子没事就翻你买来就一直吃灰的心灵鸡汤和成功学。时间过得真快,一转眼你已经加入了广场舞大妈(大爷)的队伍,整天看芒果台的电视剧哭的稀里哗啦,山寨货塞满了整个衣柜。劣质丑陋的生活环境让你变得暴躁易怒,整天和丈夫(妻子)吵个没完。终于有一天你忍无可忍,用一把十元店买来的剪刀自杀了。自杀的时候剪刀坏掉了,你捂着胸口,骂骂咧咧的去找菜刀。

 

演讲能力

给自己一个机会打破自己为不擅长演讲而找的蹩脚借口,也给所有被压抑的能力一个机会。

 

阅读能力

阅读锻炼你的理解和思考能力,进而促进你的心智成长。请阅读《如何阅读一本书》

 

学习能力

学习的能力是你学习工具箱里最重要的工具,凭借它你才能不断的成长和进步。

 

英语

这个问题已经谈过了,见英语怎么学。英语扩展你的眼光,利用它你可以获得更好,更优质,更丰富的知识,甚至让你的日常生活更加顺畅。

 

大学生活

学生会和社团

不建议参加学生会。这里面很多人一副官僚嘴脸,对老师毕恭毕敬,对低年级学生低声下气。整个大学忙来忙去,只不过组织了一些无聊的活动,拿了一堆盖了章的废纸。也不建议参加社团。对新手来说,大多数技能都是需要长时间的练习的,参加社团并不能加速这个学习过程。

 

群体生活

这里我用了群体,是因为集体常常被各种官方话语体系绑架,经常听到的就是集体意识,集体荣誉感,这些词语的背后是对个人的权利和价值的漠视。一个人首先应该是人格独立的,然后才是群体中的一员。在一个群体里,要与人友善,但保持清醒,不牺牲自己去迎合群体,更不能放弃自己的原则。要有和群体融洽相处的能力,但也能坦然的独处。

 

培训班

在我看来,几乎所有的基于考试的培训班都是多余的。培训班之所以存在,一来是给作弊提供了看似合法的外衣,各种卖答案,走后门。宣传上基本上都是给钱包过,不过退钱。二来是给懒惰的人提供了继续不培养自学能力的借口,完美的营造了中学应试教育的学习氛围。当然,这正符合大多数人的诉求:只学考试会考到的:没有兴趣,没有热情,没有技巧,不求理解,只要背熟。

 

上课

如果可以的话,尽量逃掉劣质的非专业课。为自己的时间和生命负责。

 

当然,这只是我所向往和实践的大学生活,每个人都可以有自己的选择,谈谈恋爱,读读小说,生活有无数种组合。只要你知道自己想要什么,并且在这段时间结束的时候,没有后悔、自责和怀疑,那么时间就没有被浪费。

通过这12个问题认识自己

认识自己难且重要,要不然希腊人也不会把它(认识你自己)刻在阿波罗神庙的大门上。许多人在等待一些契机,以为时间和年龄的增长会让人成熟和自知,但其实他们需要的是一些深入的、诚实的思考。

几年前在一篇文章里看到几个帮助增进自我认知的问题,最近无意中又读到了另外一个类似的文章(据说作者是李孟潮,但没有搜索到原文)。我把这些问题整合成了下面的十二个问题。

挑一个不被打扰的时间,坦诚的回答这些问题,这会给你带来很多思考和启发。(即使不能坦诚的回答,那么这些不坦诚也会给你很多思考和启发:)

 

  1. 我是个什么样的人?有哪些特点?这些特点是如何形成的?
  2. 在我最好的朋友、最坏的敌人、我的老板、我的孩子、我的爱人、我的父母、我的同事/同学等心目中,我的形象分别是什么样的?我理想中的自己是什么样的?
  3. 我什么时候感到自己特别自然和放松?面对什么人物、地点和活动时让我感到最能充分展示自己?
  4. 我最大的才华是什么?我有什么理想?这个理想是怎么形成的?我打算怎样实现它?
  5. 我理想的伴侣关系是什么样的?我在这个伴侣关系中扮演什么样的角色?要承担什么样的责任?
  6. 我理想的事业是什么?这份工作的意义是什么?我正在做的工作/生活方式符合我的事业理想吗?
  7. 对我来说,什么是事业上的成功?为此,我的职业规划是什么?
  8. 对我来说,好的亲子关系是什么样的?我想成为一个什么样的父亲(母亲)?
  9. 我对钱怎么看,赚到多少钱是足够的?如果我明天一早醒来,已经有足够的钱,我将会如何继续安排自己的生活?
  10. 对我来说,什么是理想的性生活?在我的性道德观里,什么样的性生活是禁忌的,需要避免的;什么样的性生活是美好的,需要得到鼓励和发展的?我的性观念是如何形成的?
  11. 我的择友标准是什么?什么样的人我会愿意交往,什么样的人我会拒绝和他交往?
  12. 我对死亡怎么看?我希望自己活到多少岁,我准备怎么度过从现在到死亡的这段时间?如果我要立遗嘱,这份遗嘱会怎么写?我想留下什么样的遗产?

 

在不同的人生阶段,对这些问题也许会有不同的答案。把对这些问题的思考带到生活里去,定期回顾你的答案,常常会有新的收获。另外推荐大家去读一些关于心智成长的好书,比如《少有人走的路》《幸福之路》(罗素),我今年重读了它们,和几年前相比,又有了新的收获。

《撒冷镇》笔记

信息

书名:《撒冷镇》/ Salem’s Lot
作者:斯蒂芬 · / Stephen King
译者:姚向辉
出版社:上海译文出版社
豆瓣链接:https://book.douban.com/subject/5409461/

一句话介绍:吸血鬼来到了二十世纪的美国小镇,小镇居民不知道,知道了也不信。

马斯登老宅

撒冷镇中的马斯登老宅

我说

尽管斯蒂芬金名气那么大,之前却并没有读过他的书。仅有的接触是:读过两遍《写作这回事》,看过根据小说拍摄的《魔女嘉丽》和《肖申克的救赎》。暑假前去图书馆,刚好看到这本《撒冷镇》,就带了回来。

尽管译本不能很好的还原作者的写作风格,但我还是被故事吸引住了。从早晨起床开始,到晚上八点读完,除了三餐时间,一直沉浸在故事里。我想好的小说应该有这种让人停不下来的魔力,好的阅读也应该是一气呵成的。尽管一天读完近30万字的长篇实在有些累得够呛。

读这本书的过程中,对小说和改编电影有了一些思考,见《小说和改编电影》

 

摘抄

(依照原文顺序排列,小节标题自取)

马克 · 佩特雷的特质

假如说他身上有什么与众不同之处的话,那一定是淡然处世和冷静自控的态度了。没有人这样教导过他,这无疑是天生就有的东西。小时候,马克的宠物狗乔巴遭遇了车祸,他坚持和母亲一起去送狗去看兽医。兽医说,孩子,我的让这条狗长眠了,你明白吗?马克答道,你不是要让他睡觉,而是要用毒气杀死他,对吗?兽医说是的。马克说请便吧,但他要先和乔巴吻别。他觉得很难过,但也没有哭泣,甚至没有想流泪的意思。他母亲倒是哭了,但三天后乔巴对她已经成了模糊的回忆,对于马克来说,乔巴永远不会变成模糊的回忆。这就是不哭的价值所在。哭泣就仿佛把内心的感情如撒尿般扔在地上。

 

卡拉汉神父的苦恼

他想起博伊家的姑娘——不,麦杜高家的了,她现在姓麦杜高——喘息着用小小的声音说她打孩子,他问多久打一次的时候,他能感觉到(几乎能听到)姑娘脑子里的齿轮在转动,把十次说成五次,把一百次说成十次。人类这些可怜的借口。那孩子是他施洗的,兰道尔 · 弗雷图斯 · 麦杜高。在罗伊斯 · 麦杜高的车后座上受孕的,多半是汽车影院双片连映的第二部期间。不停尖叫的小东西。她知不知道,或者有没有猜到过他有多么想用双手砸烂那扇小窗,伸进隔壁斗室,揪出她的灵魂,任其怎么折腾,也要使劲搅搓挤榨,直到她拼命惨叫。你的布赎是头上六拳和屁股上狠狠一脚。滚回去,别再犯罪了。

“没劲儿啊,”他说。

然而,告解出了没劲之外还有更糟糕的地方;告解本身并不让他觉得恶心,把他驱赶进那个人数总是越来越多的俱乐部:“酒精成瘾天主教神甫及‘顺风*’成瘾骑士联合会”。让他难受的是教会这具稳定、呆板、不知疲倦的引擎,在飞往天堂的道路上对所有细小罪错视而不见。让他难受的是如今与种种社会弊病为伍的教会对邪恶的仪式性认可,变成了父母用欧洲语言说话的老妇数着念珠赎罪的工具。让他难受的是告解中真实存在的邪恶,与旧天鹅绒的味道一样真实。但这是愚蠢、低能的邪恶,既不值得怜悯,也不应该宽恕。第一次扇婴儿巴掌,用折刀刺破轮胎,酒吧里的争吵,在万圣节苹果里藏刀片,持续不断、索然无味地证明着:人类头脑那迷宫般的弯折沟回足以轻易折腾出这些东西。诸位先生,更好的监狱能解决问题。更好的警察。更好的社会服务机构。更好的生育控制。更好的绝育手段。更好的堕胎。诸位先生,要是能把手脚尚未成型的这团血肉从子宫里拽出来,它就永远不会长大了用榔头锤杀老妇人。诸位女士,要是能把这位先生捆上特制电椅,好像微波炉烤猪排一样活煎了他,他就永远不会有机会把更多孩子折磨致死。国民们,要是这项优生学法案能获得通过,我能向大家保证,永远不会——

妈的。

最近这三年来,他的处境的实质正在变得越来越清晰。仿佛失焦的电影放映机得到调整,清晰度和分辨率越来越高,最后直至每根线条都分外锐利、清晰可辨。他渴望挑战。新一代神职人员有他们的挑战:种族歧视、妇女解放,甚至同性恋解放;贫困、精神错乱、非法行为。这些都让他不舒服。在标榜社会良知的神职人员之中。他唯一能接受的是反对越战的那些。他们现在也变得死气沉沉,坐下来讨论游行集会的样子仿佛结婚多年的夫妻回忆蜜月和初次火车旅行。然而,卡拉汉既不属于新的一代,也不因循守旧;他发觉自己是一个传统主义者,但也不再相信最初的基本假定。他想领导一支军队——为谁效力呢?上帝,对,上帝和良善是一件东西的两样称呼,与邪恶展开斗争。他要的是流血和战斗,没兴趣大冷天的站在超市门口发放抵制莴苣和葡萄园罢工的传单。他想剥开邪恶本身欺骗世人的每一层裹尸布,看清楚邪恶的五官长相。他想和邪恶面对面堂堂正正打一场,就像穆罕默德 · 阿里对阵乔 · 弗雷泽,凯尔特人队对阵尼克斯队,雅各对阵天使。他要一场纯粹的斗争,不受政治制约的斗争,政治如畸形连体孪生兄弟那样攀在每一桩社会事务身上。自从他想侍奉神的那天起,他就想要这一切,神的赵换在十四岁那年降临,圣史蒂芬是第一位训教烈士,被乱石击死,在死前最后一刻见到基督。为了侍奉上帝而战斗,粉身碎骨也在所不辞,天堂的吸引力比起来微乎其微。

可是,哪里有什么战斗?只有模糊之至的小规模冲突而已。邪恶不止一副面孔,而是有许多张脸,每张脸都茫然愚蠢,下巴上多半还滑溜溜的糊满口水。说实话,他正在被迫得出结论:世界上不存在来自魔鬼的邪恶,只存在凡人的邪恶,甚至是琐碎的日常邪恶。每当这种时候,他就会怀疑希特勒不过是个为非作歹的大官僚,撒旦本人心智缺陷,有着扭曲的幽默感——就是拿面包裹了炮仗喂海鸥病从中获得莫大欢乐的那种人。

多少世纪以来的社会斗争、道德交锋和灵性交战最后却归结为珊迪 · 麦杜高痛打缩在角落里的鼻涕小儿,孩子长大后再痛打他缩在角落里的后代,周而复始,永无止境,哈利路亚,请赐我一大勺花生酱。万福玛利亚,帮我赢了这场赛车大赛吧!

这比没劲儿还要没劲。人生,无论你赋之以何种理性界定,最终结果竟如此可怕,天堂或许也一样。天堂是什么呢?永恒的教堂宾果游戏、游乐场嬉戏和空中加速汽车赛?

*威士忌品牌

 

苏珊的理性的崩溃

局势急转直下,苏珊的意识开始混乱,感觉所有事情都不真实起来。不到两分钟前,他们还在冷静地讨论事情,沐浴着电灯泡射出的理性光辉。此刻她很害怕。问题:把心理学家和自称拿破仑的男人在一个房间里关上一年(或十年、二十年),最后得到的是两个复合斯金纳理论的理性人,还是两个把手插在衬衫里的人*?答案:证据不足。

* 拿破仑的标准姿势

 

小镇了解黑暗(最喜欢的一段)

小镇了解黑暗。

小镇了解自转使得大地背离太阳因而笼罩世间的黑暗,也了解人类灵魂的黑暗。小镇是三个部分的累积,但比三个部分都更大。小镇是居住在这里的人,是人造起来遮风避雨、行商务工的建筑物,也是土地。人是英国苏格兰人和法国人。当然也有其他人,可只是少数,就像扔进盐罐里的一把胡椒,但始终没能搅拌均匀。建筑物基本上都是纯木质结构。老屋子有很多是盐盒式,大部分商铺是假门脸,但谁也说不清为啥会这样。人们知道假门脸后空空如也,正如他们知道洛瓦塔 · 斯塔奇戴假胸。土地是花岗岩,仅仅覆盖了薄薄一层极易剥掉的表层土。种地在这里是事倍功半、汗流浃背、疯狂又可怜的营生。耙子动辄掘到泥土下的大块花岗岩,撞得浑身碎骨。五月份,你趁着地面干燥地足以支撑卡车时开车出门,和你家孩子在犁地前装个十几车石块,扔到野草丛生的乱石堆里;自从1955年你接受这片宛如老虎卵蛋的土地以来,你每年都要这么扔一场石头。等你捡完了石头,洗手时指甲缝都漏不出半点烂泥,手指感觉又肿又麻、粗大得畸形,这时候,你把耙子挂在拖拉机背后,还没犁完两趟,就在一块没发现的石块上碰断了锋刃。换上新刃头,叫你最大的那个孩子抬起钩套,好让你装回去,今年第一只嗜血的蚊子嗡嗡叫着飞过耳边,那声音叫你禁不住想流眼泪,让你觉得那准定是疯子在动手前听见的最后声音,然后要么屠杀自家儿孙,要么在洲际公路上一闭眼睛,把油门踩到底,要么将双管猎枪的枪口塞进嘴里,拿脚趾头扣动扳机;就在这时,孩子湿润的手指一打滑,圆耙的一个刃头割破你的胳膊,你不由环顾四周,痛感生活残忍而令人绝望,这一刻,你想抛下所有事情,抱起酒瓶痛饮一番,或者径直冲进为你做抵押的银行宣布破产;这一刻,你无比憎恨这片土地和束缚你的绵软但坚决有力的地心引力,但同时你也无比热爱这片土地,明白它为何了解黑暗,明白它一直了解黑暗。土地捕获了你,把你牢牢困在这里,还有你的屋子、你从念高中就与之坠入爱河的女人(彼时她还是女孩,你一丁点儿也不了解女孩,但你有了一个,总和她混在一起,她把你的名字写满书皮,你先破了她,她再破了你,然后你们谁也不需要担心那件破事儿了)、你的孩子(受孕于那张床头板有裂纹的吱嘎作响的双人床上)都困住了你。你和她在夜幕降临后不停制造孩子,六个,七个,甚至十个。银行困住了你,还有汽车销售商、路易斯顿的西尔斯百货商店、布伦瑞克的约翰 · 迪尔公司。但最重要的是,小镇困住了你,因为你了解小镇不亚于你了解老婆乳房的形状。你知道谁将在白天出没于克罗森商店,因为奈普鞋业解雇了他;你知道谁将遇上女人的麻烦,比事主知道得更早,比方说雷吉 · 索耶就有这种麻烦,因为电话公司那小子的雀儿正在出出进进邦妮 · 索耶的蜜壶;你知道道路通向何方,直到周五下午你、汉克还有诺雷 · 加德纳能去哪里:先停车,然后喝几套六罐装的啤酒甚至几箱啤酒。你知道地形,知道怎么在四月走过大沼泽同时连靴尖也不弄湿。你全都知道。小镇也了解你,知道犁地一天后腹股沟如何疼痛;知道后背上那个硬结只是囊肿而已,正如初诊时医生所说:没啥好担心的;知道你对每月最后一周到手的钞票有啥打算。小镇看得穿你的谎言,包括你对自己扯的那些在内,比方说明年或后年你一定带老婆孩子去迪斯尼乐园,比方说明年秋天多伐些木材就买得起彩色电视机了,比方说船到桥头自然直。住在小镇里是一种彻底而全然的沟通,日复一日,日日如此,彻底的让你和老婆在吱嘎响的床上做的事情仅仅像是握手。住在小镇里过的平凡,能满足感官的享受,宛如酗酒。在黑暗中,小镇是你的,你是小镇的,你俩如死尸版沉睡,恰似北边田野里的每块石头。这里没有生活,只有一天天缓慢的死亡;因此,当邪恶降临小镇的时候,它的到来显得那么命中注定,那么甘美,具有形态。就仿佛小镇知道邪恶即将扣门,也知道邪恶即将化为什么形状。

 

小镇的秘密

小镇自有小镇的秘密,也守得很牢靠。人们全不知道这些秘密。他们知道艾比尔 · 克雷恩的老婆跟纽约城来的旅行者跑了,或者说,大家认为他们知道。实际上,旅行者玩够了离开之久,艾比尔砸烂了老婆的脑袋,在尸体的脚伤绑了块水泥,扔进那口古井;二十年后,艾比尔因心脏病突发在床上宁静辞世,他的儿子乔在这个故事的后面篇章中也将死去,或许有朝一日那个孩子会偶然发现那口古井,拨开盖住井口的茂盛黑莓藤蔓,搬掉被气候磨平了的发白木板,发现怪石嶙峋的井底有一个破碎的骷髅头空洞的望着天际,可爱的旅行者送给她的项链还挂在肋骨间,只是绿油油地长满了苔藓。

……

(下面也写得很好,但实在太长了,我的手指拒绝了我。)

 

成年人的恐惧

“彻底睡着之前,他(马克 · 佩特雷,孩子)发觉自己又在思索成年人的独特之处。他们用轻泻剂、酒精和安眠药驱赶恐惧,安享美梦,他们的恐惧总是那么无趣,那么普通:工作,金钱,要是我不能给詹妮买身好衣服,老师会怎么想;老婆还爱我吗;谁是我的朋友——实在太没意思了,哪里比得上孩子在黑暗床铺之间与之共眠的恐惧?孩子只肯向其他孩子坦白,寻求完全而彻底的理解。有些孩子每个晚上都必须应付床底和地下室里的怪物,应付恰恰在实现不可及之处瞪视、跃动、威胁他们的怪物,也没听说有什么集体疗法、精神病医师或社会服务工作者来帮助他们。孤单的战争每夜上演,唯一的治愈手段是想象力的最终枯竭,又称“长大成人”。

这些念头以简短的表达方式掠过马克的脑海。前一天夜里,麦特 · 波特也正面接触了这么一个黑暗邪物,结果被京瓷啊引发的心脏病突发击倒;今夜,马克 · 特佩雷也遭遇了同样的事件,但十分钟之后,他就安然入梦,右手松垮垮的抓着那个塑料十字架,仿佛幼童抓住拨浪鼓一般。这就是男人和男孩的区别。

 

邪恶的变化

“你也清楚,二十世纪,邪恶在天主教教会中的总体概念发生了天翻地覆的变化。知道这是为什么吗?”

“按照我的看法,是弗洛伊德。”

“答得好。进入二十世纪后,天主教教会开始接受一个全新概念:小写的邪恶。魔鬼不再是尾生长刺、蹄子开叉的红角怪物,也不是蜿蜒爬行花园中的大毒蛇——尽管这是一幅颇为适用的心理学图景。根据‘弗洛伊德福音’所述,魔鬼是一个巨大的复合本我,是我们所有人的潜意识的总和。”

“这个概念当然比鼻子过度敏感的红尾妖怪和恶魔更像样,便秘教士一个臭屁就能把它们熏走,”麦特说。

“的确更像样,但更非人化,更无情,更遥不可及。驱除弗洛伊德口中的邪魔,这比夏洛克那个取一磅肉但不流血的交易更难完成。天主教教会被迫重新诠释整套关于邪恶的理论,落在柬埔寨人头上的份额炸弹,爱尔兰的战争,中东冲突,警察杀人,黑人暴乱,每天都有几十亿更微小的邪魔横行世间,仿佛蚊蚋繁衍成灾。邪恶正在褪去旧时的巫医外壳,重新出现时变成了一种社会运动,一个社会性的意识知觉体。心理诊所在内城区取代了告解室。恳谈会在公民权利运动和城市重建的过程中帮腔敲鼓。教会正在把两只脚都踩在俗世中。”

“女巫、梦淫妖和吸血鬼不再出现,”麦特说,“剩下的只有虐待儿童、乱伦和强奸环境。”

 

光明下的邪恶

也许根本不怪弗洛伊德那套东西,也许和电灯的发明关系更大,电灯杀死了人类意识中的阴影,效率比用木桩刺穿吸血鬼的心脏高得多,场面也不那么难看。

但邪恶仍旧存在,现在它存在于停车场日光灯、霓虹灯管和几十亿颗百瓦灯泡的冷漠无情的注视之下。将军在交流电的严肃光芒下制定战略空袭计划,一切都失去了控制,仿佛孩童乘着没有刹车的木箱赛车冲下山坡:我只是在执行命令。没错,一点不错,正确的一塌糊涂。我们是士兵,作战计划真么说,我们就怎么做。可说到底,那些命令来自何方呢?带我去见你们的头儿。可他的办公室在哪里呢?我只是在执行命令。人民选了我。但谁选了人民呢?

感谢养成错误打字习惯的,正在纠正指法的,使用标准指法打字的,手指酸痛的打字员——李辉。

小说和改编电影

作为世界上最高产的作家之一,史蒂芬金的许多作品都被改编成了电影。当然,改编电影的质量参差不齐,有《肖申克的救赎》、《绿里奇迹》、《闪灵》这样的公认好片,也有很多烂片。花了一天时间读了斯蒂芬金的《撒冷镇》,虽然没看电影版,但在读的过程中,对电影和小说的对比有了新的看法。具体的说,是对小说和改编电影的思考。

《撒冷镇》封面

《撒冷镇》图书封面(1975)

作为不同的载体,特点不同。文字传达的信息要远比影像丰富。阅读时,每一个文字都流经你的大脑,形成一幅幅连贯的画面,丰富的意象和感官体验,让人与故事达到高度同步。而影像传达的信息要单薄的多了,而且具有可选择性,没人会仔细注意到画面上的每一处细节,大多数人只是关注故事的发展。比如下面这段:


“室内有一股味道,它从墙壁中渗出来,浓稠的如有实质。苏珊试图说服自己,那只是朽坏的灰泥,或是在破烂墙板后筑巢的各色动物积累多年的排泄物:土拨鼠,老鼠,说不定还有一两只浣熊。但实际上不止这些。这种味道比动物制造的臭味更浓郁,更有侵犯性;让苏珊想起眼泪、呕吐物和黑暗。”


这么一大段文字描述,在电影里假如有的话,最多也就是一个从左边推到右边的镜头罢了。观众们只看到脏兮兮的房间,没有更多了。想像力再丰富的人又能怎样,下一个镜头紧接着就来了,谁给你按下暂停键,让你想象一下房间的味道是朽坏的灰泥还是动物的排泄物?或许导演慷慨一些,让主角皱着眉头说了句“
Damn it,啥味儿啊”。要不你根本不知道这房间有味道,更别说这味道暗示的曾经发生在这房间里的事情了。

《撒冷镇》电影海报

《撒冷镇》电影海报(1979)

 
几百页的书里有无数个这样的细节,电影里能剩下几个,又有几个能自然而完整的通过画面和对白表现出来?另外,小说更能展现一些具有深度的复杂的思考,比如下面这段:

 

“彻底睡着之前,他(马克,孩子)发觉自己又在思索成年人的独特之处。他们用轻泻剂、酒精和安眠药驱赶恐惧,安享美梦,他们的恐惧总是那么无趣,那么普通:工作,金钱,要是我不能给詹妮买身好衣服,老师会怎么想;老婆还爱我吗;谁是我的朋友——实在太没意思了,哪里比得上孩子在黑暗床铺之间与之共眠的恐惧?孩子只肯向其他孩子坦白,寻求完全而彻底的理解。有些孩子每个晚上都必须应付床底和地下室里的怪物,应付恰恰在实现不可及之处瞪视、跃动、威胁他们的怪物,也没听说有什么集体疗法、精神病医师或社会服务工作者来帮助他们。孤单的战争每夜上演,唯一的治愈手段是想象力的最终枯竭,又称“长大成人”。

 

电影可以通过人物对话和旁白来表现这些内容,比如《大独裁者》结尾的演讲,或是《猜火车》开头的旁白。但一百多分钟里,顶多一两段。再多,就影响了电影的结构,除非电影是《日落之前》三部曲那样的完全由对话组成的电影。从另一方面看,这倒说明了电影更加纯粹。它只呈现故事,把思考留给观众,可观众们哪有心思去思考呢?

角色也加大了改编电影的难度。小说里只要给角色起个合适的名字(这很重要),其他的全都被作者牢牢握在手里。角色塑造只会少,不会过。而电影角色却是不可控的,除了剧情本身所需要的以外,演员还有自身的特质:数十年的生活在脸上留下的痕迹,说话表情和声音,走路的姿势……更别说大多数电影都用名演员做主角,这就很容易让角色被演员本身所携带的信息污染。“这不是叶问吗?怎么跑来做老师啦?”,“王宝强,哈哈哈,哈哈哈……”

所以说,对于改编小说的电影和原著,要想获得丰富纯粹的体验,就去读书吧。当然,也有优秀的改编作品,但和小说相比,又是另一种体验了,也就不能用小说的视角来评价了。小说像手术刀,在情节性、气氛营造、故事复杂度和内容充实性上,自然更胜一筹。相比之下,改编电影则显得粗糙和缺乏控制。拍的不好就成了小说的剧情介绍。

照我看,对于小说改编电影,选择有三个:只看电影;只读小说;看完电影再读小说。

 

2016暑假计划

家里盖了新房子,到处乱糟糟。没有完整的学习时间,也没有合适的环境。直到最近,生活才开始稳定下来。说起来这已经是最后一个暑假了,从小时候丰富多彩的暑假,到中学漫长而无聊的暑假,现在暑假又重新变得有趣起来。

项目 项目描述 方法和材料 目标 每日时间投入
编程学习 继续学习Python了解JavascriptJavaCGit Python核心编程》、《Python Cookbook》、《Eloquent JavaScript》等 完成阅读 2小时(包括下面三个项目)
翻相册 fanxiangce.com在线相册制作网站和应用 Flask Web开发》 完成windows程序;完成网站 \
100Words 100Words英语写作软件 Flask Web开发》 添加功能:计时、拼写检查、查词 \
俯卧撑俱乐部 fuwocheng.club关于俯卧撑的网站 Flask Web开发》 完成网站;写关于俯卧撑的文章 \
英语学习 提高口语 ESL》、《EnglishPod》、《The Element of Style 完成阅读和相应的时间量 朗读20分钟,听两个EP
阅读 主要是编程书,少量小说 除上面提到的书外还有:《撒冷镇》、《程序员修炼之道》、《牛鬼蛇神录》等 尽量读完 1小时
写作 题材不限 \ 20篇文章,写作计划总数达成57 30分钟
健身 在家没法去健身房,主要是俯卧撑和徒手运动 《腹肌撕裂者(AB Ripper X)》、iMuscle2(ios app) 腹肌分块明显;肱二头肌、肱三头肌和胸肌更加强壮 30分钟
学习双拼 提高打字效率 先纠正指法(用金山打字通),背自然码方案,每天练习15分钟 暑假后投入日常使用 20分钟
练字 改善书写 暂时先用小学时半途而废的字帖 完成字帖 15分钟
自考课程 高数、网络原理、Java 相应的课本 浏览一遍课本 \
习惯养成 要改掉的坏习惯和要养成的好习惯 端正身姿,节制饮食,保持文件和物品有序,认真书写 \ \

游戏

\

《Undertale》、Braid》和《传送门》 通关一个 不超过1小时

画画与摄影

铅笔涂鸦和手机随手拍

\ 十幅涂鸦 \

 

希望能完成以上任务的80%,结束再来总结(以后会用这种格式记录年计划和总结)。

翻相册(fanxiangce.com)

搭积木

本来说要好好学习一下前端技术,可没过几天,又开始了堆积木式的创造:把各种JS库,CSS库搭配起来,最终用Python做胶水实现了一个网页相册生成器。顺便用Bootstrap的模板做了一个介绍页:翻相册(fanxiangce.com)

 

翻相册

故事还要从我上次做幻灯片讲起。用impress.js做了幻灯片不久,就想着用Python搭配impress.js做一个幻灯片生成器,最终实现的效果是:可以从一个文本文档里读取文本,每一行创建一张幻灯片,坐标可以固定(通过在每一行的结尾传入坐标参数),也可以随机(没解决遮盖问题)。做着做着,发现这并不实用。估计没人愿意用这种死板无聊的幻灯片。没过几天,又想用impress.js搭配csshke做一个记单词的网页程序,几天后因为能力不够被暂时搁置了。

接着,又有了新的想法,在原来的幻灯片生成器的基础上改了改,做成了一个照片墙生成器。原理很简单。就是通过获取图片的数量和文件名,生成足量的坐标,然后用Python生成相应的div,最后连接头尾组成一个完整的HTML文件。做成这样一个照片墙:

图片墙示例

点击任一张图片可以拉近,点击相邻图片可以移动位置。

又过了几天,照片墙实现了tooltip功能,可以自动把文件名(没有格式后缀)设为tooltip内容。我想到的一个理想的应用场景是:集体制作照片墙,每个人上传自己的照片给某个人,以自己的名字作为文件名,收集照片的人只需要上传照片,设置标题,然后点击生成。打开后每张照片在鼠标掠过时都会用tooltip显示姓名。像这样:

tooltip

tooltip的颜色可以自定义。

故事还没完。又过了几天,我买了fanxiangce.com,做了一个粗糙的介绍页。发现功能还太单调,和其他的在线相册相比没有什么吸引力。又实现了立体相册,像这样:

3d

点击任意一张照片可以拉近

随机散落(仍然没有解决遮盖问题),像这样:

随机散落的照片,点击任一张可以拉近

随机散落的照片,点击任一张可以拉近

标签云(使用svg3dtagcloud.js):

基于文本的标签云

基于文本的标签云

点击标签就会打开相应的图片:

使用remodal.js实现的弹窗

使用remodal.js实现的弹窗

现在只是一个简单的demo,未来还会实现很多功能,比如把标签换成图片缩略图。可以参见TagCanvas

 

总结

上面的相册都有相应的demo,欢迎到翻相册上体验。也欢迎申请试用。虽然已经花了很多时间在上面,但是要做的事情还有很多。比如实现模拟翻页的相册,让图片更美观的排列,不是单一的对齐。等我暑假学习一下Flask和JS,把网站做出来,顺便把电脑端程序和在线程序做出来,就可以开放注册和在线自动生成相册了。

 

WordPress美化方案:插入代码

准备工作

1、安装“Easy Code Placement”插件。

安装好这个插件并启用后,你可以在任何位置插入代码(HTML、CSS、PHP、JavaScript),比如在侧边栏自定义文本区域或是文章里,或是在插件的自定义文本中。

注:在文章中插入代码时需要切换到”文本“模式下加入,而不是“可视化模式”。

2、使用外部JS或CSS库。

在这里我建议使用官方推荐的方法加载,也就是通过wp_register_script()函数注册,然后使用wp_enqueue_script()函数调用。这样的好处是只在需要调用的地方调用,不会影响性能。

文件放置位置:wp-content——themes——twentytwlve(你正在使用的主题)。

注册

注册JS文件需要在functions.php中加入下面这行(在末尾的?>之前):

wp_register_script('bootstrap', get_template_directory_uri() . '/bootstrap/bootstrap.js', 'jquery', '3.0.1', true);

六个参数含义:

  1. 注册的名称:和引用时名称相同。
  2. 文件位置:使用 get_template_directory_uri()函数可以获取当前主题的根目录,后面加上文件具体位置。
  3. 需要预加载的外部库。
  4. 版本号。
  5. 是否在文件结尾(</body>之前)调用。

而注册CSS文件类似(以引入csshake为例):

wp_register_style('csshake', get_template_directory_uri() . '/css/csshake.css', "", "");

调用

调用的时候,在你想要调用的位置插入。
JS文件:

wp_enqueue_script('bootstrap');

CSS文件:

wp_enqueue_style('csshake');

注:

  1. 注册外部文件时,如果使用get_template_directory_uri()函数,记得后面的地址第一个字符应该是斜线。
  2. 调用时可能需要加上php标签,比如:<?php wp_enqueue_style(‘csshake’); ?>
  3. CSShake是一个让元素产生摇晃效果的CSS库,具体见我之前写的介绍《CSShake——元素摇晃特效》

这个系列的另外两篇:
WordPress美化方案系列:插件篇
WordPress美化方案系列:修改主题文件

 

一、文章内跳转(锚跳转)

HTML用<a href=”url”>文字或其他元素</a>来创建链接。

常用属性:

  • href:链接的目标地址
  • target:定义打开目标连接的位置,可选的方式有
    • _self:(默认值):在本窗口打开。
    • _blank:在新窗口打开。
  • name:规定锚(anchor)的名称,通过name属性可以创建页面内的书签,通过在其他位置创建链接指向这个锚(href=“#name”指向这个name的名称),可以实现页内跳转。(name可以用id属性来代替。)
  • title:定义当光标停留在链接文字上会显示的内容。

除了用name属性创建页内书签,指定其他元素的id也可以实现跳转。比如下面这行跳转页尾的总结(id为”end“)。

<a href="#end">跳转到总结</a>

所以,在比较长的文章的开头,就可以加入一个章节目录(参考百科词条的章节跳转),比如这样:

代码:

<ul>
<li><a href="#">页首</a>    
<li><a href="#ready">准备工作</a>
<li><a href="#site">站点统计数据</a>
<li><a href="#end">总结</a>
</ul>

然后分别给这几个标题,添加锚。切换到文本编辑模式,以第一小节准备工作为例:

<h2><a name="ready">准备工作</a></h2>

注:

  1. 当一个链接没找到锚名称或是不写锚名称(href=”#”),可跳转到页首。比如我页脚的“返回顶部”按钮就是这样做的。
  2. 为了避免服务器产生两次HTTP请求,始终将正斜杠添加到子文件夹。用http://greyli.com/demo/,而不是http://greyli.com/demo。

 

二、弹出层

弹出层是指在当前页面内弹出一个小窗口,参考页尾的版权声明,或是点击图片的效果。我这次用引用外部文件的方法来实现这个功能。使用的JS库是Remodal,效果见页尾的版权声明。步骤如下:

  1. 下载文件,放到主题根目录下。
  2. 在functions.php注册JS和CSS文件。
  3. 在footer.php里调用这些文件。
  4. 在footer.php里按照Remodal的文档写HTML,保存。

 

三、站点统计数据

有时需要显示站点数据,比如文章评论的数量等,这时可以通过相应的PHP代码实现。下面是相关数据对应的PHP代码,把代码放到你要显示的位置即可:

//日志总数:
<?php $count_posts = wp_count_posts(); echo $published_post
s = $count_posts->publish;?>

//评论总数:
<?php echo $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments");?>

//建站时间:
<?php echo floor((time()-strtotime("2013-6-25"))/86400); ?>

//标签总数:
<?php echo $count_tags = wp_count_terms('post_tag'); ?>

//链接总数:
<?php $link = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->li
nks WHERE link_visible = 'Y'"); echo $link; ?>

//最后更新:
<?php $last = $wpdb->get_results("SELECT MAX(post_modifie
d) AS MAX_m FROM $wpdb->posts WHERE (post_type = 'post' OR p
ost_type = 'page') AND (post_status = 'publish' OR post_st
atus = 'private')");$last = date('Y-n-j', strtotime($las
t[0]->MAX_m));echo $last; ?>

//运行天数:
<?php echo floor((time()-strtotime(get_optio
n('swt_buildda
te')))/86400); ?> 天

//建站日期:
<?php echo get_option('swt_builddate'); ?>

 

总结

通过插入代码,你可以自由的扩展WordPress的功能。WordPress美化系列就先说到这,有机会再总结一下SEO和速度优化。这三篇文章算是对我这段时间折腾WordPress的总结。但现在,我得去深入学习一下HTML、CSS和JavaScript了。