分类目录归档:技术笔记

SimpleWords——幻灯片生成器

介绍

SimpleWords是一个HTML幻灯片生成工具,你只需要按照格式把幻灯片写在文本文档里,就可以轻松生成一个HTML幻灯片(使用浏览器打开)。SimpleWords支持Markdown和HTML标签,可以设置背景颜色。支持两种样式:

  • pure:它适用于制作简单的概括性的幻灯片:每页只有少量的文字或关键词;每页只放一张图片,或是一个视频。这种样式没有页面边框,文字和元素将居中显示。
  • rich:适合更复杂的页面布局。有页面边框,文字和元素靠左对齐。

GitHub 地址:https://github.com/greyli/simplewords

用法

设置样式

在文档第一行设置页面的样式,默认为pure样式。在两个百分号后面写上样式名称(pure或rich),独占一行,小写:

%%pure

或

%%rich

设置背景颜色或图片

在文档的最后一行设置背景颜色,默认为灰色。在两个美元符号后接上你要设置的颜色,RGB值,如下所示:

$$red

或

$$rgb(123, 45, 45)

需要注意的是,所有的字符都要是英文半角字符。所以不应该出现¥¥或是()。

文件结构

SimpleWords\
– js\
– css\
– images\
– videos\
– words.txt
– slide.py
– slide.html

  • 根目录下的words.txt是你写幻灯片的地方。
  • 你要插入的图片和视频要分别放在images和videos文件夹内。
  • slides!.py是生成你的幻灯片的程序。
  • slides.html是你的幻灯片,点击它就可以打开你的幻灯片了。

幻灯片分隔符

每一张幻灯片的分隔方式有两种:第一种,使用独占一行的五个横线分隔“—–”;第二种,使用换行符作为分隔,即一行代表一张幻灯片。两种分隔方式不可混用。当没有发现横线换行符时,采用默认的行分隔。

注意:设置样式和背景颜色的语句同样需要使用分隔符!

文字效果

支持Markdown和HTML两种标记语言(可以混用),所以你可以方便的为你的幻灯片实现你想要的效果。比如下面是一些常用的Markdown标签:

# 这是H1
## 这是H2
### 这是H3
这是一个段落。 
*这是斜体*
**这是粗体** 
***这是粗体+斜体***
一段文字后打上两个空格表示另起一行  

了解更多有关HTML和Markdown的信息:MDN HTML文档、Markdown

添加图片和视频

图片:

![alt text](images/photo.jpg) 

或

<img src="images/photo.jpg" height="600">

视频:

<video width="800" height="600" controls><source src="videos/movie.mp4"></video>

注意:当使用行分隔时,不要让标签分行。建议不要让height值超过600。

版权声明

SimpleWords基于简化了的impress.js生成。

 

日常快捷键配置:daily.ahk

这是我学习AHK以来逐渐修改形成的一个日常快捷键集合。这个脚本让我用一种高效的方式使用我的电脑。

如果你还不熟悉AutoHotkey,可以先读一下前两篇文章:

借由这个脚本,我可以:

1、删掉桌面上几乎所有的快捷方式图标,然后把桌面当成一个inbox来使用,所有当前需要的文件都放在上面。
2、减少鼠标的过度使用;避免手指的不合理操作,比如编程时右手扭曲着按方向键移动光标。
3、减少重复劳动,把选中文字——复制——点开浏览器——打开网站——粘贴——回车简化成了选中文字,按下快捷键。同时不再重复输入常用的字符。
4、玩游戏时不会被开始键和输入法打扰。
5、这个脚本还在不断完善和增加中。
6、编程,让生活更美好。

 /*
我的日常快捷键 daily.ahk
by 李辉(greyli.com)

目录
一、打开常用软件、文件和网页
二、发送常用字符
三、常用操作与组合键
四、小工具
*/


;;;;;;;; 一、打开常用软件、文件、文件夹和网页

;;;; 1、程序

;QQ Lite
:://qq::
Run D:\Program Files (x86)\Tencent\QQLite\Bin\QQ.exe
return

;Picasa 3
:://pi::
Run C:\Program Files (x86)\Google\Picasa3\Picasa3.exe
return

;Chrome
:://c::
IfWinExist ahk_exe chrome.exe
WinActivate
else
Run C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
return

;Steam
:://st::
Run D:\Program Files (x86)\Steam\Steam.exe
return

;PotPlayer
:://pl::
IfWinExist ahk_exe PotPlayerMini64.exe
WinActivate
else
Run C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe
return

;OneNote
:://o::
IfWinExist ahk_exe OneNote.exe
WinActivate
else
Run C:\Program Files (x86)\Microsoft Office\root\Office16\ONENOTE.EXE
return

;PyCharm
:://p::
IfWinExist ahk_exe pycharm64.exe
WinActivate
else
Run D:\Program Files (x86)\JetBrains\PyCharm Community Edition 4.5.4\bin\pycharm64.exe
return

;Vmware Player
:://v::
IfWinExist ahk_exe vmplayer.exe
WinActivate
else
Run C:\Program Files (x86)\VMware\VMware Player\vmplayer.exe
return

;ConEmu
:://ce::
Run C:\Program Files\ConEmu\ConEmu64.exe
return

;Everything
:://e::
Run C:\Program Files\Everything\Everything.exe
return

;Gimp
:://gi::
Run C:\Program Files\GIMP 2\bin\gimp-2.8.exe
return

;Evernote
:://en::
Run C:\Program Files (x86)\Evernote\Evernote\Evernote.exe
return

;Xmind
:://xm::
Run C:\Program Files (x86)\XMind\XMind.exe
return

;任务管理器
:://t::
Run taskmgr.exe
return

;控制台
:://cmd::
Run cmd
return

;截图
:://j::
Run C:\Windows\system32\SnippingTool.exe
return


