你会用计算器吗?

 今天早上在用windows自带的计算器转换进制的时候,看到了下图所示的按钮。MS MR之类的。 这些个按钮在简单的计算器上也有。我从小时候到现在都没搞清楚。当然也没搞过。。不学总是不会的。于是,找找资料。学会了也分享一下,英文是我猜的。。不过估计差不多 首先明确的一点是这类计算器内部有一个小的记忆芯片,可以用来存储一个数,类似于内存吧。所以M的意思就是Memory,下面先给出这几个的总体说明 “MS”,英文 Memory Store,用来存储输入栏显示的数字。 “MR”,英文 Memory Read, 再次显示调用存储的数字。 “M+”,英文 Memory Plus, 存储器里的值加上输入栏的值,结果又存入存储器 “M+”,英文 Memory Minus, 存储器里的值减去输入栏的值,结果又存入存储器 “MC”,英文 Memory Clear,用于清除存储器中的数值,默认为0 “C”, 英文 Cancel,就是全部撤销; “CE”, 英文 Cancel Error,也就是撤销错误输入。 现在来说个例子,比如我要计算1002+113因为一些计算器不支持整个式子输入。也是为了演示这些功能。我们可以这样输入, 先输入100,然后 * ,然后 2 ,按下等号,这时候输入栏变成了200,我们按下MS 或者M+,按下MS的话把200存到了存储器,而按下M+呢,因为存储器默认是0,所以就相当于0+200,存储器里就是200了。然后我们继续输入11 ,输入 +,输入3 ,按下等号,输入栏变成了33.我们按下M+,这时候输入栏并没有改变。因为M+将存储器里的200加上了33.则存储器里变成了233.我们按下MR就是读取存储器的值,这样输入栏就可以看到233了。我们就可以继续用233来运算了。MC就是清除233.恢复为0. 例如:想要9*6,如果按6按错按成5了, 按C就是从头来过, 这时就要重新按9了, 但是如果你按CE的话, 就只要输入6就行了, 不必输入前面的了。 我个人感觉M存储器就相当于一个草稿。吧计算中的一些临时值存储起来,就不用手记了。我记得我那时候有时候算值还得先把一些临时值写在纸上,后面重新输入。没文化真可怕。

2012-05-05 · 1 min · bystander

