印记一瞥

Boyuan's Blog

OpenStreetMap 项目笔记

本篇笔记既是自己在OSM中参与编辑的一个备忘,也可以作为新手入门编辑工作的一个教程。

法律警示

在中国大陆地区参与OpenStreetMap绘制很可能是非法行为。请参阅法律警示页面:WikiProject_China 您需要对自己的行为负责。

前言与入门

本人也是近期才接触到这个项目,内容难免有缺漏不当之处,欢迎指出。 OpenStreetMap(简称OSM),是一个以自由地图信息为基础的网上地图协作计划。其所有地图信息目前以Open Database License授权公开,信息来源为各国政府机构及商业、非商业组织、个人贡献,并提供在线/离线地图编辑软件、接口与功能供公众进行地图编辑。 如果想比较深入地参与这个项目,你可能需要以下技能/知识/条件。您不需要掌握全部,但如果您对以下内容彻底没有概念,编辑过程将更加费力。

  • GIS 常识、地理常识
  • 计算机技术(理解 XML/JavaScript/Java)
  • 一台拥有现代浏览器的计算机,或者已经安装了 Flash 软件,或拥有 Java 运行环境
  • 一定的英语阅读理解能力
  • 一定的互联网协作常识(Wiki / 电子邮件 / 邮件列表)
  • 一台智能手机和/或专业GPS设备

项目特点

  • 信息公开,自由分享,可在原信息基础上进行二次开发并获利,唯一要求是基于信息的二次开发成果必须以相同授权协议公开(详情参见ODbL协议内容);
  • 维基式协作,有数种编辑工具可供选择。编辑工作可以很简单地点点鼠标敲敲键盘完成,也可以使用高级工具得到强大的功能;

互联网资源

https://www.openstreetmap.org/ OSM 的主站。编辑活动可以从这里开始。

http://wiki.openstreetmap.org/ OSM 维基页面。基本上以英文写成,包含绝大部分日常编辑的说明与指导。

http://wiki.openstreetmap.org/wiki/WikiProject_China OSM 中国计划的维基页面。在编辑中国大陆地区的地图之前,请确保至少将其内容浏览一遍。

https://lists.openstreetmap.org/listinfo/talk-cn 中国大陆地区的OSM讨论用邮件列表,包含已存档的历史邮件。

入门建议流程

我个人建议的入门流程如下:

  1. 了解法律警示内容,清楚明白参与编辑的可能后果;
  2. 阅读百度百科和维基百科的 OpenStreetMap 词条;
  3. 在 OSM 主站上创建一个帐号并登陆,完成iD编辑器的使用教程;
  4. 浏览一遍 OSM Wiki 的中国项目页面,了解常识性信息;
  5. 在浏览器 iD 编辑器下查看北京、上海等大城市的编辑现状以及日本、西欧等国的编辑现状,了解其他人的编辑方式;
  6. 从自己身边开始,在不破坏已有成果的前提下尝试编辑地图;
  7. 查阅 OSM Wiki 的更多资料,并参阅已有地图,了解复杂结构与关系的绘制方式;
  8. 如果身处国外,可以利用 GPS 设备或具有 GPS 功能的手机尝试记录 GPX 轨迹,了解 GPX 数据的使用方式。

建议编辑原则

  • 在中国大陆地区参与项目意味着您已经充分了解可能的风险。
  • 不要上传、记录可能危害国家安全的任何地理信息。
  • 不要上传、记录与军事与国家安全相关的任何地理信息。
  • 不要上传、记录敏感地区的地理信息。

内容未完成,可能会长期更新。

PyQt5 学习笔记

长期更新中,敬请期待……

学习资料整理

PyQt5

PyQt4/5

Eric IDE


笔记

有关app.exec_()的下划线问题

QApplication 类的下划线方法 exec_() 来自 PyQt4 以及以前,因为在 Python 2 中,exec 是一个 Python 关键字。这个问题在 Python 3 中已经解决,故如果你的代码只在 Python 3 下运行,你完全可以写成:

app.exec()

的形式。当然,带上下划线的方法为了保持向后兼容还是可以使用的。

有关qAppQApplication之间的关系

简单地说,就像下面这样:

PyQt5.QtWidgets.qApp = self # in __init__()

转载:SQLite 外键

SQLite外键(Foreign Key)支持


声明

本篇文章转载自 ITeye:y150988451 的博文,著作权归原作者所有。

hosiet 转载并重新排版。再次转载请保留声明。

外键的定义

从 3.6.19 版开始,SQLite 支持外键约束。(Ubuntu 10.04 的 SQLite 版本是 3.6.22,Debian 6.0 的 SQLite 版本是 3.7.0,Ubuntu 15.04 的 SQLite 版本是 3.8.7.4,供参考)

外键用来强制约束两个表之间“存在”的关系。例如,考虑下面的SQL命令建立的schema:

CREATE TABLE artist(
    artistid INTEGER PRIMARY KEY,
    artistname TEXT
    );
CREATE TABLE track(
    trackid INTEGER,
    trackname TEXT,
    trackartist INTEGER —- 必须映射到一个 artist.artistid 记录
);

使用这个数据库的应用可以假定:对于在 track 表中的每一行,都在 artist 表都存在一个对应的行。不幸的是,如果用户使用外部工具编辑数据库,或者在应用程序中存在一个 bug,那么可能在 track 表中插入一行,而在 artist 表中没有相应的记录。或者,在 artist 表中删除某些行,就会在 track 表里留下孤儿行(orphaned rows),它们在 artist 表中剩下的记录找到任何对应的行。这可能在以后会导致应用的功能出错,或者至少让编写应用程序更复杂。

HTML中ruby和黑幕的初步应用

名词解释

不了解Ruby为何物的请自行上网搜索;这里给一个维基百科链接。简而言之是在正常字符上方显示一些小型的字符,常用在东亚文字中,例如中文中对汉字进行注音以及日文中对汉字注假名。当然,经过广大人民群众的发掘,它已经有了进阶的用法。

<ruby>标签是HTML5新引入的标签。

黑幕是广大人民群众的一种表现形式:文字由黑框覆盖,反白可以显示出文字内容,和删除线有异曲同工之妙。常见于娱乐用的网站,例如萌娘百科这样的站点。


使用示例

摘自萌娘百科:舰队Collection:赤城条目:


一航战,赤城吃撑出击睡觉

编写指导

首先给出上述示例的源代码:

<style type="text/css">
.heimu {background-color: #252525 !important;color: #252525 !important;}
</style>
一航战,<ruby>赤城<rp>(</rp><rt><span class="heimu" title="你知道的太多了">
吃撑</span></rt><rp>)</rp></ruby>
,<ruby>出击<rp>(</rp><rt><span class="heimu" title="你知道的太多了">
睡觉</span></rt><rp>)</rp></ruby>!

这是一个“黑幕”与ruby的综合应用。其中,title属性是不必要的,主要在于<ruby>标签和css的使用。

CSS 中的!important用来强调这个属性,保证它更可能生效(产生黑幕)。

<ruby> 标签的 fallback 机制

<ruby> 标签可以由以下子标签组成:

  1. <rt>
  2. <rp>

原理:

  • 所有在 ruby 标签内但是不在任何子标签内的文字会照常显示;
  • 所有在 rt 子标签内的内容将被作为 ruby 字符提升至正常文字正上方;
  • 所有 rp 子标签内的内容,对于支持 ruby 的浏览器将不显示。

需要注意的是,对于不支持 ruby 的浏览器,因为它不认识这些标签,所有内容将会照正常文字进行显示。

这时再回头看示例代码,它考虑了 fallback 的问题。如果浏览器不支持 ruby 的话,所有 ruby 文字将会紧跟正常文字,被包含在括号内。这是一个不错的实践。

VPS搭建记录(一):发行版选择与基础服务搭建

非常幸运地,我曾经抓住机会用正当方式获得了 github education 的100$ DigitalOcean 代金券。在此鄙视一下滥用这个项目进行套利的无良商人。

这学期有机会使用网银+Paypal 激活了DO帐号,开了一个10刀每月的VPS,放在新加坡节点。

VPS 能用来干什么呢?无外乎以下用途:

  • 科学上网
  • 搭建个人博客
  • 挂机运行程序
  • 搭建个人邮件服务器
  • 运行其它服务

因此,以下一系列文章主要围绕以上内容展开。


启用 Digitalocean VPS

最开始的时候曾经想不走寻常路,选择了荷兰阿姆斯特丹三号节点作为母机;后来发现延迟大到难以忍受,最后还是乖乖地选择了新加坡节点。

有的人说新加坡节点无法直连需要绕道美国,但是我觉得从 ssh 效果看,延迟还是可以接受的,我怀疑绕道的问题已经被解决了。虽然新加坡节点不能更换内核,不过这不是大问题,毕竟就算是 AMS3 这样可以更换内核的节点也不过是把当前内核与发行版历史内核列表让你选,不可能让你启动自定义的内核的。(Update:如果使用 kexec 之类的黑科技工具还是可以启动自己的内核的。另外,如果选择了 Debian 8,那么母机默认会使用传统的 mbr+grub 启动系统,这时就十分方便了。提供一个在 DO 上使用 Archlinux 的项目:gh2o/digitalocean-debian-to-arch

发行版选择的是新出的 Debian 8。毕竟我所在的科大 LUG 几乎清一色的 Debian 服务器,对 Debian 系比较熟悉,甚至受 Aron Xu 的影响有了一些感情(可能误)了。曾经看有人写道 Debian 血统高贵平易近人,我感觉还是有那么一点道理的。不用 Ubuntu 一是它六个月一次的更新(反正个人 PC 每次更新都会出各种小问题需要修复),不用 LTS 还是因为总感觉 Ubuntu 格调太低。如果 DO 提供 Arch 的选项,说不定我还真的会作死试一把呢。

ssh 登陆并无问题,软件源默认选择 debian.net 速度同样可以接受。一个小问题是 IPv6,虽然 DO 提供了 IPv6 选项,但是需要激活虚拟机后在控制面板里启用。可能是 Debian 8 新版本的问题,即便是启用再重启虚拟机也不会默认绑定 IPv6 地址。目前我的做法是在/etc/rc.local里补上两句:

Python3处理XML的笔记

应该说,Python(3)不愧其名,在各个方面都能够优雅地进行编程与处理数据。今天我来整理一下在Python3中处理XML的一些方法。 先注明:所提及的前两个库都是 Python3 自带的标准库,请参考官方文档文档:https://docs.python.org/3/library/ 以了解详细使用用法。


标准库中的首选:xml.etree.ElementTree

据说大家都喜欢这个库,那么我就把它列在最前面。据说它性能好,易于理解,那么我就姑且这样认为。 等我多用用再写这一部分啦。

标准库中的所谓标准:xml.domxml.dom.minidom

首先说一下什么是DOM

The Document Object Model, or “DOM,” is a cross-language API from the World Wide Web Consortium (W3C) for accessing and modifying XML documents. A DOM implementation presents an XML document as a tree structure, or allows client code to build such a structure from scratch. It then gives access to the structure through a set of objects which provided well-known interfaces. 来源:python3-doc 20.6节

ed 文本编辑器使用笔记

昨晚抽风一般地想要学学 ed 究竟应该怎么用,于是花了十多分钟学习了一下基础用法,可以保证在紧急情况下“存活”。稍微整理一下自己学到的用法:

调用

ed [file]

一般使用

如果是创建新文件的话,进入程序后除了光标什么都不会显示;如果是打开已有文件,那么会显示一行文件大小的字节数,然后光标到下一行等待用户输入。 ed 是基于行的文本编辑器,也就是说同时只能显示或编辑文件的某一行。和 Vi 类似,存在两种模式:输入模式和命令模式。默认打开文件后进入命令模式。 既然是基于行的编辑器,那么 ed 有一个“当前行”的概念,可以使用 n 查看之,会打印出当前所在行号。默认打开文件后自动跳转至文件末尾(也就是最后一行)。 在命令模式下输入编辑器不认识的命令,会回显一个问号 ? 表示输入错误。

文字输入

切换至输入模式的命令如下:

  • a,在当前行的下一行开始插入文字;
  • i,在当前行的上一行开始插入文字;
  • c,抹除当前行的所有文字,重新输入。

注意 c 命令的危险性。 切换至输入模式后,就请随意地打字吧,回车也会忠实地写入文件。缺点是没有办法修改回车符以前的输错的文字。如果想修改,必须退出当前的输入模式再尝试修改。 补充说明,如果你想要删除文字,可以在定位到某行之后,配合使用 c 与 . 来达到删除所在行的目的。 如果想退出输入模式,在新行输入 . 即可。就是英文句点。

导航

以下导航命令当然是在命令模式下。

  • 直接输入行号并回车,跳转到对应行,并回显对应行的文字(不带行号)。
  • 输入回车,会跳转到下一行,并回显对应行的文字(不带行号)。
  • 输入 . ,会重复显示当前行的文字(不带行号)。
  • 输入 n,会回显当前行的文字(带行号)。

保存与退出

在编辑已有文件的时候,输入 w 可以进行保存,回显新文件的字节大小。 在编辑新文件时,需要在 w 后接上文件名。回显相同。 按 q 可以退出编辑器。在没有保存文件的时候,则必须用 Q 强制退出。当然 ctrl+c 是没有用的。

整理:我所使用过的 Linux 工具

我打算对所有使用过的Linux工具(软件)做一个整理。首先当然是要列出所有工具的名字,所以有了这个列表。 之后将进行分类,分为一般的工具、将会简要介绍的工具和会详细说明的工具。

  • bash
  • firefox
  • chromium
  • kdm
  • gdm
  • lightdm
  • gnome-terminal
  • konsole
  • enlightenment
  • ssh
  • xchat
  • hexchat
  • minecraft
  • flightgear
  • adb
  • seahorse
  • kgpg
  • konqueror
  • rekonq
  • dolphin
  • nautilus
  • openvpn
  • banshee
  • rhythmbox
  • pidgin
  • virtualbox
  • wine
  • vim
  • nvi
  • filezilla
  • top
  • htop
  • everpad
  • kmail
  • insync
  • okular
  • wps
  • kontact
  • gnome-tweak-tool
  • gwenview
  • eog
  • gpg/gpg2
  • shotwell
  • ksnapshot
  • shutter
  • compiz/ccsm
  • kwallet
  • qt4-qtconfig
  • goldendict
  • freemind
  • evolution
  • xournal
  • baobab
  • gedit
  • kate
  • gcc
  • cowsay/xcowsay
  • qtqr
  • baloo
  • akonadi
  • tar
  • xelatex
  • biber/bibtex
  • less/more
  • systemctl
  • scp
  • cp
  • mv
  • ls
  • amarok
  • easytag
  • fcitx
  • gimp
  • gnome-shell
  • sudo
  • su
  • grub/grub4dos
  • grub2

科大网络通的自动化

自2014年2月起,jameszhang 更新了科大的网络通界面,适当简化了登陆流程,原来绿油油的界面也不见了。

要想自动化地连接网络通,最好的方法是网络通脚本,这里收集一下,也许不是都能用,等以后再整理。

1. jameszhang 简化过的脚本,原文发表在瀚海星云BBS的USTCnet版某帖子

#!/bin/bash curl --data "name=user&password=pass&cmd=set&type=出口&exp=time" http://wlt.ustc.edu.cn/cgi-bin/ip

  1. socketk (雨中片汤) 写的 python3 脚本,原文发表在瀚海星云BBS的Love版某帖子

原注:python3的语法,本来是自用的,所以没有把用户名和密码搞成参数,大家在中括号 里面改成自己的就妥了~

3. (待整理)