;;;; 2、文件和文件夹

;桌面的inbox.txt
#i::
IfWinExist Inbox - 记事本
WinActivate
else
Run C:\Users\Administrator\Desktop\inbox.txt
return

;桌面的goals.txt
#g::
IfWinExist Goals - 记事本
WinActivate
else
Run C:\Users\Administrator\Desktop\Goals.txt
return

;Python文档
:://pd::
Run C:\Python27\Doc\python2711rc1.chm
return

;AHK文档
:://ad::
Run C:\Program Files\AutoHotkey\AutoHotkey_zh.chm
return

;下载文件夹
:://dl::
Run D:\Documents\Downloads
return

;回收站
:://hs::
Run ::{645ff040-5081-101b-9f08-00aa002f954e}
return

;projects
:://pr::
Run D:\projects
return

/*
秘密文件夹。
你可以把一个不想让别人看到的文件夹藏在很深的地方(比如下面的地址),然后使用一串热字符来打开它。
下面的字符只是个示例:P
*/
:://open::
Run C:\Program Files\CMAK\Support45\fpg\asd\secret\
return

;;;; 3、网页

;我的博客
:://hui::
Run http://greyli.com
return

;豆瓣
:://dou::
Run https://douban.com
return

;豆瓣fm
:://dfm::
Run https://fm.douban.com
return

;知乎
:://zhi::
Run https://zhihu.com
return

;gmail
:://gma::
Run https://gmail.com
return

;维基百科
:://wiki::
Run https://zh.wikipedia.org
return

;;hacker news
:://hack::
Run https://news.ycombinator.com/
return

;github
:://git::
Run https://github.com/lihuii
return

;Twitter
:://twi::
Run https://twitter.com/pestear
return



;;;;;;;; 二、常用字符

;;;; 1、邮箱

::@g::
Send withlihui@gmail.com
return

;;;; 2、密码(有一定的安全风险,最好不要和账号放在一起)

::@pwd1::
Send wodemima1
return

::@pwd2::
Send wodemima2
return

::@pwd3::
Send wodemima3
return


;;;; 3、其他文字

;发送当前日期
:://now::
FormatTime, CurrentDateTime,, yyyy-M-d
Send %CurrentDateTime%
return

;手机号
:://phone::
Send 1234****
return

;地址和邮编
:://addr::
Send 江苏省南京市*****(2346***)
return

;身份证号码
:://sfz::
Send 320382****
return

;银行卡号
:://bank::
Send ***
return

;我的博客
:://blog::
Send www.greyli.com
return


;;;;;;;; 三、常用操作

;用Google搜索选中的文字
!g:: 
Send ^c 
Run http://www.google.com/search?q=%clipboard% 
return 

;用淘宝搜索选中的文字
!b:: 
Send ^c 
Run http://s.taobao.com/search?q=%clipboard% 
return 

;打开一个空白记事本
!n:: 
If WinExist Untitled - Notepad 
WinActivate 
else 
Run Notepad 
return 

;使用灵格斯翻译选中的文字
!t::
Send ^c
Send !q
Send ^v{Enter}
return 

;将选中的文字发送到桌面上的Inbox.txt,然后关闭记事本
!z:: 
Send ^c
Send #i
WinWaitActive Inbox - 记事本
Send ^v{Enter}
Send ^s
WinClose Inbox - 记事本
return 

;使用Alt+j、k、l、i上下左右移动光标
!j:: Send {Left}
!l:: Send {Right}
!i:: Send {Up}
!k:: Send {Down}

;选中一行文字
!o:: Send {Home}+{End}

;选择当前位置到行首的文字 
!y:: Send +{Home} 

;选择当前位置到行末的文字 
!p:: Send +{End} 

;Alt+鼠标中键删除
^MButton:: Send {Delete}


;;;;;;;; 四、小工具

;计时器
#c:: 
InputBox UserInput, Counter, Enter a number(minutes):
IfEqual, Errorlevel, 0
{ 
 sleep UserInput * 60000
 SoundBeep
 MsgBox 时间到!
}
return

;定时关机
:://sd::
InputBox UserInput, Counter, 输入计划关机的时间(分钟):
Run cmd
WinWaitActive ahk_class ConsoleWindowClass
time := UserInput * 60
send ^{Space} ;设置英文输入
Send shutdown{Space} -s{Space}-t{Space}%time%{Enter}
return

;取消定时关机
:://stop::
Run cmd
WinWaitActive ahk_class ConsoleWindowClass
send ^{Space} ;设置英文输入
Send shutdown{Space} -a{Space}{Enter}
return

;立刻关机
:://sdn:: 
Shutdown, 1
return

;游戏模式
;禁用Windows键,保持大写锁定
#v::
Run D:\Documents\game.ahk
;game.ahk的内容如下,退出游戏时关闭这个脚本
;LWin::return
;SetCapsLockState, AlwaysOn

/*
*last edited by 李辉 2016/08/29
*/
 

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》

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

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

 

继续前进

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

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了。

WordPress美化方案:修改主题文件

 

基础知识

通过修改主题文件来实现一些外观和功能效果,这样避免了使用大量插件,不会影响加载速度,也没有兼容性的问题。

这个系列的另外两篇:
WordPress美化方案系列:插件篇
WordPress美化方案系列:插入代码

主题文件编辑入口:仪表盘——外观——编辑
主题文件的构成:

主题文件主要构成

主题文件主要构成(点击查看大图)

下面一些应用示例。

 

一、修改页脚的文字

编辑主题文件:footer.php
找到相关的文字(一般是“自豪地采用WordPress”或是”Proudly by WordPress“),可以删除或修改。然后点击更新文件。

 

二、在每一页加入版权声明

编辑主题文件:single.php
在图中位置插入代码,会在文章下方生成一个文本,效果见第二张图。

版权声明代码

