好玩儿的程序

管理员 : admin 创建时间 : 2015-11-13 09:58:56

简介 : 分享有趣的开发程序代码 http://bbs.landingbj.com/

5353

话题 7个杀手级的开源监测工具

  工具1:“Cacti”  Cacti是一个性能广泛的图表和趋势分析工具,可以用来跟踪并几乎可以绘制出任何可监测指标,描绘出图表。从硬盘的利用率到风扇的转速,在一个电脑管理系统中,只要是可以被监测的指标,Cacti都可以监测,并快速的转换成可视化的图表。    工具2:“Nagios”  Nagios是一个经典的老牌系统和网络监测工具。运行速度快,可靠,需要针对应用定制。Nagios对于初学者是一个挑战。但是它的极其复杂的配置正好也反应出它的强大,因为它几乎可以适用于任何监控任务。要说缺点的话就是不怎么耐看,但是其强劲的功能和可靠性弥补了这个缺点。    工具3:“Icinga”  Icinga 是一个正在重建的Nagios的分支,它提供了一个全面的监控和警报的框架,致力于设计一个像Nagios一样的开放和可扩展性的平台。但是和Nagios拥有不一样的Web界面。Icinga 1 和 Nagios非常的相近,不过Icinga 2就重写了。两个版本都能很好的兼容,而且,Nagios用户可以很轻松的转到Icinga 1平台。    工具4:“NeDi”  NeDi可能不如其他的工具一样闻名全世界,但它确是一个跟踪网络接入的一个强大的解决方案。它可以很流畅的运行网络基础设施和设备目录,保持对任何事件的跟踪。并且可以提供任意设备的当前地点,也包括历史地点。NeDi可以被用于定位被偷的,或者是丢失掉的设备,只要设备出现在网络上。它甚至可以在地图上显示所有已发现的节点。并且很清晰的告诉人们网络是怎么互联的到物理设备端口的。    工具5:“Observium”  Observium 综合了系统和网路监控,在性能趋势监测上有很好的表现,它支持静态和动态发现来确认服务器和网络设备,利用多种监测方法,可以监测任何可用的指标。Web界面非常的整洁,易用。就如我们看到的,Observium也可以在地图上显示任何被监测节点的实际地点。需要注意的是面板上关于活跃设备和警报的计数。    工具6:“Zabbix”  Zabbix 利用一系列的工具监测服务器和网络。Zabbix的监控代理支持大多数的操作系统,你可以被动的或者是使用外部检查,包括SNMP来监控主机和网络设备。你也会发现很多提醒和通知设施,和一个非常人性化的Web界面,适用于不同的面板,此外,Zabbix还拥有一些特殊的管理工具来监测Web应用和虚拟化的管理程序。Zabbix 还可以提供详细的互联图,以便于我们了解某些对象是怎么连接的。这些图是可以定制的,并且,图也可以以被监测的服务器和主机的分组形式被创建。    工具7:“Ntop”  Ntop是一个数据包嗅探工具。有一个整洁的Web界面,用来显示被监测网络的实时数据。即时的网络数据通过一个高级的绘图工具可以可视化。主机数据流和与之对应的主机通信信息可以被实时的进行可视化显示。    本文地址:http://www.linuxprobe.com/linux-detectiontools.html  作者:徐积慧,审核员:逄增宝

木偶戏

--

14月前
3845

话题 程序员和会不会修电脑到底有几毛钱关系?

  其实这是一个老生常谈  却至今没有明确答案的问题    之所以想发表这篇文章是因为最近很多程序猿跟我吐槽修电脑这事,今天我不得不出马把这事的解决办法给你们。  Q:“我电脑好像有点问题,你帮我看看哪里出问题了帮我修一下行不?”  A:“。。。看看可以,但其实我也不太会修电脑”  Q:“什么呀,你不是程序员吗,怎么可能不会修电脑~”  额...工作或者学习中总会有人找身边的程序员修电脑,加班加点的工作之余,还得兼做电脑维修。  你要知道,这个世界上有那么一类人,他们永远保持着自私的心态。无论什么时候,他们都在为自己的利益做打算。当你说你在银行工作,他们第一个想法是你能不能 给搞到贷款或者办张没有额度限制的信用卡。当你说你在医院工作,他们第一个想法是能不能去看病不排队或者在医院拿点药品送他。  而软件行业,既是和大众息息相关的行业,又是大众不太了解的行业,通常看到的新闻无非是黑客之类的,远程控制别人,或者盗取银行的钱。  因为他们的不了解,所以会觉得很多事情程序员都可以做,从盗QQ,Photoshop,硬盘文件恢复,到装系统,处理系统故障和软件问题,安装各种盗版软 件,各种手机的越狱Root装盗版应用。并且,另外这些事情往往不涉及实物,给人的感觉是只是在键盘上打打字,又不需要买新硬件之类的,所以往往会被认为是举手之劳,理应帮忙。  在他们眼里只有那台笔记本是值钱的,操作系统、软件、解决问题需要的知识储备和研究时间,还有维修所花费的时间,都是不值钱的。  程序员们不喜欢被问这个问题的原因分三种:  1、因为我不会修,每次回答“不会”别人都会来一句“你学电脑的连电脑都不会修!”这种略有轻视的态度让我不爽,和别人一样,不喜欢被否定。  2、 我因为会修电脑,所以总被那些为了省几十块钱的人找了修电脑,本来生活已经够累了,还要被这些无关紧要的人拖累,所以每次听到这个问题就头皮发麻。最怕的 是有类人,辛辛苦苦免费给她弄了,她还要抱怨你弄的系统没有原来的好用,早知道她出点钱去维修铺装了;或者你辛辛苦苦帮她装个原生系统,她还嫌你慢,说 “我上次找xxx 装人家半小时不到就弄好了,你怎么弄两三个小时啊!”  3、我会修,并以此为乐,别人这么问,会觉得“你这不是怀疑我的能力么!”所以有些不爽。    开玩笑呢,怎么不会修电脑。自己的笔记本变慢了,一把螺丝刀,拆开面板卸下键盘,清理灰尘重涂硅脂,装好开机,so easy。  什么!是你的笔记本坏了?那我不能帮你修了,对不起。我要是帮你修了,就得承担这么几个后果:  1. 如果不小心拆坏了,那么我得赔。   2. 算我走运,装好后电脑正常使用没问题,你会只留下一句谢谢,然后觉得是我应该做的。   3. 你以后会经常拿你朋友的各种笔记本过来给我修理。   4. 你会提出更多要求,直到我做不到。比如,清理垃圾文件或者超频以让系统速度提高十倍。   5. 在我无法满足要求的时候,你会留下一句话:“你不是学计算机的吗?”  如果我不帮你修,而是给你提出一些好的建议:  1. 如果笔记本还在保修期,建议你去售后免费维修,你会说,要跑那么远,好麻烦呀,你帮我送去吧。   2. 如果笔记本已过保修期,建议你去电脑城找专业人士清理,你会说,哎呀还要花20块钱呀,嗯,我觉得我还是比较信任你的技术,怕电脑城的人给修坏了,还是你修吧。  “对不起,我不会修”,不过是常年的经验总结后选择的最能避免麻烦的借口。为什么不给你修,只不过是因为你一不是我近亲二不是我密友三不是我领导。  修电脑军规,时刻谨记在心  1. 如果是朋友让你给他修电脑,而你恰好懂这方面问题,那么:  2. 首先记住这句话:永远不要承认自己是高手,因为这个称号是要付出代价的。  3. 永远不要试图通过电话或者QQ解决某个问题,对方很有可能不知道菜单是什么东西,这不能怨他们,只能怨你自己,因为你永远懒于解释给他们听。  4. 不要想着立马可以解决遇到的问题,因为你所遇到的总是崩溃的系统或者处于崩溃边缘的系统。  5. 如果对方允许你重新安装系统,那就不要试着去做任何修复工作,因为重装系统是最快解决问题的办法。  6. 除了询问哪些资料需要备份,你不要提问对方任何问题,除非你的心理承受能力特别强。  7. 学会保守做人,每次开工前,都记得告诉对方:“我可能无法最终解决问题,还要继续吗?”  8. 对电脑的外观检查永远是第一位的,看看线路是否连接正常,看看USB接口是否连接了其他设备等等。  9. 相信硬件的抗噪能力,尽可能的情况下,不要打开对方的机箱。没有做成医生,反倒被当作破坏者,那是很悲哀的事情。  10. 做好被别人数落的心理准备,因为不懂电脑知识的人,往往懂得如何评价别人。  11. 如果人家说他的内存有200G,你千万不要纠正说是硬盘,否则,你的噩运即将来临。  12. 不知道菜单是什么东西的人,一般也会知道虚拟内存是怎么回事的,按照他的要求去调整就可以了,反正这个不会影响到你完成修理工作。  13. 告诉对方,你没有任何杀毒软件,否则,您所安装的杀毒软件都是最差的,也是问题最多的。  14. 别让自己成为处理打印机故障的高手,告诉你,打印机的麻烦事情可比电脑多多了。  15. 坚决不要帮别人购买电脑,尤其是组装机,除非你想背上吃回扣的骂名,然后每天屁颠屁颠的去帮他们处理故障。  16. 不要反感以下两句话,它会伴随你很久时间:第一句:“我的电脑又出大问题了。”第二句:“你还是过来帮我看看吧。”  17. 尽量不要去动别人的电脑,否则,若干天以后,你的这一行动会导致他的系统崩溃并带来埋怨。  18. 不要去纠正别人的任何错误,除非你有说服别人的超强能力。  19. 尽可能的前提下不要互相传递任何电子文档,因为你的文件很有可能被指责为病毒。  20. 不要害怕指责,因为你无法逃避。  要是觉得这篇文章能够帮到你,请转发到朋友圈,让那些平常找你修电脑,你却无言以对的那些人看到吧!让他们知道:程序员和会不会修电脑这个问题没有半毛钱关系!之所以我能帮你修电脑是因为我智商高过你!  【来源:新浪博客,转载请注明出处】  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、用代码简单绘制一个会动的圣诞树  4、Matlab 制作《最炫民族风》,附代码  5、CMD命令设置定时关机

