好用的程序员记事本_作为程序员,这些实用工具你必须要知道!

点击蓝色“程序员书单”关注我哟

加个“星标”,每天带你看好文,读好书!

对于程序员来说,编程是一个相当耗费时间和经历的过程,而在这个过程中,一个称手而高效的工具就显得非常重要。

加上近期有不少小伙伴在问一些工具方面的问题,所以今天大雄就总结了一些新手编程能用上的工具一一介绍给小伙伴们,希望对大家的学习和工作有所帮助。

1、Notepad++ 老规矩,每次工具第一推荐,Notepad++是一套非常有特色的自由软件的纯文字编辑器。 有完整的中文化接口及支持多国语言编写的功能(UTF8 技术)。 它的功能比 Windows 中的 Notepad(记事本)强大,十分适合当作编写电脑程序的编辑器。 c59f0621a9f7d41bba7538a6b783f4bc.png 2、有道云笔记 有道云笔记采用了增量式同步技术,即每次只同步修改的内容而不是整个笔记。 “三备份存储”技术能有效保障用户数据的安全性和稳定性,该技术还便于未来系统存储规模的扩大和数据处理能力的提高。 一个很好的保险措施。 883ce66fce0040dc78ec92767308972f.png 3、Sublime Text 在 Windows 、OS X和Linux 这三个平台都能使用。 非常适合新手使用。 37907d751bba801a48b9d348597674cd.png 4、FastStone Capture 是一款极好用的图像浏览、编辑和截屏工具,支持 BMP、JPG、JPEG、GIF、PNG、TIFF、WMF、ICO 和 TGA 在内的主流图片格式,其独有的光滑和毛刺处理技术让图片更加清晰,提供缩放、旋转、剪切、颜色调整功能。 71b16445a2b370ec19b04385e8db08cc.png 5、流程图visio 程序员做流程图时必不可少的软件。 它能将复杂的信息、系统和流程可视化,利于程序员的分析。 5430226b3e3751a339d53ea8dfe29440.png 6、Source Code Pro 一款开源且完全免费的等宽编程字体,它非常适合用于阅读代码,支持 Linux、Mac OS X 和 Windows 等操作系统。 可以在 Windows 下获得犹如 Mac 般优秀的字体效果。 d8bb4454f174fad2516ffba26bd4c8f6.png 7、ImageMagick 可以读、写和处理超过90种的图片文件。 非常强大的图片处理器。 既可以通过命令处理图片,也能用语言编程来完成。 77d58cd7b535b18e1ea75174a5568257.png 8、Onenote 类似于一款纸质的笔记本。 能够进行收集资料、知识管理、甚至能强悍到复制图像的文字。 非常高效! c7e1b48ed539c3d6fb1042c6e1d7407e.png 小伙伴们还有什么好用的小工具,来留言区安利给大家呀~ b4c1cd58479c8710b8b53720aa68634d.png

上次谁说要Java开源项目来着?来!

0e8470525bb016d4f22de0e6699f269d.png

《计算机网络:自顶向下》思维导图

4353a4ca2b4ba4e683541deddec730be.png

一个我超喜欢的动态博客系统,五分钟即可部署上线!

aac9d57aa929aeef88bd5ec314c12ada.png

觉得有用就点个在看吧!

