首页
留言
友链
架子鼓
更多
壁纸
直播
时光机
关于
Search
1
谷豆电视直播代理源码,谷豆代理原理解析
45,102 阅读
2
华为鸿蒙系统无法安装 xapk APP 闪退 ( youtube vanced ) 的解决办法
26,947 阅读
3
[转载]青龙面板+Ninja从零安装教程
19,135 阅读
4
docker 之 typecho 镜像-不推荐
13,097 阅读
5
typecho插件 - 在线下载主题到服务器 - addTheme 发布
8,874 阅读
技术
php
linux
mysql
redis
typecho
nginx
go
python
dnmp
工具
日记
理财日记
生活日记
生活
kindle 资源
公告
虚拟机
登录
Search
标签搜索
msyql
主从
华为
鸿蒙
xapk
闪退
APP 闪退
kindle
mobi
docker
pip
alpine
梦浪的小虾米
累计撰写
143
篇文章
累计收到
587
条评论
首页
栏目
技术
php
linux
mysql
redis
typecho
nginx
go
python
dnmp
工具
日记
理财日记
生活日记
生活
kindle 资源
公告
虚拟机
页面
留言
友链
架子鼓
壁纸
直播
时光机
关于
搜索到
143
篇与
的结果
2021-11-04
[转载] 如何评估开发所需要的时间?
一个程序员能否精确评估开发时间,是一件非常重要的事情。如果你掌握了这项技能,你在别人的眼里就会是这样:靠谱经验十足对需求很了解延期风险小合格的软件工程师正规军,不是野路子评估开发时间的重要性首先,在一个项目中,所有的环节都是承上启下的,上一个环节结束的时间节点正是下一个环节开始的节点。那么在一个项目或者一次迭代正式启动前,所有的环节都应该有个时间评估。以一次APP需求迭代为例,项目计划像这样:UI设计图 11.01 - 11.03(3工作日)API接口讨论与设计 11.04(1工作日)移动端开发 11.05 - 11.15(8工作日)后端具备联调条件:11.11产品体验 11.16 - 11.17(2工作日)测试11.18 - 11.25(5工作日)发布11.26根据项目计划,各个部门自己要分配人员和时间。如果其中一个环节延期了,那么后面的各个环节都要顺延,就会造成损失。其次,对于程序员来说,一个清晰的开发计划有助于自己有条不紊地开展工作,也能避免疏漏某个功能点。评估时间的过程,也是对需求详细拆分的过程,了解要做什么,做成什么样子。在评估的过程中,根据专业知识和经验,充分预估会遇到的风险,怎样的解决方案,预留多少时间?都想好了的话,项目也就没啥风险了。然而,开发时间评估,最大的好处是程序员受益。认真地评估开发时间,会让你在开始动手写代码之前搞清楚要怎么写,每个模块的设计心理得有个谱。从宏观上拆分模块,然后详细地分解任务,具体到一个很小的功能点。这样你就能清晰地设计代码,而不是堆代码。也避免了很多时候写着写着发现不对,然后拉到重来的境地。就是要让你动手写代码之前胸有成竹!初学者为什么评估不准?如果你的项目经常delay,那么八成是时间评估不准。刚毕业的学生被问到什么时候可以完成的时候,脑门一拍:“三天”,实际上两个星期过去了还没完成。这里有一张表,看看你是不是这样子,对号入座:越是老程序员越是“胆小”,评估时间越准。如何精确评估开发时间最近几年,我都是以小时为单位进行时间评估的,有没有觉得有点恐怖?长期以来这样的习惯让我收获颇多。这得感谢我之前的领导,三年前强迫我们这样做,刚开始很抵触,后来才体会到其中的甜头。任务拆分拿到新需求后,对其进行充分了解,不清楚的就去问清楚,然后对其进行模块化。之后,再进行技术上的拆分。由大到小,再到细节。细到什么程度呢?细到一个按钮的实现,细到一个点击动作是要用按钮还是要用手势的定夺,最好能细到代码块的划分。这个能力是需要锻炼的,做好拆分,然后在实际开发过程中根据实际时间花销,回顾时间评估的准确性,以便让下次更准确。慢慢地,就会越来越精确,评估时间有依有据,不再是拍脑门给出的时间。下面看一个例子:合理认知时间一天工作八小时,但你不可能专注地连续八小时在编写代码。一天的工作中,有开会、讨论、阶段性休息(刷新闻、喝咖啡、发呆)的时间开销,真正有效时间其实不足六小时,杂事多的话可能是四五个小时。预留buffer(缓冲区)首先明确,预留buffer不是让你随便增加预估量,而是要明确知道buffer是给那些事情用的。要考虑到一下几点:首先是沟通时间,你开发的时候不可能是闷着头一直写代码。要和UI设计师沟通,要和产品经理沟通,有可能还需要和组内的人沟通技术上的事情,以及和别的技术小组对接的问题。等待时间。如果牵扯多部门协作,会有很多等待时间,因为你不能保证别的部门就能准确按照计划时间完成的。虽然等待过程中你可以安排其他任务,但你不能保证其他任务就能刚好填充等待时间,更何况任务切换也需要时间成本。突发状况。例如,bug修改、需求微调、对接人请假。不确定时间。和其他部门有交集的工作,最好多预留buffer。比如移动端和后台联调。后端信誓旦旦给你说11.11号可以进行联调,这次联调总共5个接口。如果你简单地认为他们给你提供的接口没问题,并且能顺利请求回来数据,预计一天联调时间足以,那你就等着delay吧。11.10号你已经准备好了所有联调准备,如果数据能正确返回,你的解析功能都是OK的,因为你之前用假数据已经处理的好好的。到了11号,你请求第一个接口就报错了,然后在即时通讯软件上问他们怎么回事,半个小时后给你回了“不好意思,地址变了,你用这个试试”。又错了……。终于回来数据了,然后发现缺少两个字段……。就这样,第一个接口调通已经快下班了。(当然很多后端技术人员也是很靠谱的,举这个例子只是为了让多考虑)以上是可能会出现的状况,实际中有可能只是出现了一部分,这要根据实际情况而定。并不是让你能多预留buffer就多留,毕竟每个项目的时间都是很紧张的。一般buffer留在15%-25%。回头看在实际开发过程中,测量实际花费时间,并与估算相比较。如果有些地方相差较大,就要看差在哪里,然后在下次预估中避免相同的差错。总结编程经验不等同于估算经验。一个不被包含在估算流程中的开发者将不会擅长估算。同样,如果实际的时间花费不被测量和用于与估算比较,那么将没有反馈来学习。最后,每个程序员都应该具备估算的技能。为磨练这个技能,接手每个任务时,先决定你要做什么。然后在开始之前估算任务所需时间。最后测量实际花费时间,并与估算相比较。同样比较你实际完成的与计划完成的。这样你将会既提高你对一个任务包含细节的理解,同样也提高了你的估算技能。尽管进行了精确估算,也不能保证每个项目都会100%精确。偶尔会遇到一些突发情况和没预估到的风险是不可避免的。那么面对风险,有一些原则可以帮助你:报风险时间置前,如果开发开始或者任何过程有可能导致项目延期或者需求无法实现的时候就报警,不要等加班能实现或者存在侥幸心理;对于不确定的需求,一定要沟通到位;涉及到交互细节,必须提前沟通好,充分明确细节;技术可行性方案提前调查清楚。完结~~~最后,欢迎讨论交流!来源:https://blog.csdn.net/gang544043963/article/details/83934015
2021年11月04日
430 阅读
0 评论
0 点赞
2021-11-03
[转载]python 自动卖出京东黄金
上个月看到虎友买卖京东积存金的,我也随手买了点。金价一直在 385 上下波动,我在 381 元时买入了两次,然后 388 左右卖出(并不推荐这样做,投机短线交易不可取),都小赚了一点点。老是看金价或者关注自动推送(是的,我还简单弄了个钉钉机器人监控价格哈哈)的话还是有点累,就想着拿 python 写个自动交易卖出的。看了请求加密一堆参数也懒得分析了,selenium 开干。大致如下,自行改造吧。简单写写,写的比较乱。只做了卖出,买入还是谨慎些,没考虑做。需要 Python3 环境,需要修改的地方就是那些 xxxxxxxxxxxxxxx。建议单步调试代码,看一下大致逻辑再使用。或者仅供参考,自己重新实现。20210201 11:00 成功自动卖出import json import sys import traceback from selenium import webdriver import time, requests def getLatestPrice(): url = 'https://api.jdjygold.com/gw/generic/hj/h5/m/latestPrice?reqData=%7B%7D' response = requests.get(url=url) print(response) print(response.headers) jsonRes = json.loads(response.content) price = float(jsonRes['resultData']['datas']['price']) print(time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime()), '最新价', price) return price def openJdjyGold(): webdriverPath = "C:\Program Files\Google\Chrome\Application\chromedriver.exe" # webdriver路径 activityUrl = "https://m.jdjygold.com/finance-gold/newgold/index" sellGoldUrl = "https://m.jdjygold.com/finance-gold/newgold/sellGold/" # 如果直接去卖金的地方,可能来不及注入cookie browser = webdriver.Chrome(executable_path=webdriverPath) browser.set_window_size('400', '700') browser.get(activityUrl) browser.delete_all_cookies() # 读取cookie写入。第一次使用时注释掉这段,手动登陆一次后用下面的更新存储。自行改造啦。 with open('cookies.json', 'r', encoding='utf-8') as f: listCookies = json.loads(f.read()) for cookie in listCookies: browser.add_cookie({ 'domain': cookie['domain'], 'name': cookie['name'], 'value': cookie['value'], 'path': '/', 'expires': None }) # 更新一下文件存储的cookie cookies = browser.get_cookies() jsonCookies = json.dumps(cookies) with open('cookies.json', 'w') as f: f.write(jsonCookies) browser.get(sellGoldUrl) return browser def sellGold(): print('开始卖出') browser = openJdjyGold() time.sleep(2) # 已经到卖出的页面了 # 全部卖出的文字按钮,可以优化为 find_elements_by_class_name sellAllBtn = browser.find_elements_by_css_selector( "#app > div > div.inputBox > div.input_content > div.input-row.flex.flex-align-center > p") sellAllBtn[0].click() # 点一下卖全部,填入数量 time.sleep(0.5) # 勾选我已阅读xxx checkIHaveReadRules = browser.find_element_by_class_name("check-icon") checkIHaveReadRules.click() time.sleep(0.5) # 卖出页面下方的 立即卖出 startSellBtn = browser.find_element_by_class_name("jrm-common-btn") startSellBtn.click() time.sleep(2) # 然后是输入密码,找到全部密码按键存到dict passwordBtnDict = {} allPasswordBtn = browser.find_elements_by_class_name("sys-itemW") for btnItem in allPasswordBtn: if btnItem.text != '': # 有两个按键用不上 passwordBtnDict[btnItem.text] = btnItem payPassword = "xxxxxxxxxxxxxxx" # 支付密码,不要泄露了............................. for bitPwd in payPassword: passwordBtnDict[bitPwd].click() # 输入完最后一位,就自动确定了 # 然后忘了还有没有进一步的确定。。。。。。 time.sleep(10) sendDingtalkNotify('完成卖出') browser.quit() def autoSellGold(expectPrice): while True: try: latestPrice = getLatestPrice() if latestPrice > expectPrice: sendDingtalkNotify('''最新价{}元/g,高于预期的{}元/g,准备全部卖出'''.format(latestPrice, expectPrice)) sellGold() sys.exit(0) else: print('未达预期', expectPrice, ',不卖') except Exception as e: traceback.print_exc() sendDingtalkNotify('京东积存金自动交易出错,需要处理') sys.exit(1) finally: time.sleep(30) def sendDingtalkNotify(msg): print('sendDingTalkMsg', msg) url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxx' headers = { 'Content-Type': 'application/json' } data = { "msgtype": "text", "text": { "content": "[bot]" + msg + "@xxxxxxxxxxxxxxx" }, "at": { "atMobiles": ["xxxxxxxxxxxxxxx"], "isAtAll": False } } response = requests.post(url=url, headers=headers, json=data) print(response.content) if __name__ == '__main__': buyPrice = 383 # 买入价格,如果想不亏的话,需要的涨幅应该是手续费0.3% minimumPrice = round(buyPrice * 1.003, 3) print('''{}买入的话,最少应该{}才能卖'''.format(buyPrice, minimumPrice)) expectPrice = minimumPrice * 1.01 # 期望价格,可以自己改一下 autoSellGold(expectPrice)
2021年11月03日
1,266 阅读
0 评论
0 点赞
2021-11-03
我做了一个决定:卸载抖音。
凌晨,我做了一个决定:卸载抖音。这是我想了很久才做的决定。为什么呢?原因有以下几点:抖音太浪费我的时间了。每次想着只刷一会儿,结果刷了一会儿后一看时间, 1个小时没了,夸张的时候3个小时没了抖音上的东西都是各种算法推过来的,都是我感兴趣的,比如小姐姐(可远观而不可亵玩焉)、国内和我关联度不是很高花边新闻(食之无味弃之可惜)、理财相关(天花乱坠迷人眼,一看钱袋空空也)我为什么要卸载抖音?我想起了曾经喝的汤:你和首富的是一样的,你们都拥有 24 个小时,谁也不比谁多一秒。可是现在呢?截至写本文的时间点为止,抖音老板成为首富,而我成为了首富的数字报表里面的一个数字。我的时间都花在他的身上,所以我要卸载抖音。这不是眼红他,和首富本人以及他的资产没有任何关系,虽然我也想着天上掉馅饼,首富突然大发善心的给我几个亿。但是作为一个爱幻想的人,我知道这是不可能的,除非我是他的太子。扯远了,说白了,我就是为了重新分配时间,重新拿回属于我的时间,就像是我现在可以有时间写本文一样,让我可以用自己的时间去做一些自己的事情,比如写写文章、看看技术文章之类的。有人会说:这和抖音有屁关系,明明是你自己把时间花在抖音上,又没有人拿着刀逼着你看。是的,我承认这一点,确实没有人拿着刀逼我,只能说明我没有目标感和不自律。我看到抖音总想着点一下看看有没有新的小姐姐让我列文虎克批阅一下。我总想吃点第一手的瓜,好像我吃到第一手的瓜拿到第一手消息的时候,我就能成为首富一样,或许这里用首富这个词并不合适,我只想表达的意思是:现在坐下来,慢慢想的时候,我发现这些和我都没有关系,并且我过度的关注这些东西了,我意识到自己的不自觉了,所以我要卸载抖音。
2021年11月03日
2,932 阅读
2 评论
0 点赞
2021-10-20
vmware 共享目录后,使用 npm 或者 yarn 报错
问题把 windows 目录共享给 vmware 下的 linux 后,发现 npm 或者 yarn 的生成命令(指的是各种生成目录的命令,比如拉取拓展包),无法正常拉取寻找问题的原因通过一轮的搜索得知:vmware 共享目录后,在 vmware 里面使用 npm 确实无法创建目录。然后作者给了解决方案,但是本文作者不予采纳。解决方案本文作者的解决方案恰巧是灵感一瞬间:在 linux 里面执行不行,那么是不是在 windows 上执行 npm 或者 yarn 就行了?于是试了一下,果然可以。
2021年10月20日
2,923 阅读
0 评论
0 点赞
2021-10-08
把 windows 10 目录挂载到 vmware 下的 docker 并进行 php 本地开发
前言作者使用 win 进行 PHP 代码化开发,真香。但是容易出现各种场景下出现一些因为系统不一样而导致的掉头发的问题。所以今天就来解决环境不一致的问题系统说明本地 : win10 + vscode + vmware 16 pro (此处无影响,仅供参考)linux : ubuntu 18.04docker 20.10.8(此处无影响,仅供参考)docker 容器里面的 php 版本为 7.4 (此处无影响,仅供参考)docker 容器内 nginx 为 1.21 (此处无影响,仅供参考) 最终目标环境作者需要在 win 本地同步修改 php 文件,文件实时同步到 docker 目录下,并且作者可以实时刷新 web 页面看到修改后的页面效果。 整体实现逻辑使用 vmware 的目录共享功能将 win本地的目录同步到 vm 下的 linux 内,然后 docker 启动并挂载相对应的目录。具体操作流程将 vmware 的共享目录设置为本地对应的代码目录。(如下图:设置>选项>共享文件夹>总是启动>添加>确认)此时,windos 方面的目录配置已经完成。安装 vmtoos。首先可以确认一下自己的 linux 环境是否安装了 vmtools 。命令为:which vmhgfs-fuse 。如果有这个命令,则可以直接进行第 3 步。如果没有这个命令,则需要通过 vmware 菜单栏进行安装。 如果您还是无法正常安装的话,建议本文附录的链接进行安装。将共享目录挂载到 linux 。请将 下文中的 您的目录 替换为 您的 linux 环境的对应目录, 您的用户id和用户组 id 建议为 docker 的 id, 如果不知道那就使用 root 。umask 对应的权限为 00 表示为 0777vmhgfs-fuse .host:/ /您的目录 -o allow_other -o uid=您的用户id -o gid=您的用户组id -o nonempty -o umask=00配置 nginx 里面对应网站的配置(主要是修改目录指向,指向对应目录),如下图:给的截图仅供参考,注:我把 app 目录映射到 docker 里面了,所以我直接 app/mount/ ,您需要改成您的 docker 映射的载入的目录。启动 docker 容器,载入对应的映射配置。打开浏览器,即可正常访问 。附录出现无法解压的问题 :https://blog.csdn.net/maureen226/article/details/78947859VMware 上 Linux 虚拟机和 Windows 共享文件夹 :https://www.cnblogs.com/jixiaohua/p/11774240.html开机重启后挂载丢失:https://blog.csdn.net/JinlonW5/article/details/102790900?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-102790900.nonecase用 vmhgfs-fuse .host:/ /mnt/hgfs 挂载后需要超级用户才能 ls hgfs :https://bbs.csdn.net/topics/392053153vmware 官方文档:https://docs.vmware.com/cn/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-AB5C80FE-9B8A-4899-8186-3DB8201B1758.html解决 VMware 中共享文件夹 hgfs 的权限问题 https://jarviswwong.com/ubuntu-vmware-hgfs-permissions-problem.htmlumark 详解: http://c.biancheng.net/view/764.html其它问题下列的问题第一次遇到了,但是我的解决方案是确认权限问题,而网上给的是如下的解决方案。并未测试,自行判断最后加载网站的时候可能会出现 file not found 之类的错误 打开文件: usr/local/php/etc/php.ini,修改以下配置把cgi.fix_pathinfo=0 改为 cgi.fix_pathinfo=1把 ;cgi.force_redirect=1 改为 cgi.force_redirect=0修改php-fpm.conf里面的user和group都为root,然后执行命令php-fpm -R 就ok最后 & 鸣谢感谢所有写文章的大佬给了我解决方案
2021年10月08日
4,591 阅读
5 评论
0 点赞
1
...
16
17
18
...
29