图片压缩工具源码(C#)

以前在用一个破解版的图片压缩工具。今天早上想想自己也试着做一个吧。查了一些资料。参考了一些代码。总算是写出来了。其实关键代码很简单。主要还是画界面,处理边界。。 看下效果图 处理图像的关键代码是这样的: bmp = new Bitmap(width, height); //创建一张空白画布 grap = Graphics.FromImage(bmp); //以该画布创建一个绘图对象 //平滑的高品质,抗锯齿 grap.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //HighQualityBicubic 是质量最好的绘图模式 grap.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; grap.DrawImage(img, new Rectangle(0, 0, width, height)); //用选中的原图在画布上绘图 bmp.Save(topath, System.Drawing.Imaging.ImageFormat.Jpeg); //对图像压缩后保存 另外一个就是空间的tip功能,vs2010中貌似已经不支持直接使用属性来设置tip了。所以用到了ToolTip类,使用方法如下,你也可以先导入库,然后简写,ToolTip对象可以给窗体的控件设置提示。主要是第二句话,第一个参数是控件名,第二个参数是提示文本,最好将这两句放入窗体的Load方法中 ToolTip toolTip = new System.Windows.Forms.ToolTip(); toolTip.SetToolTip(this.lboxPicPath, "双击可删除不需要的图片"); 还有一些边界,比如只接受数字数字之类的,我在代码里给出了详细的说明。实用工具的效果自行测试。对大图片效果最好。 源码下载:图片压缩工具源码

2012-05-04 · 1 min · bystander

说说邮件中的抄送和密送

 一直是分不太清楚,或者说是不知道具体的应用场合,于是,今天早上查了一下资料。总算是搞清楚了 不论你是用什么邮箱服务提供商,可能是126.或是Gmail,或是Qmail。在发送邮件的时候会看到如下类似的选项 抄送的英文缩写为CC,来源于Carbon Copy,如果一份邮件需要发送给多个人阅读,只要在“抄送”或“CC”一栏填上相关人员的信箱地址即可。如果是抄送多人,同样的直接添加到抄送栏就可以了。 密送的英文缩写为BCC,来源于Blind Carbon Copy,由于某种原因或出于某种考虑,你不希望收信人知道你把这封邮件还发送给了另外的人,则可将这位幕后的人的信箱地址放在密送一栏。 具体的规则是怎么呢。如果我密送给了多个人,那么多个人会互相看到彼此吗?下面我将使用一个例子来说明 如果:A 发送邮件(To)给B1、B2,抄送(CC)给C1、C2,密送(BCC)给D1、D2。 那么: A知道自己发送邮件给了B1、B2,并且抄送给了C1、C2,密送给了D1、D2。这相当于废话。。自己肯定知道自己给谁发了。 B1知道这封是A发送给B1、B2的邮件,并且抄送给了C1、C2、但不知道密送给了D1、D2。To的人能看到抄送,看不到密送 C1知道这封是A发送给B1、B2的邮件,并且抄送给了C1、C2,但不知道密送给了D1、D2。抄送的人看不到密送。 D1知道这封是A发送给B1、B2的邮件,并且抄送给了C1、C2,而且密送给了自己,但不知道密送给了D2。 密送的人权限比较大,可以看到最多的情况,但依然看不到密送 具体的用法呢,一句话就是:一般抄送和密送是为了备份,知会,或者监督跟踪的作用。 我先举个例子。有些个朋友过节什么的喜欢群发邮件。或是一些什么网页之类的。有这个心是好的。可是。对于收到的人来说,一看到是群发的。直接可能都删掉了。所以此时可以使用密送功能。对应于上面说的最后一种情况。具体使用时在To里写上自己的地址,这样邮件会发给自己。密送栏里写上其他人的邮件,这样就同时密送给其他人,并且每个人都会只看到发给自己。起码有看下去的心情。 邮件在工作中用的非常多,美国人总结的中国人典型特征中有一条,“即使面对面坐着,也不直接交谈而要使用邮件。”而这在很多外企之中是非常流行的文化,和总部打交道,邮件往往是最快捷和便宜的方式," 说到抄送,简直是所有邮件灾难故事最有力的协助者。同事之间常有抄送行为,有时是为了工作方便,同事A同时将一封邮件抄送给B和C,只能说明他们之间需要互相协作完成一件事情,但如果A将邮件发送给了B,却抄送给了B的老板C,那意味就深远了,通常有可能的情况是,A和B在合作的过程中发生了一些不愉快,告知老板的目的只是为了给对方一些震慑,这一招在各大公司当中都屡试不爽,而且往往成为一件悬而不决的事情得到解决的最快速手段。 抄送更多时候只是手段,而不是最终目的。看到一个某人A与其他部门同事B合作时发生的插曲,在某次急需同事B提供某文件支持时,B不慌不忙地一直以各种借口拖延工作,A忍无可忍,发了一封紧急邮件,同时抄送了B部门的领导和自己的领导,在这样一封邮件下,B在十分钟之内就将所需文件以附件形式传了过来,并回复了原邮件中的所有人。 如果你看了觉得真麻烦。其实。最有效的交流就是面对面,但是在职场中这是最有效地证明你自己干过什么的工具,一旦出了什么问题,最容易发现在哪个环节出现了问题,该由谁承担什么样的责任。如果遇到打官司这样的严重情况,邮件甚至能够作为呈堂证供。 没事给朋友写写邮件,那天看到一句话:维系友情的方法之一,是冷冰冰地写邮件。频率少得可怜,常常春暖花开发的邮件,秋叶飘零时收到回复。 参考: http://www.eeo.com.cn/2012/0328/223658.shtml http://baike.soso.com/v3997479.htm http://dudo.org/archives/2007123120184.html

2012-05-03 · 1 min · bystander

wordpress 实现404个性跳转页面

这个就不多说了,直接贴代码,使用方法就是把这些代码全部拷贝进你的404.php这个文件。后台点击外观-编辑-选择404.php,开始编辑, 完成后然后就可以自己测试下效果了,你也可以先访问http://leaver.me/test404查看效果 <title>404</title> <style type="text/css"> body{ margin:0; padding:0; font:14px/1.6 Arial,Sans-serif; background:#fff url(img/body.png) repeat-x; } a:link,a:visited{ color:#007ab7; text-decoration:none; } h1{ position:relative; z-index:2; width:540px; height:0; margin:110px auto 15px; padding:230px 0 0; overflow:hidden; xxxxborder:1px solid; background-image: url(http://leaverimage.b0.upaiyun.com/20346_o.jpg); background-repeat: no-repeat; } h2{ position:absolute; top:17px; left:187px; margin:0; font-size:0; text-indent:-999px; -moz-user-select:none; -webkit-user-select:none; user-select:none; cursor:default; width: 534px; } h2 em{ display:block; font:italic bold 200px/120px "Times New Roman",Times,Serif; text-indent:0; letter-spacing:-5px; color:rgba(216,226,244,0.3); } .link a{margin-right:1em;} .link,.texts{ width:540px; margin:0 auto 15px; color:#505050; } .texts{line-height:2;} .texts dd{margin:0;padding:0 0 0 15px;} .texts ul{margin:0;padding:0;} .portal{ color:#505050; text-align:center; white-space:nowrap; word-spacing:0.45em; } .portal a:link,.portal a:visited{ color:#505050; word-spacing:0; } .portal a:hover,.portal a:active{color:#007ab7;} .portal span{ display:inline-block; height:38px; line-height:35px; background:url(img/portal.png) repeat-x; } .portal span span{ padding:0 0 0 20px; background:url(img/portal.png) no-repeat 0 -40px; } .portal span span span{padding:0 20px 0 0;background-position:100% -80px;} .STYLE1 { font-family: Arial, Helvetica, sans-serif; font-size: 65px; } </style> <!--[if lte IE 8]> <style type="text/css"> h2 em{color:#e4ebf8;} </style> <![endif]--> <script type="text/javascript"> var i = 5; var intervalid; intervalid = setInterval("fun()", 1000); function fun() { if (i == 0) { window.location.href = "<?php bloginfo('url'); ?>"; clearInterval(intervalid); } document.getElementById("secondsDisplay").innerHTML = i; i--; } </script> </head> <body> <h1></h1> <h2><em><span class="STYLE1">404 Error&nbsp;&nbsp; </span></em>: 您所查找的页面不存在,可能已被删除或您输错了网址!</h2> <p class="link"> <a href="/">&#9666;返回首页</a> <a href="javascript:history.go(-1);">&#9666;返回上一页</a> </p> <dl class="texts"> <dt>我正在联系火星总部查找您所需要的页面.请返回等待信息..</dt> <dd> <ul> <li>不要返回吗?</li> <li>确定不要返回吗?</li> <li>真的真的确定不要返回吗?</li> <li>系统在 <span id="secondsDisplay" style="font-size:20px;color:red;">5</span> 秒钟之后带你返回地球。</li> </ul> </dd> </dl> </body>

2012-04-28 · 1 min · bystander

Win7使用Putty连接VitualBox下的Ubuntu

推荐连接方式选择Host-only Adapter(主机模式)。设置方法是打开vitualbox,然后选中虚拟机,点击设置,找到网络,然后如下图选择 设置完成后,启动ubuntu,然后执行 ifconfig -a 找到下面这行,可以看到虚拟机分配到的ip地址为192.168.56.101 然后呢,可以在win7的cmd下 ping 192.168.56.101,看看可不可以ping通, 有返回所以是通的, 然后在ubuntu下需要执行 sudo apt-get install openssh-server Ubuntu缺省安装了openssh-client(用于ubuntu连接其他服务器),所以在这里就不安装了,只安装server,用于其它电脑连接ubuntu,如果你的系统没有安装的话,再用apt-get安装上即可。 然后确认sshserver是否启动了: ps -e |grep ssh 如果只有ssh-agent行那ssh-server还没有启动,需要执行 service sshd start ,启动ssh服务器 如果看到sshd那说明ssh-server已经启动了。 然后下载putty,推荐去官方下载,下载完成后发现是单文件,直接执行即可。 输入ubuntu的ip点击open即可 登录上以后执行命令会发现有乱码,鼠标右键点击putty窗口的标题栏,选择,“Change Settings”,“Translation”,在"Received data assumed to be in which character set"的下拉菜单里选择"UTF-8"。如下图 这样,下次又得重复同样的工作,为了保持配置,继续在上图选择左边的session 在saved session输入个名字,save即可,下次直接连这个就可以了 参考:http://www.linuxidc.com/Linux/2011-12/49325.htm http://spark10000.blog.51cto.com/955100/547211 至于putty的使用不在本文的计划范围内,以后有机会再写吧。 每次遇到问题就体会到网络的信息实在太杂了。掌握搜索技术和对数据的快速筛选很重要。

2012-04-26 · 1 min · bystander

正规式->最小化DFA说明

 今天早上去图书馆,去看编译原理,想把这部分搞清楚,看着龙书+国产的某一本不知什么的习题与解析,猜过程。。猜原理。。终于是看懂了。。 整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过“子集构造法”转化为DFA, 三,在把DFA通过“分割法”进行最小化。 **一步很简单,就是反复运用下图的规则,**图1 这样就能转换到NFA了。 给出一个例题,来自Google book。本文主要根据这个例题来讲,图2 二.子集构造法。 同样的例题,把转换好的NFA确定化,图3 这个表是从NFA到DFA的时候必须要用到的。第一列第一行I的意思是从NFA的起始节点经过任意个ε所能到达的结点集合。Ia表示从该集合开始经过一个a所能到达的集合,经过一个a的意思是可以略过前后的ε。同样Ib也就是经过一个b,可以略过前后任意个ε。 至于第二行以及后面的I是怎么确定的。我参考了一些题目才明白,原来就是看上面的Ia和Ib哪个还没出现在I列,就拿下来进行运算,该列对应的Ia和Ib就是前面我说的那样推导。 如果还不太明白,看图就是了。你会发现I中的几个项目都在Ia和Ib中出现了。而且是完全出现 这步做完以后,为了画出最后的DFA,那么肯定得标出一些号来,比如1.2.3.。或者A。 B。c,我一般标的方法是先把I列全部标上1.2.3.递增。然后看1表示的集合和Ia和Ib中的哪个集合一样,就把那个集合也表示为1.继续向下做。最后会得到这样一个表格。图4 至此,就可以表示出DFA了。就对照上面那个表,从0节点开始经过a到1.经过b到2,就这样画就行了。。 最后的DFA如下图,图5 双圈的表示终态,这个是怎么来的呢。去看看图4,会发现有些项之前有双圈标志,这个是因为在NFA图2中,9为终态,所以所有包含9的集合都被认为是终态集,改成1.2.3.。。方便画节点后就需要把这些点作为终态了。。 三.最小化,分割法。 FA的最小化就是寻求最小状态DFA 最小状态DFA的含义: 1.没有多余状态(死状态)2. 没有两个状态是互相等价(不可区别) 两个状态s和t等价的条件: 兼容性(一致性)条件——同是终态或同是非终态 传播性(蔓延性)条件——从s出发读入某个a和从t出发经过某个a并且经过某个b到达的状态等价。就是相同。 DFA的最小化—例子,第一步都是固定的。分成终态和非终态 1.将M的状态分为两个子集一个由终态k1={C,D,E,F}组成,一个由非终态k2={S,A,B}组成, 2.考察{S,A,B}是否可分. 因为A经过a到达C属于k1.而S经过a到达A属于k2.B经过a到达A属于k2,所以K2继续划分为{S,B},{A}, 3.考察{S,B}是否可再分: B经过b到达D属于k1.S经过b到达B属于k2,所以S,B可以划分。划分为{S},{B} 4.考察{C,D,E,F}是否可再分: 因为C,D,E,F经过a和b到达的状态都属于{C,D,E,F}=k1所以相同,所以不可再分: 5.{C,D,E,F}以{D}来代替则,因为CDEF相同,你也可以用C来代替。无所谓的最小化的DFA如图,: 真麻烦啊。。心里清楚,还得找些图来说明。。额。。基本上感觉自己讲清楚了。。。不清楚的地方。。请留言互相讨论。。谢谢。。 参考: http://www.worldcat.org/title/bian-yi-yuan-li-xue-xi-fu-dao/oclc/302301738 http://metc.gdut.edu.cn/compile/cmpl3/3-3.htm

2012-04-25 · 1 min · bystander

WIN7上网提示711错误解决

 朋友今天上网突然网络连接出现了这个问题,也就是无法加载远程访问连接服务。Google了一下,第一种方法就是查看如下的服务是否启动,如果没有,自行启动。 服务名称:eventlog 显示名称: Windows Event Log 启动类型:自动 服务名称:TapiSrv 显示名称: Telephony 启动类型:手动 服务名称:SstpSvc 显示名称: Secure Socket Tunneling Protocol Service 启动类型:手动 服务名称:Netman 显示名称: Network Connections 启动类型:手动 服务名称:nsi 显示名称: Network Store Inte***ce Service 启动类型: 自动 服务名称:RasMan 显示名称: Remote Access Connection Manager 启动类型:手动 启动方法:对着我的电脑点右键-》管理-》服务和应用-》服务 找到对应的服务后,右键属性,启动类型就可以了 但是如上操作有时并不可以,会提示有些服务不能启动,这种情况下, 用管理员账号登陆,再打开 c:\windows\system32\logfiles 如果看到 wmi文件夹,在wmi文件夹上点右键,点 获取管理员权限 ,后重启即可修复。 附上Win7下添加右键获取管理员权限的方法: 在Win7下经常要用到管理员权限,为了方便可以添加一个右键菜单,方法如下: 新建一个“记事本”文件,复制以下内容: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="获取管理员权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\*\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" [HKEY_CLASSES_ROOT\exefile\shell\runas2] @="获取管理员权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\exefile\shell\runas2\command] @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" [HKEY_CLASSES_ROOT\Directory\shell\runas] @="获取管理员权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" 复制好后选文件-另存为,保存类型选"所有文件",文件扩展名为reg 然后运行即可。 Win7下取消右键获取管理员权限方法: Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\*\shell\runas] [-HKEY_CLASSES_ROOT\exefile\shell\runas2] [-HKEY_CLASSES_ROOT\Directory\shell\runas] 同样的保存上面内容为reg格式文件即可。

