uebersicht - 一款漂亮的桌面Widgets

Übersicht 是Mac下一款可以用来自定义桌面插件的工具。我们可以根据自己的喜好定制不同的Widgets。和Windows下的Rainmeter类似。把玩了一下感觉棒棒的。

效果还真挺炫的。目前在想着可以给自己的服务器加一些状态接口,通过uebesicht方便简单又干脆就可以拿到服务器的实时数据,实在是居家旅行必备。

uebersicht

详细的介绍在少数派上有介绍,下面是转载文。

在相关的同类应用中,听说得比较多的当属 GeekTool 和人称「通知中心 GeekTool」的 Today Scripts 无疑,它们和 Übersicht 的运行原理基本相同,但后者的不同在于,它还支持 HTML5 和特殊的 CoffeeScript 语法,所以 它的优势就很明显了:

  • 相对轻松的编写和自定义过程。
  • 多元化的显示风格。
  • 主动适配不同屏幕尺寸的能力。

安装插件

Übersicht Widgets 的安装方法很简单,先在官网 下载安装 Übersicht ,然后前往 官方 Widget 商店 寻找自己想要的插件,点击 Banner 封面图可以读取相关开发者的介绍,或直接通过右下方 download 进行下载。接着,将解压缩后得到的 .coffee 文件置入 Übersicht Widgets 的文件夹即可(偏好设置中可以进行自定义)。稍等片刻,桌面插件就会被主程序自动读取,安装完成。

不过,有些插件的安装方法比较复杂,比如 Pretty Weather 这款。除了上述步骤,它还要求用户获取「天气数据」所需的个人 API Key,读者可以 点击 前往注册。接着,需要将 API Key 覆盖至源代码中的相关地址,方可正常显示天气数据。还有最后一步,就是获取你当前的位置信息,有条件的读者可以通过 Google Maps 获取。

自定义插件

由于 Übersicht 的发布处于 OS X 10.9 与 OS X 10.10 的跨越阶段,所以部分插件可能存在兼容性方面的问题。这是个尴尬的局面,好在开发商对此特意加入了「Inspect Element」调试工具,以便使用者清楚地了解当前运行状态中可能存在的问题。可是…

掌握浅层系统知识的人都知道,像这类调整当前状态的「调试」工具,大多都是针对「内存数据」的,即修改的结果只能临时起效,而一旦发生缓存被清除或插件重启的行为,刚才的方案将全部失效,取而代之,插件会重新从源代码中读取数据,生成最原始的效果。我想说的是,当用户需要调整插件位置(或外观)这些基本参数时,若想保证状态的持久性,就一定要从源代码中下手。这里笔者推荐一款强大的代码编辑应用 Sublime Text 系列(免费版即可)。

以插件 Simple-Clock 为例。第一步,先将 .coffee 文件以 Sublime Text 方式打开,完成后就能看到插件的源代码(见上图)。第二步,在第 48 行找到 style 关键词,也就是「外观」和「位置」的参数地址。第三步,修改数据并使用 CMD-S 进行保存以刷新插件状态,完成修改步骤。

  • fontSize:文字大小
  • width:插件占用的单位宽度(百分比)
  • transform:自比例调整能力(自动)
  • bottom:距离屏幕下方边缘的单位长度(百分比)
  • right:距离屏幕右侧边缘的单位长度(百分比)

还可以通过修改 background color 参数调整插件的背景色、修改 font-family 参数调整显示字体或修改 text-align 参数调整文字相对背景框的显示位置:center 置中、left 置左、right 置右等。插件(位置及外观)参数的单位可能是百分比,也可能是像素(px),但笔者个人不建议没有相关基础的读者修改其默认单位,因为通常情况下会使 Widgets 出现「报错」现象,那就得不偿失了。


其实最先 Übersicht 只是由独立开发者 @Felix 托管在 Github 上的项目,因获得大量用户好评(其中包括 Brett)从而得以正身。所以,为保证用户能及时获取最新资讯和问题反馈,建议大家前往 官方 Github 页面官方网站 了解详情。


配置mutt和msmtprc从debian中发邮件