木偶戏

--

15月前
2261

话题 CMD命令设置定时关机

第一种: win+R,换出输入框——shutdown -s -t 0(-s代表关机-T代表设置关机的时间。这个时间是以秒为单位的) 第二种:at 时间 shutdown -s -t 0 也可指定日期 at 00:00 /every:M,T,W,Th,F,S,Su shutdown -s -f every代表每个,M,T,W,Th,F,S,Su 代表星期几 比如说: 每个星期2 的 13点关机 命令是 at 13:00 /every:t shutdown -s -t 0 第三种:如果你想以倒计时的方式关机,可以输入“Shutdown.exe -s -t 3600”,这里表示60分钟后自动关机,“3600”代表60分钟。 取消自动关机命令:“开始”——“运行”—— shutdown -a 附:shutdown相关参数用法 shutdown用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "mment"] [-d up:xx:yy] 没有参数 显示此消息(与 ? 相同) -i 显示 GUI 界面,必须是第一个选项 -l 注销(不能与选项 -m 一起使用) -s 关闭此计算机 -r 关闭并重启动此计算机 -a 放弃系统关机 -m \\computername 远程计算机关机/重启动/放弃 -t xx 设置关闭的超时为 xx 秒 -c "comment" 关闭注释(最大 127 个字符) -f 强制运行的应用程序关闭而没有警告 -d [u][p]:xx:yy 关闭原因代码 [u 是用户代码 p 是一个计划的关闭代码 xx 是一个主要原因代码(小于 256 的正整数) yy 是一个次要原因代码(小于 65536 的正整数)]  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、用代码简单绘制一个会动的圣诞树  4、Matlab 制作《最炫民族风》,附代码  5、CMD命令设置定时关机  6、程序员和会不会修电脑到底有几毛钱关系?

木偶戏

--

18月前
2219

话题 Matlab 制作《最炫民族风》,附代码