2012-04-23 · 1 min · bystander

Ubuntu 安装phpmyadmin

在lamp环境搭建这篇文章中,使用apt-get安装了lamp环境,可能你会发现mysql命令行操作不方便。那么需要安装web版的phpmyadmin来辅助了。两步; 1.打开终端 输入 sudo apt-get install phpmyadmin 执行过程中我记得会让输入msql的密码。和设置phpmyadmin的密码。phpmyadmin的用户名是root 然后直接访问 http://localhost/phpmyadmin,会发现不能用。因为phpmyadmin被安装在了/usr/share/phpmyadmin/目录。 sudo ln -s /usr/share/phpmyadmin/ /var/www/ 建立一个软连接,不喜欢的话,你也把phpmyadmin直接复制到 /var/www/的文件夹下面也可以。 在Ubuntu下面就可以通过http://localhost/phpmyadmin正常使用phpmyadmin了。

2012-04-21 · 1 min · bystander

Mysql ERROR 1064 (42000) 问题

昨天在lamp环境下写sql语句的时候,其中有一条语句是这样的,看着没什么错啊。。然后执行会报ERROR 1064这个错误。 create table book (id unsigned primary key auto_increment); 后来解决了原来是是类型不全。必须写成 create table book (id int unsigned primary key auto_increment); 很诡异。。因为理论上unsigned应该是被识别成int unsigned。。还有其他一些情况,反正就是只要报1064.可能语法错误。可能是拼写。或者是分号,mysql的错误提示是很差的。如果把 auto_increment 自增属性加到非主键上。也会报1064的诡异错误。。 参考:stackoverflow

