首页
Search
1
解决visual studio code (vscode)安装时没有选择安装路径问题
347 阅读
2
如何在 Clash for Windows 上配置服务
243 阅读
3
Linux 下 Bash 脚本 bad interpreter 报错的解决方法
156 阅读
4
Arch Linux 下解决 KDE Plasma Discover 的 Unable to load applications 错误
155 阅读
5
uniapp打包app提示通讯录权限问题,如何取消通讯录权限
121 阅读
clash
服务器
javascript
全部
游戏资讯
登录
Search
加速器之家
累计撰写
2,094
篇文章
累计收到
0
条评论
首页
栏目
clash
服务器
javascript
全部
游戏资讯
页面
搜索到
1657
篇与
的结果
2024-10-21
汉诺塔算法演示
工作之余闲来无聊,于是就有了用JS来实现算法演示的想法,很久以前用JS实现过选择排序,不过源程序找不到了!汉诺塔的递归算法:void move(int n,char a,char b,char c){ if(n==1) printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从a移动到c else { move(n-1,a,c,b); //第n-1个要从a通过c移动到b printf("\t%c->%c\n",a,c); move(n-1,b,a,c); //n-1个移动过来之后b变开始盘,b通过a移动到c,这边很难理解 } } 在上面的递归算法中,printf函数可以换成我们JS的动画处理函数。我也是受到了其他人写的汉诺塔算法演示的启发:先在算法执行完成以后, 才开始执行动画效果。【代码演示】在代码中,在init()这个方法里我们可以看:// 初始化 Hnt.init = function(opt){ $("#block").html(''); Hnt.movie = []; Hnt.options = $.extend(Hnt.options, opt); Hnt.A.num = Hnt.options.n; Hnt.B.num = 0; Hnt.C.num = 0; Hnt.initBlock(Hnt.options.n); Hnt.move(Hnt.options.n, "A", "B", "C"); Hnt.start(); } 前半部分是将使用到变量重新初始化。后半部分:initBlock(); // 初始化盘子 move(); // 汉诺塔算法的执行,仅仅是执行算法,在这个过程中保存盘子移动的路径,但是不执行动画 start(); // 执行动画效果。 后话:现在仅仅是用js简单地实现了汉诺塔的演示过程,下一步打算从流程上和界面上进行优化,也希望能够学习一些其他的东西。比如:html5的dnd,audio,woker,localstorage,还有jQueryMobile的框架
2024年10月21日
7 阅读
0 评论
0 点赞
2024-10-21
jQuery中兄弟元素、子元素和父元素的获取
我们这里主要总结 jQuery 中对某元素的兄弟元素、子元素和父元素的获取,原声的 Javascript 代码对这些元素的获取比较麻烦一些,而 jQuery 正好对这些方法进行封装,让我们更加方便的对这些元素进行获取和操作。 1. jQuery 提供的方法 # 上来就把 jQuery 提供的方法摆在这里是不是有点不好呀,不过,我们从 jQuery 的方法名称上就能知道这些方法是干嘛的了。 parent(selector) 查找父元素,可传入selector进行过滤(下同) parents(selector) 查找所有的祖先节点 children(selector) 返回所有的子节点,不过该方法只会返回直接的子节点,不会返回所有的子孙节点 prev() 返回该节点的上一个兄弟节点 prevAll() 返回该节点之前所有的节点 next() 返回该节点的下一个兄弟节点 nextAll() 返回该节点之后所有的节点 siblings() 返回该节点所有的兄弟节点,不分前后 find(selector) 返回该节点所有的子孙节点 看完所有的方法之后,我们可以发现:children()只能获取直接的子节点;而 find 能获取所有的子孙节点,当然也包括直接的子节点。让我们通过一个直观的例子来看看这些方法是怎么使用的,【狠狠点击这里>>】从实例中我们能够很清楚的看到这些方法都是获取的哪些元素,比如 parent()是获取当前元素的直接父亲元素,而 parents()是获取所有的父亲元素(也包括其直接父元素)。前面的那些方法使用起来都比较简单,不过这里还是要多说一句:所有的方法都能接收一个 selector 参数来对获取到的结果集进行过滤,来真正的获取我们想要的元素。find()方法的使用是我们这里重点要讲的。 2. find(selector)方法的讲解 # 官方文档的解释:通过一个选择器、jQuery 对象或元素过滤,得到当前匹配的元素集合中每个元素的后代。我们通过这样的代码来更加清晰地了解这句话的意思:$("#main").find(".list"); // 选择器过滤 var $span = $("span"); $("#main").find($span); // jQuery对象过滤 var span = $("span")[0]; $("#main").find(span); // DOM元素过滤 从上面的代码中我们可以看到三种方式都能从$main的所有子孙元素中获取相应的元素。而且find()方法获取子孙元素时采用的时深度搜索优先的策略进行检索的。还是拿我们上面的实例来举例,$('.current')就是当前的元素,然后用 find()获取该元素所有的子孙元素:从上面的图中我们可以看到,find()先找到第一个.item 元素,然后开始检索.item 里的子元素.s;.item 里的子元素检索完成以后,开始寻找第二个.item 元素,然后接着检索第二个.item 里的子元素;第二个.item 检索完成后,开始进行第三个。深度优先的策略就是:先闷头一直往下找,下一个没有元素时再确认是否有 next()兄弟元素,如果没有兄弟元素,那么再往上返回一级,确认这个元素有没有兄弟元素,直到第一级的子元素;如果当前元素有兄弟元素,那么就从这个兄弟元素开始往下执行深度搜索。待所有的子元素检索完毕后,find()方法结束。
2024年10月21日
16 阅读
0 评论
0 点赞
2024-10-21
修改git提交历史中的姓名和email
1. 起因 # 前几天用公司的电脑提交几回代码,也没怎么注意。后来回家之后使用git log查看提交历史时,发现 author 里保存着一些重要的信息。我该怎么办呢,怎么不让别人看到呢,虽然目前这些东西就我一个人用,万一被别人看到了呢,毕竟是放在全世界最流行的代码托管网站。 2. 解决过程 # 在网上倒是找了一些很多的方案,可是因为对 git 命令还不是很熟悉的前提下,即使人家给出了答案都不知道怎么用,比如下面的这几个博文里讲解的:Git 修改提交的用户名和 Emailgit 修改历史提交批量修改 git log 的内容不过都没有解决我的问题,主要还是我学的不多,看不懂,汗。 3. 最终解决方案 # 最后在一个网站找到了一条命令,把里面的参数修改为自己的,回车运行即可$git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='newemail';" HEAD 具体操作过程: 进入到你的文件目录里 先敲一个命令:git --version 修改这条命令里的 newname 和 newemial,如我后面修改的命令: git filter-branch -f --env-filter "GIT_AUTHOR_NAME='wenzi'; GIT_AUTHOR_EMAIL='xxx@gmail.coml'; GIT_COMMITTER_NAME='wenzi'; GIT_COMMITTER_EMAIL='xxx@gmail.com';" HEAD 回车执行 做完上面这几步后,就能看到我们的命令正在执行!完毕!如果你还有什么不明白的,欢迎留言讨论。
2024年10月21日
7 阅读
0 评论
0 点赞
2024-10-21
Mercurial的使用心得
1. 本人接触版本控制的历史 # 在很久很久以前,我们是怎么进行版本控制的呢,当我们工作到某个阶段后,就把此时的项目存为一个文件夹(A),然后再从这儿复制出一份(B)接着修改,而存储的那个文件夹(A)就是我们打的版本号,当我们把B改动到某个阶段后再打一个版本,然后从这个版本里衍生出一个C,一直衍生下去......。如果我们在某个版本改坏了的话,我们再从上个版本复制出一份接着修改。本人小蚊当时在学校的时候对版本控制了解的不深,就是用的这种方式进行版本控制的,这种手动进行版本控制的一个坏处就是:我们不知道每两个版本的差异在哪儿,都修改了哪些文件,只能说是这个版本比上个版本多了几个功能,可是文件的差异在哪儿,就不好对比了。不过后来在工作中遇到了SVN,这种情况就改善了很多。当时小蚊使用SVN时,每次我要对某个项目的代码进行改动时,都先从服务器上down下一份代码来,然后开始修改。因为本地的代码已经很老了,如果其他人也提交了代码的话,我再用我本地的老代码进行提交,就可能出现代码覆盖或文件冲突的情况。刚开始使用时都没有写改动信息,后来发现同事会在项目里弄一个changelog.txt来保存每次的修改,然后我也跟着学。可是后来发现原来SVN本身就有记录改动日志的功能,从这儿之后才算是开始步入正轨,真正地接触到了版本控制系统。当我开始接触github时,慢慢地使用上了git这个版本控制系统,可是因为是项目只有自己在改,也没有学习到很多。后来换了新工作之后,新公司使用的是mercurial作为版本控制系统,在工作中学习到了很多分布式版本控制系统的知识。 2. mercurial的使用 # hg和git有着无数的相似之处,都是分布式版本控制,都是有分支。git我只是在提交自己的项目时使用,很多的东西还没用到,不过工作中使用的是hg,每天都在多人合作代码,常会遇到合并分支时出现文件冲突、推代码时出现多个相同的分支。什么是分支,分支是干什么用的?像以前传统时的那种版本控制系统,整个项目都是集中一个服务器上,任何的修改都是要先从整个服务器上拉取代码,修改完成后再上传上去,若在修改的期间,其他人也提交了代码,最后自己提交的时候可能会覆盖掉上一个人的改动;现在分布式版本控制系统的优势就是,一个分支就是一个代码库,你在该分支上进行的任何操作都不会影响到其他分支,如果把整个分支整坏了,或者想放弃这个分支,那么直接切回到default分支重新新建即可,在那个分支上所有的改动都被保留在了那个分支上。 3. hg常用命令 # hg clone rep 从rep的地址拉取代码hg status 查看当前仓库中的文件改动状态: M: 内容已改动; !(感叹号):版本库还在跟踪该文件,可是本地仓库已经丢失该文件 R:该文件从版本库中删除; ?(问号):本地仓库中新添加的文件,版本库里还没有该文件,需要使用hg add 文件名 添加到版本库中 A:该文件是新添加的 hg remove 文件名 版本系统不再跟踪该文件hg revert 文件名 恢复该文件状态是!(感叹号)的,需要进行二选一了,是该文件真需要删除了,还是被误删了;若真的需要删除,则使用hg remove 文件名,若被误删了则使用hg revert恢复该文件hg add . 将所有没有在版本控制系统的文件添加到控制系统中,hg add 文件名 是将某个文件添加到控制系统中 hg log 查看提交的历史信息hg commit 将本地的改动进行提交hg push 将改动推到远程的分支上hg merge 分支名 将其他分支的代码合并过来hg diff 查看改动,hg diff 文件名 查看该文件的改动 4. 使用过程中遇到的问题 # 当前分支拉取当前分支不用merge,直接hg pull -u 取消当前分支的修改回到最初状态时,hg update -C 切换到其他分支且不保留当前分支的修改时,hg update default -C 切换到其他分支且保留当前分支的修改时,hg update default 创建分支时要在default分支上进行创建,这样保证所有的分支没有瓜葛;若在其他的分支上直接创建分支时,则把上一个分支的修改保留了下来,不容易进行拆分;视情况而定 若第一次提交分支时,则使用hg push -b 当前分支名 --new-branch,若已经是第二次以上的提交了则使用hg push -b 当前分支名即可,当然,每次提交时都带着—new-branch也没错 多人合作时需要拉取别人的分支的代码,不要担心,别人的分支和default分支没有任何区别7.1 在default分支上拉取远程的代码并更新本地代码:hg pull -u(hg pull, hg update) 7.2 在default分支上新建自己的分支:hg branch 自己的分支名 7.3 合并他人的分支:hg merge 他人的分支名 7.4 将合并的先提交一下,不然一会儿自己的改动和刚拉取的他人的代码混到一起了:hg commit -m 'merge from xiaoming' 7.5 进行自己的改动,该修改的修改,该添加的添加,该删除的删除7.6 提交自己的修改:hg commit -m '改动原因或目的' 7.7 再拉取下远程的代码,在改动的过程中说不定已经有人更新default分支了,不合并的话,会把别人的提交弄丢:hg pull -u hg merge default hg commit -m 'merge from default'(若merge default时需要提交) 7.8 将自己的代码推送到远程代码库:hg push -b 自己的分支名 --new-branch 配置 .hg目录8.1 hgrc : hg的远程代码库地址 ,若远程地址改动了 ,不用从零开始在新的地址拉取,只需要在这个文件中可以修改地址即可[paths] default = ssh://https://www.github.com/wenzi0github/test 8.2 branch : 当前的分支 ,这个文件里存储着当前的分支名8.3 last-message.txt : 最后一次提交的信息,hg commit -m 'message' 合并分支时出现冲突或出现推代码时出现多个相同的分支(多头),怎么办?当我出现这个的状况时通常是使用sourceTree的这个可视化工具来解决的,sourceTree上安装kdiff3的插件,当合并时出现了冲突,能够很明显的看到文件的哪部分出现了冲突,然后应该选择哪个作为需要合并的部分;当出现多个相同的分支时,先使用hg up 分支切换到当前多个中,然后把其他相同的分支直接merge到这个分支上,然后再合并其他分支的代码。 如何在mac下配置kidff3?配置kdiff3的地方主要由两个:控制台和sourcetree。首先安装kdiff3,如果是直接打开的话,那么就直接把kidff3.app拖拽到应用程序的文件夹中。10.1 控制台配置kdiff3hg在控制台配置kdiff3是相当的简单,打开你的~/.hgrc文件(如果不存在则创建一个),然后添加下面的代码:[extdiff] cmd.kdiff3 = /Applications/kdiff3.app/Contents/MacOS/kdiff3 [merge-tools] kdiff3.args = $base $local $other -o $output 配置完成后,当你merge一个分支产生冲突时,kidff3会自动弹出,然后你就可以选择你需要的内容进行合并。10.2 sourcetree配置kidff3打开sourcetree->preferences->diff,然后在visual diff tool和merge tool中都选择kDiff3即可。 当有文件产生冲突时,选择这个文件->右键选择resolve conflicts->launch external merge tool ,就会弹出kDiff3。 5. 总结 # 当然,这里也只是个人经历的总结而已,依然还有很多的东西没有总结到位。
2024年10月21日
7 阅读
0 评论
0 点赞
2024-10-21
博客从github迁移到gitcafe上
之前的博客都是在 github 上写的,当然,网上有很多“如何在 github 上创建静态博客”的教程,这里就不多说了,我也是按照网上的教程在 github 上创建了自己的静态博客,然后还买了一个属于自己的域名 www.xiabingbao.com 。就这样,真正属于自己的博客就建立起来了。不过由于很多特殊的原因,我们访问 github 的速度并不是很快,我们就需要考虑把博客托管到国内的服务器上,正好 gitcafe 满足了我们的要求,他跟 github 几乎一模一样,而且也是基于 git 搭建起来的平台,依然可以使用 git 命令来管理我们的代码,上手非常简单容易。 GitCafe 已被coding收购! GitCafe 是一个基于代码托管服务打造的技术协作与分享平台,程序开发爱好者们可以通过使用代码版本控制系统 Git 来将他们所写的开源或商业项目的代码托管在 GitCafe 上,与其他程序员针对这些项目在线协作开发。两天前,GitCafe 结束了长达数月的 Alpha 封闭测试,发布了第一个 Beta 版本,现无需邀请码,所有人都能够开始注册使用 GitCafe 所提供的代码托管服务 不过现在也有很多代码托管的网站,比如开源中国、CSDN、Coding等等,我们可以根据自己的爱好和习惯选择一款更适合自己的。
2024年10月21日
7 阅读
0 评论
0 点赞
1
...
213
214
215
...
332