[plain] view plain copy% Most shining national wind//最炫民族风 on Matlab  % The Modification is from "canon", not by me    fs = 44100; % sample rate  dt = 1/fs;    T16 = 0.125;    t16 = [0:dt:T16];  [temp k] = size(t16);    t4 = linspace(0,4*T16,4*k);  t8 = linspace(0,2*T16,2*k);    [temp i] = size(t4);  [temp j] = size(t8);    % Modification functions  mod4=(t4.^4).*exp(-30*(t4.^0.5));  mod4=mod4*(1/max(mod4));  mod8=(t8.^4).*exp(-50*(t8.^0.5));  mod8=mod8*(1/max(mod8));  mod16=(t16.^4).*exp(-90*(t16.^0.5));  mod16=mod16*(1/max(mod16));    f0 = 2*146.8; % reference frequency    ScaleTable = [2/3 3/4 5/6 15/16 ...  1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 ...  2 9/4 5/2 8/3 3 10/3 15/4 4 ...  1/2 9/16 5/8];    % 1/4 notes  do0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4);  re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4);  mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4);    fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4);  so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4);  la0f = mod4.*cos(2*pi*ScaleTable(3)*f0*t4);  ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4);  do1f = mod4.*cos(2*pi*ScaleTable(5)*f0*t4);  re1f = mod4.*cos(2*pi*ScaleTable(6)*f0*t4);  mi1f = mod4.*cos(2*pi*ScaleTable(7)*f0*t4);  fa1f = mod4.*cos(2*pi*ScaleTable(8)*f0*t4);  so1f = mod4.*cos(2*pi*ScaleTable(9)*f0*t4);  la1f = mod4.*cos(2*pi*ScaleTable(10)*f0*t4);  tb1f = mod4.*cos(2*pi*ScaleTable(11)*f0*t4);  ti1f = mod4.*cos(2*pi*ScaleTable(12)*f0*t4);  do2f = mod4.*cos(2*pi*ScaleTable(13)*f0*t4);  re2f = mod4.*cos(2*pi*ScaleTable(14)*f0*t4);  mi2f = mod4.*cos(2*pi*ScaleTable(15)*f0*t4);  fa2f = mod4.*cos(2*pi*ScaleTable(16)*f0*t4);  so2f = mod4.*cos(2*pi*ScaleTable(17)*f0*t4);  la2f = mod4.*cos(2*pi*ScaleTable(18)*f0*t4);  ti2f = mod4.*cos(2*pi*ScaleTable(19)*f0*t4);  do3f = mod4.*cos(2*pi*ScaleTable(20)*f0*t4);  blkf = zeros(1,i);    % 1/8 notes  do0e = mod8.*cos(2*pi*ScaleTable(21)*f0*t8);  re0e = mod8.*cos(2*pi*ScaleTable(22)*f0*t8);  mi0e = mod8.*cos(2*pi*ScaleTable(23)*f0*t8);    fa0e = mod8.*cos(2*pi*ScaleTable(1)*f0*t8);  so0e = mod8.*cos(2*pi*ScaleTable(2)*f0*t8);  la0e = mod8.*cos(2*pi*ScaleTable(3)*f0*t8);  ti0e = mod8.*cos(2*pi*ScaleTable(4)*f0*t8);  do1e = mod8.*cos(2*pi*ScaleTable(5)*f0*t8);  re1e = mod8.*cos(2*pi*ScaleTable(6)*f0*t8);  mi1e = mod8.*cos(2*pi*ScaleTable(7)*f0*t8);  fa1e = mod8.*cos(2*pi*ScaleTable(8)*f0*t8);  so1e = mod8.*cos(2*pi*ScaleTable(9)*f0*t8);  la1e = mod8.*cos(2*pi*ScaleTable(10)*f0*t8);  tb1e = mod8.*cos(2*pi*ScaleTable(11)*f0*t8);  ti1e = mod8.*cos(2*pi*ScaleTable(12)*f0*t8);  do2e = mod8.*cos(2*pi*ScaleTable(13)*f0*t8);  re2e = mod8.*cos(2*pi*ScaleTable(14)*f0*t8);  mi2e = mod8.*cos(2*pi*ScaleTable(15)*f0*t8);  fa2e = mod8.*cos(2*pi*ScaleTable(16)*f0*t8);  so2e = mod8.*cos(2*pi*ScaleTable(17)*f0*t8);  la2e = mod8.*cos(2*pi*ScaleTable(18)*f0*t8);  ti2e = mod8.*cos(2*pi*ScaleTable(19)*f0*t8);  do3e = mod8.*cos(2*pi*ScaleTable(20)*f0*t8);  blke = zeros(1,j);    % 1/16 notes  do0s = mod16.*cos(2*pi*ScaleTable(21)*f0*t16);  re0s = mod16.*cos(2*pi*ScaleTable(22)*f0*t16);  mi0s = mod16.*cos(2*pi*ScaleTable(23)*f0*t16);    fa0s = mod16.*cos(2*pi*ScaleTable(1)*f0*t16);  so0s = mod16.*cos(2*pi*ScaleTable(2)*f0*t16);  la0s = mod16.*cos(2*pi*ScaleTable(3)*f0*t16);  ti0s = mod16.*cos(2*pi*ScaleTable(4)*f0*t16);  do1s = mod16.*cos(2*pi*ScaleTable(5)*f0*t16);  re1s = mod16.*cos(2*pi*ScaleTable(6)*f0*t16);  mi1s = mod16.*cos(2*pi*ScaleTable(7)*f0*t16);  fa1s = mod16.*cos(2*pi*ScaleTable(8)*f0*t16);  so1s = mod16.*cos(2*pi*ScaleTable(9)*f0*t16);  la1s = mod16.*cos(2*pi*ScaleTable(10)*f0*t16);  tb1s = mod16.*cos(2*pi*ScaleTable(11)*f0*t16);  ti1s = mod16.*cos(2*pi*ScaleTable(12)*f0*t16);  do2s = mod16.*cos(2*pi*ScaleTable(13)*f0*t16);  re2s = mod16.*cos(2*pi*ScaleTable(14)*f0*t16);  mi2s = mod16.*cos(2*pi*ScaleTable(15)*f0*t16);  fa2s = mod16.*cos(2*pi*ScaleTable(16)*f0*t16);  so2s = mod16.*cos(2*pi*ScaleTable(17)*f0*t16);  la2s = mod16.*cos(2*pi*ScaleTable(18)*f0*t16);  ti2s = mod16.*cos(2*pi*ScaleTable(19)*f0*t16);  do3s = mod16.*cos(2*pi*ScaleTable(20)*f0*t16);  blks = zeros(1,k);      % Melody by Schau_mal   part0 = [mi1f la0e la0e do1f mi1f ...  re1e re1s mi1s re1e do1e re1e do1e la0f ...  mi1f la0e la0e do1f mi1f ...  so1e re1s mi1s re1e do1e re1e do1e ti0e so0e ...  mi1f la0e la0e do1f mi1f ...  re1e re1s mi1s re1e do1e re1e do1e la0e so0e ...  mi1f la0e la0e do1f mi1f ...  so1e mi1e blkf blkf blkf ...  ];    part1 = [la0f la0e so0e la0f la0e do1e ...  do1f re1e do1e la0f la0f ...  do1f do1e so0e do1e re1e mi1e so1e ...  so1e mi1e re1f mi1f mi1f ...  la1e la1e la1e so1e mi1e mi1f do1e ...  la0e la0e la0e mi1e re1s mi1s re1e re1f ...  mi1e mi1e so1e mi1e re1e mi1e re1e do1e ...  la0f so0f la0f la0f ...  ];    part2 = [mi1e mi1e so1e mi1e mi1e so1e so1e la1e ...   do2e la1e so1f la1s do2s la1e la1f ...  la0f la0e so0e la0f do1f ...  re1e mi1s re1s do1e re1e mi1f mi1f ...  la0e la1e la1e so1e re1e mi1s re1s do1e re1e ...  mi1f mi1f blke blke blkf ...  do1e la0e la0e do1e re1f so0e so0e ...  mi1e so1e mi1e re1e do1f do1f ...  la0e do1e re1e mi1e re1e do1e so0e mi0e ...  la0f la0f blke blke blkf ...  ];    part3 = [la0f la0e so0e la0f do1f ...  re1e mi1s re1s do1e re1e mi1f mi1f ...  la0e la1e la1e so1e re1e mi1s re1s do1e re1e ...  mi1f mi1f blke blke blkf ...  do1e la0e la0e do1e re1f so0e so0e ...  mi1e so1e mi1e re1e do1f do1e do1e ...  la0e do1e re1e mi1e so1e mi1e mi1e so1e ...  la1f la1f la1f la1f ...  ];    part4 = [la1e la1s la1s la1e la1e la1e la1s so1s mi1e re1e ...  re1e re1s re1s mi1e mi1s so1s mi1e mi1s re1s do1e do1s la0s ...  la0f la0e so0e la0f la0e do1e ...  re1e mi1s re1s do1e re1e mi1f mi1f ...  la1e so1e mi1e re1e so1e mi1e re1e do1e ...  do1f do1f la0s do1s re1s mi1s re1s do1s la0s do1s  ];    part5 = [do2e do2s do2s la1e la1s la1s so1e so1s so1s mi1e mi1s mi1s ...  re1e mi1s re1s do1e la0s so0s la0s so0s do1s re1s mi1s so1s la1s re2s ...  do2f do2f blks blks blks blks do1e re1e ...  mi1f mi1f mi1f so1e mi1e ...  la1f la1f la1e do1e so1e mi1e ...  re1f re1e re1s re1s re1e re1e do1e re1e ...  mi1f mi1e mi1s mi1s mi1e re1s do1s ti0e do1s re1s ...  mi1f mi1f mi1f so1e mi1e ...  do2f la1f la1f la1e do1e ...  re1f so1f so1f la1f ...  ti1f ti1f ti1f ti1f ...  ];    part6 = [blkf blkf mi1e so1e mi1e so1e ...  mi1f la0e la0s la0s do1f la0e mi1s la0s ...  do1e do1s do1s re1e do1s re1s mi1f mi1f ...  mi1f la0e la0s la0s so1f re1e re1s re1s ...  mi1f mi1f mi1s re1s do1s la0s mi0s re0s mi0s so0s ...  do1f la0e la0s la0s re1f so0e so0s so0s ...  mi0f so0e so0s so0s do1f do1f ...  la0f do1e do1s la0s mi1e mi1s mi1s re1e re1s mi1s ...  ];    % Combination, v1 is complete version, v2 is simple version.  v1 = [part0 part1 part1 part2 part3 part4 part0 part1 part1 part2 part3 part5 part3 part6 part3];  v2 = [part0 part1 part1 part2 part3 part5 part3 part6 part3];    % Let's rock ^_^  s = v1;  s = s/max(s);  sound(s,fs);   转至:http://blog.csdn.net/xiaoding133/article/details/7592736  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、用代码简单绘制一个会动的圣诞树  4、Matlab 制作《最炫民族风》,附代码  5、CMD命令设置定时关机  6、程序员和会不会修电脑到底有几毛钱关系?

北平无战事

--

18月前
2123

话题 用C语言画出一个“心形”

#include int main() {    for (float y = 1.5f; y > -1.5f; y -= 0.1f) {        for (float x = -1.5f; x < 1.5f; x += 0.05f) {            float a = x * x + y * y - 1;            putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' ');        }        putchar('');    }}#include int main() {    for (float y = 1.5f; y > -1.5f; y -= 0.1f) {        for (float x = -1.5f; x < 1.5f; x += 0.05f) {            float z = x * x + y * y - 1;            float f = z * z * z - x * x * y * y * y;            putchar(f <= 0.0f ? ".:-=+*#%@"[(int)(f * -8.0f)] : ' ');        }        putchar('');    }}#include #include float f(float x, float y, float z) {    float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;    return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;}float h(float x, float z) {    for (float y = 1.0f; y >= 0.0f; y -= 0.001f)        if (f(x, y, z) <= 0.0f)            return y;    return 0.0f;}int main() {    for (float z = 1.5f; z > -1.5f; z -= 0.05f) {        for (float x = -1.5f; x < 1.5f; x += 0.025f) {            float v = f(x, 0.0f, z);            if (v <= 0.0f) {                float y0 = h(x, z);                float ny = 0.01f;                float nx = h(x + ny, z) - y0;                float nz = h(x, z + ny) - y0;                float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);                float d = (nx + ny - nz) * nd * 0.5f + 0.5f;                putchar(".:-=+*#%@"[(int)(d * 5.0f)]);            }            else                putchar(' ');        }        putchar('');    }}  推荐阅读  1、用CSS3画出小黄人并实现动画效果  2、用代码简单绘制一个会动的圣诞树  3、Matlab 制作《最炫民族风》,附代码  4、CMD命令设置定时关机  5、程序员和会不会修电脑到底有几毛钱关系?