2012-04-21 · 1 min · bystander

二级域名查找 实现演示(GAPI+Json+C#)

 昨天看到了李劼杰的检索一个域名下属所有子域名的两种方法很受启发。想用C#实现一些东西,本来是打算做的相对完整一点的,结果发现Google 开放的api貌似是有限制,段时间内不同提交太多。所以就简单实现一下,有需要的朋友自己扩展 刚开始的思路是想Google应该是有开放的api吧。。于是先Google C# 收集 Google搜索结果。翻了一会,看到了 此文 ,一看我去,返回的竟然是json格式。。只听过,从来没有接触过。。。不做总是不会的,试试。 思路;访问该页面,得到字符串-》去掉多余部分-》解析成对象-》提取对象的字段 1.访问该<pre lang]“C#">http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=hello,其实hello部分就是需要查找的字串,对于查找二级域名这种事,应用到Google的一个语法就是site:leaver.me。类似这样的,可以获取到所有leaver.me上的子站和内容。。 然后分析json数据。直接访问会发现格式很乱。使用http://jsonformatter.curiousconcept.com/这个工具进行格式化。最终结果如图 可以很清楚的看出json的结构,results是结果集,我需要的是需要的是[]之间的部分,包括[],我理解的是这样。默认给出4个结果。 2.要去掉多余部分,得用正则表达式了, json = "[" + Regex.Match(json, @"(?<=\[).+?(?=\])", RegexOptions.IgnoreCase).Value + "]"; //得到一个数组[]中间的部分 json解析我在外国找到了json.net这个解析器,导入什么的就不说了,至于用法我是看的他的文档 3.List results = JsonConvert.DeserializeObject<List>(json); //list 存放解析的结果,result为对应自写类 就是将一个json格式的字符串解析成一个list组,组内元素为一个对应的类,就是先分析json的格式。发现每个结果都有如下的格式 public string GsearchResultClass{ get; set; } public string unescapedUrl{ get; set; } public string url{ get; set; } public string visibleUrl{ get; set; } public string cacheUrl { get; set; } public string title: { get; set; } public string titleNoFormatting { get; set; } public string content { get; set; } 所以写一个类,来用于json数据的反序列号,其实就是解析啦。。这样通过对解析器的调用就能对应着吧json里面的值赋值给类对象了。 4.完成后就得到了一个List对象。里面包含四个结果的所有信息,只要调用results[i].对应属性就可以了。这里分析后可知二级域名在visibleUrl里,所有就调用它。用到了HashSet这个模板。元素唯一不重复。 最终效果: 写程序需要是处理边界情况。。感觉是。主要是我对json格式的解析很不清楚。。只能边学边做。。还有因为写之前没有规划好,打算写全一些,也没想好每个函数来干什么,结果导致后面很麻烦。竟然用了一个全局变量。。其实可以改的。还是算了,演示而已。而且。当时不太清楚google的限制。到达限制后会返回一个错误的结果,多次异常。不顾加强了调试代码的能力,也好。唉。矬人就是矬人啊。。 源码下载: [downloadicon href=http://pan.baidu.com/share/link?shareid=91790&uk=1493685990]Finder Demo[/downloadicon]

2012-04-20 · 1 min · bystander