服务器发送邮件主要有两种方式。一种是搭建一个MTA(邮件传输代理),使用sendmail或POSTFIX进行发送。具体的方法可以看Linode给的Guide,非常的详细。以这种方式搭建要考虑清楚自己是否真的需要一个邮件服务器,因为搭建的过程十分繁琐枯燥。Linode的文档也是一再强调这一点。另一种方式就是本文的mutt+msmpt。特点是轻量,够用。(υ◉ω◉υ)

安装

apt-get install mutt msmtp

配置mutt

/etc/Muttrc是全局的,也可以用在用户目录下~/.muttrc配置。

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="kelu" # 发件人名字
set from=kelu@kelu.org # 发件人地址
set envelope_from=yes

set charset="utf-8"
#set send_charset="gb2312"
set send_charset="utf-8"
set locale = "zh_CN.UTF-8"
set content_type = "text/html\;charset=utf-8"

配置.msmtprc

同样,msmtprc也是可以在/etc/msmtprc或者用户目录下的~/.msmtprc进行配置。

account default
host smtp.163.com  --> email server 地址
from kelu@kelu.org
auth login # 用plain似乎也没问题?有空再看
user kelu@kelu.org
password kelu.org
logfile ~/.msmtp.log

.msmtprc文件需要600权限,如果不是600权限会无法使用

使用以上的配置已经可以使用一些普通的国内邮箱进行信息发送了。但是如果你使用了gmail的话,需要多做出一些配置才可以。以下是我的设置,配置的方法也是参考了不少网站才找到的。例如Virtage Devblog 最后正确的配置方法来自archlinux的bbs

# Default settings that all others account inherit
defaults

# Logging - uncomment either syslog or logfile, having both uncommented disables logging at all.
#syslog on
# Or to log to log own file
logfile  /var/log/msmtp.log

keepbcc  on

# Gmail/Google Apps (configure as may as you want)
account  gmail
host   smtp.gmail.com
port   587
protocol smtp
auth on
from pbrisbin@gmx.com
user pbrisbin@gmx.com
password XXXXX
tls on
tls_nocertcheck

# Default account to use
account default : gmail

一如那位配置好的用户所说的,works like a dream ʕ•̫͡•ʔ→ʕ•̫͡•̫͡•ʔ→ʕ•̫͡•=•̫͡•ʔ→ʕ•̫͡•ʔʕ•̫͡•ʔ→ʕ•̫͡•̫͡•ʔ ʕ•̫͡•̫͡•ʔ

发邮件给foo@google.com,并带有一个附件

mutt -s "主题" foo@google.com -a 附件.txt < 邮件内容.txt

扩展

配置好邮件之后就可以发送一些vps的状态邮件给自己啦,还有很多种可能性,比如流量突然升高啊,登陆ssh发邮件提醒啊之类的。

比如在/etc/ssh/sshrc中添加以下信息:

echo "$USER@`hostname` `date +%Y-%m-%d\ %H:%M` login from ${SSH_CLIENT%% *}" | mutt -s "$USER `date +%Y-%m-%d\ %H:%M` login from ${SSH_CLIENT%% *}" XXXXXX@kelu.org &

当有人登陆服务器时候发邮件提醒。


Linux命令之awk

本文大部分引用自《GAWK 入门:AWK 语言基础》- IBM developerWorks

Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 “Aho,Weinberger,Kernighan” 的简称。

Awk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的行,查看是否匹配指定的正则表达式,并执行相关的操作。awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计。awk 的语法较为常见。它借鉴了某些语言的一些精华部分,如 C 语言、python 和 bash(虽然在技术上,awk 比 python 和 bash 早创建)。awk 是那种一旦学会了就会成为您战略编码库的主要部分的语言。

主要特性

  • Awk以记录和字段的方式来查看文本文件
  • 和其他编程语言一样,Awk 包含变量、条件和循环
  • Awk能够进行运算和字符串操作
  • Awk能够生成格式化的报表数据

语法

Awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。

awk '/search pattern1/ {Actions}    
     /search pattern2/ {Actions}' file     * search pattern是正则表达式 * Actions 输出的语法 * 在Awk 中可以存在多个正则表达式和多个输出定义 * file 输入文件名 * 单引号的作用是包裹起来防止shell截断

