如何使用 C++ Builder 的远程调试功能

突然有一天,本机上好好地运行的软件,在另外一台计算机上莫名其妙地出问题,有没有?除了在这台计算机上装套开发环境,还有没有别的办法?答案是肯定的。远程调试手段是软件开发调试的利器,尤其是在软件发布后个别计算机上发现了异常的时候。 以 C++ Builder 6 为例,远程计算机上须安装 Borland Remote Debugger,需要注意版本的匹配,他可以从 IDE 安装盘直接安装或者从安装盘里提取出 RDEBUG 安装文件夹来安装...

CSS 学习笔记

什么是 CSS CSS 是 Cascading Style Sheets(层叠样式表)的缩写,用于定义如何显示 HTML 中的元素。 如何理解“层叠” 当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢? 一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中: 浏览器缺省设置 外部样式表 引用外部样式表文件: <head> <link rel="stylesheet" type="text/css" href="mystyle.css" /> </head> 内部样式表 样式直接定义在 HTML 文档头部:  <head>  <style type="text/css">    hr {color: sienna;}    p {margin-left: 20px;}    body {background-image: url("images/back40.gif");}  </style>  </head> 内联样式 在元素标签内使用 style 属性定义样式:  <p style="color: sienna; margin-left: 20px">  This is a paragraph  </p> 按从上到下的顺序,优先级逐渐提升。 CSS 语法 CSS 的基本语法为:selector {property: value;} 在一条定义中,可以有多个选择器,选择器间用逗号隔开(选择器的分组);也可以有多条“属性-值”对,使用分号隔开。 h1,h2,h3,h4,h5,h6 {     color: green;     font-family: Times, "Times New Roman", serif; } CSS 选择器 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。id 选择器以 "#" 来定义。 <style type="text/css"> #red {     color: red; } #green {     color: green; } </style> <p id="red">这个段落是红色。</p> <p id="green">这个段落是绿色。</p> 派生选择器 派生选择器允许你根据文档的上下文关系来确定某个标签的样式。通过合理地使用派生选择器,我们可以使 HTML 代码变得更加整洁。例如下面的样式定义了 id="sidebar" 元素下的 p 元素的样式(注意使用了空格作为分隔符): #sidebar p {     font-style: italic;     text-align: right;     margin-top: 0.5em; } 类选择器 类选择器以一个点号定义,类(class)与 id 的区别是,id 一般在 HTML 中的定义是唯一的。 <style type="text/css"> .center {text-align: center} </style> <h1 class="center"> This heading will be center-aligned </h1> <p class="center"> This paragraph will also be center-aligned. </p> 选择器列表 CSS 选择器用于选择要使用样式的网页元素。 选择器 实例 实例描述 .class .intro 选择 class="intro" 的所有元素 .class1.class2 .name1.name2 选择 class 属性中同时有 name1 和 name2 的所有元素 .class1 .class2 .name1 .name2 选择作为类名 name1 元素后代的所有类名 name2 元素 #id #firstname 选择 id="firstname" 的元素 * * 选择所有元素 element p 选择所有 <p> 元素 element.class p.intro 选择 class="intro" 的所有 <p> 元素 element,element div, p 选择所有 <div> 元素和所有 <p> 元素 element element div p 选择 <div> 元素内的所有 <p> 元素 element>element div > p 选择父元素是 <div> 的所有 <p> 元素 element+element div + p 选择紧跟 <div> 元素的首个 <p> 元素 element1~element2 p ~ ul 选择前面有 <p> 元素的每个 <ul> 元素 [attribute] [target] 选择带有 target 属性的所有元素 [attribute=value] [target=_blank] 选择带有 target="_blank" 属性的所有元素 [attribute~=value] [title~=flower] 选择 title 属性包含单词 "flower" 的所有元素 [attribute|=value] [lang|=en] 选择 lang 属性值以 "en" 开头的所有元素 [attribute^=value] a[href^="https"] 选择其 src 属性值以 "https" 开头的每个 <a> 元素 [attribute$=value] a[href$=".pdf"] 选择其 src 属性以 ".pdf" 结尾的所有 <a> 元素 [attribute*=value] a[href*="w3schools"] 选择其 href 属性值中包含 "w3schools" 子串的每个 <a> 元素 :active a:active 选择活动链接 ::after p::after 在每个 <p> 的内容之后插入内容 ::before p::before 在每个 <p> 的内容之前插入内容 :checked input:checked 选择每个被选中的 <input> 元素 :default input:default 选择默认的 <input> 元素 :disabled input:disabled 选择每个被禁用的 <input> 元素 :empty p:empty 选择没有子元素的每个 <p> 元素(包括文本节点) :enabled input:enabled 选择每个启用的 <input> 元素 :first-child p:first-child 选择属于父元素的第一个子元素的每个 <p> 元素 ::first-letter p::first-letter 选择每个 <p> 元素的首字母 ::first-line p::first-line 选择每个 <p> 元素的首行 :first-of-type p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素 :focus input:focus 选择获得焦点的 input 元素 :hover a:hover 选择鼠标指针位于其上的链接 :in-range input:in-range 选择其值在指定范围内的 input 元素 :indeterminate input:indeterminate 选择处于不确定状态的 input 元素 :invalid input:invalid 选择具有无效值的所有 input 元素 :lang(language) p:lang(it) 选择 lang 属性等于 "it"(意大利)的每个 <p> 元素 :last-child p:last-child 选择属于其父元素最后一个子元素每个 <p> 元素 :last-of-type p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素 :link a:link 选择所有未访问过的链接 :not(selector) :not(p) 选择非 <p> 元素的每个元素 :nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素 :nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数 :nth-last-of-type(n) p:nth-last-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素 :nth-of-type(n) p:nth-of-type(2) 同上,但是从最后一个子元素开始计数 :only-of-type p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素 :only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素 :optional input:optional 选择不带 "required" 属性的 input 元素 :out-of-range input:out-of-range 选择值超出指定范围的 input 元素 ::placeholder input::placeholder 选择已规定 "placeholder" 属性的 input 元素 :read-only input:read-only 选择已规定 "readonly" 属性的 input 元素 :read-write input:read-write 选择未规定 "readonly" 属性的 input 元素 :required input:required 选择已规定 "required" 属性的 input 元素 :root :root 选择文档的根元素 ::selection ::selection 选择用户已选取的元素部分 :target #news:target 选择当前活动的 #news 元素 :valid input:valid 选择带有有效值的所有 input 元素 :visited a:visited 选择所有已访问的链接 盒子模型 Box Model,盒子模型(也叫框模型)规定了元素框处理元素内容(element content)、内边距(padding)、边框(border) 和外边距(margin) 的方式。在 HTML 文档中,每个元素(element)都有盒子模型,下面是 Box Model 的图示: 元素框的最内部分是实际的内容,直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素。 外边距可以是负值,而且在很多情况下都要使用负值的外边距。 内边距 padding 元素的内边距在边框和内容区之间。padding 属性接受长度值或百分比值,但不允许使用负值。例如,如果您希望所有 h1 元素的各边都有 10 像素的内边距,只需要这样: h1 {padding: 10px;} 还可以按照上、右、下、左的顺序分别设置各边的内边距,各边均可以使用不同的单位或百分比值: h1 {padding: 10px 0.25em 2ex 20%;} 其中的百分数值是相对于其父元素的 width 计算的。 也通过使用下面四个单独的属性,分别设置上、右、下、左内边距: padding-top padding-right padding-bottom padding-left 边框 元素的边框 (border) 是围绕元素内容和内边距的一条或多条线。 CSS border 属性允许你规定元素边框的样式(border-style)、宽度(border-width)和颜色(border-color)。CSS 规范指出,边框绘制在“元素的背景之上”(元素的背景是内容、内边距和边框区的背景)。有些边框是“间断的”(例如,点线边框或虚线框),元素的背景应当出现在边框的可见部分之间。 外边距 围绕在元素边框的空白区域是外边距。设置外边距的最简单的方法就是使用 margin 属性,这个属性接受任何长度单位、百分数值甚至负值。与内边距类似,margin 属性按按照上、右、下、左的顺序设置。百分数值也是相对于其父元素的 width 计算的。 CSS 定义了一些规则,允许为外边距指定少于 4 个值。规则如下: 如果缺少左外边距的值,则使用右外边距的值; 如果缺少下外边距的值,则使用上外边距的值; 如果缺少右外边距的值,则使用上外边距的值。 换句话说,如果为外边距指定了 3 个值,则第 4 个值(即左外边距)会从第 2 个值(右外边距)复制得到。如果给定了两个值,第 4 个值会从第 2 个值复制得到,第 3 个值(下外边距)会从第 1 个值(上外边距)复制得到。最后一个情况,如果只给定一个值,那么其他 3 个外边距都由这个值(上外边距)复制得到。 外边距合并  当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。 上下合并 当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。 包含合并 当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。 自我合并 假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并。 CSS 定位 CSS 尺寸 单位 描述 % 百分比 in 英寸 cm 厘米 mm 毫米 em 1em 等于当前的字体尺寸。 2em 等于当前字体尺寸的两倍。 例如,如果某元素以 12pt 显示,那么 2em 是24pt。 在 CSS 中,em 是非常有用的单位,因为它可以自动适应用户所使用的字体。 ex 一个 ex 是一个字体的 x-height。 (x-height 通常是字体尺寸的一半。) pt 磅 (1 pt 等于 1/72 英寸) pc 12 点活字 (1 pc 等于 12 点) px 像素 (计算机屏幕上的一个点) CSS 颜色 CSS 中的颜色有多种表达方式: 十六进制色 格式为 #rrggbb,按红、绿、蓝各两个数值来排列(每种颜色分量值得范围为:0x00 ~ 0xff)。  如果三种颜色分量两位数值各自重复,那么可以将之缩写。例如 #112233 可以缩写为 #123。 RGB 颜色 格式为 rgb(red, green, blue),颜色分量的值可以是十进制(0 ~ 255)或百分比(0% ~ 100%)。 RGBA 颜色 RGBA 颜色值是 RGB 颜色值的扩展,带有一个 alpha 通道 —— 它规定了对象的不透明度。格式为 rgb(red, green, blue, alpha),不透明度 alpha 的取值范围为 0.0(完全透明) ~ 1.0(完全不透明)。 HSL 颜色 HSL 是颜色的另一种广为使用的表示方法,它是 hue(色相)、saturation(饱和度)、lightness(明度)的缩写。 格式为 hsl(hue, saturation, lightness)。 色相是人眼所能感知的颜色范围,这些颜色分布在一个平面的色相环上,取值范围为: 0° ~ 360°,每个角度可以代表一种颜色。色相值的意义在于,我们可以在不改变光感的情况下,通过旋转色相环来改变颜色。 色彩的饱和度用 0% 至 100% 的值描述了相同色相、明度下色彩纯度的变化。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从理性(灰度)到感性(纯色)的变化。 色彩的明度的作用是控制色彩的明暗变化,它同样使用了 0% 至 100% 的取值范围。数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。 HSLA 颜色 类似于 RGBA ,增加 alpha 通道后可以定义对象的不透明度。格式为 hsla(hue, saturation, lightness, alpha)。 预定义/跨浏览器颜色名 HTML 和 CSS 颜色规范中定义了 147 种颜色名(17 种标准颜色加 130 种其他颜色)。17 种标准色是 aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, orange, purple, red, silver, teal, white, yellow。 参考资料 W3School - CSS 教程 http://www.w3school.com.cn/css/index.asp 百度百科 - HSL http://baike.baidu.com/link?url=8pwVk9mUQw1QTkRkKanGpPFC7EKyVI_t59BqZWUECHyjPpgtq8foB4LaCfX16FkcydndzFGgXKH8c15Lw9US...

