该博客只为记录点滴所学,若有误导,还请大家原谅,并不吝赐教。
一直不太明白应用函数求导的方法能求出图像强度变化的边缘,其实就是图像边缘检测。现在终于想通了,解释如下。比如一张如下的图片:
图1
检测边缘可以检测到狗和兔子的轮廓。因为它们的轮廓跟其周围的像素值强度差是很明显的。那怎样理解这个呢?我们先假设有一个一维的图片,一维的图片就是一条线。它可以如下表示:
图2
横轴表示像素坐标,纵轴表示像素值。(如果不太好理解的话,我们可以对应二维图片来理解,像素坐标就是诸如(x,y)这样的值,只不过一维图片只需一个值来表示像素坐标,这里只需用t表示。像素值是一样理解的。)
再说回上面图2那张图片,可以看到在红色圆圈处像素值跳跃比较大。即在同样的delta t区间里,该处的像素值变化最大。而此处的导数值也越大,趋于无穷。于是我们就可以将其看成是一维图像的边缘。将其延伸到二维图片,即我们所认知的看到的普通的图片,也是一样的道理。我们可以将其拆分成两个轴向的一维图片,然后组合起来。
综上,就解释了为什么求导可以得出一张图片的边缘。比如我们假设当导数超过一个限度之后,就认为它是边缘,我们就把它的像素值设为255,否则设为0.
本文是作者对自己使用各大搜索引擎的经验分享,专业术语叫SEO啦,希望对广大博客爱好者,SEO专家有所帮助 以下是主要中文搜索引擎的收录、录入、登录地址入口,
百度 说明:中文搜索引擎老大,收录速度一般,~排~名~据说很黑很暗,通常1~2周,
喜欢收录中文和拼音为主的关键字,使用网络蜘蛛大范围检索收录,比较占服务器资源
内容整理较少,收录内容比较乱,BLOG方面特别喜欢收录blog的TAG,分类的链接,不
喜欢作者,例如本人,当然对.cn结尾的域名特别照顾,拼音域名更佳。
http://www.baidu.com/search/url_submit.html
google 中文搜索引擎 说明:比较科学公平地收录,通常先查看网站的sitemap,然后再
访问更新索引,如果网站更新快,索引更新也快,一般1~2周,但是收录较慢,拼音的或
者汉字的收录不太好,火星文往往有歧义的搜索,喜欢博客的TAG,分类,评论,就不喜
欢你的文章,(电脑不喜欢你的文采),不喜欢h1,偏偏喜欢h2,不喜欢跟X开头
的单词,通过网站认证的除外,对网站质量、内容检查较为严格,本站用了10天,5条收录,
有一最大大缺点,就是冷不丁因为某些“热门”关键字清除你所有的收录(911啦,(LA)?
登?啦),不留任何情面,切记,切忌。
http://www.google.cn/intl/zh-CN/add_url.html
Yahoo!中国 说明:中国第三大搜索引擎,比较喜欢非盈利的网站,目前已近跟Google
合作,同时自己有收录系统,站长工具,喜欢收录网上商店系统,博客系统,喜欢.org
.net,.me,.name之类的个人网站,速度可以1~4周,本站12月5号提交,目前未收
录,最大的优点,喜欢跟淘宝,阿里巴巴,有点关系的网站,跟google共享一部分搜索
数据,做网店的可以考虑优化Yahoo,缺点,通常yahoo需要人工审核,编订索引,内
容方面要注意。
http://cn.yahoo.com/docs/info/suggest.html
搜狐/搜狗 说明:目前最难找的收录入口了,至今据说关闭了,搜狗现在开始使用google
的搜索结果,基本被google收录sogou就可以搜到,比较喜欢生僻字,火星文,因为他有
最牛B的输入法,以下入口以前我用过,现在可能无效。
http://db.sohu.com/regurl/regform.asp?Step
新浪/爱问/iask 说明:国内注册用户最多的门户,爱问搜索是国内最早提供交互式问题搜索的
搜索引擎,目前使用的是google的搜索结果,跟google共享,但是iask还是提供爱问的登录
入口支持录入,一般1~2周会有收录,一般喜欢加了“?”的标题收录,记得在标题末尾加上
可爱的“?”一般会提高收录率,毕竟iask喜欢人问问题嘛
http://iask.com/guest/add_url.php
网易/有道 说明:163网易的搜索引擎,标榜新技术,博客搜索,翻译都是很快的,个人比较
喜欢博客搜索功能,个人博客用户可以考虑添加,优点。完全独立的搜索引擎,引用部分搜索
引擎结果,速度较快(内容较少),速度还是可以的,以前我的博客(非163)大概一周就收
录,缺点,先天起步较早,用户较少,带来的访问量不多,但质量优良
http://tellbot.youdao.com/report
腾讯/soso 说明:差!标准的山寨货SE,尽然还有这么高市场份额,内容全部来自google,
没有独立的收录入口,不过优点在于腾讯QQ拥有世界最多的IM用户,讨厌的QQ迷你首页提
供搜索功能,还有点利用价值吧,一般只要被google收录即可搜索得到
收录地址:没有发现
以下是主要的英文搜索引擎收录录入地址
Google 说明:这个具体介绍就不说了,上面的中文google已经说明,站长必登录
http://www.google.com/addurl.html
MSN live 说明:微软的搜索引擎,技术比较牛,也很老牌,但是大部分用户还只是知道MSN
是聊天工具,但是MS有着N多的操作系统用户可是不容小视的,IE和navigater的斗争结果大家
应该知道的,何况是在中国相信N多的D版XP吧,MSN是默认放IE的搜索引擎,很流氓,不过
很有用收录速度超慢,不过据说可以发Email联系管理员,E文不行就等吧。
http://search.msn.com/docs/submit.aspx?FORM=WSDD2
Alexa 说明:最权威的网站排名网站了,也提供搜索功能,不过我个人只是关注它提供的排
名信息登录速度很快,不过索引更新很慢,慢慢等吧
http://www.alexa.com/site/help/webmasters
Yahoo!说明:是目前世界第二大搜索引擎,也是世界注册用户最多的世界级门户网站,世
界人均一个yahoo账号,收录速度很慢,据说要人工检索你的网站,目前已经实现跟google
分享结果,一般google收录的yahoo都可搜到,登录速度未知,反正就是等,如果你需要国
外用户的话,记得登录
http://siteexplorer.search.yahoo.com/submit
AOL 说明:美国在线,是最大的用户定制搜索引擎提供商,简单的就是它创造了N多的小型搜
在使用过程中,偶尔遇到声音突然没有了的情况,右下角的喇叭图标有一个红叉。查看设备管理器,发现“英特尔(R)智音技术音频控制器”带有感叹号,属性中说代码10.
尝试过很多方法都无效,例如安装官网声卡Realtek驱动、用各类坑爹驱动软件。
在各类摸索中,终于发现了一个不用重装系统的方法。
步骤如下:
1.打开设备管理器;
2.点击上方操作栏:“查看”-“显示隐藏的设备”;
3.找到下方设备中的:“声音、视频和游戏控制器”-“Realtek High Definition Audio(SST)”;
4.右击上述设备,卸载;
5.在官网下载声卡驱动,并安装;
注:如果我的这个方法无效,那只好重装系统。祝你好运!
在ArcGIS中平移要素时经常出现“无法移动要素。坐标或测量值超出范围”的问题,这种情况通常有由于坐标系的空间范围问题造成的,如果你还想使用这个坐标系,有一个很简单的处理方法:
1.首先去掉数据的坐标系
具体的操作见http://blog.csdn.net/gisuuser/article/details/52197909
2.平移数据,不会出现任何问题
根据自己的需要平移
3.再添加原来的坐标系
方法原理:
1.算出图像的均值
2.判断每个像素值,大于均值的赋值为255,小于均值的赋值为0
示例代码如下:
void img_binary(unsigned char* img, int h, int w) { int i, j; int totalPixValue = 0; int mean = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { totalPixValue += img[i*w + j]; } } mean = totalPixValue / (h*w); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (img[i*w + j] < mean) img[i*w + j] = 0; else img[i*w + j] = 255; } } }
原文链接:7 search engines lost to history: Where are they now? 作者:Peter Gothard 译者:郭芮,关注大数据领域,寻求报道或投稿请发邮件[email protected]。
对某些特定时期的人而言,搜索领域只代表着一件事情:Google。但是对很多人来说,他们还记得有那样的一个时代——搜索引擎数不胜数,新奇的品牌备受瞩目。
AltaVista,Ask Jeeves,Lycos——这些名字仿佛还记忆犹新,但后来发生了什么?下面就跟随我们一起去寻找答案。
7、 AltaVista 是了,那时候还有令人难忘的蓝色山脉和大型的深黄色酒吧。在90年代的中后期(1995年由Digital Equipment Corporation创建),AltaVista几乎可以称得上是搜索引擎之王,它是一个以网页全文检索为主、同时提供分类目录的搜索引擎,允许以25种不同的语言进行搜索,并提供英、法、德、意、葡萄牙、西班牙语双向翻译。不过后来随着Google的崛起而受到严重打击。
Yahoo(同样试着应对过Google的冲击)最终在2003年收购了AltaVista,虽仍就保持AltaVista的网站地址和名称,但却需要通过Yahoo引擎路由搜索。
不过在2013年6月的时候,Yahoo重新考虑后又改变了主意,重新定向AltaVista至Yahoo Search的地址,所以这对于Yahoo来说可能带来了一些资金浪费。
6、HotBot 有个鲜为人知的事实:HotBot是由《Wired》杂志推出的。1996年,HotBot的创意被提出,由于它拥有比竞争对手更快的数据库更新速度,1.1亿的网页库容量,并且以独特的搜索界面著称,所以它也为营销人员寻求新业务提供了大量的机会。
在晦涩难解的Google算法侵占一切之前,这个时代搜索引擎所承诺的“更快更新”仍具有重大意义。但是不管怎么说,HotBot最终还是失败了,在1998年被Lycos收购。
多年来HotBot经历过各种形式,充当着一个普通的搜索引擎,服务对象包括Yahoo,MSN,Google等,然后在2011年的时候它似乎成了一个服务于Lycos其他网站的市场门户。
现在它仍然在那儿,还会经常在搜索结果中插入销售链接。是的,这看起来有点讨厌。
5、Lycos 那么,Lycos是什么呢?“Lycos”是Lycosidae(一种很善于捕捉猎物的狼蛛)的缩写,是最早提供信息搜索服务的网站之一。1994年在Carnegie Mellon University的时候,Michael Loren Mauldin的搜索项目从所有其他的搜索引擎中脱颖而出,在1999年Lycos就成为了世界上访问量最多的网站。
然后又是因为谷歌的冲击,导致它以125亿美元被卖给了Telefónica,不过仅仅四年后,它就以9540万美元的价格被转卖给了韩国Daum Communications Corporation,这对于Telefónica来说简直糟糕透顶。
Daum使Lycos偏离了搜索标准,并以社区为核心不断努力改进,加强了邮件功能并且添加了Skype-like Lycos Phone。
然而这一切还是无济于事,最终在2012年Indian的网络营销公司Ybrant Digital以3600万美元的价格将其收购。
现在它还在那儿,和它的蹩脚对手相互竞争着,但至少不会像HotBot那样令人厌恶。
4、Ask Jeeves Ask于1996年由加州大学伯克利分校的Garrett Gruener和David Warthen在加利福尼亚伯克利创办,它经历了一个短暂但辉煌的阶段,是在某种程度上被大多数人所青睐的搜索引擎。Ask是一个以问答为核心的搜索引擎网站,最初想法是让用户在日常生活中获得提出的问题答案,以及传统的关键字搜索。在1990年代末期,人们像是突然见识了互联网的力量,发现利用互联网来处理问题可以获得更加人性化的体验,正如P.G. Wodehouse小说中的管家所服务的那样。
这很像Microsoft和Facebook正在推行的“bot”套环,除了大了20岁。
2006年Ask Jeeves想要重塑Ask.com品牌,但这个网站很快就发现自己是在妄想攀登Google这座大山,最终以失败结束并回到其问答的根本模式上了。
Ask.com目前仍然存在,Jeeves将“ask”算法和现实中人们提供的真正答案(在2014年收购的ASKfm帮助下获得)结合起来,把网络搜索材料外包给第三方,并运行了一个非常成功的应用程序,可以每分钟生成20000个问题。目前,Ask还增加了数学、字典、和转换问题支持。
总之,这其实是一个挺精明的方式:在别人失败的地方改造自己。
3、Dogpile 自Dogpile在1996年1月2日被创建起,人们就没有真正地理解过它。这听起来就像是误入了某件令人不愉快的事情里(而且很可能躲无可躲,因为很明显以前的狗吃的骨头比现在多多了)。
从1990年代中期,Dogpile的核心就变成了个带有小狗标识的搜索引擎,而且似乎由于某种原因,它比其他使用的时间都长。
Dogpile汇总了Google,Yahoo和Yandex的搜索结果,并且能够利用该引擎猜测出来的、附加的搜索条件来智能优化用户的搜索结果,这也许就是它不仅没有崩溃反而在今天依旧强大的主要原因。
2、AstaLaVista 如果你是一个很酷的书呆子,并且认为自己有能力进入可怕的暗网,那么AstaLaVista值得推荐。
AstaLaVista创建于1994年,主要服务于非专业人士,帮助他们找到编码错误的应用程序同时试着解决DDoS,垃圾邮件或骚扰的问题。
现在,AstaLaVista自称自己是“用于安全相关网站的搜索引擎”,还为搜索框公开提供“divx/dvd subtitles”和“cd/dvd/pc/console covers”。
1、WebCrawler 另一个由华盛顿大学布莱恩·平克顿创建于1994年的WebCrawler,是第一个提供全文搜索功能的搜索引擎。WebCrawler能够为用户提供搜索图片、音频、视频、新闻、黄页和白页的选项卡。它在1995年被AOL收购,又在1997年出售给Excite(在Google崛起后估计Excite会非常后悔这一举动)。
最近,WebCrawler又发生了变化,开始处理起其他搜索引擎的结果。
本文是陈硕的《Linux多线程服务端编程 使用muduo C++网络库》一书中,第三章的读书笔记。其中暗红颜色的文字是自己的理解,鲜红颜色的文字表示原书中需要注意的地方。
一:进程和线程
每个进程有自己独立的地址空间。“在同一个进程”还是“不在同一个进程”是系统功能划分的重要决策点。《Erlang程序设计》[ERL]把进程比喻为人:
每个人有自己的记忆(内存),人与人通过谈话(消息传递)来交流,谈话既可以是面谈(同一台服务器),也可以在电话里谈(不同的服务器,有网络通信)。面谈和电话谈的区别在于,面谈可以立即知道对方是否死了(crash,SIGCHLD),而电话谈只能通过周期性的心跳来判断对方是否还活着。
有了这些比喻,设计分布式系统时可以采取“角色扮演”,团队里的几个人各自扮演一个进程,人的角色由进程的代码决定(管登录的、管消息分发的、管买卖的等等)。每个人有自己的记忆,但不知道别人的记忆,要想知道别人的看法,只能通过交谈(暂不考虑共享内存这种IPC)。然后就可以思考:
·容错:万一有人突然死了
·扩容:新人中途加进来
·负载均衡:把甲的活儿挪给乙做
·退休:甲要修复bug,先别派新任务,等他做完手上的事情就把他重启
等等各种场景,十分便利。
线程的特点是共享地址空间,从而可以高效地共享数据。一台机器上的多个进程能高效地共享代码段(操作系统可以映射为同样的物理内存),但不能共享数据。如果多个进程大量共享内存,等于是把多进程程序当成多线程来写,掩耳盗铃。
“多线程”的价值,我认为是为了更好地发挥多核处理器(multi-cores)的效能。在单核时代,多线程没有多大价值(个人想法:如果要完成的任务是CPU密集型的,那多线程没有优势,甚至因为线程切换的开销,多线程反而更慢;如果要完成的任务既有CPU计算,又有磁盘或网络IO,则使用多线程的好处是,当某个线程因为IO而阻塞时,OS可以调度其他线程执行,虽然效率确实要比任务的顺序执行效率要高,然而,这种类型的任务,可以通过单线程的”non-blocking IO+IO multiplexing”的模型(事件驱动)来提高效率,采用多线程的方式,带来的可能仅仅是编程上的简单而已)。Alan Cox说过:”A computer is a state machine.Threads are for people who can’t program state machines.”(计算机是一台状态机。线程是给那些不能编写状态机程序的人准备的)如果只有一块CPU、一个执行单元,那么确实如Alan Cox所说,按状态机的思路去写程序是最高效的。
二:单线程服务器的常用编程模型
据我了解,在高性能的网络程序中,使用得最为广泛的恐怕要数”non-blocking IO + IO multiplexing”这种模型,即Reactor模式。
在”non-blocking IO + IO multiplexing”这种模型中,程序的基本结构是一个事件循环(event loop),以事件驱动(event-driven)和事件回调的方式实现业务逻辑:
//代码仅为示意,没有完整考虑各种情况 while(!done) { int timeout_ms = max(1000, getNextTimedCallback()); int retval = poll(fds, nfds, timeout_ms); if (retval<0){ 处理错误,回调用户的error handler }else{ 处理到期的timers,回调用户的timer handler if(retval>0){ 处理IO事件,回调用户的IO event handler } } } 这里select(2)/poll(2)有伸缩性方面的不足(描述符过多时,效率较低),Linux下可替换为epoll(4),其他操作系统也有对应的高性能替代品。
[root@VM_55_31_centos ~]# root当前登录用户 VM_55_31_centos主机名,默认主机名localhost windows中局域网内主机名,ip不能有相同的,否则无法上网通信,linux无限制,没有采用这种协议 ~当前所在的目录,家目录 “#”超级用户提示符 $普通用户提示符
/root root用户的家目录 /home/user1/ 普通用户的家目录
pwd:显示当前所在位置 7种文件类型
命令 选项 参数
ls: -a 所有目录 -l 详细信息
total 19672 -rw-------. 1 root root 2523 Apr 21 15:10 anaconda-ks.cfg drwxr-xr-x 3 root root 4096 Jul 30 22:29 gitrepository drwxr-xr-x 9 1001 1001 4096 Jul 24 14:48 nginx-1.10.1 -rw-r--r-- 1 root root 909077 Jun 1 00:38 nginx-1.10.1.tar.gz drwxr-xr-x 18 git git 4096 Jul 25 13:29 php-5.6.24 -rw-r--r-- 1 root root 19188810 Jul 21 17:30 php-5.
效果展示:
步骤:
1、工具->选项->环境->常规->颜色体验
选为深色
2、在http://studiostyl.es/schemes/son-of-obsidian中,下载Son of Obsidian字体设置,然后 工具->导入和导出设置->导入选定的环境设置->否,仅导入新设置,覆盖我的当前设置->浏览->找到下载的son-of-obsidian.vssettings文件,然后点击完成,大功告成!
说到TCP服务器,就不得不提socket编程,我们知道,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识⽹络通讯中的唯一一个进程,“IP地址+端口号”就称为socket。 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此⽤来描述网络连接的一 对⼀的关 系。 TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socket API。 TCP/IP协议规定:网络数据流规定应采用大端字节序,即低地址存储高位数据,因此网络数据流的地址是由低到高的,此处应包括收取哈发送数据两个过程。 1.socket数据类型及其相关函数 socket API是一层抽象的⽹网络编程接口,适⽤用于各种底层⽹网络协议,如IPv4、IPv6,以及UNIX Domain Socket。然⽽,各种网络协议的地址格式并不相同,如下图所示: sockaddr数据结构: 可以看到,各种sockaddr的地址结构前16位都是一样的,都表示整个结构体的长度,IPv4、IPv6和UNIX Domain Socket的地 址类型分别定义为常数AF_INET、AF_INET6、AF_UNI,这样,只要取 得某种sockaddr结构体的 ⾸首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地 址类型字段确定结构体中的内容。因此,socket API可以接受各种类型的sockaddr结构体指针做参数,例如bind、accept、connect等函数,这些函数的参数应该设计成void *类型以便接受各 种类型的指 针,但是sock API的实现早于ANSI C标准化,那时还没有void *类型,因此这些函数的参数都用struct sockaddr *类型表示,在传递参数之前要强制类型转换⼀下。 举个例子:bind(listen_sock,(struct sockaddr*)&local,sizeof(local)) 下面是基于TCP协议服务器/客户端的一般流程: 服务器调用socket()—创建套接字、bind()—绑定、listen()—监听, 完成初始化后,调⽤accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。 数据传输的过程: 建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求,一问一答的⽅方式。因此,服务器accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此 期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调⽤用read()阻塞 等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。 如果客户端没有更多的请求了,就调用close() 关闭连接,就像写端关闭的管道⼀样,服务器 的 read()返回0,这样服务器就知道客户端关闭了连接,也调⽤用close()关闭连接。注意,任何⼀方close()后,连接的两个传输⽅方向都关闭,不能再发送数据了。如果⼀方调用shutdown() 则连接处于半关闭状态,仍可接收对⽅方发来的数据。 下面就来看一下这个服务器和客户端是如何实现的: 首先来到目录下创建server.c和client.c两个文件,在编写一下Makefile文件,然后正式编写server.c: 以上就是server的编写,下面是client 的编写: 好了,现在服务器和客户端已将编写好了,我们来测试一下: 我们在另一个终端进入到目标目录里运行client,并输入文字: 然后来看看客户端是否可以收到client发过来的消息: server已经成功收到了消息,并且TCP服务器只能被动的接受处理client发起的请求,所以只能是server接受client发来的消息,server并不能给client发消息。 好啦,这就是我编写的简单的TCP服务器/客户端啦,希望各种小伙伴们指出问题,共同学习~