烂苹果丶

--

19月前
2104

话题 用CSS3画出小黄人并实现动画效果

怎么样?虽然手脚动画还是不怎么神似,但人类聪明地大脑还是能看得出啥意思的吧!今天就让我们一起学习如何生出一个小黄人来。首先,还是直接把HTML结构放出来给大家打量打量:<div class="wrapper"><!- - 容器 --> <div class="littleH"><!- - 小黄人 --> <div class="bodyH"><!- - 身体 --> <div class="trousers"><!- - 裤子 --> <div class="condoleBelt"><!- - 吊带 --> <div class="left">div> <div class="right">div> div> <div class="trousers_top">div><!- - 裤子突出的矩形部分 --> <div class="pocket">div><!- - 裤袋 --> <!- - 三条线 --> <span class="line_left">span> <span class="line_right">span> <span class="line_bottom">span> div> div> <div class="hair"><!- - 头发 --> <span class="left_hair_one">span> <span class="left_hair_two">span> div> <div class="eyes"><!- - 眼睛 --> <div class="leftEye"><!- - 左眼 --> <div class="left_blackEye"> <div class="left_white">div> div> div> <div class="rightEye"><!- - 右眼 --> <div class="right_blackEye"> <div class="right_white">div> div> div> div> <div class="mouse"><!- - 嘴巴 --> <div class="mouse_shape">div> div> <div class="hands"><!- - 双手 --> <div class="leftHand">div> <div class="rightHand">div> div> <div class="feet"><!- - 双脚 --> <div class="left_foot">div> <div class="right_foot">div> div> <div class="groundShadow">div><!- - 脚底阴影 --> div> div> 好的,每一处我都标明了它的用途,大家可以稍微理解一下,在头脑里有一个大概的模型或者层次结构。接下来就是猛料了。。。我将分步讲解,一步一步实现:首先对容器和整体做一些简单的样式设置:body{ margin: 0; padding:0; } .wrapper{ width: 300px; margin:100px auto; } .litteH{ po sition: relative; } .bodyH{ po sition: absolute; width: 240px; height: 400px; border:5px solid #000; border-radius: 115px; background: rgb(249,217,70); overflow: hidden; z-index: 2; } 其中.bodyH主要就是绘制小黄人的身体,身体的比例很重要,现在运行看一下效果:OK,身体已经有了,现在赶紧给它穿个裤子吧!.bodyH .condoleBelt{ po sition: absolute; } .bodyH .trousers{ po sition: absolute; bottom: 0; width: 100%; height: 100px; border-top: 6px solid #000; background: rgb(32,116,160); } .trousers_top{ width: 160px; height: 60px; border:6px solid #000; border-bottom: none; border-radius: 0 0 5px 5px; background: rgb(32,116,160); po sition: absolute; bottom: 100px; left:34px; } 其中.trousers_top就是矩形部分,那么穿完裤子是什么样子的呢?现在怎么看都像一颗胶囊,不行,赶紧修饰修饰,给它一个吊带,不然裤子会掉呢:.bodyH .condoleBelt .left, .bodyH .condoleBelt .right{ width: 100px; height: 16px; border:5px solid #000; background: rgb(32,116,160); po sition: absolute; top:-90px; left:-35px; z-index: 2; -webkit-transform:rotate(45deg); } .bodyH .condoleBelt .left{ top:-88px; left:165px; -webkit-transform:rotate(-45deg); } .bodyH .condoleBelt .left:after, .bodyH .condoleBelt .right:after{ content: ''; width: 8px; height: 8px; border-radius: 50%; background: #000; po sition: absolute; top:4px; left:88px; } .bodyH .condoleBelt .left:after{ left:5px; } 这一块主要就是实现两个吊带,左右各一条,然后我使用:after伪元素来实现吊带上的小黑点:咦,开始有模有样了,接下来我们一鼓作气把裤袋和一下修饰的边边给实现了:.pocket{ width: 60px; height: 45px; border:6px solid #000; border-radius: 0px 0px 25px 25px; po sition: absolute; bottom:65px; left:84px; } .line_right{ width: 30px; height: 30px; border-bottom-left-radius: 100px; border-bottom:6px solid #000; border-left:6px solid #000; po sition: absolute; left: 0; bottom:60px; -webkit-transform:rotate(-75deg); } .line_left{ width: 30px; height: 30px; border-bottom-right-radius: 100px; border-bottom:6px solid #000; border-right:6px solid #000; po sition: absolute; right: 0; bottom:63px; -webkit-transform:rotate(75deg); } .line_bottom{ height: 40px; border:3px solid #000; border-radius: 3px; po sition: absolute; left:118px; bottom: 0px; } 先看效果图:OK,两个注意点说一下:1.我把裤子放在身体里面,然后给.bodyH添加overflow:hidden,这样我们就不用去多虑溢出怎么办,而且很轻松就能实现裤子的效果;2.可以看到裤子两边有两条有弧度的曲线段,我是通过给矩形某一个角实现圆角效果,然后只设置与这个角相邻的两条边的边框样式,然后旋转一下角度就实现这个效果了,当然只能实现简单一点的效果。好的,我们继续,接下来先实现以下眼睛部分吧:.eyes{ po sition: relative; z-index: 3; } .eyes .leftEye,.eyes .rightEye{ width: 85px; height: 85px; border-radius: 50%; border:6px solid #000; background: #fff; po sition: absolute; top:60px; left: 27px; } .eyes .leftEye{ left: 124px; } .eyes .leftEye .left_blackEye, .eyes .rightEye .right_blackEye{ width: 40px; height: 40px; border-radius: 50%; background: #000; po sition: absolute; top:24px; left:22px; } .eyes .leftEye .left_blackEye .left_white, .eyes .rightEye .right_blackEye .right_white{ width: 20px; height: 20px; border-radius: 50%; background: #fff; po sition: absolute; top:7px; left:17px; } .eyes .leftEye .left_blackEye .left_white{ top:4px; left:17px; } .eyes .leftEye:after, .eyes .rightEye:after{ content: ''; width: 28px; height: 18px; background: #000; po sition: absolute; left:-30px; top:37px; -webkit-transform:skewX(20deg) rotate(7deg); } .eyes .leftEye:after{ left:89px; top:37px; -webkit-transform:skewX(-20deg) rotate(-7deg); } 眼睛部分还是挺好实现的,先画眼镜,然后黑眼珠,再画白点,最后我才画的眼镜框,眼睛框我是用:after伪元素实现的。效果图如下:嘴巴是最困惑我的,但还是最后还是能实现:.mouse{ po sition: relative; } .mouse .mouse_shape{ width: 55px; height: 35px; border:5px solid #000; border-bottom-left-radius: 30px; background: #fff; po sition: absolute; top:175px; left:98px; z-index: 3; -webkit-transform:rotate(-35deg); } 首先也是通过矩形其中一个角实现圆角来模拟嘴巴形状,再加以旋转:结果是这样的,那么想要达到我们预期的效果,就需要把上半部分给遮掉,所以我用:after伪元素来实现遮罩效果:.mouse .mouse_shape:after{ content: ''; width: 70px; height: 32px; border-bottom:5px solid #000; border-radius:35px 26px 5px 5px; background: red; po sition: absolute; top:-16px; left:3px; -webkit-transform:rotate(34deg);}这个地方就需要慢慢调到合适的位置,模拟图如下:红色部分就是遮罩了,也是一个矩形,设置了底边框,实现和嘴巴下半部分形成闭合效果,现在我们就可以把颜色改成肤色就行了:.mouse .mouse_shape:after{ content: ''; width: 70px; height: 32px; border-bottom:5px solid #000; border-radius:35px 26px 5px 5px; background: rgb(249,217,70); po sition: absolute; top:-16px; left:3px; -webkit-transform:rotate(34deg); -webkit-animation: mouse_mask 5s ease-in-out infinite; } 效果图如下:接下来实现双手部分,这一部分不难,就是两个圆角矩形,旋转了角度,然后层级低于身体的层级就行,然后再通过:after伪元素实现胳膊关节处就搞定了。.hands{ po sition: relative; } .hands .leftHand, .hands .rightHand{ width: 80px; height: 80px; border:6px solid #000; border-radius: 25px; background: rgb(249,217,70); po sition: absolute; top:220px; left:-23px; -webkit-transform:rotate(40deg); } .hands .leftHand{ left:182px; top:220px; -webkit-transform:rotate(-40deg); } .hands .leftHand:after, .hands .rightHand:after{ content: ''; width: 6px; border:3px solid #000; border-radius: 3px; po sition: absolute; left:13px; top:50px; -webkit-transform:rotate(90deg); } .hands .leftHand:after{ left:53px; top:50px; -webkit-transform:rotate(-90deg); } 效果图如下:再接下来就是双脚的部分了,主要就是鞋面的设计,我是通过一个矩形,然后设置不同的圆角值,加上一点点的旋转来模拟的,这一块的话,怎么做我都觉得不是很像,所以最后差不多我就妥协了。.feet{ po sition: relative; } .feet .left_foot, .feet .right_foot{ width: 36px; height: 50px; border-bottom-right-radius: 6px; border-bottom-left-radius: 9px; background: #000; po sition: absolute; top: 406px; left:88px; -webkit-transform-origin: right top; } .feet .left_foot{ border-bottom-right-radius: 9px; border-bottom-left-radius: 6px; left:130px; -webkit-transform-origin: left top; } .feet .left_foot:after, .feet .right_foot:after{ content: ''; width: 60px; height: 35px; border-radius: 20px 10px 21px 15px; background: #000; po sition: absolute; left:-36px; top:14.4px; -webkit-transform:rotate(5deg); } .feet .left_foot:after{ border-radius: 10px 20px 15px 21px; left:13px; -webkit-transform:rotate(-5deg); } 效果图如下:本来是不想画头发的,感觉怪难的,最后尝试了一下,还是能出个样子,那就添加上去吧。原理跟裤子左右两边的实现原理是一样的,只是参数值不一样罢了,大家参考代码琢磨一下:.hair{ po sition: relative; } .left_hair_one{ width: 130px; height: 100px; border-radius: 50%; border-top:8px solid #000; po sition: absolute; left:17px; top:-17px; -webkit-transform:rotate(27deg); } .left_hair_two{ width: 80px; height: 80px; border-radius: 50%; border-top:6px solid #000; po sition: absolute; left:45px; top:-10px; -webkit-transform:rotate(15deg); } 补充脚底阴影部分:.groundShadow{ width: 200px; height: 2px; border-radius: 50%; background: rgba(0,0,0,0.3); box-shadow: 0 0 2px 4px rgba(0,0,0,0.3); po sition: relative; top: 455px; left:25px; } 最后就是最初的效果了:这时大家可能会问:然后呢?不是还会动的吗?是的,这里我就大概讲一下实现的思路吧:1.头发:头发我想实现的是被小风轻轻地吹起来,然后很快就塌下去,所以吹起和下塌分配的时间很关键;2.眼睛:眼睛我设想的场景是小黄人在悠闲地走路,然后不时左右看一下两边的风景,所以眼睛转动很悠哉,所以分配的时间可以稍微长一点点;3.嘴巴:让嘴巴动起来确实比较难,因为要动的话,遮罩也得实时跟着改变,而且不能露馅,所以最后实现的是当它往左边看了一下之后卖了一下萌;4.双手和双脚:这部分确实很难逼真,本来脚就不是正常的走路状态,所以只能按卓别林老爷爷的走路方式模拟一下,而且左右脚动作是紧接实现而不是同步实现。双手的话,我是简单模拟人在走路时有摆手的自然惯性,而且是左脚配右手,右脚配左手。考虑到它的双手是放在背后的,所以我的摆动幅度设置为非常小,有效果但不明显。OK,我就直接把动画代码放上来吧:.left_hair_one{ -webkit-animation: lefthair 2s ease-in-out infinite; } @-webkit-keyfr ames lefthair{ 0%,25%,31%,100%{ } 30%{ -webkit-transform: rotate(31deg) translate3d(-3px,-1px,0); } } .eyes .leftEye .left_blackEye, .eyes .rightEye .right_blackEye{ -webkit-animation: blackeye 5s ease-in infinite; } @-webkit-keyfr ames blackeye{ 0%,20%,50%,70%,100%{ -webkit-transform: translateX(0px); } 30%,40%{ -webkit-transform: translateX(15px); } 80%,90%{ -webkit-transform: translateX(-15px); } } .eyes .leftEye .left_blackEye .left_white, .eyes .rightEye .right_blackEye .right_white{ -webkit-animation: whiteeye 5s ease-in-out infinite; } @-webkit-keyfr ames whiteeye{ 0%,20%,50%,70%,100%{ -webkit-transform: translateX(0px); } 30%,40%{ -webkit-transform: translate3d(3px,4px,0); } 80%,90%{ -webkit-transform: translate3d(-15px,4px,0); } } .mouse .mouse_shape{ -webkit-animation: mouse 5s ease-in-out infinite; } @-webkit-keyfr ames mouse{ 40%,43%{ width: 45px; height: 25px; top:180px; } 0%,35%,48%,100%{ width: 55px; height: 35px; top:175px; -webkit-transform:rotate(-35deg); } } .mouse .mouse_shape:after{ -webkit-animation: mouse_mask 5s ease-in-out infinite; } @-webkit-keyfr ames mouse_mask{ 40%,43%{ width: 60.5px; top:-19.3px; left:1.5px; } 0%,35%,48%,100%{ width: 70px; top:-16px; left:3px; -webkit-transform:rotate(33deg); } } .hands .rightHand{ -webkit-animation:rightHand .8s ease-in-out infinite; } @-webkit-keyfr ames rightHand{ 0%,50%,100%{ -webkit-transform: rotate(40deg); } 30%{ -webkit-transform: rotate(37deg) translateX(1px); } } .hands .leftHand{ -webkit-animation:leftHand .8s ease-in-out infinite; } @-webkit-keyfr ames leftHand{ 0%,50%,100%{ -webkit-transform: rotate(-40deg); } 80%{ -webkit-transform: rotate(-37deg) translateX(-1px); } } .feet .right_foot{ -webkit-animation: rightfoot .8s ease-in-out infinite; } @-webkit-keyfr ames rightfoot{ 0%,50%,100%{ -webkit-transform: rotate(0deg); } 80%{ -webkit-transform: rotate(10deg); } } .feet .left_foot{ -webkit-animation: leftfoot .8s ease-in-out infinite; } @-webkit-keyfr ames leftfoot{ 0%,50%,100%{ -webkit-transform: rotate(0deg); } 30%{ -webkit-transform: rotate(-10deg); } } 转至:http://www.cnblogs.com/jr1993/p/4654622.html源码:https://github.com/JR93/littleHuang  推荐阅读  1、用C语言画出一个“心形”  2、用代码简单绘制一个会动的圣诞树  3、Matlab 制作《最炫民族风》,附代码  4、CMD命令设置定时关机  5、程序员和会不会修电脑到底有几毛钱关系?

光辉

--

19月前
2103

话题 用代码简单绘制一个会动的圣诞树

1.使用canvas功能绘制的简单圣诞树在绘图板中绘制下面这个图形并不算什么难事,但是使用代码来生成这个圣诞树却需要一定的HTML5基础。下面这个图形使用HTML5做的源码:http://www.spjeff.com/2013/12/05/christmas-tree-html5-js-and-css3/2.雪花效果jQuery的出现,让各种动画效果变得更加容易。比如,你可以通过jQuery、jQuery.snow.js插件以及少量的代码,就可以让页面中飘舞这雪花。源码:https://github.com/tzach/merry-christmas3. 一个非常漂亮的圣诞贺卡该贺卡通过Construct2制作,然后通过c2runtime.js使得该贺卡可以直接在网页中运行。Construct2是一款用来制作HTML5应用的软件,拥有一个清晰直观、支持“拖拽”操作的开发环境,即使你没有任何编程经验也能开发自己的HTML5应用。演示:http://3.s3.envato.com/files/72733144/blue/index.html4. CSS3实现圣诞树动画该动画主要使用CSS3实现各种转场效果,并使用了HTML5中的标签来播放音频文件。同时还使用了StyleFix和PrefixFree脚本,这样在编写代码时可以不用为特定的CSS3属性添加浏览器前缀,也可以在其他浏览器中播放演示:http://christmasexperiments.com/2013/11/experiment.html5.HTML表单元素制作的圣诞树下面这个圣诞树没有采用松树的形式,而是采用了HTML表单元素来制作,比如输入框、单选钮,进度条,按钮等。演示:http://hakim.se/experiments/css/domtree/6.使用tree.js库创建圣诞树three.js是一款开源的ja vasc ript 3D框架,也可以说是一款WebGL框架,几乎可以实现所有的3D场景。本文所提到的圣诞树就是用three.js和HTML5技术实现的。演示:http://www.sc ript-tutorials.com/demos/372/index.html7. 3D雪花效果该效果使用HTML5的演示:http://seb.ly/demos/JSSnowNew/snow3d.html8.  代码不到1KB的3D圣诞树下面这个3D圣诞树只用1021字节的ja vasc ript代码编写而成,逼真的3D及旋转效果,将ja vasc ript功能发挥到了极致。演示:http://js1k.com/2010-xmas/demo/8569.  代码不到1KB的雪景效果下面这个场景也是由不到1KB的ja vasc ript代码生成。演示:http://js1k.com/2010-xmas/demo/85510.游戏般的3D雪地场景整个Demo是基于一个无限开阔的雪地场景的,里面有圣诞树和雪人,可以像玩FPS游戏一样在里面走动,WASD操控移动,按住鼠标左键拖拽控制方向,整个Demo是使用Oak3D框架制作的。演示地址:http://christmas.oak3d.com/Scene/MerryChristmas.html看完上面的这些效果,你是不是也想自己动手做一个属于自己的圣诞礼物呢。下面我们为你准备了一些设计素材和教程。80套圣诞节主题设计素材16个令人印象深刻的HTML5/CSS3/ja vasc ript实验49个免费的圣诞主题矢量图像40个最好的圣诞主题资源其他圣诞节设计资源来自w3school的HTML5教程  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、Matlab 制作《最炫民族风》,附代码  4、CMD命令设置定时关机  5、程序员和会不会修电脑到底有几毛钱关系?

光辉

--

19月前
1340

话题 android studio+Genymotion模拟器

转载注明:http://blog.csdn.net/langyuewu/article/details/39196653最近换了电脑,重新配置安卓开发环境,记录一下:早期研究安卓开发,用eclipse觉得挺臃肿庞大,后来出了android-studio,等版本渐渐稳定下来用起来还不错,但是还是比较难忍受AVD模拟器的缓慢启动速度,又不喜欢一直用真机联调,后来发现Genymotion,立马有种拨开云雾见月明的感觉,启动快,即有真机速度,又适配多种机型。配置步骤如下:一、安装android-studioandroid-studio不用说了,出了多个版本,现在最新的是0.8.9,可以在下面网址下载:https://github.com/inferjay/AndroidDevTools对于贡献上面网址的兄弟,我真想给100个赞,帮忙省却了被墙的烦恼,而且东西比较齐全,也有一定的说明,对于喜欢DIY的朋友可自行下载喜欢的内容,但我这次却没有从上面下载android-studio,我比较懒,直接下个android-studio-bundle,bundle版集成环境,下载安装。如果该bundle版本较低的话,可以在线更新。安装完,再从上述网址下载个别sdk包(在android-studio的sdk manager里也可以下载,但是经常被墙),基本开发环境算是好了。当然,若想用得爽一点,还是要简单配置一下的,如下面两个:快捷键设置(可选多个环境,还能自定义):源代码管理:二、安装Genymotion对于system image等模拟器相关的东西,我没有下载,我直接使用Genymotion——据称android模拟器之王,速度杠杠的,里面说要求最低配置什么的,不用太在意它,机器不太差,有一定磁盘空间就可以了,去官网注册一个账号,会给注册邮箱发个验证链接,点击链接完成验证,这个账号是用于下载虚拟设备用的。完成注册后,选择相应的版本,由于它运行需要VisualBox支持,而我没有安装VisualBox,就下载一个集成VisualBox的版本,其实安装的时候就是两个独立的程序安装,其中注意如下:1、两者需安装在同一个盘上。2、不要安装在中文目录。(这个网上据说会有问题)我先前就是没有把两者安装在同一目录,结果启动Genymotion时会报错安装成功后,就输入先前注册账号密码下载虚拟设备,下载完成如图:可以直接点击【play】按钮来查看效果。预防万一,可以下载个Genymotion-ARM-Translation.zip,保证所有apk能顺利安装。安装方式为:模拟器启动后,压缩包拖进去,点【OK】就行了。三、两者结合,android-studio上安装Genymotion插件,有两种方法:方法一:打开android-studio,打开【File】-【Setting】-【IDE Settings】-【Plugins】,右边点击【Browse repositories】,在弹出的搜索框输入Genymotion,找到并安装插件;方法二:Genymotion官网上下载安装包的页面上有个IDEA Plugins的东东,下载,重复上述“打开android-studio,打开【File】-【Setting】-【IDE Settings】-【Plugins】”,右边点击【Install Plugin from disk】。重启android-studio后发现工具栏上多了一个图标,点击它,第一次配置指向Genymotion的安装路径。这样每次启动时,就可以选择仿真设备剩下的就和常规的开发无异了。四、可能存在的问题。1)Android-Studio假如仿真遇到Failure [INSTALL_FAILED_OLDER_SDK]的问题,是因为编译的sdk版本过高,或者最低要求sdk过高,网上一堆的说在mainfest的调低或者注释掉,但是mainfest没有这行呢,其实,只要打开以下路径,找到build.gradle文件打开编辑里面的minSdkVersion和targetSdkVersion,保证里面的版本不要高于模拟器的就可以了。2)Android-Studio引入so文件由于一些情况,要引入so文件,如百度地图等,把so文件放在libs目录中,Android-Studio默认是不自动添加的,网上的方法都比较复杂,其实简单就能实现,因为它支持jniLibs,所以只需要在jniLibs文件夹(没有请创建,res同级目录)下添加文件即可。3)Genymotion输入中文问题在设备里面,勾选上使用“使用虚拟键盘”就可以了第一次使用中文,在输入键盘区,用鼠标长按空格键,在弹出框选择“谷歌输入法”,以后就能在左下角随意切换中英文了  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、用代码简单绘制一个会动的圣诞树  4、Matlab 制作《最炫民族风》,附代码  5、CMD命令设置定时关机  6、程序员和会不会修电脑到底有几毛钱关系?

烂苹果丶

--

21月前
1297

话题 最全面的Android Studio使用教程

Android Studio是一套面世时间还不长的IDE(即集成开发环境),目前已经免费向谷歌及Android的开发人员发放。Android Studio以IntelliJ IDEA为基础,后者同样是一套相当出色的Android开发环境。在今天的文章中,我们将共同了解如何创建一个全新Android项目,同时充分发挥Android Studio所提供的各项功能优势。 1.项目设置  在开始畅游Android Studio的世界之前,大家首先需要点击此处下载并进行安装。请注意,各位必须事先安装好JDK 6或者更高版本。如果是在Windows系统环境下,先启动.exe文件、而后按照安装向导的指示一步步完成。如果大家使用的是OS X系统,则首先双击启动磁盘镜像,然后将Android Studio拖拽到自己的应用程序文件夹当中。  在成功完成了以上各项步骤后,那么大家的开发环境应该已经得到了正确设置。接下来,我们可以准备好利用Android Studio创建自己的第一款Android应用程序了。当大家第一次启动Android Studio时,应该会看到该软件的欢迎屏幕,其中还提供一些选项、指导我们以此为起点迈出Android应用开发的第一步。  在今天的教程中,我们将选择“New Project(新项目)”选项。不过如果大家希望把Eclipse等其它环境中的现有项目转化为Android Studio项目,也可以选择“Import Project(导入项目)”。Android Studio能够将Eclipse项目转换为Android Studio项目,并在项目中为用户提供必要的配置文件。  如果大家在选项列表中点击了“Open Project(打开项目)”,则可以开启已经利用Android Studio或者IntelliJ IDEA创建出的项目。而选择“Check out from Version Control(版本控制检查)”的话,大家能够对处于版本控制之下的项目副本进行检查。通过这种方式,我们可以将现有项目作为基础、快速构建起新的针对性版本。  由于我们需要从零开始,因此这里选择“新项目”。这时大家会看到一份选项列表,旨在对我们的新项目作出配置。在今天的教程中,我们将创建一款简单的应用程序,主要目的是为大家演示Android Studio中最为重要的一部分功能特性。相信大家也和我一样,会认为“HelloWorld”这个名称最适合本次开发出的新项目。  正如大家在上面这幅截图中所看到,我把自己的应用程序命名为HelloWorld,并为其设定了模块名称。如果大家对IntelliJ IDEA不太熟悉,可能不知道模块这东西到底是什么。模块实际上就是一个可以进行编译、运行、测试以及调试的独立功能单元。模块当中包含有源代码、编译脚本以及用于特定任务的其它组成部分。  在创建新项目时,大家还可以为该项目设定软件包名称。在默认情况下,Android Studio会将项目包名称的最后一项元素设置为模块名称,但只要愿意、大家可以随意对其作出变更。  其它设定内容还包括项目在设备上的保存位置、最低与推荐SDK、项目编译需要使用的SDK以及项目主题等等。大家也可以要求Android Studio创建一个Activity类、为其自定义一个启动图标,或者设定该项目是否支持GridLayout、Fragments、Navigation Drawer或者Action Bar等。  这里我们不会为自己的应用程序创建自定义图标,因此大家可以取消“Create custom launch icon(创建自定义启动图标)”项目前的勾选框。点击“Next(下一步)”继续进行其它项目设置步骤。  由于我们在之前的步骤中勾选了“Create activity(创建activity)”项目的勾选框,因此这里导航会要求大家对Android Studio将为我们创建的Activity类进行配置。  由于我们将从空白Activity类开始进行配置,因此大家可以点击“Next”执行设置流程的下面几个步骤。这里大家需要对该Activity类、主布局以及片段布局进行命名。大家也可以设置导航类型,在今天的示例项目中我们将其设置为“None”。下面这幅截图显示的是我们的设置方案看起来是什么样子。  在点击“Finish”之后,大家会看到如下图所示的Android Studio用户界面。其中窗口左侧为项目资源管理器,右侧则为工作区。在Android Studio中对项目进行设置之后,现在我们可以逐一查看Android Studio当中的各项关键功能。 2. Android虚拟设备  所谓Android虚拟设备——或者简称AVD——是一套模拟器配置方案,它允许大家设定出与实际情况相符的Android设备型号。这就让开发者在多种多样的设备平台上运行并测试应用程序变得更为轻松。在Android虚拟设备功能的支持下,大家可以为Android模拟器指定需要模拟的硬件与软件组合。  创建Android虚拟设备的首选方式是通过AVD Manager。大家可以在Android Studio用户界面的Tools菜单中依次选择Android〉AVD Manager。  如果大家之前对开发环境的设置工作正确无误,那么Android虚拟设备管理器的界面应该如下图所示。  要创建新的AVD,我们需要点击右侧的“New…”、为AVD设定名称并如下图所示对虚拟设备进行配置。最后点击“OK”以创建自己的第一套AVD。  要使用我们刚刚创建好的AVD,首先需要在AVD管理器的列表中将其选中,然后点击窗口右侧的“Start…”。如果大家的AVD设置过程正确无误,那么Android模拟器在启动后应该如下图所示。  既然Android模拟器已经成功启动并开始运行,现在是时候启动我们的应用程序了。在“Run”菜单中选择“Run ‘helloworld’”——没错,在Android模拟器中运行应用程序就是这么简单。 3.实时布局(Live Layout)  Android Studio中的实时布局功能允许大家在无需将应用程序运行在设备或者模拟器中的前提下,直接预览应用的用户界面。实时布局是一款极为强大的工具,能够帮助开发者节约大量时间。在实时布局的帮助下,查看应用程序用户界面的任务变得轻松而且快捷。  要使用实时布局,我们需要双击对应xm l布局文件并选择工作区下方的“Text”标签。接下来选择工作区右侧的“Preview”标签来预览当前布局。我们对xm l布局作出的任何变更都会直接反映在右侧的预览窗口当中。大家可以查看下面这幅截图来深入理解这项功能。  实时布局功能为我们带来了诸多值得称道的显著优势。举例来说,大家可以在Preview面板的第一项菜单中选择选项,从而对当前正在使用的xm l布局随意作出调整。譬如说,大家可以分别创建不同的纵向与横向显示视图,Android Studio会承担起创建必要文件夹及文件的任务。  Preview面板中的第二项菜单允许大家变更显示在Preview面板内的设备大小。第三项菜单的作用则是调整设备在Preview面板中的朝向,这样我们就能更轻松地查看同一套布局方案在不同显示模式(纵向与横向)下的效果与主题。  Preview面板中的第四项菜单允许我们轻松访问Activity或者布局所使用的个别片段。Preview面板还允许大家变更在实时布局中使用的语言,从而轻松预览不同语言在布局方案中的显示效果。最右边的菜单的作用则是调整API版本。  Preview面板中还包含多项控制机制,例如对布局进行缩放、重新Preview面板或者截取当前屏幕。 4.模板  Android Studio还为开发人员提供多种模板选项,从而大大提升开发速度。这些模板能自动创建Activity以及必要的xm l文件。大家还可以利用这些模板创建出较为基础的Android应用程序,并将其运行在实体设备或者模拟器当中。  在Android Studio当中,我们可以在创建新的Activity时一同创建出对应模板。右键点击窗口左侧项目浏览器中的“package name”并在菜单中选择“New”,而后从选项列表中点选“Activity”。Android Studio随后会为开发者列出模板清单,其中包括Blank Activity、Fullscreen Activity以及Tabbed Activity。  大家还可以从菜单中选择“Image Asset”,接下来的向导会指引我们一步步完成创建流程。下面让我们一起来看看如何以Login Activity模板为基础创建一套新的Activity。首先在Acivity模板列表中选择Login Activity选项以启动创建向导。  如大家在上面的截图中所见,我已经将新建的Activity命名为LoginActivity——也就是为activity login设定Layout Name——并为该Activity添加了一个名为Sign In的标题。在默认情况下,对话框中的Include Google+ sign in项目已经被勾选。由于我们不打算在今天的示例中使用Google+登录功能,因此取消该勾选项。  大家可以选择为这套新的Activity设定Hierarchical Parent(分层结构)。这样当我们点击设备上的后退按钮时,应用就将通过导航返回至上一界面。我们将这一字段留空。在点击“Finish”之后,Android Studio会为我们创建出必要的文件及文件夹。如果一切进展顺利,我们将在项目当中看到新的Activity与Layout。  下一布工作是在manifest文件中对新Activity进行设置,这样它就能在应用程序启动时作为主Activity加以使用了。请大家一起来看下面的manifest文件内容,其中LoginActivity类拥有自己的活动节点。   为了在应用程序当中启动我们刚刚创建的LoginActivity,首先需要移除原有LoginActivity类的活动节点,然后利用com.tuts.HelloWorld.LoginActivity代替先前的com.tuts.HelloWorld.MainActivity。这样一来,应用程序现在就将使用LoginActivity类作为其主Activity。   当我们在模拟器当中创建并运行自己的应用程序时,首先应该会看到如下图所示的显示内容。这意味着我们已经成功利用刚刚创建的LoginActivity类取代了原有的空白Activity类。 5.Lint工具  对代码进行测试是一回事,但同样重要的是、我们还需要在编写代码的同时引入各种最佳实践。这不仅能够显著改进性能表现,也能增加应用程序的整体稳定性。另外,经过合理结构调整的项目在维护方面也更为轻松。  Android Studio中提供的Android Lint是一款静态分析工具,它负责对项目源代码加以分析。它能够检测出应用程序中的潜在漏洞以及其它可能被编译器所忽略的其它代码问题。  就以下面这幅截图为例,大家可以看到该布局中的LinearLayout并未得到实际使用。Android Lint的优势在于,它能帮助我们重视警告或报错信息的出现原因,从而更轻松地修复或者解决这些问题。  请大家养成重复使用Android Studio Lint工具的好习惯,这能帮助我们准确检测到项目当中存在的潜在问题。Lint工具甚至能告诉我们应用程序中是否存在重复的图片或者编译内容。  要运行Lint工具,大家首先需要在Android Studio的“Analyze”菜单中选择“Inspect Code…”。当Android Studio完成了对项目的检测之后,它会在窗口底部显示出分析结果。请注意,除了Android Lint之外,Android Studio还提供一系列其它检查功能。只需双击某个已经发现的问题,系统就会帮助大家定位到对应文件中存在问题的位置。 6.富布局编辑器  Android Studio提供一套富布局编辑器,大家可以在其中随意拖拽各类用户界面组件。大家还可以在多屏幕配置中同时查看多种布局的显示效果,这一点我们在前文中已经提到过。  这款富布局编辑器在使用方面非常直观简单。我们首先需要一套要处理的布局方案。浏览到项目中res文件夹下的layout文件夹,右键点击layout文件夹,然后在弹出的菜单中选择New>Layout resource file。  下面为新布局设定一个名称与root元素,而后点击“OK”。Android Studio会自动在窗口右侧的编辑器当中打开该布局。  在编辑器的底部,大家会看到两个标签,分别是Design与Text。点击Text标签后编辑器将被激活,这样我们就能对当前选定的布局方案作出变更。  点击Design标签则会激活另一套编辑器内容,其中显示出布局的预览效果。要向布局当中添加其它功能性组件,我们只需将其从布局左侧的组件列表中拖出并放入布局内即可。是的,就这么简单。 总结  在今天的教程中,我们已经简要了解了Android Studio的各项核心功能。它的使用方式与IntelliJ IDEA非常相似,但其中包含的一系列重要改进大大加快了Android应用的开发速度,并让整个流程更轻松、更愉快。  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、用代码简单绘制一个会动的圣诞树  4、Matlab 制作《最炫民族风》,附代码  5、CMD命令设置定时关机  6、程序员和会不会修电脑到底有几毛钱关系?

周杰伦

缅甸一哥

21月前
1321

话题 关于ANDROID模拟器的一些事

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持!继上一篇 Android Studio VS Eclipse的文章后接着来分享AnDevCon大会上的内容(这是别人分享给我的,导致中间很多遗漏,许多都是我自己上网找资料补充的,请见谅),今天的主题是关于Android模拟器的一些事。简介:Android Virtual Device就是我们常说的模拟器了。简称AVD或者Emulator。对模拟器的管理都在一个叫做Android Virtual Device Manager里。模拟器为什么这么慢?大家都知道有模拟器这么一个东西,但为什么大家都不用。主要原因就是模拟器太慢了,所以肯定有人就抱怨说Google模拟器做的真垃圾,再看看IOS的模拟器,因为当初我就是其中一个,哈哈。但为什么模拟器会这么慢呢?主要原因就是CPU的问题。现在Android手机上用的所有CPU都是ARM的,运行的都是ARM的android系统镜像。但是我们的台式机都是Intel的。所以我们在台式机上运行Android模拟器就会导致非常的慢。所以解决办法就是使用运行Intel系统镜像的android模拟器。Android x86模拟器&HAXM:据说Intel也要进军手机CPU市场了,所以Intel推出支持x86的Android模拟器。而且Intel还推出了一个硬件加速管理器:Intel Hardware Accelerated Execution Manager 简称Intel HAXM.在Intel的电脑上运行这个x86模拟器再配合HAXM将会得到和Android真机相媲美的运行效果。我看过他的演示效果,大概启动到运行需要4,5秒吧,而且特别流畅。因为我家里SDK下载实在太慢了,所以我没有安装他,大家如果感兴趣可以下一个,网上很多相关教程帖子可以参考。除了懒还有一个不装他的原因就是还有一个更好的模拟器Genymotion。更强大的模拟器-Genymotion!Genymotion安卓模拟器其实不是普通的模拟器,严格来说,genymotion是一个虚拟机。由于他的种种特性和优点现在被越来越多的开发,测试甚至游戏玩家所使用。接下来说说我使用了一个多月的感受:优点:1.速度速度真的非常快。完全媲美真机。在我电脑上从点run开始启动模拟器到程序运行只用5-10秒钟,之后模拟器不用关闭,基本就是点run之后瞬间运行。响应速度和流畅度真的和真机没有差别。2.全机型模拟可以选择市面上几乎所有主流的手机设备,平板稍微少一些。不过可以自己定义任意大小屏幕和配置来解决这个问题。所以Genymotion特别适合那种设备不齐全,设备不多的情况。3.鼠标(触摸板)加键盘操作速度上来后模拟器的优势就体现出来了,再也不需要拿着手机按来按去,或者连着usb线各种方向的转屏。直接鼠标点击(鼠标差一些,我用的触摸板感觉更方便),键盘输入,特别快捷。当然多点触摸和传感器什么的稍微费劲一点,不过应用开发这些一般很少涉及这些。4.可以同时启动多个模拟器有的时候大家都会遇到这样的情况,改一点小问题运行看下效果,再改一点再看效果。或者平板手机同时开发,需要两边一起观看效果。这时我就会运行2,3个模拟器加上1,2个真机轮番作战,效率大大提高。5.特别适合在家里开发在家里开发不可能有那么多设备,这时候有个模拟器一切问题都解决了。6.安装软件安装软件可以从桌面直接拖拽到模拟器中安装,相当的方便。7.可以随便折腾中国的手机都是没有Google框架和服务的,用不了Google Play,Google+,还有一些其他Google推出的一些app。因为在有很多时候我们需要模仿国外大公司产品的特效或者界面,这时候就需要去运行它(Google Play装好以后直接搜索想安装的软件就可以了,但需要代理或VPN)。Genymotion的优势又出来,框架、服务随便装,随便弄,直接下好拖拽进去就行了,弄乱了弄坏了再建个新的。8.截图在运行中有什么问题或需要直接截图到电脑,比用手机截图方便很多。缺点:1.偶尔遇到和真机效果不同的地方,公司的项目有个自定义的搜索栏,用真机可以正常输入,但模拟器点不进去,一直不知道什么原因,除了这一个问题以外没有再发现类似情况。2.偶尔会直接从程序里弹出来,看log应该是模拟器图形内存的问题。不过遇到这种情况再运行一次就好了。3.模拟不了kindle,应该是因为kindle的系统高度自制的原因吧。Genymotion的中文官方http://www.genymotion.cn/使用前需要注册一个账号,而且要装Virtual Box虚拟机,很简单,网上教程很多。总结:说了这么多,目的还是和上次的Android Studio那篇文章一样,就是希望没用过的都来试试。最后放几张关于Genymotion的使用图片。最初运行Genymotion是没有Google框架和服务的,装好gapps后就多了Google Play,Google+,Gmail等应用Google+Gmail截图Google Play截图  推荐阅读  1、用C语言画出一个“心形”  2、用CSS3画出小黄人并实现动画效果  3、用代码简单绘制一个会动的圣诞树  4、Matlab 制作《最炫民族风》,附代码  5、CMD命令设置定时关机  6、程序员和会不会修电脑到底有几毛钱关系?

周杰伦

--

21月前

最新加入圈友

圈子公告

无公告

Top10热门帖子