工作方式

  • Awk 一次读取文件中的一行
  • 对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的 Action
  • 如果没有匹配上则不执行任何动作
  • 在上诉的语法中, Search Pattern 和 Action 是可选的,但是必须提供其中一个
  • 如果 Search Pattern 未提供,则对所有的输入行执行 Action 操作
  • 如果 Action 未提供,则默认打印出该行的数据
  • {} 这种 Action 不做任何事情,和未提供的 Action 的工作方式不一样
  • Action 中的语句应该使用分号分隔

默认行为

默认的时候awk 打印文件中的每一行

$ awk '{print;}' hello.txt 

由于匹配的正则表达式未给出,因此后续的Action 适用所有的行, Action 中的 print 没有任何参数的情况下将打印整行,注意其中的 Action 必须使用 {} 括起来。

操作符(awk操作符与C语言类似)

+        加
-        减
*        乘
/        除
%        取余
^        幂运算
++        自加1
--        自减1
+=        相加后赋值给变量(x+=9等同于x=x+9)
-=        相减后赋值给变量(x-=9等同于x=x-9)
*=        相乘后赋值给变量(x*=9等同于x=x*9)
/=        相除后赋值给变量(x/=9等同于x=x/9)
>        大于
<        小于
>=        大于等于
<=        小于等于
==        等于
!=        不等于
~        匹配
!~        不匹配
&&        与
||        或
  ^2 			#2次方
  **2			#2次方
函数名称 返回值
atan2(x,y) y,x范围内的余切
cos(x) 余弦函数
exp(x) 求幂
int(x) 取整
log(x) 自然对数
rand() 随机数
sin(x) 正弦
sqrt(x) 平方根
srand(x) x是rand()函数的种子

BEGIN 和 END

BEGIN { Actions}    
{ACTION} # Action for everyline in a file    
END { Actions }  

在BEGIN 节中的 Actions 会在读取文件中的行之前被执行。

而END 节中的 Actions 会在读取并处理文件中的所有行后被执行。 awk 非常善于处理分成多个逻辑字段的文本,而且让您可以毫不费力地引用 awk 脚本中每个独立的字段。

# 使用 -F 选项来指定 ":" 作为字段分隔符。
$ awk -F":" '{ print "username: " $1 "/t/tuid:" $3" }' /etc/passwd 

外部脚本

将脚本作为命令行自变量传递给 awk 对于小的单行程序来说是非常简单的,而对于多行程序,它就比较复杂。您肯定想要在外部文件中撰写脚本。然后可以向 awk 传递 -f 选项,以向它提供此脚本文件。

$ awk -f myscript.awk myfile.in
# 只打印包含浮点数的行。
/[0-9]+/.[0-9]*/ { print }
	
# 如果当前行的第一个字段不等于 fred,awk 将继续处理文件而不对当前行执行 print
$1 == "fred" { print $3 }
	
#如果某一行的第五个字段包含字符序列 root,那么将只打印这一行中的第三个字段
$5 ~ /root/ { print $3 }

条件语句

awk 还提供了非常好的类似于 C 语言的 if 语句。如果您愿意,可以使用 if 语句重写前一个脚本:

# 如果某一行的第五个字段包含字符序列 root
{
	if ( $5 ~ /root/ ) {
	print $3
	} else {
	}
}
awk 还允许使用布尔运算符 “   “(逻辑与)和 “&&”(逻辑或),以便创建更复杂的布尔表达式。只打印第一个字段等于 foo 且第二个字段等于 bar 的那些行。
( $1 == "foo" ) && ( $2 == "bar" ) { print }

内置变量

ARGC        命令行参数个数
FILENAME    当前输入文档的名称
FNR        当前输入文档的当前记录编号,尤其当有多个输入文档时有用
NR        总行数
NF        当前记录的字段个数
FS        字段分隔符
OFS        输出字段分隔符,默认为空格
ORS        输出记录分隔符,默认为换行符\n
RS        输入记录分隔符,默认为换行符\n		 默认awk读取数据以空格或制表符作为分隔符,但可以通过-F或FS(field separator)变量来改变分隔符。

变量传递

shell传入awk

1.”‘$var’”

#!/bin/bash
var="test"
awk 'BEGIN{print "'$var'"}'

这种写法要求变量var中不含有空格。若var中含有空格,那么就要用 “‘“$var”’”

2.export变量,然后用ENVIRON[“var”]