Ubuntu 安装 Nginx

apt-get install nginx # 安装 service nginx status # 查看服务运行状态 netstat -nap |grep nginx # 查看服务所使用的端口 网页浏览器访问服务器 IP 显示: Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx...

Ubuntu 安装 PHP

安装: sudo apt-get install php Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline Suggested packages: php-pear The following NEW packages will be installed: php php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 3,532 kB of archives. After this operation, 14.1 MB of additional disk space will be used. Do you want to continue? [Y/n] 除了自动安装的 php7.0-cli php7.0-common php7.0-fpm 等,再安装一些模块: sudo apt-get install php7.0-mysql php7.0-curl php7.0-mcrypt php7.0-mbstring php7.0-xml 测试: php -v PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies php7.0-fpm 服务控制: sudo service php7.0-fpm stop sudo service php7.0-fpm start sudo service php7.0-fpm restart sudo service php7.0-fpm statu...

cwRsync 客户端使用笔记

rsync 原本只能用在 Unix/Linux 系统,cwRsync 使用可以模拟 Linux API 的 Cygwin,以实现可以在 Windows 上运行的目的,网址为 https://www.itefix.net/cwrsync 。据说 cwRsync 4.1.0 是最后一个免费版本,不过网上可以下载到更高版本的客户端免费程序,可能收费的只是服务端吧。 服务端建在 Linux 服务器上,直接用 rsync 就可以,所以 Windows 上我只是用 cwRsync 客户端。 下载 cwRsync 5.4.1 https://www.cr173.com/soft/109506.html 解压缩后无需安装即可使用。 cwrsync.cmd 提供了批处理文件参考文件,可以不管它,我们要用的是 rsync 实例,从客户端同步到服务端: rsync -avz --no-owner --no-group --progress --delete --password-file=/cygdrive/C/rsync.pwd /cygdrive/C/Repositories rsync_usr@192.168.1.100::rd.svn 由于 Windows 中文件没有 uid 和 gid 的属性,传输时可能出现: uid 4294967295 (-1) is impossible to set on "/Repositories/Repositories/test2" (in rd.svn) 系统中没有值为 -1 的 uid。所以加上 --no-owner --no-group 从 -a 中排出 uid 和 gid 的属性。 --delete:删除服务器上源中已经不存在文件 --password-file:密码文件 password-file 的格式为一行明文的密码。 注意,路径格式为 unix 格式, /cygdrive/C/ 代表 C:\ 当源是一个目录时,带斜线(/)与不带斜线的处理是不同的。不带斜线时目录自身也会同步到目的(DEST)下。 即 rsync -a src_folder dest_folder,结果会有 dest_folder/src_folder。带斜线时目录自身不同...