版权声明代码(single.php)

版权声明效果图

版权声明效果图

 

三、文章字数统计

编辑主题文件:functions.php,single.php
在functions.php末尾插入下面这段代码(一个统计文章字数的函数):

//字数统计
function count_words ($text) {
global $post;
if ( '' == $text ) {
 $text = $post->post_content;
 if (mb_strlen($output, 'UTF-8') < mb_strlen($text, 'UTF-8')) $output .= '文章字数:' . mb_strlen(preg_replace('/\s/','',html_entity_decode(strip_tags($post->post_content))),'UTF-8') . '字';
 return $output;
}
}

然后在single.php需要显示字数的地方插入:

<?php echo count_words ($text); ?>

 

四、个性化评论框

编辑主题文件:comments.php
这里可以实现的功能主要有:

  1. 自定义评论区的各个字段
  2. 增加或删除输入框,修改字段,增加提示字符
  3. 更改样式

首先在comments.php里加入一个评论框函数(comment_form()):

<?php comment_form($args); ?>

$args是你想要修改的字段或输入框,用来覆盖原有的内容。

比如你想修改评论框的标题(一般为“留下评论”)。通过增加下面这段代码即可实现:

<?php $args = array('title_reply'=>'说说你的想法吧!')?>
<?php comment_form($args); ?>

其中‘title_reply’是代表评论框标题的参数,后面是你要设置的内容。
类似的,可以在数组(array)加入更多参数,比如评论框上面的文字(’comment_notes_before)、评论框下面的文字(’comment_notes_after’)。更多的参数见官方文档。

评论输入框通过传入$fields参数实现,但直接放到$args里更方便些:

<?php $args = array(
'fields' => array(
 'author' => '<p class="comment-form-author"><label for="author">昵称</label><input type="text" placeholder="姓名或昵称" aria-required="true" size="30" value="' . esc_attr( $commenter['comment_author'] ) . '" name="author" id="author"><span class="required">*</span></p>',
 'email' => '<p class="comment-form-email"><label for="email">邮箱</label><input type="text" placeholder="不想填的话可以用null@null.com" aria-required="true" size="30" value="' . esc_attr( $commenter['comment_author_email'] ) . '" name="email" id="email"><span class="required">*</span></p>',
 'url' => '<p class="comment-form-url"><label for="url">站点</label><input type="text" placeholder="个人主页网址,可留空" size="30" value="'.$comment_author_url.'" name="url" id="url"></p>' 
)?>

下面是我博客上的评论框代码(效果见下方评论区):

<?php $args = array(
  'title_reply'       => __( '说说你的想法吧!' ),

  'comment_notes_before' => '<p>邮箱不会被公开,必填项已用<span class="required">*</span>标出。',

  'fields' => array(
 'author' => '<p class="comment-form-author"><label for="author">昵称</label><input type="text" placeholder="姓名或昵称" aria-required="true" size="30" value="' . esc_attr( $commenter['comment_author'] ) . '" name="author" id="author"><span class="required">*</span></p>',
 'email' => '<p class="comment-form-email"><label for="email">邮箱</label><input type="text" placeholder="不想填的话可以用null@null.com" aria-required="true" size="30" value="' . esc_attr( $commenter['comment_author_email'] ) . '" name="email" id="email"><span class="required">*</span></p>',
 'url' => '<p class="comment-form-url"><label for="url">站点</label><input type="text" placeholder="个人主页网址,可留空" size="30" value="'.$comment_author_url.'" name="url" id="url"></p>' 
),

 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true">' . '</textarea></p>',

);?>

<?php comment_form($args); ?>

你可以只更改你想要设置的内容,删掉其他的内容。不要忘记把参数放进函数里(最后一行)。

具体内容见官方文档:Function Reference/comment form

 

五、修改边栏小工具

文件位置:wp-includes/widgets
样式文件:style.css

举两个小例子:

  1. 删除功能里的WordPress.org字段
    找到wp-includes/widgets文件夹下找到class-wp-widget-meta.php,打开后找到无序列表<ul></ul>里的四个<li>标签,删除最后一个即可。

  2. 修改日历中有活动日期的显示样式
    默认的日历样式太朴素,看不出今天的日期,有活动的日期也不够明显。在style.css中加入下面这段,即可使有发表文章的日期数字显示为粗体,绿色。
#wp-calendar tbody a { /*当天发表文章的*/
        font-weight:bold;
        color:green;
}

      其他的比如设置今天的日期数字为斜体加粗体:

#wp-calendar #today { /*今天*/
        font-weight:bold;
        font-style:italic;
}

 

总结

以上只是给出了几个修改主题文件的示例,具体还有很多内容可以探索,从官方文档开始新旅途吧!

 

WordPress美化方案:插件篇

使用WordPress一年了,逐渐形成一套格式外观美化的方法。在这里做个总结,也给新手做个参考。

基础知识

整个美化方案由三种方法组成,一个是安装插件,这个就不用多说了。另一个是修改主题文件。最后一种是插入代码。

另外两篇请见:
WordPress美化方案系列:修改主题文件
WordPress美化方案系列:插入代码

 

一、文章显示概要

插件:Easy Custom Auto Excerpt
插件限制了字号,但是可以通过插入代码的方法避开。安装“Easy Code Placement”插件后,就可以在插件设置里readmore字段设置的地方插入HTML代码,比如下图中是我插入了按钮标签后的效果。

readmore按钮

readmore按钮

 

二、文章固定链接

插件:WP Slug Translate
这个之前说过,首先在设置-固定链接里把格式设为文章名,然后见这里。另外要注意的是作者提供的翻译API有数量限制,建议自己按照作者的说明注册一个。

 

三、图片显示

插件:Easy FancyBox
点击这篇文章的任意图片查看效果。
需要在插入图片的时候将图片链接到媒体文件。

图片设置