#!/bin/bash
var="test"
export var
awk 'BEGIN{print ENVIRON["var"]}'

3.使用-v选项。

#!/bin/bash
var="test"
awk -v nvar="$var" 'BEGIN{print nvar}'

awk传入shell

1.让awk将变量值按一定格式输出到STDOUT上,然后由shell解析 2.eval

$ unset a
$ eval $(awk 'BEGIN{print "a=1"}')
$ echo $a

#!/bin/bash
var1="test"
var2="along"
eval $(awk 'BEGIN{print "var1=along;var2=test"}')
echo "var1:"$var1
echo "var2:"$var2
./awktest.sh 
var1:along
var2:test

关于eval的用法血衫今后再写一下。

例子

awk  '/^$/ {print x+=1}'   test.txt                    备注:统计所有空白行
awk  '/^$/ {x+=1}  END {print x}'   test.txt        备注:打印总空白行个数
awk -F:  '$1~/root/   {print  $3}'   /etc/passwd     备注:打印root的ID号
awk -F:  '$3>500  {print  $1}'      /etc/passwd     备注:列出计算机中ID号大于500的用户名
awk 'BEGIN { x="123"; print x-2 }' #将字符串转换为数值来运算
awk 'BEGIN {sum=0} {sum+=$0} END{print sum/FNR}' file.txt # 求平均数

docker images -a | awk '{ print $1":"$2 }'  # 打印所有镜像名

分组求平均:
awk -F" " '{sum2[$1] += $2; sum3[$1] += $3; cnt[$1] += 1} END{for (i in sum2) print i, sum2[i]/cnt[i], sum3[i]/cnt[i]}' gav.txt

邮件中的html - 阮一峰

本文来自阮一峰的网络日志HTML Email 编写指南

今天,我想写一个”低技术”问题。

话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly。每周收到一封邮件,了解本周的大事。

image

有一天,我就在想,是不是我也能做一个这样的邮件?

然后,就发现这事不那么容易。抛开后台和编辑工作,单单是设计一个Email样板,就需要不少心思。

image

因为这种带格式的邮件,其实就是一张网页,正式名称叫做HTML Email。它能否正常显示,完全取决于邮件客户端。大多数的邮件客户端(比如Outlook和Gmail),会过滤HTML设置,让邮件面目全非。

我发现,编写HTML Email的窍门,就是使用15年前的网页制作方法。下面就是我整理的编写指南。

1. Doctype

目前,兼容性最好的Doctype是XHTML 1.0 Strict,事实上Gmail和Hotmail会删掉你的Doctype,换上这个Doctype。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

 <head>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  <title>HTML Email编写指南</title>

  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>

 </head>

</html>

使用这个Doctype,也就意味着,不能使用HTML5的语法。

2. 布局

网页的布局(layout)必须使用表格(table)。首先,放置一个最外层的大表格,用来设置背景。

<body style="margin: 0; padding: 0;">

 <table border="1" cellpadding="0" cellspacing="0" width="100%">

  <tr>
   <td> Hello! </td>
  </tr>

 </table>

</body>

表格的 border 属性等于1, 是为了方便开发。正式发布的时候,再把这个属性设为0。

在内层,放置第二个表格。用来展示内容。第二个table的宽度定为600像素,防止超过客户端的显示宽度。

<table align="center" border="1" cellpadding="0" cellspacing="0" width="600" style="border-collapse: collapse;">

 <tr>
  <td> Row 1 </td>
 </tr>

 <tr>
  <td> Row 2 </td>
 </tr>

 <tr>
  <td> Row 3 </td>
 </tr>

</table>

邮件内容有几个部分,就设置几行(row)。

3. 图片

图片是唯一可以引用的外部资源。其他的外部资源,比如样式表文件、字体文件、视频文件等,一概不能引用。

有些客户端会给图片链接加上边框,要去除边框。

  img {outline:none; text-decoration:none; -ms-interpolation-mode: bicubic;}

  a img {border:none;}

  <img border="0" style="display:block;">

需要注意的是,不少客户端默认不显示图片(比如Gmail),所以要确保即使没有图片,主要内容也能被阅读。

4. 行内样式

所有的CSS规则,最好都采用行内样式。因为放置在网页头部的样式,很可能会被客户端删除。客户端对CSS规则的支持情况,请看这里。