dad94254a7f7003855991dfde6f5bf63.png

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
修改host,切换host工具,host修改软件,host修改修改host文件工具软件自动切换host工具_HostHelper_V1.1 host切换工具-host助手 做开发和测试时经常遇到切换host的情况,如果每次手动去打开host文件,然后点击用记事本打开,再修改。浪费了许多的时间。业余时间便开发了‘HOST助手’。 实现了完全自主配置host自由修改host文件,省去了许多的时间。工具简单、方便、实用。现对工具做简单的介绍,方便您能快速使用本工具。提升您的工作效率。 工具迄今已有两个版本:(HostHelper v1.0 HostHelper v1.1) 网上最先发布的HostHelper v1.0版本,存在开机或重启后无法读取原配置文件的BUG。HostHelper v1.1版本针对此问题已做修复。请尽量使用HostHelper v1.1版本。 使用方法: 1.下载 ‘HostHelper v1.1’(csdn,程序员百味 官网,51cto 均有下载地址),解压后,移动.exe可执行文件到自己的工作目录,建议不要放到桌面。 2.双击运行后,文件会自动生成两个文件,一个icon和一个配置文件(运行时,可能会有杀毒软件提示修改host或者开机项,请放心使用 并无病毒) 3.初次使用配置文件为空,请在'host管理’中点击‘配置文件格式’即可查看配置样式。 4.按照所需配置host,完毕点击保存。(注意:分组名即为托盘图标的菜单名,不可重复) 5.右键点击右下角host助手托盘图标,单击组可以设置包含子菜单的所有host,单击子选项,可配置单个host选项。 HOST助手 升级记录 HostHelper v1.0 1.完全自主配置 切换Host HostHelper v1.1 1.修复开机自动运行时无法读取原配置文件 注意: (1)V1.0升级时需要删除原来的自动运行注册表值 (2)如无法删除注册表值,请用新文件覆盖V1.0文件 技术支持: 程序员百味 QQ:1940775885 技术博客 http://www.bywei.cn/view.asp?id=106
为PB12.5版本: 关于PBHelper(PBCOMMENT)这个软件,最新版本 1.0.2 PBHelper的前身是 PBCOMMENT 7.0。 ================================================================ 版权所有 (c) 1999-2000 RC Sizer 保留所有版权。 版权所有 (c) 2003-2006 Welkin 保留所有版权。 版权所有 (c) 2002-2006 TRUEWAY(TM) 保留所有版权。 注册商标 TRUEWAY(TM) 为李群巍所写程序专用。 PBHelper以前的名字叫 PBCOMMENT。 PBHelper(PBCOMMENT)是一个专门为PB程序员设计的综合性编程 助手工具。她能帮助PB程序员自动生成PB脚本代码注释、自动缩进美化 代码、自动完成代码、大小写转换,实现不同数据库类型之间的SQL语句 转换等功能。 PBHelper支持PowerBuilder 6.x/7.0/8.0/9.0/10.0/10.5/11.0。 (增加对11.5、12.0、12.5的支持) 关于此软件的英文详细说明,请阅读《readme.txt》。 联系方法: E-Mail: [email protected], [email protected] MSN: [email protected] 软件包下载地址: http://gforge.osdn.net.cn/projects/pbhelper/ PBHelper(PBCOMMENT)的来历 ================================================================ PBHelper起初的代码参考了国外一个著名的 PBCOMMENT 软件。国外 的这个 PBCOMMENT 对 PB 6.0/6.5 和 PB 7.0 分别做了实现。初期的 版本主要用于自动生成函数、对象、DW内部代码的注释。后来,本人 对该软件核心代码做了重写工作,且在一个版本的 PBCOMMENT 里面 提供了对不同版本PB的支持。 从 PBCOMMENT 3.0 开始,在后续的版本中,加入了代码自动整理 (Indent)、自动完成(插入DW编码模板)、自动删除(根据某个标记) 自动删除某个标记前面的或者后面的代码,从DW自动生成DW字段赋值语句、 从DW生成结构体等的辅助功能。从这些功能的增加来看,PBCOMMENT 已 不再是 COMMENT 的工具。有鉴于此,从 PBCOMMENT 7.0 以后软件名字 更改为 PBHelper。因为 PBHelper 不再仅仅关注于注释方面,而向功能 综合化、多样性方面发展。 PBHelper(PBCOMMENT)重要版本更新 ================================================================ 开始版本号 新增功能 ---------------------------------------------------------------- PBCOMMENT >>>>>>>>>> 5.2 可以处理 *.sr* 类型的文件的整理处理 将对象、窗口、函数等代码先 Export 成文本文件,在PB中 用编辑文本文件的形式打开,然后象其他脚本一样 Indent 5.2 新增自动将工具集成到 PB 开发环境中的功能 目前支持的版本是 PB 6.0/6.5, PB 9.0 5.3 新增自动在某个代码段加每行代码的相同的前缀或者相同的后缀 这个在我们日常生活中经常要用到的 5.31 新增自动根据字段列表,变量列表,datawindow 赋值语句列表, 自动生成 datawindow 之间复制数据的代码 自动生成 结构体变量 和 datawindow 之间的赋值代码 自动生成 变量列表 和 datawindow 之间的赋值代码 具体可看 《pbcomment自动写代码.doc》的说明 5.31 新增双语言显示 pbcomment.ini 文件中, language = 0 表示简体中文
``` <!DOCTYPE html> <html> <head> <title></title> </head> <style> * { padding: 0; margin: 0; } html, body { height: 100%; padding: 0; margin: 0; background: #000; } canvas { position: absolute; width: 100%; height: 100%; } .aa { position: fixed; left: 50%; bottom: 10px; color: #ccc; } </style> <body> <canvas id="pinkboard"></canvas> <script> /* * Settings */ var settings = { particles: { length: 500, // maximum amount of particles duration: 2, // particle duration in sec velocity: 100, // particle velocity in pixels/sec effect: -0.75, // play with this for a nice effect size: 30 // particle size in pixels } }; /* * RequestAnimationFrame polyfill by Erik M?ller */ (function () { var b = 0; var c = ["ms", "moz", "webkit", "o"]; for (var a = 0; a < c.length && !window.requestAnimationFrame; ++a) { window.requestAnimationFrame = window[c[a] + "RequestAnimationFrame"]; window.cancelAnimationFrame = window[c[a] + "CancelAnimationFrame"] || window[c[a] + "CancelRequestAnimationFrame"]; } if (!window.requestAnimationFrame) { window.requestAnimationFrame = function (h, e) { var d = new Date().getTime(); var f = Math.max(0, 16 - (d - b)); var g = window.setTimeout(function () { h(d + f); }, f); b = d + f; return g; }; } if (!window.cancelAnimationFrame) { window.cancelAnimationFrame = function (d) { clearTimeout(d); }; } })(); /* * Point class */ var Point = (function () { function Point(x, y) { this.x = typeof x !== "undefined" ? x : 0; this.y = typeof y !== "undefined" ? y : 0; } Point.prototype.clone = function () { return new Point(this.x, this.y); }; Point.prototype.length = function (length) { if (typeof length == "undefined") return Math.sqrt(this.x * this.x + this.y * this.y); this.normalize(); this.x *= length; this.y *= length; return this; }; Point.prototype.normalize = function () { var length = this.length(); this.x /= length; this.y /= length; return this; }; return Point; })(); /* * Particle class */ var Particle = (function () { function Particle() { this.position = new Point(); this.velocity = new Point(); this.acceleration = new Point(); this.age = 0; } Particle.prototype.initialize = function (x, y, dx, dy) { this.position.x = x; this.position.y = y; this.velocity.x = dx; this.velocity.y = dy; this.acceleration.x = dx * settings.particles.effect; this.acceleration.y = dy * settings.particles.effect; this.age = 0; }; Particle.prototype.update = function (deltaTime) { this.position.x += this.velocity.x * deltaTime; this.position.y += this.velocity.y * deltaTime; this.velocity.x += this.acceleration.x * deltaTime; this.velocity.y += this.acceleration.y * deltaTime; this.age += deltaTime; }; Particle.prototype.draw = function (context, image) { function ease(t) { return --t * t * t + 1; } var size = image.width * ease(this.age / settings.particles.duration); context.globalAlpha = 1 - this.age / settings.particles.duration; context.drawImage( image, this.position.x - size / 2, this.position.y - size / 2, size, size ); }; return Particle; })(); /* * ParticlePool class */ var ParticlePool = (function () { var particles, firstActive = 0, firstFree = 0, duration = settings.particles.duration; function ParticlePool(length) { // create and populate particle pool particles = new Array(length); for (var i = 0; i < particles.length; i++) particles[i] = new Particle(); } ParticlePool.prototype.add = function (x, y, dx, dy) { particles[firstFree].initialize(x, y, dx, dy); // handle circular queue firstFree++; if (firstFree == particles.length) firstFree = 0; if (firstActive == firstFree) firstActive++; if (firstActive == particles.length) firstActive = 0; }; ParticlePool.prototype.update = function (deltaTime) { var i; // update active particles if (firstActive < firstFree) { for (i = firstActive; i < firstFree; i++) particles[i].update(deltaTime); } if (firstFree < firstActive) { for (i = firstActive; i < particles.length; i++) particles[i].update(deltaTime); for (i = 0; i < firstFree; i++) particles[i].update(deltaTime); } // remove inactive particles while ( particles[firstActive].age >= duration && firstActive != firstFree ) { firstActive++; if (firstActive == particles.length) firstActive = 0; } }; ParticlePool.prototype.draw = function (context, image) { // draw active particles if (firstActive < firstFree) { for (i = firstActive; i < firstFree; i++) particles[i].draw(context, image); } if (firstFree < firstActive) { for (i = firstActive; i < particles.length; i++) particles[i].draw(context, image); for (i = 0; i < firstFree; i++) particles[i].draw(context, image); } }; return ParticlePool; })(); /* * Putting it all together */ (function (canvas) { var context = canvas.getContext("2d"), particles = new ParticlePool(settings.particles.length), particleRate = settings.particles.length / settings.particles.duration, // particles/sec time; // get point on heart with -PI <= t <= PI function pointOnHeart(t) { return new Point( 160 * Math.pow(Math.sin(t), 3), 130 * Math.cos(t) - 50 * Math.cos(2 * t) - 20 * Math.cos(3 * t) - 10 * Math.cos(4 * t) + 25 ); } // creating the particle image using a dummy canvas var image = (function () { var canvas = document.createElement("canvas"), context = canvas.getContext("2d"); canvas.width = settings.particles.size; canvas.height = settings.particles.size; // helper function to create the path function to(t) { var point = pointOnHeart(t); point.x = settings.particles.size / 2 + (point.x * settings.particles.size) / 350; point.y = settings.particles.size / 2 - (point.y * settings.particles.size) / 350; return point; } // create the path context.beginPath(); var t = -Math.PI; var point = to(t); context.moveTo(point.x, point.y); while (t < Math.PI) { t += 0.01; // baby steps! point = to(t); context.lineTo(point.x, point.y); } context.closePath(); // create the fill context.fillStyle = "#ea80b0"; context.fill(); // create the image var image = new Image(); image.src = canvas.toDataURL(); return image; })(); // render that thing! function render() { // next animation frame requestAnimationFrame(render); // update time var newTime = new Date().getTime() / 1000, deltaTime = newTime - (time || newTime); time = newTime; // clear canvas context.clearRect(0, 0, canvas.width, canvas.height); // create new particles var amount = particleRate * deltaTime; for (var i = 0; i < amount; i++) { var pos = pointOnHeart(Math.PI - 2 * Math.PI * Math.random()); var dir = pos.clone().length(settings.particles.velocity); particles.add( canvas.width / 2 + pos.x, canvas.height / 2 - pos.y, dir.x, -dir.y ); } // update and draw particles particles.update(deltaTime); particles.draw(context, image); } // handle (re-)sizing of the canvas function onResize() { canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; } window.onresize = onResize; // delay rendering bootstrap setTimeout(function () { onResize(); render(); }, 10); })(document.getElementById("pinkboard")); </script> </body> </html> ``` ![示例图片](https://devbit-static.oss-cn-beijing.aliyuncs.com/devbit-static/img/heart.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值