图片设置

四、代码显示

插件:Crayon Syntax Highlighter
一些必要的设置:在插件设置里勾选“在代码中进行HTML转义”。

插入代码设置

插入代码设置

然后编辑代码的时候,选中代码,然后选择“预格式化(即pre)”

插入代码

插入代码

五、手机站点

插件:Wptouch
大部分主题在手机上阅读不方便,使用wptouch可以优化排版。默认的免费主题就挺好,注意关联一下菜单。

本站的手机页面

本站的手机页面

六、评论区添加表情

插件:silver_smilies(作者的博客)
没有找到好用的表情插件(多说?),发现了这个,觉得还算简单好用。支持自定义表情包。目前还没解决的问题是如何把它放到评论输入框的下面。
用法:点击这里下载压缩包,如果上传安装失败那么把文件解压缩后放到wp-content—plugins下,然后在插件管理界面启用。另外,我还在压缩包里放了找到的三套表情包:)使用时用表情包里的图片替换face文件夹里的全部图片(感谢原作者)。

表情包1

表情包2

表情包3

三套表情包

 

 七、其他插件

其他几个插件使用都没什么难度,就不一一介绍了。
相关文章:Yet Another Related Posts Plugin
文章访问量: WP-PostViews
返回顶部:Dynamic To Top

 

总结

插件开启的过多会影响网页的加载速度,所以尽可能的通过修改主题文件来实现简单的功能。有时间再总结一下如何优化wordpress速度。

impress.js——用HTML“写”幻灯片

一、我做的幻灯片

先看一下我用impress.js做的幻灯片吧!
加载可能会有些慢。如果打不开那就看一下作者的demo吧。
注:文字摇晃的特效使用的是CSSHake,视频用Chomp(ios)制作。

 

二、概述

impress.js是一个免费开源的JavaScript库,可以用来制作非常酷的幻灯片。如果你之前接触过Prezi,肯定还记得那让人赞叹的特效吧。而impress.js就是受Prezi启发做成的。

常见的幻灯片工具有微软的PowerPoint【1】,苹果的Keyword等。不常见的有Prezi等。除此之外,还有一些通过HTML,CSS,JavaScript等前端语言制作的工具,主要有impress.js,reveal.js(这个有时间探索一下),deck.js,html5slides。其中impress.js最让人印象深刻(impress!),使用它可以你可以制作出许多特效:三维空间的无限延伸,3D效果,任意角度的旋转,任意大小的缩放,把一页幻灯片放在三维空间的任一位置。算了,语言是苍白的,看看作者的demo吧。

虽然效果很好,但impress.js也有一些缺点:比如编辑方式太繁琐(其实是需要学的东西很多……),尤其是想要获得一些特殊效果时。总的来说,impress.js比较适合以演讲内容为主的展示(参考高桥流简报法),单页只放一个名词或句子,或是一张图片,这样会带来比较出众的效果。可以用它来做一个词云图,前提是演讲水平够好。

先泼一盆冷水,工具是为内容服务的,如果你没有什么好的内容——要么是有质量,要么有意思,那么幻灯片做的再炫也没什么用。当然,如果你只求酷炫,那当我没说。

 

三、前提要求

需要一些HTML和CSS的基础知识(会JavaScript更好),没有的话花几个小时到w3school(中文)或MDN上了解一下。

按照作者在代码注释里说的,你不光得有HTML和CSS的基础知识,还得有设计的眼光。因为impress.js没有默认的风格或样式,一切都得你自己来。而且作者不希望所有的impress.js展示都像demo一样,所以,明白了方法就自己从头做起,你会体会到很大的乐趣的!

英文好的还是去看源代码吧。作者的注释很详细,也很有趣。

 

四、文件的使用

新手可能会对文件有些疑问,所以在这里说明一下。不需要可直接跳至下一节。

下载

你可以到项目的Github页面下载文件,或者直接点击这儿下载。解压后会得到一个文件夹,双击打开根目录下的index.html就可以看到作者的demo了。

 

主要文件组成

impress:

  • js
    • impress.js(JavaScript文件,提供特效支持)
  • css
    • impress_demo.css(CSS文件,提供样式支持)
  • index.html(HTML文件,幻灯片的入口,也是你写入幻灯片的地方)

 

如何“制作”幻灯片

你要做的就是创建一个HTML文件(使用文本编辑器比如Notepad++),demo对应的HTML文件就是根目录下的index.html。然后把CSS文件和JS文件引入你的HTML文件里(见“初始化”),接着把你的幻灯片按照一定的属性设置写进HTML文件里(见“创建幻灯片”)。最后用浏览器把这个HTML文件打开就可以了。

 

五、初始化

头部(head)

先把文件下载下来,然后创建一个HTML文件,把下面的head放上去:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />    
    <meta name="viewport" content="width=1024" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <title>impress.js</title>
    <link href="css/impress-demo.css" rel="stylesheet" />
    <link rel="apple-touch-icon" href="apple-touch-icon.png" />
</head>

头部信息经过删改。

 

错误反馈

接下来是一个错误反馈的class,当浏览器不支持时会显示,可以改写错误信息的内容。也可以不加。

<body class="impress-not-supported">
<div class="fallback-message">
    <p>Your browser <b>doesn't support the features required</b> by impress.js, so you are presented with a simplified version of this presentation.</p>
    <p>For the best experience please use the latest <b>Chrome</b>, <b>Safari</b> or<b>Firefox</b> browser.</p>
</div>

 

编辑幻灯片区域

创建一个id为impress的div,待会所有的演示文稿都要放在这个div里:

<div id="impress">
</div>

 

操作提示

下面这两段分别用于在电脑和移动设备上提示用户怎么控制幻灯片:

<div class="hint">
    <p>Use a spacebar or arrow keys to navigate</p>