svnadmin 使用笔记

热拷贝备份 将整个库都热拷贝一份出来,包括库的钩子脚本、配置文件等,不包括事务文件(所以可能出现热拷贝后库占用空间变小的情况,是不影响正常使用的);任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。热拷贝出来的库可以直接被 SVN 服务器使用,不需要转换。 可以全量备份也可以增量备份。 svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH # --incremental 增量备份选项,只能用于 FSFS 格式的库 svnadmin hotcopy --incremental C:\Repositories\test C:\Backup\test dump 备份 可以全量备份也可以增量备份,可以指定备份的起止版本。 缺点是版本数过大时备份和恢复的时间比较长。 svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]] svnadmin dump C:\Repositories\test > backup.dump svnadmin dump C:\Repositories\test -r 100:200 --incremental > backup_100_200.dump svnadmin create new_repository svnadmin load new_repository < backup.dump 事务(txns [transactions]) SVN 客户端进程异常中止、网络异常等,可能导致文件提交的事务失败,生成的事务文件会继续占用磁盘,可以删除这些意外中止的事务以节省磁盘空间。 列出所有的事务: svnadmin lstxns REPOS_PATH 删除指定的事务: svnadmin rmtxns REPOS_PATH TXN_NAME1 TXN_NAME2 .....