另外,不要采用CSS的简写形式,有些客户端不支持。比如,不要写成下面这样:

  style="font: 8px/14px Arial, sans-serif;"

如果想表达

  <p style="margin: 1em 0;">

要写成下面这样:

  <p style="margin-top: 1em; margin-bottom: 1em; margin-left: 0; margin-right: 0;">

5. W3C校验和测试工具

要保证最终的代码,能够通过W3C的校验,因为某些客户端会把不合格属性剥离。还要使用测试工具(1, 2, 3),查看在不同客户端的显示结果。

发送HTML Email的时候,不要忘记MIME类型不能使用

  Content-Type: text/plain;

而要使用

  Content-Type: Multipart/Alternative;

发送工具可以考虑使用 MailChimpCampaign Monitor

6. 模板

使用别人已经做好的模板,是一个不错的选择(这里这里),网上还可以搜到更多

自己开发的话,可以参考HTML Email BoilerplateEmailology

7. 参考链接

进一步研究,请参考下面的文章。

  - Sean Powell,Say Hello to the HTML Email Boilerplate

  - Nicole Merlin,Build an HTML Email Template From Scratch

  - Nicole Merlin, What You Should Know About HTML Email

(完)


关闭一些无用的进程

闲来无事pstree -a看了一下貌似好几个无用的进程。这几天也是装了很多软件,装一个玩一下又卸掉的节奏。小记录一下。

sendmail,卸载。
exim4,卸载。
rpc也很可疑,跟NFS相关的平时也不用,service stop停掉。
然后就是nfs-common也一样。
除了停掉还要禁止开机启动,用`sysv-rc-conf`关掉。
安装了iftop,一个流量的实时监控工具。
安装了mutt msmtp,发邮件用的。

Mac软件之iTerm2

本来,在Mac下我一直是在用的原生的terminal,倒也是没什么感觉凑合用了几年。不知是最近住处的网络还是国内的网络不稳定,老是断连,搞得各种郁闷。于是乎又是改配置啦sshd_config配置握手时间,用screen命令保存状态什么的,然后就用上了iTerms了。也是用了一两个星期了,看到文章才发现原来有这么多好的功能。

最主要的还是口水它的屏幕切割功能,配合linux的screen命令+alias之后简直神器再临人间。

下文转载自《iTerm2新手应知特色功能》- 阳志平的网志

iTerm2新手应知特色功能

Published: 11 Jul 2011 iterm2是一个更好替代Mac自带终端与iterm的软件.它的一些最应了解的特色功能有:

选中即复制

iterm2有2种好用的选中即复制模式。

一种是用鼠标,在iterm2中,选中某个路径或者某个词汇,那么,iterm2就自动复制了。

另一种是无鼠标模式,command+f,弹出iterm2的查找模式,输入要查找并复制的内容的前几个字母,确认找到的是自己的内容之后,输入tab,查找窗口将自动变化内容,并将其复制。如果输入的是shift+tab,则自动将查找内容的左边选中并复制。

iTerm2 Text Selct

路径重复

在新Tab中自动使用前一Tab路径,如此设置:

iTerm2 Login Shell

屏幕切割

  • command+d:垂直分割;
  • command+shift+d:水平分割

iterm2 split panes

系统热键

如下图,设置好系统热线之后,将在正常的浏览器或者编辑器等窗口的上面,以半透明窗口形式直接调出iterm2 shell。

iterm2 hotkey

按下同样的系统热键之后,将自动隐藏。这样非常有利于随时随地处理。

自动完成

输入打头几个字母,然后输入command+; iterm2将自动列出之前输入过的类似命令。

iterm2 autocomplete

剪切历史

输入command+shift+h,iterm2将自动列出剪切板的历史记录。如果需要将剪切板的历史记录保存到磁盘,在Preferences > General > Save copy/paste history to disk.中设置。

iterm2 Paste History

全屏切换

command+enter进入与返回全屏模式

Exposé所有Tab

command+option+e,并且可以搜索

保存当前快照

Window > Save Window Arrangement.

同样,恢复快照:

Window > Restore Window Arrangement

可以在Preferences > General > Open saved window arrangement.设置自动恢复快照


1 2 3 4 5 146 147 148 149 150