</div>
<script>
    if ("ontouchstart" in document.documentElement) {
        document.querySelector(".hint").innerHTML = "<p>Tap on the left or right to navigate</p>";
}
</script>

 

调用JS文件声明

这两行放在文件的最后。声明对impress.js的引用,并且初始化impress.js。

<script src="js/impress.js"></script>
<script>impress().init();</script>

别忘了关闭上面的几个标签:

</body>
</html>

点击这儿看完整的模板文件。

 

六、创建幻灯片

impress.js创建了一个三维空间,所有的幻灯片都有各自的位置坐标(x,y,z)。整个空间的中心是原点(0,0,0)。其他的幻灯片或文字都是相对于这个原点来设置位置的。(中心不一定是第一张幻灯片)

像之前提到的,所有的幻灯片都要放在一个id=impress的div里。而且所有幻灯片都使用一个div。设置幻灯片的各个参数如下:

id(可选)——可以用来表示幻灯片的顺序,格式是id=“step-N”,(比如id=”step-2″,序号为2)。如果不指定id的话,幻灯片按照代码从上往下的顺序出现。
class(必须)——通常有两个值,“step”表示一个步骤,元素透明显示,“step slide”有幻灯片白色方框。

其他的调整选项都以data开头。

位置属性

data-x——表示x轴坐标
data-y——表示y轴坐标
data-z——表示z轴坐标

坐标的设置,如图所示。需要注意的是Y轴向上是负值。简单的理解就是:往右(x),往下(y),往上(z)是正值;相应为负值。

坐标

坐标方向

常用效果

data-rotate——表示旋转,分别有data-rotate-x,data-rotate-y和data-rotate-z(同data-rotate),值表示旋转的度数。正值表示按照相应的轴顺时针旋转,负值则是逆时针。
data-scale——表示幻灯片的大小,如data-scale=”4″表示比其他幻灯片大四倍

 

不常用属性

data-transition-duration——幻灯片切换的时间,默认为1000,单位为ms(1000ms=1s)

data-perspective——表示视角,设为0则取消3D效果。默认为1000。更改前最好知道你在干什么,详情见:https://developer.mozilla.org/en/CSS/perspective

 

示例

第一个div创建了一个有白色底框的幻灯片,位置在第四象限,沿x轴顺时针旋转90度。文本是100px大小的“Hello, world!”。

    <div class="step slide" style="font-size:100px" data-x="0" data-y="0">
        <q>Hello, World!</q>
    </div>

 

第二个div创建了一个透明的幻灯片,位置在第一张幻灯片的右上方,绕z轴旋转90度。

    <div class="step" data-x="2000" data-y="-2000" data-rotate-z="90">
        <q>Hello, You!</q>
    </div>

第三个div创建了一个透明的幻灯片,位置在第二张下方。

    <div class="step" data-x="2000" data-y="-2000" data-z="-5000" >
        <q>Hello, Boy!</q>
    </div>

第四个div创建了一个透明的幻灯片,位置在第三张绕y轴旋转90度的地方,2倍大小。

    <div class="step" data-x="-2000" data-y="-2000" data-z="-5000" data-rotate-x="180" data-scale="2">
        <q>Hello, Girl!</q>
    </div>

点击这里查看这四张幻灯片的效果。

 

全景图

最后一个div是一个全景图:

    <div id="overview" class="step" data-x="3000" data-y="1500" data-scale="10">
    </div>

以上这些属性可根据需要调节,只有x和y坐标是必须的。

 

七、插入媒体问题

使视频和音乐在进入幻灯片时自动播放

html5可以使用<video>和 <audio>标签插入音视频,控制方式有三种:

controls

显示视频控制条

loop

自动播放,循环播放

autoplay

 自动播放

代码如下:

<video width="320" height="460" autoplay>
    <source src="video/test.webm" type=video/webm>
</video>

音频的代码类似,只要去掉宽高设置,更改文件的type就可以了。

在impress.js中,把视频标签放入DOM限制了媒体的autoplay。这时我们可以在impress.js中插入这段代码:

var videoStep = document.getElementById("video-step");
var video = document.getElementById("video");
videoStep.addEventListener("impress:stepenter", function(){
    video.play();
}, false);
videoStep.addEventListener("impress:stepleave", function(){
    video.pause();
}, false);

代码解释:

1~2行:设置了两个变量,分别代表幻灯片和视频文件,后面分别填上相应的id。
3~5行:监听当前幻灯片上的事件,如果进入幻灯片就执行相应的函数(即播放视频文件)
6~8行:同3~5行,这次是设置离开幻灯片时执行的函数(即暂停视频文件)。

然后把有视频的那张幻灯片的id设为video-step,视频的id设为video。

<div id="video-step" class="step" data-x="-50000" data-y="2000" data-z="-60000" data-scale="6">
    <video id="video" width="420" height="340" autoplay>
        <source src="video/IMG_1254.webm" type="video/webm">
    </video>
</div>

这样视频就可以在进入到那张幻灯片时开始播放,进入下一张幻灯片时就自动暂停了。

 

一张幻灯片里放入多个视频或音频

以放两个视频为例:

第一步:
在上面那段JS代码里定义两个视频文件的变量(比如video1,video2):

var video1 = document.getElementById("video-1");
var video2 = document.getElementById("video-2");

第二步:
进入幻灯片时执行的函数变更为:

videoStep.addEventListener("impress:stepenter", function(){
    video1.play();
    video2.play();
}, false);

离开幻灯片时执行的函数相应修改;

第三步:
HTML文件设置相应的id。

 

在不同幻灯片里分别放入视频

以在三个幻灯片中放置视频为例:

  1. 在impress.js重复插入三个上面那段代码;
  2. 改掉变量名称(videoStep和video);
  3. 相应地更改其他位置的变量名;
  4. 修改相应的id名称(video-step和video);
  5. html文件设置相应的id。