字母解释法

可能你在打电话的时候怕对方没听清楚而讲过“123 的 1,ABC 的 C”。同样的道理,模拟无线电信号的接听相比于数字电话的接听要困难得多了。业余电台的电波传播因素复杂,接收到的语言信号失真或衰落现象严重,影响了解析和辨识。特别是 DX(Distant eXchange)通信时,有些非英语区口音不同,通话时容易发生许多误听差错,尤其是像 B 和 P、D 和 T、G 和 J、M、N、R 和 I 等字最容易听错。 为了避免这个问题的发生,全世界的电台在话音通信中均采用字母解释法,一般电台在谈到呼号、姓名或 QTH(设台地)时采用这种解释方法,以避免发生误会。国际民航组织(ICAO)的英语解释法,是美国 ARRL 推荐的读法,也是目前业余通信中采用的方法。 字母解释法正式称为国际无线电通话拼写字母,也叫做北约音标字母等。 助记图 发音与释义 字母 代码 音标 代码原意 A Alpha 美[ˈælfə] 首个希腊字母(α) B Bravo 美[ˌbrɑːˈvoʊ] 喝采声 C Charlie 美[ˈtʃɑːrli] 查理(男子名) D Delta 美[ˈdeltə] 第四个希腊字母(δ);三角洲 E Echo 美[ˈekoʊ] 回音 F Foxtrot 美[ˈfɑːkstrɑːt] 狐步舞 G Golf 美[ɡɑːlf] 高尔夫球 H Hotel 美[hoʊˈtel] 旅馆 I India 美[ˈɪndiə] 印度 J Juliet 美[ˈdʒuliˌɛt] 茱莉叶(女子名) K Kilo 美[ˈkiːloʊ] 千(公制单位的前缀) L Lima 美[ˈlaɪmə] 利马(秘鲁的首都) M Mike 美[maɪk] 麦克风 N November 美[noʊˈvembər] 11 月 O Oscar 美['ɑskər] 奥斯卡(奖) P Papa 美[ˈpɑːpə] 爸爸 Q Quebec 美[kwəˈbɛk] 魁北克(加拿大的一个省份) R Romeo 美[ˈroʊmioʊ] 罗密欧(男子名) S Sierra 美[siˈerə] 山脉 T Tango 美[ˈtæŋɡoʊ] 探戈舞 U Uniform 美[ˈjuːnɪfɔːrm] 制服 V Victor 美[ˈvɪktər] 胜利者 W Whiskey 美[ˈwɪski] 威士忌酒 X X-ray 美[ˈeks reɪ] X 光 Y Yankee 美[ˈjæŋki] 美国佬 Z Zulu 美[ˈzuːluː] 祖鲁(一个分布于非洲南部的民族) ...

摩尔斯电码

简介 摩尔斯电码(Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人艾尔菲德·维尔与萨缪尔·摩尔斯在 1836 年发明。 摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用 0 和 1 两种状态的二进制代码,它的代码包括五种: 点(·):1 划(-):111 字符内部停顿(在字符内的那些点和划之间):0 短停顿(在字符之间):000 中等停顿(在单词之间):0000000 这种代码可以用一种音调平稳时断时续的无线电信号来传送,通常被称做“连续波”(Continuous Wave),缩写为 CW 字母与数字的编码 用二叉树表示的国际摩尔斯电码 图中每一分叉的左支为点(·),右支为划(-),直到到达所需要表示的字符为止: 特殊符号 这是一些有特殊意义的点划组合。它们由二个或多个字母的摩尔斯电码连成一个使用,这样可以省去正常时把它们做为两个字母发送所必须的中间间隔时间...

Ubuntu 下载内核源码

方法 1 uname -r apt-cache search linux-source //搜索内核版本 sudo apt-get install linux-source-4.15.0 会将内核源码包下载到 /usr/src 方法 2 apt-get source linux-image-$(uname -r) 可以下载到当前目录 我的测试结果是获取不到内核源码(源的配置没有问题)。 方法 3 git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release>.git git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git (16.04) git tag -l Ubuntu-* 下载的源码很大,速度很慢(git 浅克隆可以解决太大的问题)。 安装编译内核可能依赖的库或工具 sudo apt-get install libncurses5-dev libssl-dev sudo apt-get install build-essential openssl sudo apt-get install zlibc minizip sudo apt-get install libidn11-dev libidn11 编译 #sudo make mrproper sudo make menuconfig sudo make -j4 安装内核 sudo make modules_install #安装内核模块 sudo make install #安装内核 内核用户手册 man sudo apt-get install xmlto  make mandocs -j4 #编译用户手册 sudo make installmandocs man print...

64 位 Ubuntu 兼容 32 位程序

在 ubuntu 12.04 及之前的版本,如果需要在 64 位机上运行 32 位程序,可以直接安装 ia32-libs。 sudo apt-get install ia32-libs ubuntu 12.04 之后的版本不能直接安装 ia32-libs,已经没有该软件包。可以直接安装 gcc-multilib 解决问题。 sudo apt install gcc-multilib g++-multili...