插入音频的方法,以此类推。

 

背景音乐

上面的方法只适合在某一页幻灯片上放置媒体,而如果想要全程播放背景音乐的话,就可以把audio标签放在整个编辑幻灯片(id为“impress”)的div之外。同时,你还可以在任一页控制背景音乐的暂停与播放。方法相同,也是插入上面那段JS代码,更改相应的变量和id,然后设置相应的操作,具体见上面那段代码的解释。

 

编辑JavaScript

我还没开始学JavaScript,能给的建议就这几点:

  1. 保持相同的缩进;
  2. 语句后加上分号;
  3. 变量名不能重复;
  4. 另外,HTML里的ID也不能重复

 

八、头脑风暴

把impress.js和其他的前端工具搭配使用,你会获得更加有趣的效果,比如reveal.js的作者推荐的许多有趣的前端项目。再比如CSShake(可以让文字或图片实现各种摇晃效果),参考我之前写过的介绍和示例页面。或者是做出一个词云图来,都是很好的创意。当然,你得会演讲。

impress+word cloud

impress+word cloud

像demo里说的,唯一的限制就是你的想象力,快去探索吧!

 

九、Last but not least

把作者的最后一大段注释翻译过来吧:

“现在,完成你第一个impress.js幻灯片的所有知识,你差不多都有了。但是在你开始之前……
啊,你已经从Github复制了代码?
你已经打开编辑器粘贴了上去?
快停下!
幻灯片不是这样做的。这些只是代码。实现这些创意之前你得在心里完成它们。

如果你想做出好的幻灯片,就拿出铅笔和纸。关掉电脑。打个草稿,写写画画,通过头脑风暴把你的创意在纸上展现出来。试着把你想展示的东西做出个思维导图。这会让你离待会你要用impress.js实现的排版越来越近。只有当你把你的展示在纸上做好了,再回到代码前。太早写代码没什么用,因为那样你只会把你的时间浪费在和没用的点坐标搏斗上。

如果你觉得我疯了,那么请你把你的手放在一本叫做《展示的哲学》(”Presentation Zen”)的书上。这本书完全是关于如何创建让人赞叹和着迷的幻灯片的。

好好想想,如果你没有什么有趣的东西要表达,impress.js可能帮不了你什么。”

 

十、附录

作者的Twitter:@bartaz
项目Github地址【https://github.com/impress/impress.js】

 

注释

【1】因为大部分人都会用“PPT”代称幻灯片,可是“PPT”本身指的是用微软的演示文稿工具PowerPoint做出来的幻灯片(其生成的文件格式默认为ppt),而英文里这个在做展示/报告(Presentation/Slide Show)时用的东西一般称作Slide,翻译过来是幻灯片或是演示文稿。本文统一称为幻灯片。

浏览器使用技巧

很多人觉得浏览器没有什么技巧,不就是个上网的工具嘛。但事实不是这样,拿用电脑来说,会开关机,上网,玩游戏是第一层;懂得各种技巧,熟悉各种操作是第二层,理解操作系统原理和硬件运行机制,进而运用原理更好的使用电脑是第三层……我今天要谈的就是对浏览器的第三层应用。当然,上面还有很多层:)

其实这篇文章的重点不在技巧,而是对网页和浏览器原理的实践。这些技巧都是建立在对这些原理的理解上。文章分三部分。分别是对构成网页文件的介绍、在浏览器中访问这些文件的方法、技巧示例。同时,这篇文章也形成了一个完整的学习过程。也就是:理解基础知识——尝试和实践——探索和应用。

提前剧透一下这篇文章能教会你什么:

  • 不使用客户端在大多数音乐网站上下载音乐(比如豆瓣电台,百度音乐盒,酷我等等)
  • 破除网络课离开页面自动暂停视频的限制
  • 破除网页弹窗强制登记手机号的限制
  • 破除网页的文本复制和图片保存限制
  • 修改网页内容

事实上,知道了原理,你能做的事情远不止这些。

 

一、网页

假设你有一台电脑,安装了某个浏览器。你打开浏览器,在地址栏里输入了google.com,按下Enter,显示访问不了。好吧,这不好笑。换个例子,你又重新输了个网址:withlihui.com,也就是我的博客。按下Enter后屏幕上显示出了我的博客的主页。这中间发生了什么?(域名服务器之类的内容就先跳过,跟这篇文章没有太大关系,有机会再写一篇介绍一下。)

总的来说,你输入的地址其实可以看作是一个文件地址(脑海中浮现资源管理器地址栏),只是这个文件存放在我租用的服务器上面。你告诉浏览器要访问的文件地址,然后它读取了这些文件并显示出来。

一般的网页是由HTML文件、CSS文件以及JavaScript文件组成的,这三个文件共同合作,分别负责实现网页的基本内容(content)、页面样式(style)、功能效果(function)。按照知乎用户胖胖小的说法,如果把网页看作一个句子的话,HTML是名词,CSS是形容词,JavaScript是动词。好了,知道这么多就可以了,想知道的更深入一点可以去看w3school(中文)或MDN的文档。

 

二、浏览器

浏览器其实可以看作是一个文件查看器,事实上,它确实也可以读取本地文件,支持mp3,mp4,txt,pdf等文件。只不过一般用它来它读取构成网页的文件(HTML、CSS、JavaScript等),你在地址栏输入了一个文件地址(网站地址),浏览器找到那个地址上的HTML文件,然后读取相应的CSS和JavaScript文件,把网页显示出来。更重要的是,你还可以通过浏览器查看这些文件,也就是源代码。我下面讲到的技巧都是基于这一点上的。

本文以Chrome为例,其他浏览器方法大致相同。在浏览器界面按下F12,或是右键点击检查( Ctrl+Shift+I (Windows) 或 Cmd+Opt+I (Mac)),这时就会打开开发者工具(DevTools),如下图所示:

devtool

Chrome开发者工具(devtool)

几个下面示例会用到的标签含义:
Elements:HTML代码(上半部分)和CSS代码(下面的Styles)
Resources:网页文件所用到的资源,包括文件、数据库等。
Network:网页的加载情况,包括加载网页的各项请求和下载的资源,以及相应的时间。

标签左边的两个图标:
箭头:按下这个图标后,再在网页上点击一个元素,会查询到相应的HTML代码。(上图红色圈出)
移动设备:按下这个图标进入移动设备显示模式。

 

三、技巧示例

保存图片

大多数时候下,我们使用右键另存为来保存图片。可是有的时候,网站为了保护版权或是其他原因而“遮蔽”了这个功能,比如500px上的照片。

500px

500px上的图片

这时我们可以在开发者工具里用小箭头选择这个图片,找到相应的代码位置,在图片代码上点右键选择“Open link in new tab”,然后就可以下载了。

 

pic code

图片对应的html代码

另外,在Resources的Images项里,还可以找到网页上加载的所有图片(大部分不是全尺寸原图)。

所有图片

网站用到的所有图片

去除文字复制限制

有些网站限制了右键和选择文字的功能,这主要是通过JS代码来实现的。使用开发者工具,可以很容易的破除这种限制。比如在这个网页上,相关的功能都被屏蔽了。打开开发者工具,选择下方Styles标签旁边的Event listener。可以看到下面有很多被监听的事件,其中contentmenu代表右键菜单,selectstart代表选择文字。

event listener

event listener

把这两个事件下面的document去掉(点击remove),这时页面就恢复正常了。

 

保存网页为pdf

有时候我们想把网页存成pdf打印,但电脑又没有连接打印机,刚好也没有安装相应的插件,这时开发者工具就派上用场了。

打印示例

打印我的博客主页示例

在想打印的页面按下Crtl+P,在预览页面上右键打开检查,找到图中的src属性,复制src的值(比如图中的chrome://print/4/0/print.pdf),然后粘贴在地址栏里打开就可以下载了。

 

保存音频

有时我们想下载某个音频,网站却没有提供下载选项,除了下载插件,也可以使用开发者工具来完成。在播放音乐之前,打开开发者工具中的Network标签,然后刷新一下页面(F5),开始播放音乐,这时可以看到加载的资源里有一条时间线很长的记录,那个一般就是你要找的音频文件。照旧,在那条记录上点击右键,选择“Open link in new tab”,会开始自动下载和播放。

 

音乐下载示例

下载豆瓣FM音乐

对有些使用特殊方法来引用资源的网站无效,目前测试成功的有豆瓣FM、百度音乐、酷我音乐、谷歌翻译录音。

 

修改网页信息

我们可以在本地修改网页上的信息。打开开发者工具,使用查询箭头点击页面上你要修改的字段,比如说百度首页的“百度一下”,定位到右边HTML代码中相应的位置。

修改百度首页的字段

修改百度首页的字段

双击“百度一下”字段,修改它,然后按下Enter键,就变成了下面这样:

效果展示

修改后

再比如,定位到搜索框上面的图片,然后修改图片的src属性,将后面的值修改成google首页的图片地址(如果想要修改为本地图片的话,可以把网页下载下来,不细说了)。按下Enter就成这样了。

效果2

当然,除了和别人开玩笑外太大用处。一刷新就没了。

 

破除网络课离开页面暂停视频限制

一定有人很期待这个功能吧。如果课很好还是认真听一听(比如周海宏的音乐鉴赏)比较好,很烂的话就往下看吧。方法同样很简单,打开开发者工具后,依然是通过小箭头选择工具选择视频元素,定位到代码。然后清除id的内容,再按下回车就成功了。

video example

双击红圈中的id值,删除后回车

原理就是,通过清除id,切断了页面元素(视频)和控制它的代码的联系(JavaScript),具体下一小节。另外要说明一下的是,刷新后网页代码会还原,所以需要再重新清除一下。

 

去除叠加窗口

这条还是很有用的,有了前面的基础知识,我们已经知道了网页的基本构成,也学会了如何查看网页的源代码。那么有一天我们想在某网站上下载一个文件,越过层层的障碍,注册了账户,添加了各种信息,结果回到下载页面又让我注册手机号……而且还没有关闭窗口的按钮,太流氓了。不仅如此,还定期显示这个窗口。

窗口示例

某网站上跳出的窗口

我是不会让流氓得逞的。定位到相应的HTML源代码,这些窗口在HTML是一个块(div),通过相应的class或id连接到对应的JS和CSS代码,我用小箭头工具选择填手机号的小窗口,然后发现整个窗口对应(最外层)的class是PhoneCertificationModal,清除掉,按下enter就会发现窗口不见了(如果无效可以再把id的值也清除掉)。

去掉窗口

去除窗口

其实窗口并没有去除,只是因为没有了JS和CSS代码的支持,它就失去了页面效果,变成一堆字扭在一起,跑到页脚去了。

去除样式的效果

失去了css和js支持的孤单的html代码

可是网页这时是一片灰色,遮住了想要点击的内容。这时再用同样的办法,点击小箭头选择这个叠加的窗口,把相应的class清除清空。这时页面就恢复正常了。

和上面的更改网页信息一样,修改了之后只要点击刷新,网页就会恢复到原来的状态,所以不要害怕会玩坏:)

 

去除WordPress插件限制

比如说显示文章概要的插件会限制你readmore字段的字号,假如你想要设置的话就得花钱升级。这时可以在字段里插入HTML代码,自己设置字号大小。

去除插件限制

去除文章概要插件的字号限制

很多论坛的评论就支持少量HTML代码,再早一些,有些网站没有限制评论支持的HTML代码,导致很多搞笑的事情出现,比如说占满整个屏幕的大字……

 

后记

以上这些内容建立在我现有的知识水平上,所以讲得还不够完善,欢迎指正。希望这篇文章能给感兴趣的人作一把小小的梯子(如果帮到了你,请告诉我)。你可以从下面的链接开始新的学习路程。

 

进阶

这些地方会给你提供更多帮助:
Chrome DevTools 文档【https://developers.google.com/web/tools/chrome-devtools/】
MDN(Mozilla 开发者网络)【https://developer.mozilla.org/zh-CN/】w3school【http://www.w3school.com.cn/index.html】

 

Python入门书评价与总结

从开始学习Python以来,读了几本入门书,在这里做一些总结,给需要的人做个参考。

几个个人观点

视频/书?

一开始看了Udacity的Python入门课程,虽然也了解了一些基本概念,但最终还是没有什么具体的收获(但认识到了Python的神奇……)。因为视频不会仔细的讲语法,也没有具体的指导。视频更偏向于实现项目,而不是语言的细节。所以,一开始建议还是从书开始。

 

电子书/纸质书?

在iPad上看了《ThinkPython》前十章,最后却把书打印出来重看了一遍。电子书虽然有好处,便携啦,方便查词啦,但弊端太大。比如摘录不方便查看,做笔记也不方便。所以,一开始建议从纸质书开始。

 

译本/原版?

一开始可以暂时阅读译本,了解的差不多后就该看原版书了。一来译本的质量常常很差,二来平时查google都是英文内容,一些关键的词汇中英文混淆会导致概念理解不清。所以,一开始建议从译本开始,但要尽早脱离译本。

 

评价与总结

(按阅读顺序排列)

《A Byte of Python》(《Python简明教程》)

评价:概念初认识

网站:http://python.swaroopch.com/

第一本Python书(中文译本),写的很简单,没有过多涉及细节。也许是因为这是接触Python的第一本书,所以读起来不是很顺畅。很多东西看得云里雾里。

 

《Learn Python the Hard Way》(《“笨”方法学Python》)

评价:入门的练习册

网站:http://learnpythonthehardway.org/book/

看这本书时,已经看完了《Python简明教程》,但对Python还是没有什么具体的了解。这本书是在网站上读的。对于新手来说还不错,它借由大量的誊写代码而实现对Python语法的记忆和掌握,作者给的一些建议也都很中肯。虽然最后几课的作业我没有完成,但是命令行游戏倒是完成了,收获了不少乐趣。

 

《Core Python Programming》(《Python核心编程》)

评价:大而全的参考书和习题集

网站:http://corepython.com/cpp2e (不提供在线阅读)

我做的习题答案:https://github.com/lihuii/CorePythonProgrammingExercise-

亚马逊买的第二版中文译本。书中错误比较多,大部分不影响阅读,少数几个课后题目让人无法理解。开始看这本书,才有了一些豁然开朗的感觉。也许是因为看了前两本书的缘故,书里的内容大部分都可以看懂。而且一些之前的困惑的都在这里找到了答案,比如说sort方法不返回整理后的列表,“if __name__ == ‘__main__:’”的意思等等。这本书目前还没有看完,一边做题一边看,目前看到了第十三章。

 

《Think python》

评价:进阶必备的思考书

网站:http://greenteapress.com/wp/think-python/

这本书是和《Python核心编程》一起看的,当时坐在回家的车上,半天就看完了前几章。英文原版读起来很顺畅,作者有时很幽默,有时也会有思考。本书的副标题是“How to think like a computer scientist”,书中普及了很多通用的编程思想,而且每一章节后面都有debugger和术语解释。很多容易被忽略的或是关键的细节作者都会提到,要是早些看这本书,我会省下不少力气。

待读:

《Dive into Python》
《invent with python》

 

推荐阅读顺序

  1. Learn Python the Hard Way(肌肉记忆)
  2. Think Python(思考课)
  3. Core Python Programming(思考+实践+延伸)

 

另外,编辑器推荐使用PyCharm,超好用!

pycharm

pycharm

CSShake——元素摇晃特效

效果演示

所谓的摇晃特效,就是当你把光标移到文字上的时候……我可以轻微的晃,慢慢的晃,猛烈晃,疯狂晃,甚至左右晃,上下晃,旋转着,闪烁着 ……

摇晃的驴子

光标移到驴子身上就可以摇晃它

前段时间在家没事做,突然想到之前看到的CSS特效,觉得文字摇晃很好玩。google了一下,原来是一个开源的css包。心血来潮,便想做个网页试一下。

下面是css shake的用法介绍,整理翻译自github页面的介绍:
首先在html里声明包含css文件,最简单的方法是通过CDN加载(你也可以将https://csshake.surge.sh/csshake.min.css下载到本地然后加载):

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/csshake/1.5.3/csshake.min.css" />

然后通过添加class来使用不同的效果:

<div class="shake">Foo</div> 
<div class="shake shake-hard">Bar</div> 
<div class="shake shake-slow">Baz</div> 
<div class="shake shake-little">Qux</div> 
<div class="shake shake-horizontal">Egg</div> 
<div class="shake shake-vertical">Ham</div> 
<div class="shake shake-rotate">Snake</div> 
<div class="shake shake-opacity">Apple</div> 
<div class="shake shake-crazy">Orange</div>

还可以通过增加class来控制动画的状态(比如一直摇晃,还是光标放上去摇晃)

<!-- Freeze the animation at that point when :hover --> 
<div class="shake shake-freeze">Hello</div> 
<!-- Continuous animation instead on :hover --> 
<div class="shake shake-constant">Hola</div> 
<!-- and stop when :hover --> 
<div class="shake shake-constant shake-constant-hover">Halo</div>

另外,还可以自定义摇晃类型,具体的用法请参考 https://elrumordelaluz.github.io/csshake/