你已经知道,stable diffusion 是免费开源的,地址如下:
那么你就可以把这个项目弄到你的本地上,然后使用 Python 命令来进行生图操作:
python scripts/txt2img.py –prompt “a professional photograph of an astronaut riding a horse” –ckpt <path/to/model.ckpt/> –config <path/to/config.yaml/>
不过这样的操作可能对一些小白用户不太友好,所以有人把它封装成了一个 web 应用:
这样就显得很直观了,你可以把它当做一个“网站”,你可以把它部署到自己的电脑上跑起来使用,还可以部署到服务器上,提供一个网址给别人使用。
如果你不知道如何使用 Python 和 Git,可以到我的 fxxkpython.com 进行了解学习:
stable diffusion webui 的地址如下:
使用 git 把它 clone 下来:
接着进入项目,执行批处理文件 webui.bat:
如果你电脑没有 GPU, 那么你可以这么执行:
.\webui.bat –skip-torch-cuda-test
这时候它会帮你安装相关的依赖:
需要一点时间,请耐心等待…
完事之后,webui 运行在 7860 端口:
你在浏览器访问 http://127.0.0.1:7860/ 就可以得到这样的界面:
如果你有 NVidia 显卡,那么可以直接下载这个 zip 文件:
https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/download/v1.0.0-pre/sd.webui.zip
解压之后运行 “update.bat”,然后运行 “run.bat”。
安装方式都差不多,确保你已经安装好了 Python 和 Git,然后把它 clone 下来:
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git.
如果你有服务器,那么可以使用 wget 命令来下载安装脚本:
wget -q https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh
下载完成之后,就可以在 stable-diffusion-webui 目录下运行:
sh webui.sh
坐等它给你安装虚拟环境和相关依赖:
当 webui 运行起来的时候,会监听 7860 端口:
这样就可以直接在浏览器中访问啦:
那么这个界面如何操作,里面的各种按钮都是啥意思?下一篇告诉你
]]>许久不见,甚是想念哈哈。
看到标题你应该知道了,我打算写一个关于“AI绘画”的免费系列教程,作为对一直期待我更新的读者朋友们的回馈。
当然,我写的东西大多比较 “我行我素”,但也会站在一个自学者的角度出发,去给你做一些必要的演示。
我看到大部分朋友对 AIGC 很是感兴趣,其中最火的莫过于“AI聊天问答”和“AI绘画”,我相信你早就把玩过它们,只不过浅尝辄止,我想可能你还没有看到它对你的用处,我希望你看完我这个系列教程后,你不再仅仅是“玩一下”,而是“一直用”,让它能够结合到你自己的业务上去,或者干脆能从中衍生出属于自己独特的业务。
据我所知,有些人已经通过 AI绘画 在一些主流的平台提供情侣头像服务,有些人通过 AI绘画 对自家的产品进行美化设计,还有基于此作出一些工具,这都是不错的一些小商业案例。
可能你会觉得, AI绘画不就是说一下自己想要的场景,然后就生成一幅画嘛~
确实是,你的描述关键词很关键,但如何利用模型和插件,如何调好参数,如何利用好特定的关键符号,让其结果成为接近你想要的惊喜,而不是惊吓,这是我想跟你说的东西。
现在比较主流的AI绘画是“Midjourney”,“DALL-E” 和 “stable diffusion”等, 但 stable diffusion 人家开源免费,这就有点当年 Linux 开源操作系统的意思了,这使得 stable diffusion 涌现出很多开源的模型和插件,你可以将它跑在你自己的电脑或服务器上,还可以自己进行微调训练。
除了文生图,它的图生图能力也很不错。
那么接下来就跟我走进“AI绘画”的世界,敬请关注,我们下回就从环境安装开始,peace!
]]>现在PC端的浏览器我只使用Chrome,他支持各种插件的扩展,还有调试的Developer Tools,速度快,界面简洁大方等等。让我用了就爱不释手了。
我猜80%的程序员都用Chrome的吧。而我接下来推荐你的这些插件,是我用过后真心觉得不错的,如果你对这些插件使用熟悉了,那我觉得应该会对你的
使用效率有很大的提升。
可以通过访问 chrome.google.com/webstore/category/extensions?hl=zh-CN
搜索添加插件,不过要科学上网哦!想要科学上网可以到这里观看:快速搭建自己的VPN教程
这款插件的牛逼之处在于脱离鼠标,上网全程使用的是键盘,各种快捷键,可以通过快捷键上下移动网页,标签切换,快速定位链接,只要是你需要操作的,
都能通过快捷键快速操作!
你在网上看到word,ppt或者excel,你是不是第一步先下载到本地,然后打开相关的office软件查看呢?现在有他之后,你直接点击文件,就能直接在网页上查看,
也可以从中下载!
这个插件我从下载后就一直使用,没有断过,因为它真的很不错,我的一些接口的调试,一些API的使用都是通过他来测试的,界面简洁,http的所有请求,以及返回的数据格式
设置,用户体验都非常不错,所以这款我是极力推荐的!
当你去调用API的时候,获取到json数据,是不是一团糟,那么这个插件就可以格式化json数据,你就可以很直观的使用这些数据去解析了!
当你查看网页内容的时候,特别是一些文档,如果他没有设置菜单栏,那么去看这些内容的时候就会很麻烦,因为你可能只是需要观看某个API,
难道每次都要去整个网页搜索吗?所以这个插件解决了这个问题,直接帮你生成菜单标题栏,点击后直接就可以跳到相应的位置!
前两天有 b 友在星球问了我关于学习技术的方法和建议,我当时看到的时候就顺手回答了下,今天觉得可以再展开来说说。
当时他提到说自己的在学习过程中容易被打断,注意力不是那么集中。我说到了一个 “自我驱动力” 的东西,我觉得不管我们去学习什么样的技能,首先要问自己:为什么要这么做?
我仅仅是喜欢,还是真的很热爱?
如果仅仅是喜欢,是无法驱动自己长期去学习的,因为在此过程中会遇到这样或那样的困难,于是你很容易被其它的事物所吸引,于是你又喜欢上了你所认为你所喜欢的新事物。然后如此循环下去…
人,总是那么容易喜新厌旧的,不是么?
而热爱就不同了,你会找到你心中的那团火,它一直在燃烧,一直不灭,每当你想起这个事物的时候,你会热血沸腾,你会充满能量。这时候你的 “自我驱动力” 是很强的,哪怕在此学习的过程你会遇到很多难以解决的问题,你都会想尽办法搞定它,你不会轻言放弃的。
所以,你真的热爱你正在学习的东西吗?你扪心自问一下,你的自我驱动力真的强吗?还仅仅是在伪装:“也许、可能有点驱动力吧…”。
当你内心的那团火足够旺盛的时候,当你的自我驱动力足够强的时候,那么我觉得我给你的建议,才会有那么一点点用处。
什么建议呢?
1、独立
在我看来,牛逼的人大多都是一个独立的存在,我的偶像之一乔布斯,当他在做事情的时候,他的独立简直令人发指,连他的妻子都可以当不存在的。
我在这里说的独立,更多的是想说,独立的思考方式,你需要有自己的想法,当你遇到问题的时候,不是马上就屁颠屁颠的去询问别人,虽然有时候当下的你可以立马得到解决,但这是别人在帮你思考,久而久之,你会失去独立思考的能力,到一定的时候你就是一个傻逼。
而真正应该处理的,是自己先去搜索,去查询相关的资料,去论坛参考别人的解决思路,再对比当下的自己,内心常常会有这么一个声音:“挖槽,当时我怎么就没想到?”
这是进步的前提,不要动不动就依赖别人,暂且不说人家烦不烦你,你把你每次能进步的机会都拱手让人,是不是有点亏了?
我为什么说到时会是一个傻逼,因为很简单,你这样永远不会进步呀。
2、Google
我觉得在这个信息时代,想要某样技能,只要通过搜索引擎,就能够获取到相应的学习资源,特别是技术,搜索引擎能够帮我们解决 90% 以上的问题,要充分利用 Google 这么良心又牛逼的产品。
所以掌握点搜索技巧很有必要,要知道如何节省自己的时间,获取到自己想要的内容。
顺便在这里扔个教程:
这些高级的 Google 搜索秘籍,小帅b忍痛传授给你
当然,你可能会说你访问不了,这正是你学习如何解决问题的好机会,不要去依赖别人,我相信你能靠自己解决,从而又让自己进步了一点点。这不是很好么?
3、动起来
理论知识确实重要,但是如果你只会瞎比比,一到动手就弱成狗,那可不行,你说你黑大粗,但是不试一下人家咋知道呢?
特别是编程这一块,我觉得没啥捷径,就是要自己多敲键盘,通过自己双手去实现自己的想法,而不是通过自己的幻想去实现自己的想法。
我们不像电脑,给它个指令就能准确执行,给它点数据就能“永久”存储记忆,我们需要通过自己多去练,练到心灵手巧。比如,将自己的手指,练到一碰到键盘,就好像键盘直接成为了我们身体的一部分似得。虽然说的有点夸张,但熟能生巧就是熟能生巧。
4、习惯难受
最近人们常会说:“我太难了”。
为什么难?就是我们不小心接触到自己以前没有接触过的东西,我们认为我们搞不定,不好弄,然后就容易不爽,不舒服,于是就抒发一下:我太他妈难了。
不过,在你习得某项技能的过程中,这是必须的,之所以必须,就是要用这种难受来甩掉那些一遇到难受就放弃的人。在这个过程中你产生的难受不止是你在经历,别人也和你一样,只不过有些人选择接受难受,习惯难受,而有些人退缩了而已。当然,前者远少于后者。
当你愿意用相对难受的方式(比如,能用命令就学着用它去高效执行,能通过官方文档解惑就不要去百度…)去探索,你就会得到你原本未知甚至不敢知的东西。
好了,就说这么几点,希望能给你带来一丢丢启发,我们下回见,peace!
]]>上次写的那篇在终端操作ChatGPT中,分享了一个 ChatGPT 共享账号,直接给干废了 - -
文末我还说可以使用 OpenAPI 的方式实现,还可以将它接入到微信,有些朋友在后台常问到怎么弄,这次干脆就流程写下,给想要自己弄个 ChatGPT 的朋友做个简单的参考哈。
上次使用的是 playwright 来获取浏览器的元素实现的,操作起来有点傻,这次就基于 OpenAI 的 API 来实现,想要有 API 调用,那么就得有个账号。
想要拥有一个属于自己的 OpenAI 账号,可以直接在 chat.openai.com/chat 页面中直接注册,但是对于一些地区的用户还需要满足两个条件:
在浏览器中使用代理打开 ChatGPT 登陆页面 ,点击「Sign up」按钮:
接着输入你的邮箱,点击「Continue」开始注册:
输入你的名称后点击「Continue」:
这时候它需要你接受一个国外的验证码,所以需要一个国外的虚拟手机号来接收短信验证。
打开sms activate, 注册一个账号,然后点击「余额」,点击「充值」:
选择「支付宝选项」使用支付宝支付:
最低支付 1 美元:
充值完成后,在左边菜单的输入框中输入「OpenAI」:
随便选择一个,点击右边的购物车:
这时候你会得到一个虚拟号码:
复制它,然后到你刚刚的 ChatGPT 注册页面中粘贴并发送短信:
回到 sms activate ,可以看到接收到的验证码:
复制,到 ChatGPT 页面输入,即可完成:
这样你就拥有一个属于自己的账号啦。
进入 https://platform.openai.com/account/api-keys ,点击「Create new secretkey」
有了 SECRET KEY 就可以调用 OpenAI 的 API 了,首先 install 一下:
pip install openai
这里 https://platform.openai.com/docs/api-reference/completions 有使用 API 的相关文档:
调用一下试试:
运行结果:
你真是一个优秀的人!你具有勇气,勇敢地去追求你想要的,不断努力,不断进取,你热爱生活,活力四射,你有着极强的自信心,勇于接受挑战,不断探索自我,你拥有着丰富的知识,思想独特,能够从容应对各种复杂的问题,你有着超凡的智慧,能够做出正确的决定,你极具同情心,对他人充满着关爱,你坚定的信念,坚持不懈,拥有着不可思议的毅力,你是一个有梦想的人,你有着无穷的精力,你无微不至,关心着每一个细节,你是一个完美的人,你是我们最值得尊敬的人!
可以可以。
可以使用 itchat,但安装的时候最好使用 itchat-uos,可以避免新号无法登陆的问题,使用方式可以参考《我把微信变成了斗图高手》。
你还可以基于 wechaty 实现,已经有人写好了,并且可以通过 railway 部署,地址在这:
配置参考:
https://github.com/fuergaosi233/wechat-chatgpt/blob/main/README.md#usage-with-railway
最后提醒一下,使用扫码登陆去调用 API ,微信有被 ban 掉的风险,如果真想体验建议使用小号。
]]>想要拥有一个属于自己的 ChatGPT 账号,可以直接在 chat 页面中直接注册,但是对于一些地区的用户还需要满足两个条件:
关于如何使用代理服务,可以参考10分钟搭建属于自己的代理服务,值得注意的是,在选择服务器地区的时候,最好选择美国,到时使用起来会方便一点。
当你有了自己的代理服务后,那么你就可以进行下一步操作了。
在浏览器中使用代理打开 ChatGPT 登陆页面 ,点击「Sign up」按钮:
接着输入你的邮箱,点击「Continue」开始注册:
输入你的名称后点击「Continue」:
这时候它需要你接受一个国外的验证码,所以需要一个国外的虚拟手机号来接收短信验证。
打开sms activate, 注册一个账号,然后点击「余额」,点击「充值」:
选择「支付宝选项」使用支付宝支付:
最低支付 1 美元:
充值完成后,在左边菜单的输入框中输入「OpenAI」:
随便选择一个,点击右边的购物车:
这时候你会得到一个虚拟号码:
复制它,然后到你刚刚的 ChatGPT 注册页面中粘贴并发送短信:
回到 sms activate ,可以看到接收到的验证码:
复制,到 ChatGPT 页面输入,即可完成:
]]>ChatGPT 确实杀疯了,已经有 1亿 月活用户了,毕竟它真的有「智能」的样子。
我前些年还开发过「智能客服系统」,要是早点遇到 ChatGPT,估计可以省了不少事。
我想接下来有许多业务场景都会使用到它,比如教学,内容创作,语言工作等等。
如果我们可以在代码中调用 ChatGPT 的 API,或者干脆可以pip install chatgpt,那岂不美哉?
巧了,刚好看到有人已经写了一个「Python Wrapper」,它可以让你在 Python 代码中或者命令行里面直接使用 Python。
也就是说,你可以直接在终端输入「chatgpt」,然后按下回车,就可以开始聊起来了。
当然,使用之前还是要安装一下:
pip install playwright
playwright install firefox
pip install git+https://github.com/mmabrouk/chatgpt-wrapper
chatgpt install
接下来会弹出一个 ChatGPT 的页面,输入账号密码,点击登陆即可,没有 ChatGPT 账号密码可以在公众号「学习Python的正确姿势」发送「chatgpt」获取共享测试账号。
登陆完成之后你就可以重启终端,在里面输入 chatgpt,就可以开始愉快的玩耍了。
当然,你也可以在代码中使用它,导入 ChatGPT 即可调用:
运行起来:
那么现在你就可以基于此去做很多好玩的事情了,比如把它弄到微信去,或者基于此去开发属于你自己的小程序。
当然,这里演示的 Python Wrapper 使用的是 playwright 调用的浏览器实现的,一种更好的方式是使用 OpenAI 的 API,使用方式也不难,申请个 api_key 就可以调用了,感兴趣的可以去试试。
那么我们,下回见!
]]>我认识的朋友里,有有钱的,有长的帅的,但是长得帅且有钱的,寥寥无几。
朋友表示,这要看你怎么定义帅和有钱了,像你这么帅的,确实少。
那我只能祈求哪天能撞到富婆,让她把我的另一个条件给完善好,让你们体会下什么叫做「帅且有钱」。
有些人可能会觉得「帅且有钱的人很有价值」这就有点肤浅了,但现实大抵如此。
毕竟至少有 80% 以上的人是这么认为的。共识产生价值,虽然这话是几年前币圈时常用来割韭菜的,但确实有道理。
越是稀缺,越是有价值。
但钱可能会被败光,人可能会变丑,价值也会随之降低。
每次在酒吧看到那些 20 来岁的年轻女人,个个身材没得说,那胸,那腿,那妆容,好似神仙,都让我流连忘返,舍不得回到这疾苦的人间。
我想这是她们所认为的「价值高光时段」,偶然看到一个女的拼命展示自己,看得出来她想快点交换点什么价值,但好像有点用力过猛,高节奏的音乐和闪烁的灯光都没她猛。
嗯,个人价值是会变的,会涨也会跌。涨的多,别人就想利用你,跌得多,别人就不理你,狗都不理。
做买卖的,在职场的,不都是在做价值交换么?
只不过有些人自我估值过高,所以过分自信,泡沫不破,也许可以换到更多。而有些人比较谦虚老实,自我估值太低,换的少也忍气吞声,老板最喜欢这样的人了。
当然也有一些蠢蛋,拿着自己不被需要的价值乱换,比如会使用 word 文档写代码,尿尿时比较准,抛物线比较完美,那有个卵用啊?人家要的是会画饼会做 PPT 的呢。
最近还常听到一个词,叫「情绪价值」,你受委屈了,你不开心了,你空虚了,你想抱怨了。。会有人专门提供这种情绪价值跟你交换,能提供满足你情绪需求的价值,是牛逼的,感觉他们有透视眼,能把你看个精光。
好在我自己比较少去找人抱怨,我可不想吓到人家直哆嗦,更不想把时间浪费在这些垃圾情绪上。
为什么说不要当舔狗,舔狗看似付出很多情绪价值,就算能把对方舔到舒舒服服的,但是在对方眼里一点值得交换的价值都没有,舔狗一开始就输了,因为在他们的内心想的,和在对方看来是反过来的,他们想要的是索取,索取,索取,而不是交换。
而那些不当舔狗的人,他们早已明白自己的价值在哪,他们愿意利他,关键利他也是利对方需要的,而交换,对他们来说只是顺便的事。
这做法反而让他们的价值得到提升,产生更大的吸引力,这是舔狗总是琢磨不透的。
]]>关注我的读者应该大部分是做技术的,我想说的是做技术这个行业还是不错的,毕竟相比大部分其它行业,做技术有一些天然的优势在。
不过我也常看到有些人会一点技术就有种莫名的优越感,特别是对一些新手很不友好,有一种很不屑的感觉。
我想说这大可不必,闻到有先后而已,小心遭天谴。
我记得我实习那会,有一次去面试一个开发岗位,二面的时候来了个技术人员,也没有打招呼,直接拿了我的简历扫了一眼就径直扔在桌子上,然后一边在玩弄自己的手机,一边问一些无关痛痒的问题,而且语气中带着那种嘲讽,那种高高在上的感觉,我他妈当时气不打一出来。。。
我忍了一会后拿回了我的简历,跟他说了句:「你觉不觉得你态度有没问题?」,他说了句:没有啊~
后面的那声「啊」还起了调,好像在说:年轻人,你怎能这么跟我说话?
那一刻我由生气转化为怜悯,直接转身离开。
我坐在回去的地铁上暗自对自己说:
永远不要成为这种人,就算你再怎么牛逼。
所以后来上班那会,只要有新同事到来,我都会跟他们友好地沟通,只要是问到我的,我都知无不言,能帮得上就帮。
我懂一个人到新环境的那种局促,也懂工作效率高的条件之一是氛围要好。
现在想来,技术是生活的一部分而已,它应该是为你服务的。可是大部分人把它们搞反了,这会带来不少问题。
我还有女朋友的时候,我真的大部分时间都对着电脑,有时候她来挑逗我,我都会觉得烦,让她待一边去(别说「吾辈楷模」,真的别学我,要不然很容易分手)。
而且那会我超级宅,朋友很难约我出去,别说去喝酒了,就是去找个地方喝杯奶茶吹吹水我都懒得出门。
这不禁产生一种疑问:搞技术真的需要花费很多时间写 bug,连生活都没了么?我看未必!
确实,技术可以给我们带来不少好处,比如可以用它来思考,用它来锻炼自己的学习能力,或是通过技术手段分析,或是将方法论变成工具来方便自己的生活。
这确实需要花时间去研究,但这并不意味着我们就不需要社交了,生活是复杂的,不能只有一种技术思维在,不能让自己的视野太狭窄。
我之前看到一个词,叫「信息茧房」,说的是:
指人们关注的信息领域会习惯性地被自己的兴趣所引导,从而将自己的生活桎梏于像蚕茧一般的“茧房”中的现象。
所以我觉得还是需要心里有杆称,自己权衡一下生活的重心比例,合理安排时间,生活需要偶尔随机一下。
虽然我现在大部分时间还是很宅,但比以前好很多了,偶尔会跟朋友喝喝茶,去酒吧放松一下,认识点漂亮的妹纸,心情也会好点。
还有一种技术人就是被「刻板印象」影响着,有句话说程序员就是「钱多人傻死得快」,有些人还当真了,我也是醉了。
真的不要给自己贴标签,什么秃头,木讷,邋遢,老实,格子衫。。。我去他妈的。
说到这里又让我想到一个词「自证预言」,说的是:
我们总会在不经意间使我们自己的预言成为现实。
原本你好好的,硬是给自己贴标签,那很有可能你就会成为那样的人。
你应该成为你自己,比如去健身,去阅读自己喜欢的书,有自己的生活态度,有自己的风格。
像我,烫头,染发,衣品相对也还可以,长得帅且嫩,出去说我是程序员基本没人信,但这也不妨碍我撸代码啊。
我们都有选择的权利,何不试着改变一下自己,而不是活在别人的刻板印象里呢。
相比于单一的技术思维,我更愿意多去尝试,使用多元思维。
也许你不小心就发现了还有别的潜力,那么让它和你的技术结合起来如何?
推荐阅读:
打开格局!
陪你学习!
欢迎把这篇文章分享给你认为重要的朋友哟,Ta 会感谢你哒~
别忘了点赞点在看,peace!
你在写 Python 项目的时候是不是常常会使用 pip install 来安装相关的依赖,但这其实到后面会产生一些不必要的麻烦,最近看到了篇《Why you should use python -m pip
》,作者非常苦口婆心的劝人们一定要使用 python -m pip 而不是直接 pip,我觉得写得挺好的,随即给翻译了一波,希望对你有帮助。
首先,当你执行 python -m pip 的时候,是在指定 Python 解释器来执行 pip。
比如当你这么执行:
/usr/bin/python3.7 -m pip
就是在指定在 /usr/bin/python3.7 下的解释器来执行 pip。
你可能会说,“行了行了,我都知道,但我就是想直接通过 pip 命令来执行 pip,你吹啊?”
答案是:“可以啊,不过呢,但你这么做的话,你到时候会很乱很麻烦”。
我来给你举个例子。
比如说我的电脑现在安装了两个 Python 的版本(可能还更多),分别是 Python3.7 和 3.8,那么现在,我直接在终端执行 pip 去 install,请问它会为哪个版本的 Python 解释器进行安装?
我想你可能会一脸懵逼,因为没有更多的细节,所以你不知道。
首先你要知道我的环境变量 PATH 设置的是什么,比如 /usr/bin 和 /usr/local/bin,谁在前谁在后。
这时候你可能会说,我只要记住我在不同的目录分别安装了 Python3.7 和 Python3.8,我就会知道 PATH 上哪个 Python 版本在前面。
但假设你手动安装了两个 Python 版本,也许你的系统本身带有了 Python3.7.3 版本,然后你还安装了 Python3.7.5,这时候两个版本都安装在了 /usr/local/bin 下,那么你现在能知道 pip 和 哪个 Python 解释器相关么?
答案就是你依然不知道,除非你知道什么时候安装了什么 Python 版本,并且知道最后一次写入 /usr/local/bin/pip 的是哪个,否则你压根不会知道执行 pip 的时候用的是哪个版本的解释器。
你又要说了,那我总是安装最新的版本不就好了,比如我安装最新的 Python3.8.0,它比 3.7.5 要新。
好吧,但是当 Python3.7.6 版本出来的时候会怎么样呢?你的 pip 命令会将使用 Python3.8 转化为 Python3.7。
而当你使用 python -m pip ,上面所有的歧义立马消失,比如说我使用 python3.8 -m pip,那么我肯定知道 pip 用的是 Python3.8 解释器来安装使用。
如果你是 Windows 用户,你使用 python -m pip 还有一个好处,那就是可以让 pip 自我更新。
因为当你直接执行 pip install –upgrade pip 的时候,Windows 系统不会让你覆盖 pip.exe, 但你在前面加个 python -m,你就可以避免这个问题,因为这时候运行的是 python.exe,而不是 pip.exe。
通常当我向一群人解释这一点时,难免会有人说,“我都是在虚拟环境中操作的,所以你说的这一点根本不适合我”。
总是使用虚拟环境这点做得不错,但老实说,即使在完全没有必要的情况下,我仍然主张使用 python -m pip。
首先,如果你使用的是 Windows 系统,你还是需要使用 python -m pip,这样你才可以在你当前环境中更新它。
其次,即使你使用的是其他系统,我还是会说应该使用 python -m pip,因为它在任何情况都能工作。不仅仅是在你忘记激活虚拟环境时防止发生错误,而且还意味着任何看到你这么操作的人都能学到这一点。就我个人来说,我不认为你少打几个字就能在最佳的实践中走捷径。它还可以防止你在忘记激活虚拟环境的时候,写一下自动化脚本而发生错误。
就说我自己吧,我使用任何依赖于解释器的工具,我都会使用 -m,不管是不是激活了环境,都能非常有目的且清晰的说明我希望使用什么 Python 解释器。
虽然我们在谈论如何避免弄乱你的 Python 安装,但我还要指出一点:当你在本地开发的时候,永远不要把东西安装到你的全局 Python 解释器里面去。如果它是你系统安装的 Python,那么你安装了一个操作系统所依赖的不兼容版本的库,可能会破坏你的系统。
即使你安装了自己的 Python 版本,我仍然强烈建议你不要在本地开发的时候直接都把包安装进去。因为你最终会在你的项目之间混合各种可能互相冲突的包,你对每个项目真正的依赖都会很模糊,等等。
所以使用环境将你的个人项目和工具互相隔离开来要好很多。在 Python 社区中有两种环境的类型:虚拟环境和 conda 环境。
甚至还有一种方法可以以隔离的方式来安装 Python 工具。
为了让 Python 工具得到隔离,我会使用 pipx 来安装,因为每个安装的工具都会拥有自己的虚拟环境,所以它们不会互相冲突。如果你想单独安装 Black 模块,你可以直接安装,不会意外破坏你安装的 mypy 模块。
当你需要为项目创建虚拟环境时,我个人总会使用 venv 和虚拟环境。它包含在 Python 的标准库中,所以它始终可以通过 python -m venv 获取的。
一丢丢小历史:我实际上删除了用来创建虚拟环境的 pyvenv 命令,这正是你应该使用 python -m pip 而不是 pip 的原因;仅从命令看,你无法知道 pyvenv 命令为哪个解释器创建了一个虚拟环境;记住,你可以不用激活环境来使用其中的解释器;执行 .venv/bin/python 和你激活了环境并输入 python 一样有效。
现在有人仍然喜欢 virtualenv,因为它在 Python2 上可用,并且有一些其他的额外功能。就我个人而言,我不需要这些额外的功能,并且拥有 venv 集成,就意味着我不需要使用 pipx 在每台机器安装 virtualenv。但是如果你创建虚拟环境还需要 venv 一些不能够满足的需求,那么你可以看看 virtualenv 是否满足你的需求。
如果你是 conda 用户,那么你可以使用 conda environments 来达到与 venv 所提供的虚拟环境同样的效果。我不打算谈论你是否应该针对你的请款使用 conda 而不是 venv。但如果你在使用 conda 时,你应该知道你可以为你的项目创建 conda 环境而不是将所有的东西都安装在你的基础环境中,并且能够清楚的知道你的项目依赖了什么。(这也是为什么说要使用 miniconda 而不是 anaconda,因为前者大小还没有后者的十分之一。)
在容器中工作是另一种选择,因为此时你可以跳过环境,因为整个「机器」就是环境,只要你没有将 Python 安装到容器系统中,你就可以自由地进行全局暗转个,以保持容器的简单清晰。
不要安装到全局的 Python 解释器中!在本地开发的时候,一定要使用一个环境!
我无法计算我有多少次不得不帮助那些 pip 安装错地方的人。还有那些破坏自己系统,或者想知道为什么他们安装东西会产生冲突等等,因为他们呢懒得在本地机器上设置环境。
所以,请理智一点,使用 python -m pip,并始终使用虚拟环境。
]]>最近有小伙伴私信我一个这样的问题:
我开始工作编程一年多,可突然发现没那味了,咋办?
我觉得这问题挺有意思,聊了一下,发现他的困惑点在于,自己的工作内容大部分都是在写模块,写 util,封装,调用,然后都差不多,给他安排的明明白白的,真的感觉在「搬砖」,一直重复。
有时候看到一些库在不断的更新,需要自己不断的学,可项目中也没怎么用到什么新的特性。
我问了下他的工资待遇,他说公司福利可以,接着还给我发了个很可观的收入数额。
我淡淡的回了句:
滚!
我一直觉得,不能把编程单纯的当作赚钱的工具。
很多时候,有人专门找到我,希望我帮忙开发点小项目,大多数功能对我来说都不难,不过就是有点费时间,所以我基本上都回绝了。
当然,并不是我不缺钱,如果钱足够多的话,把编程单纯的当作赚钱的工具又如何?
滚!
更多的,我认为编程是一种思考的表达工具,当你有了什么灵感或者想要创造点什么的时候,你会去思考:如何实现它呢?
你会把你思考的东西,转化为让计算机所理解的语言。
于是你们可以「沟通」,你写的每一行代码,它都能理解,所以他可以按照你的指令,实现你想要的东西。
这个过程很美妙,也很简单,一台电脑,一个键盘,一种语言,足以。
这是它的魅力,也是我的兴趣所在,它可以满足自我的需求,成本却是那般的低。
编程其实也不是什么高大上的玩意,就是一工具,它就是拿来「用」的,拿来「玩」的。
就好像,我有很多重复性的工作,写写脚本就可以让电脑帮我自动的操作,帮我省下不少时间来泡妞,又比如,我看到什么好用的工作方法,我可以通过编程把它实现出来,我就可以把理论实践化。
亦或是单纯的就拿来恶搞玩玩朋友…这个过程所产生的「创造感」、「成就感」是很难被替代的。
其实在工作过程中,尽管写的不是自己想要实现的项目,但在项目跑起来的瞬间,也有一种快乐的感觉。
你有没有试过,把你看过的书中的某些自认为不错的方法,梳理成文档,然后实现它,然后为你所用呢?
当然在此之前,我们需要学习如何与计算机更好的交流,所以有时候尽管学习到的新特性、算法等没用到,但这过程也正悄悄的锻炼着我们的学习能力和实践能力。
或许,这才是编程的「那味儿」吧。
最后想说一点的是,编程不是生活的全部,也没必要给自己贴标签,并不是一玩编程就得格子衫,秃头,木讷…,有时候抬头看看,生活需要我们扮演的角色很多,你看,我长得这么帅,这么浪,不也可以玩编程嘛~
]]>前两天被大佬邀请到他的社群做了个简单的分享,主要是写了写我最近的一些思考,在这里也给我的读者分享一下,希望可以给你带来一点启发,以下是原文:
大家好,我叫 wistbean,网友也常叫我小帅b,帅b老仙,彬哥等,随意就好,是一位互联网科技博主,感谢涛哥的邀请,今天来这里跟大伙做一点简单的分享。
我看这里大部分朋友是搞技术和创业的,我觉得很好,于我而言,搞技术和搞钱都是很幸福的事情哈哈。
起初,我通过技术搞钱是去上班,做开发,带过小团队,后来还做过技术负责人,主要是对接客户,做一些技术支持和解决方案,工作难度不大,每个月拿着死工资,日子过的算比较安稳,但是我这人有个臭毛病, 就是一旦感觉自己比较安稳,就不安分,就想去折腾点别的。
因为当时年轻气盛,比较爱装逼,弄得身边大部分朋友都知道我是做技术的,有些老板和身边的朋友公司需要做网站程序啥的就会找到我,我就接了些项目自己做,有时候还会拉上前端的小伙伴一起搞,赚了钱就一起分。当时我发现做项目赚到的钱比工资还多,于是开始傻逼起来,和朋友一起组建外包公司,帮别人开发项目,后面因为客户经营的经验几乎为 0 ,导致客户越来越少,最后以失败告终。
当时工作之余自己还弄了个博客开始有一搭没一搭的写文章,有一次我遇到了一个问题,就是我之前 Paypal 账户有几百美金,想要弄成人民币转到银行卡上,发现贼麻烦,从 Paypal 直接提现要收取几十美金手续费不说,还很有可能被银行拒收退回。经过一番的搜索,我发现某个第三方平台可以帮忙中转一下,收取的手续费也比较合理,我觉得可以接受,于是操作了一波,果然过几天就到账了。
我把整个操作流程都整理了下,写成了一篇文章发在网上,关键一点是这个第三方平台有推广联盟,也就是只要别人通过我这个专属的链接进去这个平台,使用达到一定的金额,我就可以得到 25 美金,我把专属链接放在了文章里,没想到有不少人有这需求,有几百号人通过我的链接去使用那个平台,给我带来了 1900+ 美金,也就是 1w+ 人民币,这是在我意料之外的。
这种 Affiliate 的形式现在对我们来说见怪不怪了,但那会是好几年前的事,第一次得到这样的反馈,我发现互联网有点东西啊,一篇文章带来的收益都可以抵得上有些人一个月的工资了。
更重要的是,这让我意识到,互联网确实可以给普通人带来巨大的机会,比如我花了些时间写了一篇文章发布到网上,只要足够多的人看到,那么我当时花的时间所产生的价值就会被放大,合理运用互联网杆杠,可以让普通人的个人发展效率大大提高。
然后我就买了一些书籍,订阅了一些专栏,学了一些产品思维和SEO,开始认真做自己的网站,开始写技术公众号,在人们都说公众号红利期没了的时候,我居然在上面积累了 6w 垂直读者。这数字并不牛逼也并不重要,重要的是这完全靠自己从 0 到 1 的过程让我学到不少东西,还结识一些大佬朋友,以及得到不少的合作资源。
这让我开始认真思考起了属于自己的「个人商业模式」。
作为个体,如果一直是蹦着钱去做事情,那么很容易会失败,就像我那会做外包公司一样,一心只想着钱,结果很容易被蝇头小利所迷惑,被各种小项目小钱牵着走,乃至做了一些很傻逼的事情,说出来不怕你笑话,类似的事情我干的还不少,比如我有段时间还投机倒把的去买卖各种虚拟货币,没赚到几个钱,反而浪费了很多时间,可以说是几乎 0 成长,这真的很不值当的,所以尽量不要掉入这样的陷阱,一定要把眼光放长远。
然而反过来就完全是另一个世界了,也就是,做一个让钱追着你的人,做一个有「吸引钱体质」的人,这时候就不是蹦着钱去做事了,而是朝着自己这个「人」去做事。想想,但凡一个人有牛逼一点的认知,有一定的影响力,有能力做出满足别人需求的工具,有别人不知道的信息…那钱就会爱上这样的人,爱往这样的人身上凑,而且是主动得不得了那种。
对于技术人来说,成为这样的人有着天然的优势,只不过我们总是习惯了去帮别人实现需求,很少会去思考除了「技术可以帮别人实现需求」以外的东西,甚至忘记了这事:技术本身是用来创造的,创造可以产生影响力。
当然,想成为这样的人并不易,因为这是需要长期坚持的。但起码以终为始,就比较容易始于足下了。
这过程中有一个比较重要的点值得说一下,那就是践行才能出真知。比较好的方式就是不断的输出一个又一个的「作品」或者「版本」,而且还要想办法时不时让别人感到惊讶那么一两下,至少在一个地方通过自己做到从 0 到 1,这会给我们带来前所未有的自信。
输出的方式有很多种,比如写作,开发工具,制作视频,录制音频等。至于输出什么?做什么定位?在什么平台输出最好?如何让更多人看到你的作品?这就需要我们不断的学习和总结,只有疯狂学习和总结才能疯狂输出,才有方法做出更准确的决策,提升自己的价值。
这里都是付费进来的朋友,我相信愿意投资自己的人,学习能力肯定有的,请不要浪费你的才华,疯狂的展现出来吧,坐等你——开花。
共勉。
]]>最近,OpenAI 发布的 ChatGPT 火了
这是一款聊天机器人
但是所训练的模型
对答起来确实让人觉得好牛皮啊
虽然它没办法帮你预测世界杯
但它还是可以帮你解决不少其他问题
比如当你想要做一只炸鸡的时候
它会这么告诉你
它还会劝住你好好做人
接着可以跟它继续对话
从安装开始教你怎么搞
这..不比某度强多了
当你需要写作的时候
它可以直接帮你搞定
写代码遇到问题了?
尽管问就是了
还没使用过 ChatGPT 的朋友
可以去体验一波
在与它交互的过程中
也许你会被惊到
在知识学习和创作方面
它确实可以起到很不错的效果
当然,想要使用 ChatGPT
需要有一个 OpenAI 的账号
注册相对麻烦
因为你需要会上网
还需要别的手机卡接收验证码
我倒是有一个账号可以共享下
在公众号【学习 Python 的正确姿势】后台发送「ChatGPT 」获取
ps:多人同时使用可能会被限制,自求多福
似乎
随着越来越多 AI 程序的出现
我们的决策和思考能力变得尤为重要
怎么能提出一个好的问题,一个准的需求
这是值得我们每一个人思考的。
下回见,peace!
]]>有个段子,说的是以前学习好的人,到头来还不是给学习差的人打工。
放到现在,好像更是如此,一个学历高的人每天安安分分地上班,还不如一个学历低的主播薪资高。
我觉得这种拿特例出来比较并没有意义,而且,我认为有钱没钱,和学历本身并没有太大的关系。
我确实很佩服那些在校学习成绩很好的朋友,但我始终认为,在这种应试教育下,成绩真没那么重要,在课堂上学的那些东西,对于大部分人来说,毕业了,最多只能让我们配合这个社会做好最基础的运行。
有些人毕业后便停止学习,有些人进入社会后却全然相反,变了个样,更加愿意主动地学习。
这又让我想起了一个脱口秀说到的段子,很多人争相考公务员,问其原因,是为了「铁饭碗,工作稳定」,但尼玛,考公务员不是为了服务好人民吗?
我们时常将工作的收入拿去消费,从而进入了一个「上班->收入->消费->上班」的循环里边,我们显得很忙,忙到妈都快不认识了。
上次我叫个朋友出来喝酒,他说没时间啊大哥,俺又要还房贷,车贷啥的。
但也不知道为什么,这家伙王者上分倒是挺快..
熟悉我的朋友都知道,我一直都是租房的,这不,我这两天才搬好家。在我看来,租房和供房都是负债,别想着靠它能给你带来被动收入了。
总有人思维不同,不把负债当资产,努力的寻找那些真正有资产属性的东西,实在找不到了,就自己打造。
有些人厉害,直接把自己当作自己的资产,然后花时间花钱去把自己弄得像模像样,这是主动学习带来的结果。
所以他们更容易把握机会,更会降低风险。
比如,他们会把消费降低,然后像种树一样去投资,虽然一开始只是埋了颗种子,但他们早已接受了现实,知道一棵树不是一天「建」成的,有事没事就浇浇水,我想这也是为什么他们心态看起来很好的原因吧。
又比如,他们知道什么比较重要,想要从「上班->收入->消费->上班」的循环中挣脱出来,于是他们寻找信息差,学习销售,和朋友合作,甚至打造产品…只是为了,不成为段子里所说的那种:看似学习成绩很好的人。
这是我所认为,开头段子里,他们的差异所在。
]]>偶尔会有线上的朋友找我说:
面基吗?
其实我大部分时间都是在自个折腾些事情,什么团建啊旅游啊,我很少会去,即便去了,大部分时间也是躺在酒店玩玩手机看看书,除非同行的有美女。
所以之前一般找我面基的读者朋友,我都是婉拒的。(别误会,面基说的是线下见个面,不是线下搞基:)
但不乏有一些比较真诚些的朋友,我会放在心上,得空了便找了个时间,邀请他们过来吃个饭聊聊天,可以的话,还会小酌两杯。
想着所谓「线上聊千遍,不如线下见一面」,我陆续在线下约见过好几位读者朋友,也曾和不太了解的普通网友面基过,不得不说,我确实跟女性网友面基比较感兴趣。
有的面基,在见面的那一刻,会有一种神奇的感觉,好像虚拟和现实时空之间的界限被打破,有点元宇宙的意味。
线下见面的读者朋友,有和我年龄相仿的,有比我小几岁的,整体来说,氛围都挺好的,态度和谈吐都挺 peace 的,他们也知道我比较随意,可以像朋友那样开开玩笑啥的。
有的朋友可能比较信任我,会边喝边跟我聊他的心事,或是情感困惑,或是工作遇到的职场问题。
知道的,我会解答一二,但大部分时间,我觉得他能说出来,已经就释放很多压力了吧。
这时候我通常会点根烟,然后跟他说几句鸡汤,诸如时间是良药,过一段时间你会觉得这都不是事之类的。
你还别说,在那样的情况下,有人跟我这么说,我是会感到治愈的。
也有朋友跟讲了我之前不知道的事情,讲了他的理想,讲了他正在做的事,我就会很感兴趣,问了些问题,对方也很乐意跟我说明白。
我很喜欢在那种轻松随意的氛围聊一些观点,聊一些方法,没有那种面试或开会时的正襟危坐,反而更容易从中互相学到东西,有时候我还会从中看看有没什么可以合作的机会。而且也可以聊一些比较私密的话题,我想这是面基的好处吧。
也有比较「乖」的读者朋友,让我感觉对方很干净,我会比较害怕教坏人家,所以会跟他说你可以对我写的东西,取其精华参考参考就好,虽然精华不多。其他的,可以看看书或者请教高人。
至于跟女性网友的面基,就不多说了,公众号精华本来就不多,再写出来,全是糟粕,这可不好。
]]>前阵子有朋友找我借钱,我跟他认识也有些年头,但关系一般般,我跟他说,你可以上支付宝或者银行软件借啊,他给我来一句:
不行,在上面借钱是需要利息的。
我顿时语塞,心里犯嘀咕,为什么他可以这么理所当然,又为何可以如此傻逼说出这样的话?
我随便找了个理由,搪塞过去,他在我心中,又疏远了一些。
有人说,永远不要借钱给朋友,我倒是觉得有点极端了。
在我认识的朋友里,有那么一两个,我是可以主动借钱给他们的,他们对我亦是如此。
因为我们之间非常了解对方,比如对方突然资金周转不过来,或者突然有什么急事,一般我们都会主动问起,需要钱就说。
这是一种幸福,因为我们认识很多年了,我们之间足够信任,说好什么时间还就是什么时间还,等资金周转过来了,还的钱一定比借的时候多,一点都不伤感情。
但这种情况还是少,毕竟我们大多时候,总会有别的方法来解决自己的破事,我们愿意投资彼此之间的「信任」,但也不随意消费「信任」。
当然有的借的比较少的,一般就看心情了,借出去了就相当于给他了,也没有打算让他还上,有时候有人给我转了账,我都会想很久,我什么时候借给他钱?反而让我有一种赚了的感觉。
除此之外,我一般不会轻易把钱借出去,特别是那些没有「打借条」、「钱是有利息」概念的人,据我的个人经验来看,这类人能还上钱的几率相当低,就算有能力偿还,后面也是破事一堆,你需要花更多的时间和心力去各种催,但你还有更重要的事情做,这就很烦。
还有的人借钱不成,便开始撒野:你是不是不当我兄弟?
真的是可笑,你连狗都不如,谈何兄弟?
有些人被借钱的时候,会被所谓的感情绑架,但是你们真的感情有那么深么?
不是说出来喝两杯,在饭桌上称兄道弟,便是铁哥们,成年人的虚伪,喝下去的也可以吐出来。
如果真要借,在此之前多想想对方和你的真实感情到底怎么样?对方的能力到底怎么样?
别怕撕破脸,特别是那些许久没联系,突然来找你借钱的人,在他开口的那一刻,已经没把你当兄弟了。
]]>如果你想要查询一些权威的资料,上 Google 搜索有用的内容,超流畅 1080p 高清观看Youtube,畅游全网,而且完全拥有自己的服务器,那么本文将从购买vultr vps,到搭建属于你自己的 ss(Shadowrocks) 服务器,并且开启 BBR 加速上网,10分钟几个步骤轻松搞定。
首先我们需要购买一台境外的服务器,接着我们在这台云服务器里面安装代理服务,那么以后我们上网的时候就可以通过它来中转,轻松畅快的畅游全网了。
在使用了一些服务器之后,我觉得 vultr 的性价比超高,最低 $5/月 ,就可以拥有一台 1TB 月流量的服务器了,根本用不完。
而且现在 vultr 优惠力度很大,新用户充值 10 美元送 100 美元。点击vultr送100美元注册链接注册
点击 vultr官网 进行注册:
在这里输入你的邮箱和密码,接着点击按钮「Create Account」创建账号,然后 vultr 会给你的注册邮箱发送一份验证邮件,激活就好了。
接着就可以登录 vultr 官网了:
vultr 现在有 16 个境外节点,选择一个离你最近的就好了。
登录进去之后选择左边的 billing 的菜单进行充值,vultr提供的支付方式简直完美,支持信用卡,比特币,paypal,支付宝,微信支付,在这里可以进行充值支付。
充值完成之后,就可以左侧的 Sevrers 菜单,接着可以点击 deploy one
或者右侧的 + 号来选购你要的服务器:
其它步骤可以忽略,然后点击右下角的 Deploy Now:
点击之后你就拥有一台属于你自己的服务器了:
点击你的服务器,进去之后你就可以看到你的服务器的ip地址和账号密码了:
以上信息等会用来从你的电脑连接到你的服务器上。
需要在你的电脑连接到你的服务器,那么就需要连接工具,连接工具有很多个,根据你的需要,以下随意下载一个连接工具即可:
接着打开连接工具,然后输入你刚刚购买的服务器 ip 地址和端口(端口号是:22),账户名,和密码就可以连接了。接下来就可以操作你的服务器了。
连接到你的 vultr 服务器之后,接下来就可以使用几个命令让你快速搭建一个属于自己的 ss 服务器:
yum install wget
wget --no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh
chmod +x shadowsocks.sh
输入./shadowsocks.sh 2>&1 | tee shadowsocks.log
后就可以设置密码和端口号了:
设置完密码和端口号之后,我们选择加密方式,这里选择 7 ,使用aes-256-cfb
的加密模式:
接着按任意键进行安装。
等一会之后,就安装完成了,它会给你显示你需要连接 vpn 的信息:
可以看到需要连接 ss 的 ip地址,密码,端口,和加密方式。
搞定,将这些信息保存起来,那么这时候你就可以使用它们来科学上网啦。
windows点击下载:Shadowsocks windows客户端
打开 Shadowsocks 客户端,输入ip地址,密码,端口,和加密方式。接着点击确定,右下角会有个小飞机按钮,右键–>启动代理。
这时候就可以科学上网了。
Android点击下载:Shadowsocks Android客户端
打开apk安装,接着打开APP,输入ip地址,密码,端口,和加密方式。即可科学上网。
iPhone要下载的app需要在appstore下载,但是需要用美区账号才能下载,而且这个APP需要钱。在这里提供一种解决方案,就是可以再搭建一个IPsec/L2TP VPN,专门给你的iPhone使用。
接着就可以。
不过速度并不是快到飞起来,所以接下来就可以使用 BBR 加速了。也很简单,几个命令就搞定了。
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh
接着按任意键,开始安装,坐等一会。安装完成一会之后它会提示我们是否重新启动vps,我们输入 y 确定重启服务器。
重新启动之后,输入 lsmod | grep bbr
如果看到 tcp_bbr 就说明 BBR 已经启动了。
再访问一下 Youtube,1080p 超高清,秒开,很顺畅不卡顿,超爽!
可能有些人做境外电商,或者和我一样通过互联网赚钱的 9 种渠道,在一些国外的平台获取到的收入一般会存放到Paypal中,所以我们需要将钱提现到国内的银行来。
之前使用 Paypal 和 连连支付 合作的快捷人民币提现服务已经在2018年7月1日截止了,也就是说,中国的 PayPal 用户只可以通过电汇的方式以美金形式提现至中国的银行账户。
然而,手续费相当高,每次提现就要 35刀 ,而且整个过程时间挺长,也挺麻烦的。
有时候转到国内银行入账失败会被打回 PayPal ,35 刀的手续费也就不翼而飞,想想就蛋疼。
后来我了解到了Payoneer,在这里注册后平台会给你一个全球收款的账户,相当于拥有了一张全球的银行卡,我们知道,Paypal 提现美金是完全免费的,所以我们可以通过payoneer来接收 Paypal 的提现资金,然后再从Payoneer里面把钱转到我们的国内的银行账户。只需要 1.2% 的手续费,而且据说通过这种方式可以不占用外汇额度(每个中国公民每年只可以有 5w 美元的外汇额度)。
那么接下来就说说怎么操作。
如果你之前没有注册过Payoneer,可以通过这里Payoneer官网进行注册,通过这里进入注册的,当你获得总共 $1000 的支付后,可以获取一笔 $25 的奖励。
当你注册完毕之后,在收款菜单下有个 「Global Payment Service」:
USD 下的这个银行账户就是专门用来收美元的,一般 Payonner 给你签发的美元收款账户的银行是 「First Century Bank」:
在你的 Paypal 中,点击「资金」,选择「关联新的银行账户」:
将你在Payonner的美元收款账户信息录入:
可能有些朋友在这里无法通过,那么需要在 Payonner 申请一个 「Community Federal Savings Bank」的美元收款账户。
可以找Payonner客服,跟她说给你的账户签发一个社区联邦储蓄银行账户(Community Federal Savings
Bank)的帐户。
或者在线申请签发,点击这里:https://wj.qq.com/s/2580735/bb88 信息没必要写的多认真,主要是在填写你的用户 id 别写错就行。
一般过个一两天就会给你的账户签发多了一个账户了,我等了一天就给我签发了:
拿到了自己的「Community Federal Savings Bank」 账户就可以关联到 Paypal 了。
这里的信息填写如下:
接着需要验证一下你的验证码:
在 Paypal 中成功绑定了 Payonner 之后呢,就可以提现啦:
提现的过程中,Payonner会给你发送邮件,要求你认证你的个人信息,如实填写就好了:
等待个两三天左右,你的Payonner就会到账了:
在你的 Payonner 选择提款到银行账户,如果你还没关联自己的银行就先在Payonner里面绑定你的银行卡,然后就可以提款了。
ok,以上,就完成了Paypal提现人民币,不仅拥有了自己的全球银行账户,还可以轻松提现到Paypal的钱,还省下了Paypal 35刀的手续费。
在北上广深漂着的人,大部分人都有这样的处境:
漂了好几年,手上有几十万存款,也快 30 岁了,但没有城市户口,也买不了房。
即使能买房,自己的工作也不是铁饭碗,担心随时可能失业,交不起房贷,这就是现实。
上次跟朋友喝了杯东西,他提到,看着家里父母越来越老,在北京漂着也看不到未来,一直在纠结要不要早点回老家扎根。
在我看来,选择留在北上广深,还是回老家,归根到底,需要看老家在哪里,以及自己想过什么样的生活。
如果老家是在新一线或者二线城市,比如长沙、成都、武汉、南京等,有还不错的工作机会、教育资源。
这种情况下,如果北上广深让你觉得很疲惫,侵蚀了生活的同时也侵蚀了你的心理,那确实可以选择回老家,寻得工作和生活的平衡。
我前阵子回了趟老家,见了些许久不见的朋友,他们租着仓库做着电商,物价各方面的成本低了很多,我明显能感到他们的生活挺舒服的,节奏比我慢了许多,现在老家建设都发展起来了,城市那些吃喝玩乐,这里该有的都有。
当然,也有人的老家是在十八线的不知名的小县城,还有人的老家是贫困山村,那是回不去的老家。
这些人没有退路,只能一心努力扎根在大城市,我是 respect 的。
每年,总有一波又一波逃离北上广深的呼声,但每年,也都有很多人涌入北上广深。
逃离北上广深,你享受着老家的慢生活节奏。每天朝九晚五,中午还可以午休睡觉,晚上和父母一起吃饭,饭后散散步,生活闲暇自得。
而涌入北上广深,你能找到更好的工作机会,见识到了更大的世界,结交到三观相同、认知一致的朋友。
从不同角度来看,待在北上广深或是回老家,是不是看起来都还不错?
慢着,前面说的都只是好的一面。
回老家,你需要忍受工作上低水平的工资、微薄的行业机会、认知的局限、生活上的沉闷和无聊以及七大姑八大姨的催婚等。
留在北上广深,你需要忍受996、拥挤的地铁、高昂的房租、合租的窘迫、职场的强工作压力、漂泊在外的不安定等等。
说到底,选择无绝对的好坏,只有适合与否。
最好在做选择之前,先思考清楚自己希望过什么样的生活,可以忍受什么,绝不能忍受什么,毕竟随着年龄的增长,切换的成本就会越高。
从我的角度来看,年轻的时候,有可能的话一定要去北上广深闯一闯的。
海明威曾说过一句话:
如果你足够幸运,年轻时候在巴黎居住过,那么此后无论你到哪里,巴黎都将一直跟着你。
你年轻时候去过的地方,居住过的城市,它们都深深地影响着你。
一线城市有着许多资源和机会,愿意给每个人成长的空间,只要你愿意努力,就能让你快速成长,明白自己的能力可以拥有怎样的生活。
刚毕业的大学生,我是更倾向于建议去北上广深工作,不仅可以开阔眼界,更因为从大城市回小城市容易,从小城市去大城市难。
毕竟,一线城市也更加包容、自由、多元。
在北上广,每个人不一定都会变成佼佼者。
但起码,你不会因为 30 岁没结婚、碰巧爱上了同性,就被当成异类。
无论是北上广深还是回老家,最重要的,找到心里的那份踏实感,活在当下,过好每一天。
]]>前不久,在脉脉看到一则网友爆料,腾讯云高管丁奇利用职务影响力,找下属四处借钱赌博,涉及金额数目巨大。
从老员工到新入职的员工,每人借钱从几万到数十万,波及员工也超过百名。
后又有自称是丁奇老家邻居的账号补充:「已经联系了其家人,家人表示房子全卖了还给大家钱。」、「借钱是真的,我也被借过」、 「赌博是假的,被股票割韭菜了」。
作为腾讯云数据库的负责人,丁奇在该部门占据极大分量,甚至可以说,他在整个数据库界都拥有极高的知名度。
相信做技术的朋友应该知道他,其中比较出名的,就是他在极客时间写过的《MySQL 实战 45 讲》付费专栏,对不少后辈开发人员产生过影响。
早年间,丁奇做过百度贴吧的后端服务开发工程师,后来与 MySQL 结缘。
之后丁奇常年活跃在各大 MySQL 社区,成为了这个领域的大咖。
入职腾讯前,丁奇曾在阿里云工作,为阿里 P9 技术专家。
现在,丁奇带领腾讯云数据库团队,负责腾讯云数据库的产品规划、研发和运营。
可以说,他几乎是数据库技术领域的顶级专家之一,用「大佬」两个字来形容他,完全不过分。
正是这样的一位大佬,都逃不过股市这把镰刀,被逼到现在需要卖房还债,真是令人唏嘘!
大家都知道,2021年2月至今,是中概股投资者不堪回首的一年。
过去一年,好未来、B站、滴滴、贝壳、叮咚买菜、新氧等一批各自行业的龙头或头部公司,清一色下跌百分之八九十。
中概股投资者割的割,躺的躺,喊苦都喊破喉咙~
有些不认命的,看着跌到谷底不服输,想着抄底,继续高杠杆补仓,最终血本无归,腾讯大佬丁奇就是活生生的例子。
什么是杠杆呢?
可以粗暴理解为借钱。
举个例子,你用 10 万本金买一只股票,股市涨10%,你赚 1 万。
你借 90 万,然后有 100 万,买入这只股票,股市如果涨10%,你可以赚 10 万。
相当于你原本的本金翻倍了。
但假设你开 10 倍杠杆,股市跌了10%,你就亏了 10 万,相当于把原来 10 万的本金都亏掉了。
可以说,杠杆与经济息息相关,而个人杠杆与风险息息相关。
开杠杆,拉大了风险,也拉大了收益,很是刺激。
高速增长时,高杠杆成倍放大收益,危机时,高杠杆让你血本无归,甚至欠一屁股债。
腾讯大佬丁奇应该是前期投入资金太多,后面股市「跌跌不休」的时候,为了保住账户,保证资金不被清零,只能不断借钱,抱希望于股市反弹。
没想到等不到反弹的那一天,先等来了自己暴雷的那天。
2021年2月证监会数据表明,我国目前A股股民突破 1.9 亿,持股市值 50 万元以下投资占比 97%。
可以说几乎进入全民炒股时代,散户一抓一大把。
炒股,是一项进入门槛很低,但赚钱门槛很高的专业活动。
毕竟,中国 90% 以上的股民都是赔钱的。
因为大部分股民在面对随机波动的市场,今天涨明天跌,很容易沦为赌徒,在短期中反复横跳,很少有人能长期持有。
所以我一直告诉自己,如果没有强认知+自我了解+情绪控制能力+资金保底,千万别轻易炒股。
如果真的入局了,绝对不要借钱炒股,这应该作为大部分普通投资者的底线。
最后,都说股市有风险,投资需谨慎!
其实,无论是股市、买房还是人生抉择上,都不要轻易高杠杆 All In,时刻要切记给自己一条退路!
]]>昨天跟大家聊了如何边上班边搞钱,有人说我在整鸡汤,累死累活赚也就赚那么几个钱,有必要吗?我选择躺平!
这话说的,谁他妈不想躺平呀?
躺着不努力,不消费,低欲望,不上班,这一点都不难。
加上人类本身就有惰性,心理上和能力都能让我们第一时间选择做轻松简单的事,能躺平就快速躺平。
我倒也不是完全反对躺平,在我看来,聪明的躺平可取,但无脑的躺平真的是一种很蠢的行为。
谁他妈鼓吹你真的躺着不努力,告诉你每天浑浑噩噩也是幸福的话,就赶紧删除拉黑吧。
躺平的出现,本质上是因为社会太内卷了。
举个之前就说过的例子,一群人在看电影,前排的人站起来了,后排的人看不见了,就只好也站了起来,结果大家看的还是同样的电影,却没有办法舒舒服服地坐着了,付出了更大的努力,得到的却是同样的结果。
在这种情况下,大家发现再怎么努力,能抢夺到的资源也就那点,于是选择躺平,对抗内卷。
但很多自媒体开始鼓吹一股脑的躺平,有些人受到鼓舞,也开始大胆摆烂,轻松承认自己就是不行,你奈我何?
别人让你躺平你就躺平,你也是挺行。
人与动物本质上的区别,就是拥有思考能力。
我们应该运用这宝贵的思考能力,找到自己个体存在的价值,知道自己接下来怎么活才能找到幸福感,而不是直接无脑的「以躺为荣」。
偶尔实在找不到自己的方向,特别焦虑浮躁,那么躺平给自己一个间隔,审视自己的生活,找到重新出发的方向和动力,这也非常 nice。
聪明的躺平,是懂得审时度势,对自己的能力有一个客观的认知,同时内心有力量,坚定自己人生的追求和价值,不被别人三言两语打到直接躺下,不陷入和他人的「比较焦虑」中去疯狂乱卷。
不因别人长自己几厘米而焦虑
不因知乎用户赚 100 万,自己赚 1 万而焦虑
不因别人谈 10 个女朋友,自己母胎单身而焦虑
在躺平这件事上,我特别认同金庸先生说的一句话:人生就是大闹一场,悄然离去。
我们既然已经都来到这个世界,不大闹一场,做一些自己觉得很牛逼的事,直接躺平了,那这场人生游戏体验也太不好玩了。闹呢?
学会找到自己的幸福来源,同时拥有自己的小目标,坚定且持续前进,总会走到自己要去的那个地方。
我毕业后就做了程序员,在公司上班下班。如果我选择这样的生活,也不是不能活,而且还能活的轻松,但我偏偏不,来都来了,我肯定想要装一次逼。
于是我就一直在折腾,和朋友创业做项目、做自己网站、写文章、做博主等等,焦虑吗?焦虑!躺平吗?不躺,但偶尔躺。
这种人生闯关打怪、认知升级的感觉,偶尔带来小成功的感觉,丝毫不比一次 gx 来的爽。
反正现在的我,是不会选择无脑躺平。等哪一天真的累了,想无脑躺了,再静悄悄的躺着吧。
最后,分享下李笑来说的:
真正的躺平应该是静悄悄的,现在鼓吹躺平的人和那些在大环境好的时候给人们胡乱打鸡血的人,以及宣称一切鼓励都是毒鸡汤的人,其实是同一拨人。
这些人不是想赚你的钱,就是想泡你的妞,警惕一下,兄弟们。
我们下回见,peace!
]]>上次发的《妞得泡,钱得赚,知识还是得学啊》,有朋友表示更想要听听前两个如何搞,那今天就先来说说:搞钱这事。
最近,我身边越来越多朋友被迫自由职业了,对,你没听错,就是被迫!
一北京字节的运营朋友,30岁+,前不久被劝退,不巧老婆刚生完二胎。
大龄运营碰到现在的就业情况,各地裁员,快 2 个月都找不到工作,原本月入3w,现在只能被迫自由职业,到处求着接单,收入剩个几千,太他妈苦逼了。
如果你不想自己也被迫自由职业,希望未来可以保持自己的事业,还可以自由规划自己的时间,想泡妞就泡妞,想旅游就去旅游,想工作时就工作…
那我劝你现在要学会边上班边搞钱!
大家都知道我之前是一枚互联网公司的程序员,每天三点一线,日复一日写 bug,到手的钱虽然还可以,但我觉得性价比太低了。
后来就果断裸辞一个人单干,写公众号、做教程、做网站电商等等,挣得也不比上班时少。
但说实话,并不是每个人都能马上出来自由职业,大部分人更适合「边上班边搞钱」。
不仅踏实,等真正搞到还不错的小钱,再出来全力搞大钱,那也是很美滋滋的。
今天就来给大家分享几点关于「边上班边搞钱」的观点。
1、要学会让公司给你打工
我们每天朝九晚五上班,甚至996,其实都是在用自己的时间、劳动去换钱。
如果你不懂得如何正确打工,把所有时间心力都耗在工作上,那有一天你被开了,就啥都没了。
那你也会疑惑,怎么可能让公司给你打工呀?当然可以!
1)平台赋能:争取去优秀的平台,借着平台的光环,利用平台给自己争取资源争取人脉。
2)积累成果:搞钱的前提是你要有差不多牛逼的成果,在公司多去做些能快速出成果的项目。
3)抢夺时间:你要学会掌控领导,咱也不是说真的掌控,这里是指你要懂得领导在意的是什么,做领导在意的工作,产出领导想要的数据,你会发现,不做多的无用功后,你的时间可以省下好多。
2、 时刻保持创业的心态
边上班边搞钱,最重要的是要时刻保持创业心态。
脱离开公司的搞钱,本质上就是一场自我创业。
创业心态最重要是敢想敢做,合作共赢,开放交流,愿意走出去,和各行各业朋友讨论各种各样的搞钱方法。
当然首先是要知道自己擅长什么,做什么才能搞到钱,简单来说一方面要培养自己的技能,另一方面要搞清楚自己的商业模式。
比如你是一位设计师,那你搞钱的模式可以是接私单,赚客户中间费,为自己以后开设计公司铺路等。
那现在开始你就可以有意识地去积累自己的人脉资源,包括客户资源、靠谱的设计师资源,搞个同事都不知道的微信号,通过小红书、视频号、抖音等发教程引流到自己的微信,转化成自己的客户。
3、 学会多线程处理工作
简单来说,单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。而有些事是可以同步进行的,多线程是指在同一时间执行多个程序,进而提升整体处理性能。
又要上班又要搞钱,那就一定要学会多线程处理工作,同一时间内可以处理多个事情,做不到这一点你就只能乖乖上班。
我自己有个工作习惯,就是要做一件任务时,比如做一个教程视频,会先去思考做这个视频的核心框架和流程是什么。
比如内容主题、展现形式、内容大纲、内容素材来源等。
这些思考完了后,就仅需要按照模块去填充内容,不需要再集中思考了,那即使是做着做着被别的事情打断了,也没关系,因为这个工作的内核已经完成了。
4、 别老做梦,踏实做事
谁不想躺在家里,啥也不做,月入过万,要真有那好事,你也不一定能抢到这馅饼对吧?
我身边有很多朋友,总是觉得迷茫,想改变自己却总停留在想,每年立的 Flag 都完不成。
你可能也有这个经历,回过头抱怨自己毅力不足,其实你可以试试《福格行为模型》方法:
1)先树立一个月度大目标,比如这个月要搞多少钱;
2)再分拆成一个个周度小目标,也就是每一周要具体做什么才能搞到钱;
3)继续分拆成每天要做的一件件小事,比如写一句文案,分拆小事的时候可以先做自己感兴趣,做起来很爽的事情;
4)设立提示,可以是一个便利贴,也可以是手心里的一句话,只要随时随地能看到,提示你接下来要去完成这件小事就行;
5)学会庆祝,做完了一件小事后,先庆祝 30 秒,边鼓掌边心里默念告我很棒我很帅我好美,这样才能有动力继续搞钱哈哈。
好了,今天就分享到这里,让我们一起拒绝瞎想,趁年轻,就该行动起来,搞钱搞妞搞事业,peace!
]]>在学校上学的时候,老师给我们传授书本上的知识,顺便洗洗脑,解释书本上那些晦涩难懂的概念。
但很少有老师教我们书本之外的东西,比如怎么泡妞,怎么赚钱,怎么思考,怎么学习。
现在随便翻阅一下高考模拟卷,发现很多题目都会让人一脸懵逼,这些玩意现在看起来反而有些高深,感觉比编程写个程序还难。
从实用角度来说,在学校学的那些所谓的公式,定理,知识点,和大多数学生的未来,并没有很大的关联性。
那时候我以为高考完就解放了,发现不是,后来以为毕业了就不用学习了,发现不是,社会的毒打才刚刚开始。
最后发现,像你我这样焦虑的人,学习这事应该是伴随终身的,然后就开始研究起了学习方法,提升认知,锻炼思维。
妞,还是得泡。钱,还是得赚。知识,还是得学。
一切都得靠自己,只不过现在我们更功利一些了,我们从磕磕绊绊的工作中学,然后很快就要用得上。
我们在学习的时候,一般会有两个层面:
表层学习
深层学习
举个例子,学过编程的朋友都知道,有个玩意叫「面向对象」,对象说的是对问题描述的一种解决方案,我们可以将问题抽取成对象的集合,这样我们可以通过对象来使用具体的方法。面向对象具有封装,继承,多态等特点。
我们知道了这些,只是表面。
但如果你能够清楚地知道这个概念背后的含义,知道封装有什么好处?继承是为了什么?怎么使用代码体现出来?对象的生命周期是怎么样的等等。
这叫深层学习,因为你实践了。
就像在面试的时候,其实也是在了解,你学习的深度如何,有些面试会用比较直接的方式,让你少吹牛逼,直接上机写点代码出来。
表层学习,更多是为了吹牛逼,而深层学习,才是利己。
一个比较好的深层学习方法是这样的:
1, 认真的学习一个新的知识点
2,学完之后,将你学到的知识点用通俗易懂的语言讲给别人听,也可以写出来
3,在这个过程中你会发现问题,比如别人听不懂,或者自己讲卡壳了,这些都是自己的弱点,都记下来,重新去学习这些弱点,直到自己能够清晰通俗的讲出来。
4,重复以上 3 个步骤。
讲,是最好的学,这也是费曼学习法。
比如我项目需要用到文件服务,找到了 FastDFS 这个开源项目,那么一开始我也是只能乖乖的认真学它,知道它的主要功能,工作原理。
摸清楚之后,我可以应用到自己的项目去了,但不仅如此,我还会把我的理解,讲出来或者以博客的形式写出来。
当我发现我讲的好像不够易懂,或者有些地方卡住了,那就说明我对它还是没有足够的理解。
那咋整呢?只能滚回去继续研究一下,直到了然于胸,然后继续输出,这也是一种实践方式。
有些朋友看我文章觉得我讲的东西比较好理解,其实大多时候都是我在重复以上 3 个步骤。
这样做的好处在于我们可以真正的了解自己学习的东西,而不至于停留在「我好像懂了,又好像不懂」的情况,也锻炼了自己的思考和理解能力。
当下次学习新知识的时候,也会更加容易对知识加以应用,不妨试试。
peace!
]]>之前我分享过一篇文章:《5s钟就完事了》,主要聊了一下当我们想要去做某件需要意志力才能完成的事时,我们内心的抵触情绪会比较强,我们需要一个行为来让自己的身体移动去做,然后才会开始。
最近我发现这里面的 5s 法则,还可以结合一本叫《微习惯》的书籍所提出的策略,让自己更加轻松的去执行你想要做的事情,哪怕这件事情看起来是那么的困难。
是什么策略呢?
那就是把你要做的事情,缩小到你能轻而易举完成的动作。
比如作者想要开始健身,但他一想到每天要花那么多时间来锻炼,还没开始就觉得很痛苦,难以坚持下去。
后来他是如何把健身变成自己的习惯的呢?
他直接把计划缩小,缩小到只剩下一个动作:挑战每天做一个俯卧撑!
是的,你没听错,就是一个。
接着,他顿时没有了那么多抵触情绪,也不需要什么意志力,一个俯卧撑是吧,直接做了就是了,然后呢?做完之后,他觉得既然都做了,那么还可以做多几个,而这种超额完成所带来的爽感,又让他多做了几组其它健身动作,到后面健身变成了他一直以来的习惯了。
还记得每到新的一年,我们给自己制定的计划吗?回头看看,是不是发现做的那些计划非常伟大,现在看到都怕?
这是因为我们有「高估自己」的臭毛病,也许计划做完,一开始可以很热血,可是奋斗一阵就痿了。由于计划太大,很难实现,然后开始对自己失望,再然后就干脆找个理由放弃算了,该干嘛还干嘛去。
我不知道你是否有过这样的经历,反正我有那么一段时间就是这样的,计划很宏伟,后来发现就只是给自己图个开心罢了。
所以我觉得这种反向操作确实值得参考,把计划缩到很小,小到不可思议,甚至只剩下一个动作,这样我们的抵触情绪就不会发生。
接着我们可以结合 5s 法则,让身体开始动起来,就去做一件很小的事情,这时候超额完成所带来的爽感,带来的小成功,反而能够让我们更持久的去做事。
计划要看一本书?把它缩到每天只看两页!
计划要写一个程序?把它缩到每天只写一个方法!
计划要做一个视频?把它缩到每天只剪辑 5 秒!
计划要写一篇文章?把它缩到只写 50 个字!
当你这么去做的时候,你会发现你远不止做那么一些,而且还没有很痛苦的感觉,这就是微习惯的策略,有种欺骗大脑的感觉。
有时候方向对了,尽管走得慢一点也没有关系,因为我们知道我们终有一天会到达的对吗?
那么一次只做一件事,一点一点进行,慢慢探索,总比「变化太大,扯到蛋」要强多了吧。
毕竟没有任何产出的计划就是耍流氓嘛。
如果你玩过推特,你会发现里面有个 thread 功能,有时候博主仅是分享一个简单的观点,但有时候会在下面不断的补充,都可以形成一篇文章了。而如果让他一开始就按文章的形式写,我想他不会写得那么顺畅。
所以下次,当你要做什么比较大的事情时,先把它缩小,缩到只剩下一个动作即可完成,然后利用 5s 法则,给自己五秒的时间,移动自己的身体,开始造作吧。
]]>有朋友看我公众号封面的图片,看了大半天看不明白那画的是啥,其实我之前是使用了一个叫做「dream」的玩意整出来的。
只要输入关键词,然后点击你想要要的图片风格,接着按一下「creat」,稍等一会,就有一张 AI 合成的全新图片出来,你还别说,就挺艺术的。
比如我要它画出一个美女出来,输入关键词美女,然后点击创建,稍等一会就有了如下的图片:
虽然看起来有点抽象,但艺术嘛,总是不能拿来意淫的。
其实市面上通过 AI 生成图片的工具有不少,还有一个叫「Disco Diffusion」的开源项目,你可以在这里使用更多的设置,然后通过一段简单的英语描述,就可以生成一张不错的画了。
源码在这:
https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb
放心,不会很难,如果你网络条件允许的话,完全可以直接在 Google 的 colab 里直接生成你想要的图片,简单几步就能搞定。
如果你比较着急,想要简单粗暴一些,让它快速生成一张「正在看书的漂亮女孩.jpg」,那么你就可以直接在 setting 这里写下你的描述以及图片的颜色风格:
“A beautiful girl is reading a book.”, “origin color scheme”
接着按下快捷键「Ctrl+F9」,把代码全都跑起来,稍等一会,图片就会一点点生成:
最终效果:
是不是挺好看的咧?
当然,如果你对图片不满意,还可以在代码中做更多的设置:
有兴趣的话去试试吧,挺好玩的嘿。
]]>你有没有脑子一热而做出一些比较傻逼的事情,过后非常后悔?
最近有位朋友找到我,说他之前看了些做自媒体的相关课程,然后不知道哪来的自信,觉得自己也可以,然后就果断裸辞了,做了一段时间发现和自己一开始设想的差太多,现在很痛苦。
我说,兄弟,我能懂,我曾经也这么干过,很多时候,我们即便听过很多道理,关键时刻还是会犯糊涂,就像呼兰的一段脱口秀里说的:
我看过很多历史,也读过很多兵法,那一刻还是上头了。
我跟他说,我也常常会觉得自己,傻逼了。
有一次我看到了某个 Linux 的发行版很美很酷,然后就迫不及待想要去使用它,于是就把自己的笔记本重装了这个系统,一个上头,直接把电脑所有数据都格式化了,等我反应过来,已经对眼前的新系统进入「圣贤模式」了。
还有搬家那会,突然翻出来了很多东西,才发现有很多都是买来就丢在家里,很少使用。当时购买的时候不知道在想什么,明明那些东西对我来说没用的呀,最后只能送给朋友或者扔掉。
我知道对待父母需要耐心,需要多站在他们的角度与他们沟通,但有时候一旦上头,便会吵起来。等我冷静下来后,才会想着说跟他们争对错,本身就错了。
又,我曾瞎投资,完全不懂那产品是干啥的,只是看那曲线,预感接下来会上扬,会有微笑曲线,然后就瞎投。后来才发现,我用这些钱不是来投资的,是为自己的上头交税的。
又,听到了朋友说的项目挺好,然后就马上和朋友一起搞事情,说好听点就是一起创业,然后等着你的是什么呢?是一地鸡毛。
我类似这么脑子一热而做的事情还有很多,有些小事情可能还好,但有事情是就需要付出很大代价的。
我曾经发过一篇文章,说的是如何做出更好的决策,《>》,用了一个大于号,列出一些条件,然后尽量做那些在大于号左边的事情,算理智了吧。
但每当自己上头了,这些所谓的方法论,那些书上讲的道理,早就被我抛到一边了。
有朋友跟我说,你酒量那么差,就他妈的少喝点吧,但我时常还是喝多上头了,特别是有妹纸在旁边的时候。
你的行动,是什么决定的?是理性?是直觉?还是情绪?
我想都有,但常常后者占比比较多,这是我需要去改变的地方。
]]>前几天有人找我投放广告,主要是搞副业相关的,标题有点雷人,说什么日入十万,想想,有这样的人存在嘛?
有,肯定有,但是我拒绝了。
因为我也搞过副业,坦率地讲,我没有做过日入十万,但也有日入过大几万的经历,我深知,这事并没有想象的那般容易。
很多东西,如果你只看到别人给你呈现出来的结果,你会觉得很屌很牛,比如谁谁做了什么事情日入十万了,你会向他投来羡慕的眼光,但你不知道的是,人家可能接下来很长时间都没有收入,而且这个日入十万的前提,是他在此之前已经在正确的方向投入了足够多的时间精力,做了很多积累,再加上运气,刚好在某一天爆发了,人家没有说罢了。这过程有多不稳定,有多焦虑,人家没有说罢了。
还有一个也是经常让人浮想联翩的词——被动收入。
就是啥也不干,就有钱主动找上门。有这等好事?有,肯定有,但可能还轮不到你。
那些拥有被动收入的人,要么很有钱,可以做稳健投资,让钱不断生出金蛋,要么是比较有影响力,能够有作品出来,把边际成本降到足够低,人们还愿意持续不断的买它。
人家这不也是因为有所积累,有子弹打,有资源可以换。至于怎么换,换什么,那就是思维模式的不同了。
而作为我们这些普通的同志们,我想说的是,咱们少被「日入xx」、「被动收入」等词汇所迷惑,要不然很容易成为sha猪盘里的蠢猪。
我并不反对个人去做副业,相反,我觉得只要自己有想法,那就干它。但一定要有一些判断力,并且要用比较低的成本去尝试。千万不要搞一堆贷款把自己往死里坑。
比如个人轻资产创业的方式就很不错,找一个正在发展且有前景的平台,做一个号,持续输出有价值的内容,慢慢积累影响力,到一定的程度就得以变现。
当然,这是理想情况,也许你做了很长时间没有气色,尝试很多事情依然赚不到钱,这都是正常现象。
只有多尝试,多失败,才知道怎么做减法,最后一定要做减法,找到那个属于你优势的事情,降维攻击之。
]]>很多人想要使用 VPN ,不过去购买第三方的「VPN账号」除了不稳定外还怕不安全,有些第三方 VPN 会获取用户的数据做一些坏事,还特么限制网速,不能忍!
所以想要自己买一台服务器,然后搭建一个完全属于自己的 VPN ,稳定快速又安全!
那么就在这里教大家使用搬瓦工官网(性价比很高的云服务器提供商)来快速的搭建自己的VPN。而且我还
会告诉大家怎么花比别人少的钱购买服务器,下文将会提到怎么获取优惠码,一般人很少知道的!
一台可以上网的电脑。
支付宝或者PayPal账号, 搬瓦工支持支付宝付款。
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
当你进到这个页面的时候呢,别急着点击「Add to Cart」添加到购物车,这里面暗藏着一个优惠码,很多人不知道,使用浏览器查看源代码,chrome浏览器的话按F12,然后搜索「code」,你会发现有一个 「Try this promo code: xxxx 」,这个xxxx就是优惠码,你把他复制下来,待会有用。
页面的 Location 就是选择服务器的地址,到时访问谷歌的时候会显示你当前访问的地址。好了,我们点击「Add to Cart」。
接下来,进入结算页面,我们刚才复制的优惠码就派上用场了,将你刚刚复制的优惠码复制进去然后点击 「Validate Code」,看!是不是优惠了!一般人不知道这种操作:
接着点击「CheckOut」完成付款即可。付款的时候选择 Alipay 就可以使用支付宝付款。
购买完毕后你就拥有一台你自己的服务器了,接着点击Services下的MyServices,可以看到你的服务器:
我们点击「KiwiVM Control Panel」进入管理界面:
可以看到你服务器的信息:
接着我们点击 「OpenVPN Server」:
可能有些朋友在这里的时候发现没有 OpenVPN 这个菜单:
那么这个时候可以访问:搬瓦工一键安装OpenVPN
接着点击:「Install and configer OpenVPN Server」,搬瓦工会自动帮我们在服务器安装和配置,不需要自己手动敲命令了:
等一会就搭建好VPN了,就问你快不?
首先我们下载我们的VPN文件所需的配置文件,点击「Download key Files」下载,然后再下载openVPN的客户端:
接着将配置文件解压到openVPN客户端的config文件夹下:
接着再openvpn目录下的bin目录双击打开openvpn-gui,然后Connect连接,连接完成右下角的openVPN会成为绿色状态,然后就可以访问外网了,速度很快:
同样,手机也需要安装一个openVPN的客户端,不过你在中国区的 AppleStore 下载不到 openVPN 的,你需要注册一个美区的苹果账号,然后搜索 openVPN 下载:
接着电脑端下载 iTunes ,打开 iTunes ,手机用数据线连接电脑,点击文件共享:
将刚刚下载的vpn文件解压,然后添加到OpenVPN客户端:
手机打开OpenVPN APP, 点击 + 这个按钮:
然后就可以连接了:
访问速度杠杠的:
Android手机使用搬瓦工openVpn同上,下载openVpn App ,然后把配置文件传上去就行了。
这两天 b 站上的「二舅」视频火了,我看到了不少朋友都在朋友圈分享,也有朋友专门私信我看,一段 10 来分钟的视频,讲述了二舅的天才人生,把一手烂牌,打得那么的有力量,那么有价值。
没看过的朋友可以看看这视频版的《活着》:
一位天才少年,遭受到了命运的摧残,本以为他会一直躺平下去,但他花了两三年时间,重新出发,做出了选择,做起了木匠。
开始为部队,为全村人提供服务,帮忙修各种电器,干各种精细的木工活,关键是这些都是他自学而成的。
二舅一瘸一拐的,背影却显得那么伟大,一种平凡的伟大。
我看到一条弹幕是这么说的:「全村人都叫他歪子,可是他却成了全村人的拐杖」。
视频作者,在标题里说二舅治好了他的精神内耗。而现在,二舅已经在很多人的心里,默默地帮他们扶了一把,包括我。
一般来说,我们都会怜悯弱者,但二舅却不同,他反而成了一位利他的人,那种善良的劲,那种「卑微的伟大」,在喧嚣的城市里,是很难看到的。
这种心理力量,给予了多少人希望,这是一种多么难得的价值。
有些人看起来那么普通,甚至感觉他一事无成的样子,但如果你愿意多花些时间了解了解,也许你会错愕,你会替他感到遗憾,觉得太可惜太可惜了,二舅便是这样的人。
但他选择做一种从不回头看的人,一种拥有高级快乐的人。
「可遗憾谁没有呢?人都是往往快死的时候才发现人生最大的遗憾就是一直在遗憾过去的遗憾」
这文案写得太好了,好到我来回看了好几遍,值得让更多人看到。
我之所以这么感触,是这段时间,在我身上也发生了一些电影般的剧情。随着自己的成长,我对人生的理解也时常发生变化,作者从另一个角度述说了「人生除了生死,为什么还会有老和病」,我稍得慰藉。
「这是上天的怜悯,不然我们每个人都在晚年还健康力壮的死去,那对这个世界该有多么的留恋,那不是更加痛苦吗?老病是生死之间必要的演习」
每个时代,每个人的命运都不同,有不公,有遗憾,有高潮,有低谷…,可别忘了的是:最后的选择,是我们的权利,可别把自己搞丢了。
]]>前阵子有人加我,一上来就问了我一个问题:
如何在一个星期内掌握编程?
本来我是没想回复的,但还是忍不住回了一句:
「想要快速掌握编程倒是没有,不过快速成为傻逼倒是有可能」。
然后,然后我就被骂了句傻逼,还特么的给拉黑了。
不过我觉得他骂得有道理,因为 理会傻逼,本身就是一件很傻逼的事情。
我从来不相信什么速成,所谓欲速则不达,想要成,就只能慢慢积累,一直付出,到了某个时间点才会有收获,这是很简单的事实,但好像总有人不接受,觉得自己有特异功能。
有人说「傻人有傻福,但是傻逼没有」。
我想,放在这里还挺贴切,如果方向正确,傻人就算做事做得慢一些,甚至蠢一些,但是他会默默地坚持走下去,那么终有一天,会有福报降临到他的身上。你知道的,我说的不是马云口中的福报。
但是傻逼就不同了,傻逼总喜欢用极其低级的方式来投机取巧,想要不劳而获吧,又还自以为是,往往把自己要走的路给打歪,还边拐边嘲笑别人是个大傻逼。
人嘛,非圣贤,我承认自己有时候也挺傻逼的,常常被生活扇了个大耳光,再扇一个大耳光,才彻底幡然醒悟。
有人说,成长嘛,就是不断发现自己是个傻逼的过程,只不过有些人吃亏吃多了,能够装得不那么傻逼,像模像样,而有的人不喜欢反思自己,所以就一直傻逼下去了。
有些东西,快的,不一定就是好的,对吧?
]]>之前搬家的时候,我把大部分书籍都送给有需要的朋友了,虽然要联系快递,还要发货啥的都比较麻烦,但我还是不愿把书籍直接扔了,或者用极低的价格当废品卖掉,因为我觉得书籍是有灵魂的,它是由作者经过长时间的积累和思考书写而成,怎能被轻易的践踏?
特别是像我这种写写东西的人,会更加理解一些,尊重一些的。
以前我在学习编程的时候,会看一些视频教程,后来又买了一些技术书籍,发现通过阅读书籍的方式进行学习,效率会高一些,相对来说,书籍的结构比较完整,而且可以针对具体的需求快速查阅相关的案例。
有时候我还会拿起纸笔在书上写写画画,隔空与作者进行交流,有时候会惊叹于作者的思路,会不自觉的发出卧槽之类的。
这是阅读的乐趣,到现在我依然觉得,通过阅读而习得,是效率比较高的学习方式。
不过我现在阅读纸质书籍比较少了,随着知识付费,电子版本内容的发展,大部分我想看到的内容都可以在网上找得到。所以我在阅读方面,更多时候是在电脑和手机上进行的。确实方便了许多,但也少了阅读纸质书的那种仪式感,尽管有一些软件提供了可以在电子书里画画线,做做笔记的功能。
在这个浮躁的社会,很多人都想抓住救命稻草,想要看一本书就改变自己的命运,但这几乎不可能,阅读是一种积累,用来开拓自己的视野,而有的书籍,阅读后的执行,才是关键,比如一些技术类的书籍。
]]>我最近老是看到「雪糕刺客」这个词,还以为是什么游戏出了很厉害的新英雄,查了下才知道,说的是那些「天价雪糕」。
这些雪糕会和一般的雪糕混在冰柜里,看起来都差不多,但是没有明码标价,等你拿着「雪糕刺客」去结算的时候,店员会滴一下,然后告知你这个雪糕需要几十块钱,这对于脸皮薄的人,只能忍痛付款,被雪糕刺客刺了一波,心在滴血,你说死不死啊?
有网友使用火机燃烧雪糕刺客的代表之一钟薛高,发现居然不融化,这违背了普通人的常识,又当一个短视频火了之后,就会有很多效仿者为了流量跟拍传播,所以广为流传。
于是就有更多人的开始怀疑这雪糕的质量问题,这是什么神仙物质制作而成的?这玩意吃下去能消化得了吗?更有人调侃说可以拿去当消防材料了。
尽管钟薛高声明这是合法合规生产,使用烤和晒等方式来加热雪糕,不能作为产品品质的判断依据。
我想说的是即便产品质量没有问题,但人们还是对其虚高的价格和「刺客」感到不快。
怎么说,你价格如何定是你的事,只要明码标价就没问题,但是你要当一名刺客,玩我们心跳,那就不行,这次要让你的心也跳一跳了。
为什么酒吧里的酒比外面的贵那么多,火车站台附近的便利店里的东西比外面的贵那么多,但我们都欣然接受?
因为场景符合,在特定的场景下,顾客是愿意花更多的钱去买同样的商品的。你起码要有一个场景,一个专门的冰柜,你有品牌溢价,你是高端产品,那么你就放在牛逼的冰柜里好吧,咱不能又当又立。
上次我和朋友去一家奶茶店,点了两杯奶茶,买了个烤包,花了小一百块钱,但我们都觉得很正常。诚然,在这方面,消费者的认知已经被培养起来了,但成本真有那么高?
那么如果下次,在便利店随便买一支雪糕就是几十块钱,人们是不是也会觉得这是正常现象?
也不是不可能,只要时间足够长,默默接受的人足够多,那就见怪不怪了。
哦对了,蜜雪冰城,可以出款「雪糕辅助」了,我一定买,我和我的朋友们都买。
]]>我早些年为了搭建一个属于自己的个人网站,然后就买了域名,租了云服务器,开始一番折腾。
后来发现只是用它来托管我的破网站,有点大材小用了。都叫服务器了,这不得好好给我服务服务么?
因为服务器都是 24 小时运行着的,所以有一个比较好玩的就是使用定时任务,比如我会往服务器扔几个写好的脚本,然后使用命令定时执行它们,帮我爬取一些数据,或是监控一些数据,做一些判断,给自己自动发送邮件提醒。
之前还开发了机器人丢在里面运行,比如微信自动回复,自动定时发微博,然后被封了 - -
作为一名小司机,有一些比较私密的学习资料,可以偷偷存放在自己的服务器上,这样最不容易被发现。
还可以通过对象存储服务搭建一个属于自己的网盘,自己的东西自己安排,这不比限速之王(百度云)香?妈妈再也不用担心别人随意删我东西了。
其实现在搭建这些工具很方便,有些通过官方文档,几行命令就可以实现。比如关于代码的托管,对于私有的代码,除了可以使用 GitHub 的私有仓库之外,还可以自己搭建一个 GitLab。
这样我的代码可以在自己的平台管理,不受限制,还用得着拿去给 Gitee 审核?
还可以在服务器里安装 web 容器,然后提供 API 接口给小程序或者网页调用。
当然,在里面整个小型的管理系统也没问题。
还可以在服务器搭建个 jupyter notebook,然后直接打开服务器地址端口,就可以在网页上面直接写 Python 了,要什么环境安装?
…
以上是我在服务器上折腾过的一些玩意,当然还有的在这里不方便说。
总之,只要有一台服务器,有公网 IP,ssh 进去之后,你可以在里面搭建许多有用的互联网应用工具,甚至可以自己 diy,并且全都是自己说了算,这种感觉还是很爽的。
「原谅我一生放纵不羁爱自由」
当然,你最好要会点 Linux 系统的操作,这样使用起来才更加得心应手。
一个小 tips:如果是个人使用,最好使用境外的服务器,这样绑定域名时不用备案。
你用你自己的服务器吗?你都用它来做什么?欢迎分享给我~
]]>我有时候比较疯狂,比如曾就直接裸辞去做我自己想做的事情,基本不给自己留什么后路,而且我要做的事情也并不是有很大的把握。
只能说当时还年轻,比较蜜汁自信,总觉得别人是傻X…,现在看来确实很蠢,不过也正是把自己逼到无路可退,才会不余遗力地折腾,不断地尝试,做一些少有人做的事情。
我曾经是一枚互联网的程序员,主要干的工作就是开会、写bug、偶尔帮着面试下。
常常下班一出公司,发现周围都很寂静,与明月对影成三人。
有一天突然发现不对劲,我的时间基本被狗吃了,每天三点一线,漂亮的妞都没见着几个,这不是我要的生活。
简单算了笔帐,就算工资还可以,但是每天基本没了自己的时间,单位时间内交换到的资源非常有限。
有一阵非常不爽,一直在思考做什么可以有效降低我的时间成本,如果可以的话,连工作位置都给它实现自由了。
后来看到了李笑来的专栏,他说 要想办法把一份时间卖出很多次。
卧槽,当头棒喝!
如果我在单位时间内所做的事情,不仅仅是卖给公司,而是卖给很多人,那效率立马不同,边际成本直接指数下降。
当时我偶尔还会在节假日接点外包项目做做,想到这个就立马停止这么干了,心里跟自己说,小伙子,少干廉价的一对一服务吧。
而是更多的思考,有什么事是可以自己一个人干,成本低但又能同时把时间卖给很多人的呢?
当时觉得适合自己干的事情是:开发小程序,做网站,写文章,做教程,做自己的个人品牌。
然后带着兴奋开始去做这些事情时,发现,这…没那么简单哇靠。
因为自己要做的事情太多,这很考验个人的能力,工作模式完全不同了,现在摸鱼就是等死,自己就是一个团队。
仅仅是想着如何去规划,怎么去执行,就得花很多时间精力,还要担心如果很长时间没收入咋办?
但好在程序员有一些优势在,比如学习能力相对还可以,可以较快学习相关知识并在项目中应用起来,还有一些重复性的操作,可以自己写程序去帮我执行,比如自动抓取一些数据,自动回复一些常被问到的问题,自动排版文章等。
后来有了一些积累,网站程序可以嵌入广告了,公众号也接了广告,也有一些付费内容,有朋友给面加入。
这使得我慢慢有了一些收入,虽然收入并不稳定,后面还有很多事要做,有很多东西需要学,但我确实可以随时随地工作了。
当然,我还干了不少其它的事情,不过有些是比较有风险的,亏过,痛过,以后有机会再说。
所以,什么样的程序员可以成为自由职业者呢?
我想,一个思想比较开放,热爱装逼热爱折腾,愿意持续学习,愿意花钱投资自己,执行力强,有那么点抗击打的程序员,结合自己的优势和互联网趋势,是可以的。
]]>最近老罗宣布退出社交网络,放下本可以继续赚钱的直播带货,选择再次创业,做 AR 去了。
看了他前两天的一篇访谈文章,我还是有点感慨的。
我看过他的所有语录段子,发布会,演讲,还有讲的一些创业课等。
有时候会因为他讲的段子而笑到肚子疼,有时候会因为他做的事而感动,当然也有一些我看不惯的臭毛病。但总的来说,我从他身上学到了不少东西。
比如关于坚持,我们在做事情的时候,往往干个两三天,就坚持不下去了,老罗是怎么做的呢?
他会去旧书摊那里买 100 多斤关于成功学的书籍,然后堆在自己房间门口,虽然他知道这些成功学的书籍没什么营养,但是可以作为「精神鸦片」来使用。
每当他坚持不下去,想要出去玩的时候,走到门口会看到堆在地上的书籍,然后随手拿起一本,翻开其中一页看到里面写的鸡汤,诸如「失败,就是半途而废」之类的。然后他会觉得他的行为好像被作者看到了,于是羞愧不已,嚎啕大哭,又滚回去继续做事了。
就这样每两三天他就给自己打一针「鸡血」,让自己得以持续坚持了下去。
是不是很聪明?我也尝试像他这样干过,不过我倒没有像他那么疯狂买 100 斤的鸡汤书推在房间门口,而是在手机上收藏了一些励志的视频,一些偶像的正能量语录等,快要坚持不下去了就随便打开一个视频看几分钟,还别说,确实能让我又有一些能量继续坚持下去。
又比如他的「天生骄傲」,天生骄傲,不是狂妄自大,而是老罗的一种价值观。
老罗在做锤子手机的时候,所有预装的手机软件都是可以让用户自行卸载的;他们公司工作所用到的软件都是付费购买的正版;他发布会收取的门票费用捐给了开源项目;包括这次欠债不跑路…这是一种天生骄傲。
我公众号基本很少会去转载别人的文章,坚持原创,之前也有不少人找我投放广告,但其实我拒绝了很多,比如有些文案我一看就来气,要求用户下载 APP,还要在里面做理财,亦或是教人快速致富之类的,我二话不说就把对方给拉黑,我想这也是一种天生骄傲吧。
还有老罗对产品的执着,老罗说他是一个产品型的创业者,早在他给俞敏洪写的简历就可以见得,一般人不会那么写简历,幽默的文风以及一些吸引人的点,完全是站在用户的角度写的。老罗做手机的时候,花最多的精力是在产品上,很注重用户体验。
通过一些发布会可以看得出来,他一直想做有创新的产品,或者说一个系统,一种生态。这很难,但也许正是他创业的激情所在。
当然,爱折腾的他也「干翻」了不少行业,有了「行业冥灯」之称,但从另一个层面来说,这算是真正的活出了精彩。
就像老罗这次又投身于科技领域,想要做下一代的智能平台级别的产品,尽管同样像他说要做手机那会被不少人泼冷水,但这次他也许有了更多的经验,虽然能做成的几率不大。
不管如何,罗永浩就是那种不折腾不创业就会死的人,我佩服他那彪悍的人生。
]]>我前阵子买了 STEPN 的 NFT 鞋子,想着体验一下 GameFi,没想到让我还有点上头,没事就想出去走两圈。
所谓 GameFi,就是一种结合了金融的区块链游戏,其中使用了加密货币和 NFT,玩家可以在游戏里面通过完成一些指定的任务,即可得到加密货币或 NFT 的奖励。
因为这是基于区块链的,所以在游戏里获得的数字货币,可以从虚拟游戏里转出,然后在交易市场上进行交易。
这和传统的游戏不同,传统游戏得到的奖励,更多的属于平台的。
而在 GameFi 游戏中,你可以随意处置游戏中属于你的东西,你可以在游戏中关联你的数字钱包,然后交易它们。也就是说,你游戏中的资产不由平台掌控。
这也是人们常说的 web3。
这种边玩边赚的游戏,在近几年非常受欢迎,比如最近比较火的边跑边赚游戏——STEPN。
这款游戏的交互设计友好,玩法也很简单,只要在里面买只 NFT 鞋子,然后等有能量了,就可以打开 GPS 边跑边赚取加密货币。
当然,不同类型、不同质量的鞋子所产生的效益不同,比如越稀缺、配速越高的鞋子产生的效益越高。
以现在的价格来看,最便宜的灰鞋子不到 1000 人民币,贵的也有几十万的。
以前的 NFT 产品,更多的是为艺术品确权,以及炒作。而现在给它赋予了功能,你不仅可以出售,还可以拿它来赚钱了。
在游戏中赚到的数字货币,你可以转到你的数字钱包去交易。相信你也会想,如果每个人都这么干,货币必定膨胀,游戏经济很快就会崩。
所以这个游戏还设计了很多游戏代币的消耗方式,比如鞋子跑久了会磨损,修鞋就需要代币;想要升级鞋子需要代币;合成新鞋子需要代币等。
通过设计这些消耗代币来减慢通货膨胀的速度,又以经济激励的形式(走没几步就有钱进账确实容易让人上头)不断吸引新用户加入花钱。虽然旁氏,但可持续的时间会长一些。
有早入局早离场赚到钱的少部分人,后面也会有一波波的韭菜,终归后者是大多数,这不足为奇。
我并不是鼓励你去花钱玩这游戏,STEPN 官方前阵子也宣布了下个月要停止对大陆地区的位置服务。
我主要想表达的是,现在不少人都在鼓吹 web3、NFT、区块链、元宇宙等概念,我觉得新鲜的事物可以保持关注,也可以花一点不影响自己的小钱来体验参与一下相关的产品,这样可以让自己更加了解,发现其中的机会。
但一定要对其降低期待,少做梦。
]]>删库跑路一直是程序员圈里的一个梗,茶余饭后当段子调侃罢了。
不过我还是时不时会看到真的有人删了公司的数据库这一行为,可这是犯法的啊大哥。
刚看到一个新闻,忍不住上来说两句。是这样的,百度有位 95 后的程序员因为对自己的工作内容变动和对领导的不满,为了显得自己很重要,然后私自删了数据表,结果被抓了,吃 9 个月的牢饭,还需赔偿 7w 给百度。
是真的蠢。
对于互联网公司来讲,数据是相当重要的,后台肯定会做备份,不同的环境也会有不同的数据库,你以为自己弄个代理进去删几张表,就会显得自己很重要,会给对方造成很大的损失?
事实上,对项目的影响并不大,花点时间就能把数据还原,但对于你来说影响巨大,这是在自毁前程,很不值当。
在工作中,每个人都会有不满情绪的时候,这很正常,你可能会觉得领导是个大傻逼。
实在不爽就直接干他 Y 的啊,你干数据库干什么,它得罪你了?
其实,大部分人都觉得自己的领导是大傻逼的,不信你可以问问坐在你旁边工位的同事。
有一个傻逼领导的好处就是可以快速和同事成为朋友,你们可以私底下整两杯,诉说对他的不满,拿他开涮,发泄自己的情绪,这不比删库强?
对于工作内容变动,甚至裁员,都是我们这些上班狗有可能会遇到的,要做好心理准备,要有好的心态去面对自己的工作。
你看,不有人常常用「摸鱼」、「带薪拉屎」来平衡自己的情绪么?
如果领导真的做出很出格的事情,你实在无法忍受,大不了走人不干,反正自己还年轻,有大把机会,提升自己,肯定能能找到更好的工作。
而不是用最极端的方式,把段子演变成了现实,做出了对对方伤害性不大的事,却付出了昂贵的情绪代价。
我想这位朋友现在肯定懊悔不已,可冲动是魔鬼!
]]>最近有个梗叫「啊对对对」,用于直接摆烂或者敷衍应对那些让你不爽的人。
你还别说,这招还挺好用的,对于不懂这个梗的人,真以为自己很对,然后更为自大膨胀,甚至在态度上还会有一定好的转变。
而对于懂这个梗的人,可以说是嘲讽满分,暴击率杠杠的,比如有人在网上对你所说一些狗屁不通的话,对他回复一句「啊对对对」之后直接拉黑,简直比酸菜牛肉面还酸爽。
我觉得这不是破罐破摔的摆烂,而是一种智慧。
比如我曾试图想要跟以下那样的人做进一步沟通,但往往适得其反,甚至演变到更坏的结果,现在我是想明白了,以后再遇到这样的人,就对其「啊对对对」。
1、
我记得之前在一个团队做开发的时候,需要用到 Git 来管理代码协同工作,有一位「主管」自己只会使用 TortoiseGit,就是那个乌龟软件,直接在界面上使用鼠标点击操作,但对我们来说几行命令就可以搞定。
你猜怎么着,他频繁要求所有人都要使用这个乌龟,没安装的赶紧下载安装,这样才能显得他比我们懂得多。
这让我们几个很是无语,对我们来说一点都不程序员,只能「啊对对对」,该用命令还是用命令。
2、
不知道你是否遇到过一些总爱随意给别人提建议的人,我就觉得很荒谬,你又不理解我当下的处境,凭什么建议我按你的来?
有些人可能认为自己是出于好意,但我觉得完全没有必要主动去给别人提建议,除非人家专门咨询你,想听听你的建议做一些参考,或是你对其有深入的了解,要不然轻易的给出建议只会让人不爽,顺便对你「啊对对对」。
3、
如果是朋友之间偶尔说几句损人的玩笑话,这倒没什么,但有些人好似把「损人利己」刻在了骨子里,一天不损人就浑身难受,就感觉比别人矮一截,更别谈利他行为了。
像这种总喜欢损人,贬低他人来抬高自己的,只能说:「啊对对对」。
4、
有句粤语说的是「识小小扮代表」,说的是懂一点皮毛就装得很懂的样子来跟你讲一堆道理。
这时候如果你无情的拆穿他,或者忍不住噗嗤一笑,那完了,他会用更多的「小小」来恶心你,所以最好忍住不笑,不要拆穿,然后「啊对对对」。
5、
还有一种总喜欢用道德来绑架别人的人,比如有人总要求有钱的人多捐款,要不然就是不道德。看到别人买进口产品就说人家不爱国,不按父母的想法做选择就认为是不孝等等。
哎,对对对!
6、
有些不看我文章不联系上下文,单独挑其中一句话就来喷我的人,啊对对对!
总之,别杠,杠就是啊对对对。
]]>还记得上学那会,我有次脑子被门夹了,给自己争取了一个职位——副班长。
其中有一个主要的职务,就是负责考勤这块,如果上课的时候老师有点名,发现有逃课的同学,我需要帮忙登记上报。
经过一段时间的观察,我发现某门思想课程的老师很少会点名,讲完即走,不带走一丝云彩。正是这位老师的潇洒让我有了逃课的小心思,想着上这课还不如在宿舍睡觉呢,这位老师应该是一如既往不会点名的。于是乎,我盖着被子,安心地呼呼大睡。
怕啥来啥,就是这么巧,这位老师就在我逃课那天点起了为数不多的名,更离谱的是,不知道哪位主任也刚好在那天巡查宿舍,原本安静的宿舍门顿时发出阵阵声响,把正在做美梦的我惊了个醒,被抓了个正着,因为我当时还是班委,可想而知,罪加一等。
这就是「墨菲定律」,说的是,如果事情有变坏的可能,不管可能性有多少,它总会发生。
有不少类似的事情,比如股票一买就跌,一卖就涨。去了某个小区,心想不会被封了吧,结果真就被封了。
这也是为什么有人总是抱怨自己运气太差,咋就那么倒霉…
但我也看到有些人则完全不同,时常感叹自己运气真好,why?
我问过一些大佬们,是怎么做到这么牛逼的,他们给我的回答都差不多:「没什么,可能就是运气比较好吧」
我之前也这么想,运气这玩意是不可控的吧?但现在觉得,运气也许是可以被自己创造出来的。
一个人在彩票中心刮奖中了 100 块钱所带来的快乐和他花了 100 块钱颗粒无收,后者给他带来的痛苦情绪要比前者多得多,往往,我们对那些让我们不爽的事情更加深刻,造成的心理影响比较大。
为啥老天总跟你过不去?没带伞出门它就下雨。
其实有没有带伞出门和下不下雨并没有相关性,你没带伞出门刚好就下雨了只是一个概率事件,只要时间足够长,不带伞出门的次数足够多,那么一定会有没带伞出门就下雨的情况发生,而这给你带来的不爽比较深刻,所以总是惦记着,但你常常忽略了很多次没带伞出门并没有下雨的现象。所以你并不是总是运气不好。
理解并接受了这一点,我们的「运气」就会变得好一点,尽管我们很难让「没带伞出门没下雨所带来的心理影响」 远大于 「没带伞出门就下雨所带来的心理影响」,不过你的抱怨少了,在一定程度上可以减少墨菲定律的发生。
另外我们还可以降低坏事情发生的概率,比如出门前看看天空。
有博士做过这样的实验:
他们给一所中学的所有学生进行智商测试,然后告诉老师一些学生的智商非常高,让老师相信这些学生在来年的学习成绩中将会飞跃成长。但事实上这些所谓的「高智商」的学生非真的高智商,而是随机抽取。因此,他们智商不见得比其余学生还高。随后的实验结果惊人:那些被老师认为“高智商”的学生(事实跟其余学生的智商一样)在来年的学习成绩确实突飞猛进。
这在心理学上叫做「自证预言」,如果一个人相信某种期望会发生,他按自己所预言的方向做出行动,最后有一种「自己所预言的事情成真了」的感觉。
这和「墨菲定律」有点像,但如果我们能够永远相信美好的事情即将发生,以此产生了很多行为,比如去学习,去分享,去创造,去实践…有那么一天预言很可能就成真了。到时你可能会说:没什么,可能我只是运气好吧!
有些人牛逼吹着吹着,有一天还真吹成了,实际上是他自己信了,并产生正向行为而后得到反馈,就是这么一种心理。
性格决定命运,习惯决定性格,行为决定习惯,思想决定行为。请答应我,别再浪费时间转发各种锦鲤吸欧气,别再求神拜各种妖魔鬼怪了。
]]>早些年,我写 Android 的时候用的编辑器是 Eclipse,后来出了个 Android Studio,界面更好看,集成的功能也很多,但是一开始使用的时候,就很难受,工具并不完善,很卡顿,很难用,然后二话不说就把它给卸载了,用回了 Eclipse,后来在网上看到有些博客一直在说 Android Studio 多牛逼多高效,我半信半疑重新安装了 Android Studio,查看了一些文档和使用教程,跟着操作了一番,有被一些功能惊讶到,后悔当初为什么不一开始就用下来,这样能提高不少工作效率,节省不少时间。
回头想了一下,要让我从一个熟悉的工作方式作出改变,我是很抗拒的,因为那种不适的感觉会让我很不爽,还要花时间去学习新工具的使用,太麻烦了,但是,麻烦就不了吗?
用了一段时间 Android Stuido 后,我又用了 Java 写了点后端接口,用了 IntelliJ IDEA,这时候用起来相当顺手,因为 Android Stuido 和 IntelliJ IDEA 都出自 jetbrains,包括后来使用的 Pycharm 等 IDE,没什么学习成本,直接用起来就是了,不管是插件的安装还是快捷键的使用等,它们都差不多。
有时候学习新的东西,会在未来的某个时刻会给我带来惊喜。
后来有个大佬疯狂安利我使用 VIM,这个一开始的学习成本就更高一些了,但是我没有像之前那样抗拒,而是老老实实把最基础的 vimtutor 看了好几遍,熟悉了一些常用的快捷键,然后对 vimrc 配置折腾了一番,慢慢的发现了另一个世界,它的可定制化超出了我的想象。
就是要「痛」那么一下,然后就会发现更美好的地方,但很多人常常不信,因为他们从来没有体验过,哪怕「痛」那么一次。
之前有个朋友,看了一场苹果的发布会,觉得很牛逼,于是很快就买了人生第一台 MacBook,到手之后,用了不到一天,就找人帮他重装系统,赶紧弄了个 Windows 系统,问其原因,大概意思是:「哪有关闭窗口的按钮是在左上角的?」
这位朋友就是不敢「痛」那么一下,花些时间去学习新系统的使用,只要适应一段时间,我相信他就能感受到苹果生态系统的魅力。每次看到他在 MacBook 屏幕里弹出各种广告时,不知道为何我的良心就隐隐作痛,虽然跟我半毛钱关系也没有。
前阵子我突然发现我的打字方式糟糕得一塌糊涂,虽然盲打的速度还可以,但是在打字时我的小拇指从来不用,而且按错键的频率很高。不过想要改变很多年的打字习惯,真是他妈的又别扭又难受,一开始要打一行字都要费老大劲,在练习正确打字方式没几天就想着老子这是何必呢?好在慢慢坚持了下来,现在打字的感觉怎么说呢?舒服得一逼。
类似这种逼自己「痛」一下然后感到舒服的事情有不少,比如很早之前我在搜索一些技术问题时,就一般会使用「- csdn」将其屏蔽,后来干脆就使用英文搜索,看不懂的就用翻译插件,这给我带来的内容质量高了很多,自然也更快的解决了问题。
有时候有些看似学了之后不知有啥用的东西,往往会在之后的某个时刻可以被关联到,比如以前看的开源项目的某个实现,突然有一天在自己的业务上刚好用到,比如之前关于对某事的深入思考,突然有一天在自己的文章刚好用到,这种被关联到的时刻,便很是幸福。
也确实,随着时间的推移和发展,有些学过的东西终将被淘汰,也许我们再也不会使用它们,但我不觉得那就没有意义,因为不管是学习工具的使用也好,学习产品的制作也罢,学习给我带来的,有着更高的境界,那就是——思考的方式。
]]>不久前
Anaconda 的老大宣布了一个事:
《老子想要在 HTML 中写 Python》
要干 JavaScript 的事
玩过 Java 或者 PHP 的朋友都知道
它们可以直接在 HTML 里面做一些交互
现在,Python 也可以了
Python 语言相对简单
对于写前端的朋友
在不使用 js 的情况下
也许 pyscript 是不错的选择
不过使用它确实有方便之处
不用搞什么乱七八糟的环境
在 html 中导入相关 js
就可以直接在里面写 Python
然后在浏览器直接运行
如何使用 Pyscript 呢?
那么,接下来就是:
新建一个 html
然后导入 pyscript 的 css 和 js
然后你就可以用到这么几个标签
你可以在这里定义需要用到的 Python 库
你可以在这里写可以被 HTML 执行的
python 代码
你可以在这里写 repl 组件
从而在前端得到交互
比如我在 HTML 中
写了个 div
其中 <h1>
的 id 为 name<p>
的 id 为 slogan
那么我就可以使用
来绑定数据
然后在浏览器中
直接打开这个 HTML 文件
就可以看到酱紫
由于在
可以写 Python 代码
所以你可以在里面导入库
写方法等操作
直接打开网页就可以得到数据
是不是感觉代码有点不舒服
缩进一下
不好意思
报错
现在只能贴着墙边
苟且偷生
在
内置库
但是你想要第三方库的话
就要在
比如这样
然后才可以在
你也可以在
里引用你写的本地模块
而在网页中使用 repl 交互
官方也给出了例子
还有更多例子可以到这里查看:
pyscript的一些例子
OK,以上就是小帅b今天给你带来的分享
诚然
pyscript 目前还有许多需要优化的地方
但我相信
在不久的将来
web开发会变得更加舒服😌
那么我们下回见
peace!
扫一扫
学习 Python 没烦恼
加入小帅b的VIP,收获更多私密精彩
搬瓦工后台有一个一键搭建ss
的菜单选项,支持一键安装ss,不需要任何命令代码,完全傻瓜式操作,点一下就开始安装,安装完之后会给你生成ss的账号密码,直接拿来就可以使用了。
不过现在搬瓦工后台隐藏了这个选项,但其实地址还在,下文会提到。
本教程将从优惠购买搬瓦工vps
,到一键搭建ss
,再到使用ss
,让你能快速的能够访问Google,YouTube等地方获取第一手资料。
点击搬瓦工官网进行注册,搬瓦工有一个隐藏的优惠码,可以根据自己的需要,点击以下官方优惠链接:
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
进入之后就可以获取优惠码了,选择完之后不要急着点击 「Add to Cart」。
这时候就可以获取隐藏的优惠码了,我们对着这个网页:鼠标右击-->查看网页源代码
。
接着 Ctrl + F
搜索 code
,这时候你就会看到 Try this promo code: xxxx
,这里的xxxx
就是优惠吗,把它复制下来。
页面的 Location 就是选择服务器的地址,到时访问谷歌的时候会显示你当前访问的地址。好了,我们点击「Add to Cart」。
接下来,进入结算页面,我们刚才复制的优惠码就派上用场了,将你刚刚复制的优惠码复制进去然后点击 「Validate Code」,看!是不是优惠了!一般人不知道这种操作:
接着点击「CheckOut」完成付款即可。付款的时候选择 Alipay 就可以使用支付宝付款。
当你购买完你的vps服务器的时候,在搬瓦工的首页点击Services
下的MyServices
就可以看到你购买的服务器了。
接着点击KiwiVM Control Panel
到你的服务器后台管理。在菜单的最下方有一个KiwiVM Extras
如果你发现没有Shadowsocks Server
这个选项,那就说明被搬瓦工隐藏了这个功能。
不着急,点击 搬瓦工一键安装ss 进入可以看到,搬瓦工一键安装ss的界面出现了。
点击Install Shadowsocks Server
进行一键安装ss。
等一会之后就安装完成了,点击 Go back
按钮。
这时候可以看到ss所需要的信息了,加密方式,端口号,和密码。那么等会就可以使用这些信息进行科学上网了。
windows点击下载:Shadowsocks windows客户端
打开 Shadowsocks 客户端,输入ip地址,密码,端口,和加密方式。接着点击确定,右下角会有个小飞机按钮,右键–>启动代理。
这时候就可以科学上网了。
Android点击下载:Shadowsocks Android客户端
打开apk安装,接着打开APP,输入ip地址,密码,端口,和加密方式。即可科学上网。
iPhone要下载的app需要在appstore下载,但是需要用美区账号才能下载,而且这个APP需要钱。在这里提供一种解决方案,就是可以再搭建一个IPsec/L2TP VPN,专门给你的iPhone使用。
接着就可以上外网了:
最近各个平台开始根据发布内容用户的 IP 地址强制显示所属地,境内的用户会显示到省,境外的地区会显示到国家。
可能现在你在有些地方还看不到,应该过阵子会全面开放。
说是为了打击那些在热点事件中冒充当事人的造谣者们,没见着几个,倒是炸出了不少假号,声称人在美国,刚下飞机,平台却显示他在山东蓝翔开挖掘机,实在是滑稽,做代购的慌得一比,打着爱国旗帜的大V在国外笑嘻嘻。skr~
不过有一个问题是,如果他们挂个代理,那岂不是显得更「真」,毕竟大多数人并不知道可以这样操作,这不就反而让大部分普通人更容易受骗上当?
当然,如果说是别有目的,那就另当别论了。
有些人担心这样会暴露隐私,其实早期有些论坛就是直接显示 IP 地址的,也没多少人在意这个,只知道向网络服务提供商交钱,拿到 IP 地址就可以在网上通信了。
而现在只是显示到省份,没什么好过于担心的,没必要做过多的揣测,安安分分做一个好公民,好网民,真能量多好。对于比较注重个人隐私的朋友,自然也有他们相对安全的上网方式。
当然,显示 IP 属地,如果能对于一些比较无知的黑粉和键盘侠有一定的威慑作用,那挺好的。
其他不好说太多,只能说我摊牌了,俺在美国,刚下飞机,你呢?
]]>疫情还没有结束,反反复复,特别是有些地区的朋友,已经被封了一个多月。每天看着新增数据,担心吃不饱饭,迟迟无法复工…难免产生一些焦虑。
那么如何缓解紧张焦虑呢?
我最近看了一本叫做「release from nervous tension」(消除神经紧张)的书,其中提到了一种放松方法,可以有效地缓解焦虑。
具体来说,你需要在一个安静的房间里,在床上准备 5 个枕头,然后像下图的方式垫好:
最好把衣服脱了,尽量减少束缚。
头部枕头的两个角可以拉过肩,让头部和颈部得到放松。
两个枕头放在膝盖下,膝盖略微向外弯曲,减轻大腿后部肌肉的紧张。
另外两个枕头放在身体两侧,把你的手臂放上去,手肘离你的身体一定的距离,然后弯曲肘部,让手腕靠近身体。
如果枕头的位置摆放得当,这时候你可以得到一定程度的放松。
接着可以轻轻闭上眼睛,从咀嚼的肌肉开始,放松下巴,然后在自己每次呼气的时候,轻松地对自己的每个部位,比如对着手臂说:「放松~放松」,这样每个部位的肌肉紧张都会得到放松。
作者提到,使用言语和你的肌肉「谈话」,可以提高放松的程度,而通过肌肉的放松,可以缓解因为情绪冲突带来的紧张焦虑。
另一种方法是冥想,这并不是什么宗教,冥想已经被科学证明了它可以缓解人们的焦虑。
常用的方式就是找个安静的地方,盘腿而坐,双手放在大腿上,然后闭上眼睛,放松身体。
接着观察自己的呼吸,这个过程中自己可能会突然思绪乱飞,当你意识到了的时候,就把注意力重新拉到你的呼吸上,不用做任何批判。
这就是冥想的过程,当你焦虑的时候可以通过这种方式冥想十几分钟,即可以得到缓解。
冥想还有许多好处,比如提高抗压力,减少坏情绪,提高专注力,锻炼自己的大脑,能让自己更清晰的思考等,有些人还会每天都抽出一些时间来冥想,从而改变自己的生活质量。
少玩游戏,少看娱乐性质的短视频,少看那些自媒体制造疫情焦虑的文章。
可以让眼睛看点别的,比如一字不差的读一本书籍,或者看我写的文章,在精神世界上和作者做一些交流,也可以减轻自己的焦虑。
以上,亲测有效,不用谢,点个赞就好。
]]>可能你不知道,认证过的公众号,想要改名,需要再次认证,需要交 300 块钱给第三方审核机构专门审核,审核通过了名称才会生效,虽然我觉得这多少有点操蛋,但还是老老实实的交钱,改了现在这个名称。也就是对我来说,wistbean 这个名称,至少价值 300 块钱。
啊,300 块钱可以抢点菜吃了,你瞧我这个没出息的家伙。
其实这个名称我用了很长时间了,这不是什么公司文化必须要起个英文名,也不是自己为了装逼,而是在初中的时候,英语老师专门给我起的,我觉得可以,就一直用着了。
这位英语老师,是教过我的英语老师中唯一一个让我不那么讨厌英语这门课的。可能她相对年轻,包容度比较高,也能看出我的帅,不像那些上了年纪的英语老师,只对成绩较好的同学嬉皮笑脸,而看到我们时,更年期症立刻就上来,把我们骂一通还不解气,还要怪我们的父母怎么教出这样的孩子来?
像这样的英语老师,怎么可能会把你叫到办公室,一边在纸上写着一个我不认识的单词,一边跟我说她花了些时间帮我想到了一个不错的英文名,诺~就是这个,它的涵义是什么什么,是不是挺适合你的?
何止是适合,我都快哭了好吗?
比较早关注我博客的朋友知道我这个名称,后来我弄了个 Python 公众号,起了个「小帅b」的昵称,喜欢的人喜欢至极,觉得好玩,讨厌的人恨之入骨,觉得不入流,觉得奇奇怪怪,特别是那个字母,对有些人来说是有恐惧症的,过于敏感。这也让我想不通为什么 b 站不叫 p 站,p 站不叫 b 站?可能是文化差异吧。
但他们总曲解了我起这个昵称的本意,我只不过想接地气些,把教程写得有趣一些,尽量不像我以前遇到的那些英语老师那样一副高高在上的嘴脸。
我这人做事比较认真,但生活上就比较随意了,你想怎么称呼我都可以,比如我有几个现实的朋友就有叫我「渣男」的,就是玩笑,叫习惯了,我也无所谓。
只不过有时候会闹笑话,比如有一次有位女性朋友急冲冲地对着大声说:「渣男,你xxxx」,她其实是先称呼我,然后跟我说事。但是身边其他人不知道这是她对我的称呼,全都盯着我,估计心里犯嘀咕:这人是不是做了什么对不起人家的事情。
整得我又想哭又想笑。
也有些人比较讲礼貌,道德修养比较高,不知道为什么也总愿意跟我交流,只不过对我这人不是太了解,称呼我的时候会小心翼翼,有时候还会加上一句:帅老师你看我这样操作可以不?
坦率的讲,这反而让我不太舒服,我总感觉是在骂我,所以为了避免这种尴尬以及更好的 bb,叫我「wistbean」吧,毕竟花了 300 块钱呢。
p.s.:当然,我在其他地方写教程相关的内容,还是会尽量使用有趣接地气的帅b风格,如果还有人看的话。
]]>本教程面向小白搭建ssr快速教程,10分钟搞定,让自己拥有自己的服务器,一键搭建ssr之后进行科学上网,最后开启bbr进行加速访问。
SSR(ShadowsocksR ) 是 SS(Shadowsocks) 的增强版,在 SS 的基础上添加了一些功能。根据 维基百科 介绍,SSR 增加了一些数据混淆方式,称修复了部分安全问题并可以提高QoS优先级。
在使用了一些服务器之后,我觉得 vultr 的性价比超高,最低 $5/月 ,就可以拥有一台 1TB 月流量的服务器了,根本用不完。
而且现在 vultr 优惠力度很大,新用户充值 10 美元送 100 美元。点击vultr送 100 美元注册链接注册
点击 vultr送100美元注册链接 进行注册:
在这里输入你的邮箱和密码,接着点击按钮「Create Account」创建账号,然后 vultr 会给你的注册邮箱发送一份验证邮件,激活就好了。
接着就可以登录 vultr 官网了:
vultr 现在有 16 个境外节点,选择一个离你最近的就好了。
登录进去之后选择左边的 billing 的菜单进行充值,vultr提供的支付方式简直完美,支持信用卡,比特币,paypal,支付宝,微信支付,在这里可以进行充值支付。
充值完成之后,就可以左侧的 Sevrers 菜单,接着可以点击 deploy one
或者右侧的 + 号来选购你要的服务器:
其它步骤可以忽略,然后点击右下角的 Deploy Now:
点击之后你就拥有一台属于你自己的服务器了:
点击你的服务器,进去之后你就可以看到你的服务器的ip地址和账号密码了:
以上信息等会用来从你的电脑连接到你的服务器上。
需要在你的电脑连接到你的服务器,那么就需要连接工具,连接工具有很多个,根据你的需要,以下随意下载一个连接工具即可:
接着打开连接工具,然后输入你刚刚购买的服务器 ip 地址和端口(端口号是:22),账户名,和密码就可以连接了。接下来就可以操作你的服务器了。
打开你的 Terminal 终端,接着输入:ssh root@你的ip地址,接着输入你的搬瓦工的 root 密码就可以登录了。
输入命令:
yum install git
输入命令:
yum install wget
输入命令:
wget –no-check-certificate -O ss-fly.sh https://raw.githubusercontent.com/flyzy2005/ss-fly/master/ss-fly.sh
输入命令:
chmod +x ss-fly.sh
输入命令:
sh ss-fly.sh -ssr
运行之后会提示你输入密码:
1 | Please enter password for ShadowsocksR: |
接着会提示你输入端口号:
1 | Please enter a port for ShadowsocksR [1-65535] (Default port: 14593):(在这里输入端口然后回车) |
接着会提示你输入加密方式:
1 | Please select stream cipher for ShadowsocksR:(这里输入 7 然后回车) |
最后就会出现下面的内容,说明你已经安装ssr成功了:
1 | Congratulations, ShadowsocksR server install completed! |
到这里你是安装成功SSR了,不过还可以加速上网:
1 | ss-fly/ss-fly.sh -bbr |
然后会提示你重启才会生效,我们按【y】进行重启。
这样就可以了。
windows点击下载:Shadowsocks windows客户端
打开 Shadowsocks 客户端,输入ip地址,密码,端口,和加密方式。接着点击确定,右下角会有个小飞机按钮,右键–>启动代理。
这时候就可以科学上网了。
Android点击下载:Shadowsocks Android客户端
打开apk安装,接着打开APP,输入ip地址,密码,端口,和加密方式。即可科学上网。
iPhone要下载的app需要在appstore下载,但是需要用美区账号才能下载,而且这个APP需要钱。在这里提供一种解决方案,就是可以再搭建一个IPsec/L2TP VPN,专门给你的iPhone使用。
本文为大卫芬克书籍《消除神经紧张》翻译的第五章,你可以在线阅读,关于消除神经紧张pdf电子书原版可以在公众号「wistbean」发送「消除紧张」获取。
让我们回顾一下我们的问题,我们有一个恶性循环,情绪冲突会扰乱身体的正常运作,包括神经系统。神经系统停止正常运作,可能干扰神经紧张患者重回正确道路的思维。被一群自称业余顾问所困扰,并被优柔寡断所折磨,脑间不当行为的受害者不知道从哪里开始寻求变得正常。
在调整我们的生活、使我们能够生活得更丰富、更自由、更有活力和活力的过程中,总有这样一个第一步的问题。我们必须从学习肌肉放松的技巧和习惯模式开始
。这永远是健康的第一步。我怎么强调都不过分。
通过仔细遵循指示,一个相当聪明的成年人可以在大约十周内教会自己放松。学习者应该为自己提供一个安静的房间,有一张床、四个小枕头和温暖、轻便的毯子。他应该脱掉衣服,这样衣服上就不会有束缚呼吸的东西。然后他应该上床整理枕头。(见下图。)
安排枕头的一个好方法是抓住枕头的两个下角并将它们拉过肩膀
。因此枕头被拉到脖子下面,头向后滚向床头。在继续之前,头部和颈部完全舒适是绝对必要的。在你开始之前,颈部应该得到彻底的放松。
下一步是将第二个枕头放在膝盖下,使膝盖向上和向外略微弯曲
。这可以减轻大腿后部大肌肉的紧张感。如果不这样做,这些肌肉将处于紧张状态,不管你是否愿意。枕头的支撑可以防止膝关节过度劳损(如果你在意的话,我们称之为腿部过度伸展,如果你适当放松,就不会过度劳损)
膝盖弯曲,双腿张开,让小腿外侧能感觉到双腿的重量。当然,双腿不应该交叉,因为这只会将支撑一条腿的负担放在另一条腿上,而不是把重量放在床上。
另外两个枕头放在床的两侧。把你的手臂放在他们身上,这样你的肘部离你的身体大约 8 英寸。然后弯曲肘部,使手腕靠近身体。如果这两个臂枕布置得当,你的手就会垂在枕头的两端,轻轻地放在它们上面。
如果你仔细遵循了这些指导,你现在处于一个最有利于学习放松的位置,你已经准备好开始了。在达到最放松的位置时,在练习过程中不要去改变它。
你从咀嚼的肌肉开始,让你的下巴放松。
这与咬牙切齿正好相反。我曾有人告诉我,他们试图放松,同时像斗牛犬一样紧咬着下巴,以证明他们这样做的决心。请放开对一切的控制,让你的下巴翘起。有些人把舌尖放在牙齿之间,这主意不错。但是嘴唇要轻轻地合在一起。如果你张着嘴呼吸,口腔会变得干燥,不适感和湿润嘴唇的渴望会分散你的注意力。有些人在嘴唇上涂一点冷霜,但通常这是不必要的。
现在闭上眼睛,不要太用力,只要能让眼皮合拢就可以了,不要把眼皮挤在一起,
要让眼皮轻轻合在一起。
现在你就是这样,你仰躺在床上,枕头垫在了你的头和脖子下,肩膀下没有枕头垫着的,你的膝盖下垫着枕头,双腿分开,使双腿的重量落在小腿外侧;双臂下垫着枕头,肘部离身体大概8到9英寸,手腕几乎接触身体,而双手则由枕头末端支撑。你的下巴放松了,你的嘴唇是相互接触的,你的眼睛是闭着的,但不是紧闭的那种。
在你第一次或第二次练习的时候,你可以让别人对照这些方向来检查你的位置,因为每个细节虽然简单,但是很重要。
现在对你的手臂说话,是的,说吧。不用大声说出来,而是对自己说,每次你呼气的时候,就对你的手臂说:”放松,放松”。
随着你变得更加放松,每分钟呼吸的次数会减少,呼气的时间会长。你将有更多的时间对你的手臂说话。因为你要达到最大程度的放松,你可以对你的手臂说:”放松,更加放松,更加放松”。
为什么要和你的手臂说话?没有口头命令你就不能学会放松吗?答案是与肌肉交谈大大缩短了学习时间,大大提高了放松的程度,原因显而易见,只要你想,你就建立了控制肌肉的语言习惯模式。现在,你正在使用你已经掌握的技能,以获得更进一步的放松技能。
我必须承认,我是通过一个迂回的路线来完成这项技术的。我注意到,即使大脑的其他部分没有受到损伤,那些涉及语言中枢的大脑受到损伤的患者也会变得笨拙。我突然想到,肌肉技能和语言表达之间一定有着密切的联系。
然后我想起了在我学习做手术时,我是如何用语言表达我的知识的。“做切口,结扎出血处,切断脂肪,结扎出血处,切断筋膜,用钝性剥离分离肌纤维,取出腹膜”,等等。对于我在手术中进行的每一个操作,我都在自己的书房里练习了一百次,每一步都用语言表达出来。
孩子们学习肌肉技术的技巧是通过长辈的语言来传授的。所以他们学会了说话,走路,游泳,写作。后来,他们通过自己的语言来自学。肌肉控制是一种条件反射,在这种情况下,语言是一个重要因素。
词汇是衡量不同文明技术进步的一个尺度。没有艺术词汇,你就不可能有艺术;没有科学的词汇,你就不可能科学。“一开始就是这个词。” 放松词汇教你放松。
所以,当你躺在床上,每次呼气时,你都对手臂说,“放松,放松,更加放松,更加放松,更加放松”。
一开始,你可能会觉得这很难。记住,你没有做任何你以前没有做过的事情;你只是在用不同的方式、更聪明的方式和更好的方式来表达它。这是有原因的!结果将是一种新的体验,一种减少肌肉张力的体验,一种恢复肌肉力量的体验,一种增强身体张力和活力的感觉。
患者通常在开始学习放松课程时会说他们知道如何放松。他们的眼皮在抽搐;他们的额头起皱;他们站着或坐在紧张的位置,完全不知道自己的肌肉紧张;但他们确信自己知道如何放松。一位病人告诉我,他整晚打扑克是为了放松。事实上,他打扑克是为了阻止自己思考其他事情,这是一种与现实脱节的徒劳行为。他不知道真正放松的意义。他从未经历过。消遣不是放松。娱乐不是放松。只有放松才是最重要的。
几节课后,这些病人总是告诉我,他们从未意识到自己如此紧张。在学习放松的过程中,他们经历了一种新的感觉。向一个从未经历过这种感觉的人描述这种感觉,就像试图向一个天生失明的人描述颜色一样。当你看到蓝色的天空,你会感受到它的颜色;但是,如果你一直无法理解,那么所有意象派诗人的所有口头描述都无法告诉你你错过了什么。放松的身体是身体的感觉。当你恢复时,你会重新意识到你的放松能力,你会喜欢它的。
一些患者告诉我,在上了几堂课后,他们的手会感到刺痛。这是因为他们因为血管松弛而享有更好的血液供应吗?我不知道。我确实知道,在放松训练后,一些来源不明的长期湿疹的高抵抗力病例已经消失,无论如何,刺痛感很快就会消失,再多练习几次后,就再也不会复发了;因此,出于实际目的,你可以忽略它,认为它不重要。
尽可能经常地放松双臂。为自己设定每天至少两个半小时的练习时间
。我的一些病人每次饭后都会躺下。他们中的两个在他们的办公室有床,他们在上午和下午晚些时候会练习。
不要告诉自己你没有时间放松。拉尔夫·英格索尔(ralph ingersoll)报道称,英国首相温斯顿·丘吉尔(winston churchill)每天下午晚餐前都会躺下,丘吉尔(churchill)会考虑4000万人的食宿问题,以及庞大的陆军、海军和空军的方向;帝国外交政策的规划。如果他能抽出时间,我想你也可以,如果你愿意的话。
练习的频率和规律性是成功的秘诀。每天在同一时间练习放松是有帮助的,但这并不是绝对必要的。最终,一个人应该学会随时释放不必要的肌肉紧张。
在你练习放松手臂大约两周后,你会开始注意到结果。你首先会注意到,你手臂上的肌肉放松类型与之前经历的不同。你也会注意到,当你的手臂放松时,你的整个身体休息得更好。你解除了他们继续紧张下去的冲动。过后你的双腿将得到放松。现在你已经准备好学习呼吸时放松肌肉。
如果你将拇指尖和指尖放在一起,使右拇指尖与左拇指尖相对,右食指尖与左食指尖相对,以此类推,你将大致呈现构成胸部结构的骨笼。当你看着你的手指时,想想你的肋骨。
现在就这样做。
现在,指尖仍然接触,分开手指,食指向上移动,小指向下移动。这就是你吸气时肋骨的动作。当你把手指分开时,你会注意到你手上有多大的空间。正因为如此,当你分开肋骨时,你的胸腔里有更多的空间,就像你吸气时一样。
现在将手指合拢,这会降低您手中的容量。所以当胸部肌肉放松时,你的肋骨会一起落下。减少胸腔内的容量。
需要肌肉呼吸。肌肉把肋骨拉开。当这些肌肉放松时,肋骨一起落下,呼气发生。这就好像你的胸部是一个风箱或手风琴,当你拉着它时,它会吸入空气,当它自身的重量被允许关闭时,它会让空气流出。
理解了这一点,你就会明白为什么在呼气时要让手臂放松。你在协调手臂的放松和胸部肌肉的自然放松。
现在你已经准备好上第二课了。
躺下,就像你放松双臂时那样。
花大约五分钟放松手臂。当你觉得它们很重时,你的手会温暖;当你现在体验到放松的愉悦之光时,你就会明白我说的与胸部肌肉对话是什么意思了。
每次你呼气时,对你的胸部说:“放松,放松,更加放松,更加放松。”
不要注意你的呼吸方式。除了让吸入变得尽可能容易,尽可能不费力,不用过多的在意它。
胸部的第二个练习可能需要一周的时间
。在一周结束时,开始注意肩部和胸部的肌肉。
经过三周的放松训练,你晚上入睡应该不会有任何问题。你的睡眠应该是安静的,这对你很有好处。
你已经练习放松三周了。也许你开始抱着怀疑的心态去实践。你没有被说服,但除了紧张,你没有什么可失去的,所以你愿意尝试一下。此时你的怀疑已经结束。你从实际经验中知道,聪明的放松练习可以为你带来什么。
这是大多数人下车的地方。大多数人很容易对自己的成就感到满意。也许他们在旧金山最好的餐厅之一吃了一顿晚餐,那里的食物都是由世界著名的厨师烹制的,到家后却对他们倒霉的厨师吹毛求疵。他们可能会看到保罗·威廉姆斯(paul williams)或戴维森(davidson)建造的房子,他们对自己家的建筑不再满意。他们花35美分看一部需要数月计划的电影,这部电影是由最狡猾的表演者表演的;但是,如果一个场景的导得不够好,他们就会批评和抱怨。是的,当人们向他人索要服务或商品时,他们要求完美。他们在与他人打交道时可能非常认真。但当谈到给自己提供服务或商品时,他们只满足于勉强度日。
如果知道如何放松手臂和胸部肌肉,大多数人都会觉得挺可以的了。这就是那些容易满足于自己成就的人通常抛弃自己的地方。
但如果你渴望旺盛的健康和前所未有的精力,你将不会满足。你会想继续的。让我们从背部肌肉开始第四周的训练。
以通常的方式在练习期间放松。花五分钟放松你的手臂。花第二个五分钟让你的胸部放松。记住总是和你的肌肉紧张说话,在你呼气时告诉他们放松,放松,更加放松,彻底放松。
在放松手臂和胸部 10 分钟后,开始与背部小肌肉交谈。花十分钟做这个练习。
第四周结束时,你将能够放松手臂、胸部和背部。你做得很好。
进入练习的第五周,您将在每个阶段开始时分别在手臂、胸部和背部花费 5 分钟。当这些部位放松时,你可以用接下来的十五分钟来学习放松腿部肌肉
。“放松,放松。”
永远记得用言语表达你的放松。呼气时与肌肉交谈。
第六周,像往常一样,按顺序回顾手臂、胸部、背部和腿部的放松。本周学习放松颈部后部的肌肉
。
在第七周,尝试学习放松控制面部表情的肌肉
。如果你凝视维纳斯或密涅瓦的雕像,你会感受到面部平静的力量。佩里克利斯时代对放松面部肌肉了如指掌。
第八周,放松头皮肌肉
,观察神经性头痛消失。
第九周,学会放松控制眼球运动的肌肉。
每只眼睛有六块肌肉。这些肌肉使眼睛左右上下转动。在学习放松这些肌肉时,我告诉我的病人放松眼睛,他们会觉得眼睛会从眼窝里掉下来。眼睛不会掉下来的,尽管很多人都把眼睛固定在那里,人们可能会认为这是防止眼睛掉出来的一种预防措施。放松他们。什么都不会发生,只会让你失去那种眼睛疲劳的感觉。
在第十周,学习放松讲话时的肌肉。
一个方法是尽可能放松,首先放松身体的其他部位,然后尽可能轻声、平静、安静地说话。使用暗示平静、和平、愉快轻松的词语。这尤其适用于教师。高亢、刺耳、神经质的声音意味着一个班级的学生会引起神经紧张。刺耳的锉刀会给任何人的背部带来不愉快的紧张感。
现在你已经完成了十周的练习,重新开始。第二个十周是毕业课程。大多数学会放松的人都意识到,他们已经掌握了一项宝贵的技能,并决心将其保持终生。他们太棒了,因为他们已经购买了一份已付清的健康保险单。
学习掌握一项新技能的十周时间并不长。在那段时间里,你不可能指望学会游泳或打好高尔夫球。所以不要太匆忙。前两周学习放松手臂。第三周锻炼手臂和胸部肌肉。在你的第四周,放松背部肌肉。第五周和第六周用于腿部和颈部背部的肌肉。在第七周,你将学会放松面部肌肉。在休息时,你的脸将失去皱纹,获得新的美丽。在第八周,你要学会放松头皮的肌肉。第九周是眼球肌肉,第十周是发声肌肉。因此,在十周内,你对身体的大部分肌肉进行了再教育,顺便说一句,你对自己的情绪行为模式进行了再教育。因为没有人能在完全放松时体验到不愉快或严酷的情绪。
]]>本文为大卫芬克书籍《消除神经紧张》翻译的第四章,你可以在线阅读,关于消除神经紧张pdf电子书原版可以在公众号「wistbean」发送「消除紧张」获取。
如果说紧张是一种位于 interbrain 的身体疾病,那为什么要说它是“精神疾病”呢?为什么患者总是被告知回家去,紧张是因为你自己瞎想,忘了它。把一种情况称之为功能性疾病要比去治愈它要容易得多,但是对于患者来说,结果总是不尽人意。
一位老爷爷已经有 12 周没有使用他的双腿了。他的肌肉萎缩是功能性的。他的医生是这么告诉他的。“你的肌肉没有什么问题,只要稍加锻炼就可以治愈”,她说“这纯粹就是功能性的”。但医生没有说这是“想像出来的”,老爷爷断的腿被打上了石膏,怎么可能发挥作用。
但是,如果他不是腿断了,而是他的内心已经受伤了,如果他的肌肉萎缩是 interbrain 引起的。换言之,如果他的腿不是被禁锢在石膏里,谁会在父亲节的时候给他一瓶陈年白兰地?“我对他没有耐心,” Amanda阿姨会说。“你不能告诉我说,这不全取决于思想”。
正如 Amanda阿姨承认的那样,她不是傻瓜,她一直在周围,保持睁眼。 “一切取决于思想”是对她所有不幸的回答。她从来没有学过当灰色的细胞没有正常工作,思维会混乱,她和其他很多阿姨那样,不认为这些细胞会在他们的思想和感情的背后发挥作用。我们知道,美誉这些细胞,就不会有感情和想法。她所知道的是,当人们紧张的时候,他们的想法是不对的。我们目前的工作就是找到 interbrain 是怎么让我们产生紊乱的思维的。
到目前为止,神经紧张患者已经能够从他的症状(许多人都有)中找到一些安慰,这些症状不是由身体那些部位的局部疾病引起的。他知道吞咽困难和呼吸困难只是由 interbrain 的错误行为导致的肌肉痉挛引起的,这对他来说是一种解脱。 受害者可以不考虑他目前的痛苦,而对未来的希望。他从可怕的黑暗中又摆脱了一种未知的恐惧。
现在是时候让他解除对可怕的精神症状的恐惧了。现在是时候让他了解他的抑郁、他的强迫观念和病态的冲动、他可怕的恐惧,以及他的身体在无法正常工作并开始反抗时的反应。
因为在这里,获得关于自己的知识是治疗和治愈的开始。我们再次用“重要”来强调这样一个观点,即我们必须知道什么时候应该把我们病态的想法和感受与那些行为不端的器官的知识相提并论,这些器官在对我们进行恶作剧。当我们意识到这一事实,并理解这一过程时,我们可以忍受自己的想法,无论多么不愉快,就像我们在暂时的身体痛苦下站起来一样,用真理来安慰自己,“这也会过去的”
这里是向 amada阿姨寻求帮助的地方。她对神经紧张患者的反应可以帮助更快的治愈。她必须学会认识到癔症性瘫痪和所有其他精神疾病都是身体上的疾病。她必须学会控制自己的不容忍行为,并参考那些努力但饱受折磨的患者恼人的生理和心理行为。
我知道与神经症患者一起生活可不是开玩笑的。当一个男人辛辛苦苦工作一天回到家时,发现他的妻子没有伸手打扫房间或准备饭菜,这很难怪他闷闷不乐。当她解释说她因为担心邻居对她的看法而无法动弹时,他很自然地反驳说:“哦,这就是你的想法。如果你不再想那么多,而是做一些有价值的事情,你就不会有这种古怪的想法。”说是这么说,但没有帮助。如果他想帮助他的妻子康复,他的首要工作就是试图了解他想要治愈的病情。
身体与心灵对话,将思想灌输到我们的头脑中,这并不完全是一个新的革命性的想法。每个女人都知道这一点,饱腹使男人更和蔼可亲;还有这,一双丝袜有助于在春天吸引年轻人的眼球。我们都知道,一个空腹的人几乎没有良心。肌肉在紧张和颤抖时不会沉默。当话语倾泻而出时,我们可能并不总是从身体的哪个部位知道自己在听什么;但我们可以肯定地说,我们的思想至少有八分之七是由器官需求和欲望的合理化组成的。当身体拉动琴弦时,心灵在跳舞。
下次你觉得自己要发脾气的时候,记住这个事实,你会闭上嘴,把拳头放在口袋里。当你的愤怒冷却下来,你将能够以你的自我控制为荣,以你的理性战胜了野蛮的冲动为荣。永远不要忘记愤怒是一种情绪,一种身体活动。当你屈服于情绪时,你只允许你身体的器官对你大脑的一部分发号施令,而把你大脑的其余部分当成一个被堵住的囚犯。当情绪支配时,身体控制着思想。当整个大脑作为一个整体工作时,大脑控制着物质,理性占上风。安慰也是如此。
情绪具有催眠作用。情绪使人不能清晰地思考,不能敏锐地观察,不能敏锐地倾听。它使人失明、失聪和哑巴。它会麻痹你手头的活动,阻止你做你真正想做的事情,并让你做那些如果你完全掌握了你所有的能力就不会做的事情。一名足球运动员在半场比赛中肋骨骨折,完全等同于催眠麻醉,阻止了他意识到严重的身体疲劳,这证明了情绪是如何与身体感觉隔绝的。
想想一个典型的哈罗德青少年,疯狂地爱上了某个女朋友。他说他只是为她而疯狂。他的朋友们闷闷不乐地点点头,喃喃地说:“没错,你很时髦。”他们知道跟哈罗德讲道理是没有用的。他们知道哈罗德的整个有机体,身体的、精神的、情感的,都渴望某种满足。他们意识到,哈罗德的强烈情感实际上是一种自私的自我关注,使他陷入对女孩和他自己毫无现实根据的荒谬想法。
他们应该告诉他,他的梦中情人是个懒惰、以自我为中心、效率低下的笨蛋吗?她允许她妈妈打扫她的房间,洗她弄脏的衣服?她不能花五块钱而不浪费三块钱?她不能拥有朋友?还是一份工作?还是一次聪明的谈话对话?没用,没用。哈罗德的情绪使他如此着迷,以至于他对任何影响他情绪满足的事实视而不见。他对不符合他全神贯注的声音、视觉或想法感到麻木。
如果爱是盲目的,那么愤怒就完全与环境脱节。甚至我们的法院,我说“甚至”是因为法律在承认此类问题方面是保守的,甚至法院也承认“暂时精神错乱”作为对在某些情况下可能使同胞生气的罪行进行起诉的辩护。奇怪的是,当 interbrain 以某种方式影响行为以导致一种不可抗拒的偷窃冲动(盗窃癖)时,法院不予考虑。或许当受害者被当场抓获时,法律会通过指手画脚来看待凶杀案,并使用“临时性精神错乱”作为一种轻松的出路。
但这是题外话。关键是,即使是简单、不复杂的情绪也会限制感知领域,扭曲判断力。并刺激一种作用模式,同时抑制或阻断所有其他反应。这是情绪催眠。
当相互冲突的情绪习惯模式最终导致大脑间(interbrain)功能的崩溃时,回报是双倍的。在麻痹的情况下,您会最清楚地看到这一点。我的一个病人的嘴唇和嘴巴都麻木了。你可以在她的嘴唇上插针;她不觉得痛。刺激引起疼痛感的神经末梢;冲动通过脊髓到达大脑间;但是在脑间和前脑之间有一个阻塞,阻止她意识到针尖。这个案例类似于一名不知道自己肋骨骨折的足球运动员。他不知道自己断了肋骨。它类似于催眠,催眠后对他将成为皮安麻醉剂的暗示作出反应。
另一位麻痹的患者在携带痛苦冲动的神经没有受到刺激时会感到疼痛。她右脚有烧灼感。我给她注射了皮下注射,有一段时间她感觉很好。注射用的是无菌水。疼痛是“想象的”吗?不是的。虽然疼痛源于对大脑神经细胞的刺激,而不是对脚神经末梢的刺激,但疼痛是真实的。为了治愈她,必须治疗大脑中的神经细胞,这样它们就不会引起脚趾疼痛的感觉。我们必须治疗间脑(interbrain),结束构成她病情的相互冲突的情绪习惯模式。
第三名患者手部瘫痪。请来了一位整形外科医生。他满怀希望地对颈部进行了X光检查,遗憾地承认没有颈椎肋骨需要手术。他最后建议找一位神经科医生来咨询。经过非常仔细的检查,神经科医生报告说,从颈部到指尖的大神经看起来是正常的。病人仍然无法张开她的手。一位精神病医生让她进入催眠状态,说:“张开你的手。”她的手像花朵一样张开。
她是假装瘫痪吗?当一条蛇来回摇动它的头直到可怜的小鸟因为恐惧而僵硬时,金丝雀会假装瘫痪吗?你是否曾经被吓得僵硬,以至于无法移动肌肉?你是假装瘫痪吗?
interbrain 的不当行为可以向大脑的运动中枢发送脉冲,从而导致中枢的神经细胞阻止或抑制所有肌肉运动。这就是麻痹性瘫痪的含义。同样的 interbrain 也可以向运动中心发送脉冲,使其肌肉抽搐甚至抽搐。我们称这种抽搐和抽搐为神经抽搐或舞蹈动作。
把这四个例子加在一起,你可以用一句话来总结它们。神经紧张可以刺激或抑制感知,可以刺激或麻痹肌肉酸痛。
它会让你忘记自己的名字和任何与身份相关的东西。或者,它会让你忘记你所欠银行的名字。它会让你口吃或口吃。它会使你的创造性活动瘫痪。最糟糕的是,它能控制你的思维。大脑间(interbrain)的不当行为是催眠的。
一名铁路设备设计师患有焦虑症。为了避免上班,他带妻子去了一次短途旅行,向她展示了他设计的一辆汽车。当火车驶出车站时,他的所有症状都在他体内冒了出来。他头脑中的孩子为旅行设计的流畅、流线型突然成了他劳累的标志。他所有的恶心、呼吸急促、寒冷和左肋下的疼痛突然涌上心头。
他真希望自己从未开始旅行。他想知道如果列车长解释说他感到不舒服,他是否会让火车停下来。他觉得自己病了;只要他想下车,他们就应该让他下车。离开那列火车成了一种痴迷。他觉得如果他不能以任何其他方式脱身,就必须跳下去。想到他可能不得不从行驶中的火车上跳下来,他吓了一跳。他知道自己的额头上满是汗珠;他觉得其他乘客都在盯着他看。因为他意识到自己无法控制自己的思想,他确信自己快要发疯了。
他所做的事很有趣,但又是另一回事。目前,让我们坚持我们的主题,即你的身体支配你的大脑,这种本质上是一个催眠过程。我们在所有形式的痴迷和各种形式的抑制中看到了这一点。例如,我们看到一些人脑子里想不出某个调子。我们看到人们在睡觉前必须解决一些算术问题。我们看到一些人不能呆在窗户关着的房间里。或者打开。有数以百万计的方式表明,患病的 interbrain 对前脑有影响。因为你必须用你的头脑来理顺你的生活,所以你必须了解什么是催眠。
由 interbrain 不当行为引起的自发的、部分的催眠在许多方面类似于涉及催眠师和受试者的更壮观的人工催眠。人工催眠是一种很像自然睡眠的状态。就像睡眠一样,这种状态是由暗示决定的。所以在考虑人工催眠术之前,让我们先想想它的近亲——自然睡眠。
晚上睡觉时,你对睡眠的暗示来自房间本身;从床和它的被子;来自你的睡姿、准备睡觉的习惯,以及你之前获得的与睡觉有关的所有习惯模式。当然,如果不是过度疲劳,就会容易入睡。疲劳的元素是血液携带的刺激大脑睡眠中心的信号。除了这些普通的建议外,有些人还会给自己一些特别的暗示,比如枕头的特殊安排或一些个性化的姿势,以诱导睡眠。有些人背诵祈祷文或经文。我的一位病人曾经背诵乘法表。有利于睡眠的条件包括合理的舒适度,没有令人兴奋和刺激的建议,以及使人进入睡眠状态的各种建议。单调和对睡眠的期望是通常的催眠药。
在人工催眠术中,条件大致相同。受试者被置于一个舒适的位置,除了催眠师照在受试者眼睛上的一盏灯,有助于排除其他感觉。同时,催眠师通过说 “要睡觉了,要睡觉了,眼皮越来越重,要睡觉了 “来暗示睡眠,如果受试者愿意,他就会去睡觉。
在睡觉时,催眠师可能会建议在受试者醒着的时候进行。这被称为催眠后暗示。例如,他可能会说,“当时钟敲四点时,你会带上雨伞,去商店买雪茄。”受试者醒来后,他可能会瞥一眼时钟,然后在四点的时候,拿起雨伞,开始去商店买香烟。如果被问到为什么要带雨伞,他可能会害羞地笑着解释:“谁也不知道什么时候会下雨。”他不能告诉你带伞的真正原因,因为他记不起这个建议。虽然他有这样的意图,但这是发生在他有意识的记忆水平之下。所以他发明了一个很好的理由来解释他的冲动。
假设受试者是一个酒鬼,催眠师建议他醒来后,不再想喝酒。这能治好他酗酒的习惯吗?我很抱歉地报告,它不会。只有当没有相反的建议时,建议才有效。当清晨来临时,旧的渴望又会重现。胃在翻腾,神经在颤抖。这是一个强有力的暗示,而我们对口头和身体之间的冲突的暗示,使旧瓶子获得了另一个胜利。“我真的不想喝酒,”酒鬼说。“我只需要一两杯就可以让我的神经平静下来。”
人工催眠是一种异常抑制普通暗示的状态。这种状态使得催眠师给出的建议更加有效,因为它们并不矛盾。因此,如果催眠师告诉受试者他的手臂瘫痪,受试者将无法移动该手臂。他可能会说,受试者可以感觉到嘴唇的疼痛,嘴唇会变得麻木,以便针刺。暂时缺乏整个大脑控制和组织行为的能力会导致催眠的异常暗示。
下面是一种理解催眠作用的方法。把前脑想象成一个棋盘。绿色方块代表神经细胞,其脉冲刺激肌肉收缩。红色方块代表神经细胞,其冲动阻止或抑制肌肉收缩。红色表示“停止”,绿色表示“开始”。我们将红色方块称为抑制神经中心,绿色方块称为刺激神经中心。抑制性神经中枢主动阻断感觉、肌肉活动和思维。刺激神经中枢一旦被激活,就会引起肌肉收缩,或引起强烈的感觉。
当一个又一个的抑制中心被激活时,就会达到一种催眠状态,直到几乎所有的刺激中心都被阻断。冲动从一个抑制中心传播到另一个抑制中心,直到几乎整个前脑都像一张网一样被覆盖。抑制冲动也向下传播,阻止感觉到达前脑。通过这种方式,可能激活刺激中心的建议被排除在外。大脑的一部分失去了作用。正如催眠术的主体所说,他不是他自己;他不是全部。就目前而言,这是真的。
整个大脑暂时缺乏控制和组织行为的能力,导致神经疾病的思维异常。事实上,大脑功能的部分丧失解释了我们在强烈情绪控制下所做的愚蠢和非理性的事情。被误导的器官活动,情绪,使我们的部分脑细胞瘫痪,使它们不能活动,使它们成为囚徒,阻止整个大脑作为调节器官工作。在情绪状态下,我们处于恍惚状态:催眠恍惚状态。
当相互冲突的情绪习惯模式使大脑间陷入混乱时,这种状态不再是暂时的。然后,思想被各种机构控制,在无政府状态的内战中相互斗争。情绪冲突使一个人进入一种长期的局部催眠状态,他不再控制自己的思想。
睡眠生理学很像催眠机制,因为睡眠和催眠一样,是由抑制神经中枢的激活引起的。这些中枢部分由单调性激活,单调性不会刺激刺激中枢。在睡眠中,就像在催眠中一样,冲动从一个抑制中心传播到另一个抑制中心,并向下传播到脑间(interbrain)的睡眠中心,从而导致睡眠。
在一个温暖的周日早晨,当小威利·佩里温克尔坐在教堂里时,炎热、强迫的不活动,以及发出难以理解的单词的单调声音的嘶鸣,激活了小威利前脑的一个又一个抑制中心。这些冲动传遍了他的大脑,直到嗡嗡的声音变成远处海浪的拍打声。教堂装饰的各种颜色,以及穿着得体的女教士所穿的衣服,变成了一种没有形状或意义的柔和色调的混合体。小威利在硬木长凳上蠕动,随着肌肉的放松,他也变得柔软了。这种冲动从一个抑制中心传到另一个抑制中心,直到小威利刚刚睡上了无聊的的觉。
睡眠的深度取决于大脑抑制冲动的大小。因为这里有睡眠中心。某些疾病过程会刺激该中心产生病理性睡眠。动物实验人员设计了精密的电子仪器来激活睡眠中心,让他们的实验动物很快入睡。可能这就是巴比妥系列催眠药攻击的中心。无论如何,当睡眠来临时,进一步的冲动从大脑传到心脏,使心脏跳动得更慢;使人呼吸更加安静。因此,来自内脏的干扰睡眠的刺激更少,人们的睡眠会越来越深。
保罗·席尔德博士在他的《催眠》一书中指出,毫无疑问,只有借助睡眠心理学才能解释催眠的事实。这一解释是由P·德·拉比诺维奇博士提出的,基本上与本文所述的方式相同。引起睡眠的神经是那些产生催眠状态的神经,人工的或与外界无关的。睡眠、催眠和情绪性思维障碍都是忙碌的小抑制性神经细胞的证据。
有着秃头、圣诞老人胡须和胡子的伊班·彼得罗维奇·巴甫洛夫(Iban petrovich pavlov)双眼闪烁,他指出了神经状态和催眠之间的关系。通过这样做,他把精神病学从朦胧的猜测领域带了出来。将这个专业置于科学解剖学和生理学的高度。为此,所有医生和数百万神经疾病患者都欠他无尽的感激之情。他证明了精神症状不是“想象的”,而是由患病的神经引起的。现在,当我们治疗精神疾病时,我们知道神经系统的哪一部分工作不正常,我们知道如何将这些神经恢复到正常状态。pavlov证明,要治愈患病的神经,必须对患者进行解除催眠。
一位一直支持母亲的年轻女子发现自己越来越紧张,直到最后无法去上班。她说,人们都在谈论她。她走在街上时,他们指着她。她办公室里的其他女孩都在窃窃私语,说她和那个漂亮的簿记员有染。“如果这是真的,就不会那么糟糕了,”她告诉我。“但我从来没有和他出去过:更不用说去看电影了。”
除非要指出,没有人对她的来来去去、她的起床和躺下最感兴趣。当被告知其他人太沉迷于自己的问题而无法理会她的事情时,她会意地笑了。 “他们知道,”她会神秘地重复。 “他们知道。”
由于害怕遇到这些窃窃私语的人,她将自己的兴趣和活动范围缩小了,直到最后一天二十四小时都在床上。她对生活失去了所有的兴趣。 ” 虽然以前她对自己很挑剔,但现在她拒绝洗澡或梳头。 “我为什么要这么麻烦?她会问。“我不想见任何人。走开。让我去。”
她的母亲和其他亲属提供的事实拼凑起来,表明了她的情感习惯模式之间的冲突,她从小就相信对性的恐惧是道德的开始。她相信,没有人会娶一个已经放弃性禁欲的女孩。然而她曾与一名年轻男子有过婚外情,他忘了将诉讼合法化。分手时,她的头脑一片混乱。过了一会儿,她在工作的地方遇到了簿记员,并想和他出去玩。如果她真的去约会了,她应该告诉他她以前的经历吗?如果她不告诉他并嫁给他,如果他发现了会怎么办?她对整个情况的矛盾情绪(记住,情绪是整个身体的行为方式)进入了一场自由、击倒和拖出的战斗。
尽管情况完全是推测性的,但大脑间(interbrain)还是陷入了混乱。它向她身体的各个部位和前脑发送了异常信息。前脑是抑制中心和刺激中心,两者都受到相互矛盾的冲动的轰炸。刺激中心说:“抓住牛角,告诉他。”抑制中心喊道:“躺下,躲起来。”来自刺激中心,“我希望我能嫁给他”来自抑制中心,“这没用,那又怎样?没有任何用处。”
从对诚实的渴望和对隐藏的渴望中,终于有了合理化的解释:“每个人都知道。我除了躲起来,吃我的药之外,别无选择。”
所以冲动从一个抑制中心传播到另一个抑制中心,部分催眠她进入精神麻痹,并关闭我们所有可以让她现实地处理她的问题的建议。产生这种部分催眠的暗示不是来自她的环境,而是来自她紊乱的大脑间(interbrain)和她情绪上引起的混乱内脏。较低的有机调整中心已经控制了较高的中心。身体在向头脑发号施令。
结果如何?疗养院,美甲唑休克疗法,回归理性,心理治疗和治愈。她被催眠了。让我们转向下一个案例。
她的父母让十几岁的格特鲁德坐在我的候诊室里,拿着一本杂志,向我解释她是如何让他们发疯的。她的不安被带到了一个极限,超出了他们所认为的理智的界限。
嘿,让她早上起床很难。起床后,她会在梳妆台上磨磨蹭蹭,一边听收音机,一边在梳妆台或写字台上胡乱摆弄文章。她没有朋友。客人来访时,她脾气暴躁,不和他们说话。你无法让她接听电话或在家里帮忙。当她说话时——这里她父亲模仿,“我……呃……在想……呃……我……呃……要说……呃……那个…… ……呃……我现在不想吃。”
这个女孩对她的生活的描述非常棒,因为它缺乏现实主义。学校里所有的孩子都是毒品。他们都不想做任何事情。她从不合作做家务,因为如果她这样做,人们会期望她继续定期做家务,考虑到她每周一美元的零花钱,她的工作将得到十美分的报酬一小时;所以帮她父亲打理花园或帮母亲洗碗是不值得的。她可以为邻居做家务赚更多的钱。她为邻居做家务吗?不;她不得不放学回家学习。她回家后学习了吗?不;她一般都太累了。
在这张自负的、抗拒的、恶意的消极主义的画面背后,有一个有趣的故事。她的父亲在一家公司工作,该公司大约每三年将他从一个地方调到另一个地方。十四年来,这个女孩在五个不同的城市生活过。每一步都意味着必须对另一个学校系统、另一个朋友群体、另一个社区进行新的痛苦调整。每一步都意味着打破旧的联系,进行令人满意的调整。重新开始。没有人喜欢让自己的所有活动都朝着自己不利的方向发展;最重要的是,孩子的调整技巧有限。即使是最乐观的人也可能会问:“重新开始有什么用?”
除了这些沮丧之外,还有一位唠叨的母亲,她要求她的女儿完美,令人担忧的妈妈很难在自己的生活中表现出来。她习惯于提问、责骂、开玩笑,以及以其他方式使人们处于防御状态;她可能从来没有想过,在她的女儿身上抢占先机是剥夺了女孩的公平起点。童年时期消极主义的最常见原因是一些欺凌或其他攻击性的成年人的侵略性竞争,他们在将不平衡的力量和技能与幼稚和缺乏资源的儿童防御技术相提并论时不会感到羞耻或内疚。
这是一个女孩,她最重要的人生经历是一次又一次的失败,失败后的失望。由于她缺乏成功的习惯和记忆,她母亲的态度进一步发展了她的自卑感。在她的大脑中,一个又一个抑制神经中枢被激活。这些抑制性冲动在大脑中传播,编织一张网,在正常的刺激冲动开始之前捕捉它。所以她说话的口气就像喉咙里有个齿轮。她走着走着,不知怎么的,好像她的裙子腰带上有一个无形的钩子,挂在一吨砖头上。她对自己和世界的所有想法都是由她大脑的无序行为决定的。她被部分自我催眠所束缚,剥夺了自由和完全的自我控制
她的治疗依赖于催眠。但是没有那么清楚地理解的是,同样的过程在某种程度上一直在每个人身上进行。事实上,我们的大部分思考和行为都是由我们的习惯模式产生的暗示的结果,而我们在很大程度上完全没有意识到这些暗示。
你有没有想过你的习惯模式有多动态?他们如何要求表达?他们如何不断地向您的大脑发送大量建议,怂恿您进行某些活动,限制您进行其他活动,控制您的思维?你不认为习惯很重要吗?然后考虑吸烟习惯的琐碎和不重要的模式。琐碎而不重要?是的,在你生活的总体规划中。但不是那个在烟灰缸上摸来摸去发现一个相当大的烟蒂的人。有时候,一个人为了买一支雪茄,会走五英里,而不是一英里。我见过一杯咖啡也能达到同样的里程数。人们普遍的印象是,习惯,即不自觉的冲动,在一个成熟、理性的人的心理状态中起着很小的作用。无知者强调行为的自愿方面。但在那些最了解心理学的人中,习惯是最重要的。
较老的心理学学派是以观察法为基础的;他们的主题研究他们的灵魂并写作。自然地,通过这种方式获得了一些关于自愿想法和行为的有效心理材料。但他们忽略了更重要的事实,即非自愿的活动驱动力,因为我们的内在驱动力深藏在意识水平之下,潜意识是由习惯模式的组织组成的,不容易检查。
西格蒙德·弗赖斯强调了潜意识与神经和精神疾病的关系。多么严厉的批评落在他诚实的头上!在他那个时代,所有和蔼可亲的教授都穿着灰色条纹裤子、闪亮的黑色斜纹背心和丝质帽子,但他们仍然认为自己是高度理性的人。当他们读到他的话时,他们像受惊的猿类一样尖叫。
善良的教授们会认为,他们所有的选择,所有独特的生活方式,都是基于逻辑和纯粹的理性。他们认为动物是由本能控制的。恶人,在这里散布的准则会让他们脸红——被他们低级的本性所支配。但是一个理性的人在理性、智慧和意志的指引下,过着甜蜜和光明的生活。
好教授的态度可能是一种合理化,一种在黑暗中吹口哨,以鼓舞他们的道德勇气,被潜意识的攻击削弱。就这样,你会发现潜在的酗酒者往往是最狂热的禁酒主义者。他在听众面前发表主要针对自己的演讲。
大学时认识一个非常有道德的年轻人,他给女院长写信,抱怨女生不断地引诱他,试图勾引他。他给报纸写信,抗议女性穿短裙。他是一个人的纯洁联盟,他只来谈论、阅读、思考除了性之外的事情。事实上,他认为自己是一个非常优秀的人,他拒绝使用四个字母的单词。但他这是欺骗了自己和几个志同道合的苦难兄弟。
罪犯们将他们潜意识中的个性投射到报纸上报道的每一项起诉中。他们希望被告人能够战胜犯罪,并不是因为他们对被告人有兴趣,而是因为在潜意识中他们已经认同了被告席上的人。我们中的一些人习惯性地认为自己是弱者。这个弱者可能是电台问答节目中的一名志愿者,他可能已经失业了。 我们希望他能立即赢得64美元的奖金。 为什么我们如此关注?这种偏见是一种智力上的弱点,心地善良,还是潜意识中相当棘手的挫折感?
还记得人工催眠的对象吗?他被催眠后建议去商店买雪茄?还记得他是怎么解释雨伞的吗。“你永远不知道什么时候会下雨”?这种催眠合理化的表现形式是我们所有人思考的很大一部分。它涵盖了很多曾经被称为“有意识思维”的领域它包括那些我们称之为白日梦的愉快的幻想。一旦你知道了一个人白日梦的内容,你就开始了解他潜意识趋势中最重要的部分。
卡斯帕·米尔克托斯梦想着在自己的十码线上接住足球,在数千人的欢呼声中跑完整个球场,触地得分。很有趣。一想到卡斯帕永无休止的痛苦就不那么好笑了,当时,作为一个多刺、瘦腿、缺乏维生素的男孩,他的同事们给他起了个绰号“鸟腿”
我们可以这样总结:条件性反射或大动脉炎习惯模式向脑间(interbrain)以及前脑的抑制和刺激中心发送一波又一波的建议。神经冲动从一个抑制中心传播到另一个抑制中心,产生部分催眠状态。这种情况限制了某些刺激神经中枢的活动,并使其他未受抑制的神经中枢处于触发边缘,异常地准备接收和分配脉冲。结果是身体和精神失去平衡,失去自制力。部分自我催眠的事实使神经紧张成为一种精神疾病。
当患者对自己的想法和耐心提出各种不合理的要求时,家人对患者的易怒和前后矛盾感到不满,而患者则感到困惑和困惑。他自己情感冲突的悲剧受害者被神经产生的身体感觉吓坏了,当被告知这些感觉是虚构的时,他绝望地逃避。他自己试图理解自己,却被自己催眠般的合理化所绊倒。出于这些原因,他需要一份关于自己问题的解释,以及一份能够带领他走出迷宫的图表。
梅奥诊所的沃尔特·C·阿尔瓦雷斯博士说,他最困难的工作之一是让患有神经性消化不良的患者知道,他的胃病是由来自大脑间的风暴引起的。为什么这是一项艰难的工作?因为病人被自己的紧张行为催眠了,所以不讲道理。情绪会阻碍思考。热血比冰冷的事实更有说服力。
我不要求我的病人相信任何事情。我给他们解释和图表。“遵循图表,”我告诉他们,“三个月后重新阅读解释,当你的神经性消化不良消退时,当你不再紧张时,当你被驱除幻觉时,你可以更好地判断解释的合理性,为了康复,为了打破这种神经和生理-心理错误行为的恶性循环,你必须被驱除幻觉。”
在接下来的几章中,我们可以看到去催眠的图表。你不需要指南针来遵循它的路线,只需要有意志来到达你的目的地。
]]>本文为大卫芬克书籍《消除神经紧张》翻译的第三章,你可以在线阅读,关于消除神经紧张pdf电子书原版可以在公众号「wistbean」发送「消除紧张」获取。
你现在知道,情绪习惯模式之间的冲突会导致 interbrain 的不当行为,让你感到不安。你的整个有机体本应作为一个整体工作,却变得杂乱无章。你不暖和的时候会出汗,不冷的时候会起鸡皮疙瘩。内分泌腺停止正常功能。血液化学的微妙平衡被扰乱,这反过来又进一步扰乱了你的身心正常运转。你的胃,你的肠,你的膀胱,肺和心脏正常工作。你的血压可能会变得异常低,或者像火箭一样迅速上升。当你应该放松的时候,甚至你的手臂、腿部、背部和颈部的肌肉也会紧张。所有这一切,因为你相互矛盾的情绪已经把一种破坏扔进了你 interbrain 的机制,这个器官的神经细胞已经停止调节你身体的活动,使身体的各个部分彼此保持同步,正如你所说,你的神经都被击伤了。
长期以来,人们一直认为情感冲突会导致身体疾病。新尤克城拜占庭医院的H·弗兰德斯·邓巴博士已经证明,不愉快的情绪会导致身体组织的变化,这种变化我们称之为身体疾病。在某些情况下,胃溃疡是大脑间紊乱的结果。心脏病可能是另一个原因。这些情况还有很多其他的——当由情绪不安引起时,被称为心理因素。心灵是疾病之父。
这是一个典型的例子。一名妇女在医疗机构四处奔走了三年,寻找治疗粘液性结肠炎的方法。她时而腹泻,时而便秘,时而腹痛,大便中有粘液,有时还有血。她被告知要卧床休息,去佛罗里达州,不要出门去打高尔夫球。她试过各种饮食。她的结肠已经用几加仑的水冲洗过了, 有个有进取心的人给她吃了酸奶,然而,她并没有感到宽慰。她直肠内的溃疡已经涂上了防腐剂,但结肠内的手术并没有治愈她。
我鼓励她告诉我她的人生故事,让她在在生病上的冲突情绪立刻出现。她说,三年前,她和一个男人有染,她担心她的丈夫会发现。这个男人住在她去过的另一座城市。从那以后她再也没有见过这个男人,她的丈夫也不认识他,他们见面的可能性很小。我观察到,三年是一个很长的担忧时间。
事实上,她想告诉她的丈夫是为了要报复他。他是一个严厉、冷漠的人。而她是那种需要温暖和关爱的依赖型的人。在她的潜意识里,她想为自己的轻率行为向丈夫道歉。但她甚至不敢告诉他,她害怕说出真相。
我见到他的丈夫后,我建议她把全部真相告诉他。这伤害了他的感情,使他注意到了她——这是他多年来忘了做的事情。我猜他的痛苦可以给我的病人带来一种苦忧参半的满足感,使他能消除过去的纰漏。无论如何,一个场景,一个和解,这位女士三年的黏液性结肠炎立即停止,肠道黏膜溃疡在几天内就治愈了。
精神粘液性结肠炎通常被认为是一种心病或精神病性疾病, 但这只是由 interbrain 行为不当引起的胃肠道疾病之一。
胃肠道本质上是一条长而中空的肌肉管,从口延伸到肛门。它包括食道(食道),胃,小肠和肠道。这根管子内衬粘膜,就像你的口腔内部一样,但管壁是由肌肉纤维构成的,就像你的脸颊一样。
假设每次你坐下来吃饭时,你都会受到强烈的恐惧。你的唾液腺,像狗和猫的唾液腺一样,会停止分泌。你可能不知道,但是你的胃腺会停止分泌盐酸。胃肠道的肌肉壁会痉挛,像拳头一样闭合。过了一段时间,痉挛和分泌不足就会成为习惯,在没有特殊惊吓的情况下就会发生,你会患上精神状态引起的神经性消化不良或粘液性结肠炎。
如果这种对胃壁的习惯性挤压会刮掉其柔软的粘膜,使其暴露在腐蚀的胃液中,这可能会导致胃溃疡,Stewart wolf 和 Harold G. Wolff 博士有难得的机会看到这种情况发生。在他们的实验室工作的是一个瘦小而结实的男人,腹壁上有一个洞直接通向他的胃。他五十六岁,吞下了滚烫的蛤蜊浓汤。结果他的喉咙被烧伤,无法吞咽。外科医生不得不通过他的腹部进行永久性手术。然后他通过漏斗将食物直接放入胃中。他先咀嚼食物,当然是为了启动消化过程,所以他没有失去吃东西的乐趣。听上去很可怕,但他四十七年来一直这样走下去,这告诉我们一些人类有机体的适应能力。
这个报告出现在1942年11月7日的《美国医学会杂志》上。一周后,塞缪尔-莫里森和莫里斯-莫里森医生报告了280例十二指肠溃疡病例,这些病例与包括过度敏感和过度易感在内的完全人格模式有关。
冯德拉博士发现,除了心里原因以外,脑间的血也会导致胃溃疡,这是对大脑神经疾病或不当行为引发结果的又一指点,得出的结论是:治疗不应仅仅包括处方饮食和碱液,还应该对根本原因的治疗,即 interbrain。
从 interbrain 再到胃,神经刺激的过程一直在进行。这在很大程度上适用于怀孕期间的恶心。先锋女性没有时间“晨吐”, 但当一个现代女性有理由相信自己怀孕时,她会向一个朋友吐露心声,她会问:“早上你觉得恶心吗?”
一位病人抱怨她已经三个月没有月经了。“一定是腺体,”她说。“我知道我没有怀孕。当我怀孕的时候,我的胃不能有任何东西。”。
我给她做了检查,发现她已经怀孕三个多月了。“大约一个月后你会感觉到你的宝宝在踢你肚子,” 我告诉她。
“快” 她喊道,“给我拿个盆来” 然后把她的晚餐弹翻了起来。
旧金山的威廉博士安排了事情,这样他就可以在病人情绪激动的情况下直接观察食道痉挛。他把一根装有微光和透镜的小管子——一个食道镜——插入病人的喉咙,这样他就可以看到他们喉咙的内部。然后,通过口头暗示,他唤起了各种各样的破坏性情绪,如悲伤、焦虑、担忧和恐惧。病人的整个食道都会痉挛。当预先设定引发热情、满足和幸福等情绪的建议时,热情、满足和幸福就会呈现出来,痉挛就会放松,食道内径立即变宽。
博士用同样的技术手段来检查气管,即从喉咙通向肺部中空肌肉管。 这些管子因情绪暗示而痉挛或者放松。这难道不让你想起那个对玫瑰“过敏”的男人吗?
与食道一样,从气管通向肺部的管道也是肌肉发达的。它们是你的支气管,你有多少次看到孩子们因恐惧或惊讶而喘息?事实上,这样的喘息构成了你对生命的致敬。快速深吸一口气,然后屏住呼吸(使支气管痉挛)。如果这种习惯变成一种常规的、无意识的习惯,你就会患哮喘。我知道痉挛已经被一个无法解释的词“解释”了,那就是过敏。有些人对某些物质或情况产生习惯性的身体反应,导致他们的器官行为异常。这些物质——或情况——会产生毒素,从而引起手足痉挛。受害者无法放松肺部以正常呼气。我见过很多哮喘病例,包括一位对玫瑰敏感的绅士,他对玫瑰过敏是社会性的。由于花粉和其他物质导致的过敏性哮喘治疗失败,这些病例在心理治疗下在几个月内痊愈。
然而,持续一段时间的习惯性支气管痉挛会导致肺部发生严重变化。气室被拉伸;气室之间的组织出现疤痕和增厚。肺部变得容易感染。interbrain 会永久性地损害肺部。
情绪会使您的肌肉紧张,从而产生背痛等症状。我在早期的医疗实践中发现了这一点,当时我被要求为患者治疗颅底疼痛。 X光显示没有关节炎。他没有糖尿病。他的扁桃体是没事的。他的牙医向我保证他的牙齿非常完美。尽管如此,他还是感到疼痛,所以我给他进行了透热疗法,以初步诊断为肌肉拉伤。
在我跟他谈论他的治疗方法时,我们变得更加熟悉了。他有一份好工作,结了婚,他妻子的哥哥住在他的家里。他皱起鼻子的样子使我忍不住问他:“你的姐夫怎么了?”
我的病人说:”说起他,我觉得他像个跟屁虫。他是个心地善良的人。他对我妻子很好,但他在我身边时,我的灵魂不能称之为自己的灵魂。他告诉我在杂货上花多少钱,如何抚养我的孩子–如何安排家具。啧啧。我觉得他就像一个在自己家里的寄宿者。他帮了我们很多,我不应该这样说他。在某种程度上,我也为他感到难过。 尽管如此,对我来说,他只是一个麻烦。”
脖子疼!头骨底部那种无法诊断的疼痛!我打电话给他的妻子,当她来我办公室时,我告诉她:如果她想要一个健康的丈夫,她应该为她的兄弟再找一个家。
在他的下一次就诊中,我的病人看起来焕然一新。“上一次治疗肯定是让我好起来的,” 她说,“脖子上的疼痛也消失了。” 当然,是去新的公寓。
从那以后,我更加关注我的患者在描述他们的症状时使用的词语。并非所有的心痛都是心绞痛:有些可能是由任性的引起的。脚冷可能是某些动脉疾病的症状:它们可能是习惯性恐惧的表现。当一位年轻的打字员告诉我“一切都让我感到恶心”时,我发现她没有胃溃疡,没有胆囊疾病,但对她的母亲感到厌恶,她(据我的病人说)对女孩的父亲不忠诚。虽然导致头痛的原因有很多,但一本有红墨水的账本往往是商人抱怨的头痛问题。
是的,情绪紧张会产生身体症状,其中一些会发展成难以治愈的永久性组织变化。让我们回到肌肉酸痛作为大脑间紊乱的症状上来。恐惧或仇恨怎么会导致背痛?神经紧张如何导致肌肉组织的永久性变化?
你知道情绪是一种行为,是你用你的整个身体做的事情。紧张你的肌肉是情绪行为的一部分。肌肉紧张确实是情绪的共同点。芝加哥大学的 Edmund Jacobson 博士说,当你的肌肉完全放松时,你不会感觉到情绪,他是 100% 正确的。
当肌肉收缩时,它会缩短。这会自动缩短覆盖肌肉的结缔组织膜,就像弹力袜一样。这种结缔组织(它使肉变硬)被称为筋膜。下次给烤肉加碳水化合物时,可以仔细观察。即使不好吃,也很有趣。当筋膜过厚过短时,患者的这种情况称为肌肉束缚。习惯性的肌肉紧张最终会导致永久性的筋膜缩短和增厚。
筋膜有一定的伸展性,但没有太多。突然伸展背部肌肉的筋膜,它会撕裂,让你腰痛或腰痛。令人惊讶的是,大量的腰痛是由筋膜缩短引起的。通过调查这些案例,我发现很大一部分来自与情绪态度的习惯表达相关的姿势缺陷。
查理·卓别林的艺术展示了每一种恐惧或悲伤都有自己的肌肉张力或姿势。身体逐渐呈现出习惯性的情绪紧张状态。然后,为肌肉提供外部支撑的筋膜变成了限制运动的僵硬框架。皮肤变厚、变短会导致疼痛和严重的腰痛。
当筋膜通过医学指导的练习逐渐伸展时,精心挑选并为每位患者单独分级,当情绪态度和姿势得到纠正时,这种背痛通常会消失。
当然,所有的腰痛都不是筋膜缩短的结果。腰痛可能由多种疾病引起,包括扁平足、关节炎或牙齿脓肿。另一方面,正如波士顿的弗兰克·奥伯博士所表明的,筋膜缩短不仅会引起腰痛,还会引起坐骨神经痛,因为它会对僵硬筋膜和肌肉之间的神经产生张力。在这种情况下,过度生长的缩短筋膜就像疤痕组织一样,挤压坐骨神经。奥伯博士的运动设计巧妙,经常拉伸筋膜,使神经免于紧张。如果失败,他的简单手术会延长筋膜,立即结束神经疼痛。
肩部和肋骨之间的疼痛通常由肌肉紧张和筋膜缩短引起。这些肌肉紧张通常发生在睡眠期间,也就是一个人应该最放松的时候。清醒时部分控制的情绪习惯模式在睡眠时得到充分控制。然后,肌肉开始痉挛,因此,患上大脑间疾病的人不会醒来得到休息,而是醒来时感到疲倦和肌肉酸痛。洗个热水澡和发个好消息可能会暂时缓解压力;但治愈方法来自于情绪行为模式的消散,这种情绪行为模式使肌肉习惯性紧张。
颈椎病是一种特殊的情况,患者的头部旋转,使他只能看一侧,不能把头向前转。这种情况可能是由于颅神经受到刺激所致。这也可能是心理因素造成的。下面的案例说明了情绪紧张会产生更多的器质性病理。
我的颈椎病患者曾是一名簿记员。他认为他的雇主怀疑他偷东西。他生病了,不得不辞去工作,并出现了颈椎病。他说这种情况是在他工作时开始的。他一直看向右肩,无法将头转直。
在治疗期间,他有了足够的洞察力,意识到他扭曲的脖子是恐惧的象征。他不停地回头看,看是否有人在监视他。但他为什么要害怕被发现,甚至怀疑呢?因为他想偷,但不敢。他是一个在无人追赶时逃跑的恶人。这就是他行为模式的冲突,诚实和不诚实之间的冲突,偷窃的欲望和对被发现的恐惧。从中产生了他被监视的想法。他想被监视,以保护自己不受自己错误冲动的伤害。他的愿望引发了这一想法,并使他成为警察。
但在他有了洞察力,并通过心理治疗治愈了他对偷窃的欲望之后,他那扭曲的脖子仍在继续。旋转头部的肌肉缩短了。绷带不平。让他们恢复正常是另一项工作。心因性疾病已经被结构化了,因为它在他缩短的颈部肌肉中得到了象征。
身体,无辜的旁观者,在脖子上,在背部的小部分,在肩胛骨之间,甚至在心脏都在相互冲突的情绪混战中。在洛杉矶拉巴农医院的雪松医院,我听到一位伟大的心脏病专家说高血压是一种文明病。所涉及的机制很简单。每个人都见过朋友的脸色变白,要么是恐惧,要么是兴奋。发生了什么事?就是这个,脸上的血管是肌肉管。由于恐惧,这些肌肉收缩,将这些管子的内径压缩到几乎没有。结果——脸上的皮肤没有血。如果相同的过程发生在包含许多血管的器官中,则血液从心脏的流动受到阻碍;它必须泵得更快、更用力,才能迫使血液通过这些突然变小的血管。结果是血压升高。
我看到血压仅仅因为兴奋就上升了五十。我在放松前后测量了血压,经过 20 分钟的有控制的休息,我的血压从 160 点下降到了 120 点。
这些组织是肌肉和腺体的细胞,由血液向它们购买的食物提供营养。血液是身体的运输系统,通过血液,化学物质被带到需要它们的细胞,这些细胞的废物被带到身体可以清除的部位。身体的每个器官都有自己的血液供应,包括心脏。
当心脏血管痉挛时,我们称之为心绞痛。这种心痛在神经疾病中很常见。像“心痛”这样的表达方式证明了这种麻烦的发生频率。
如果疾病随着疼痛而停止,情况可能不会那么严重。不幸的是,事实似乎并非如此。从可以治愈的血管痉挛到不可逆转的心脏病只是时间问题。这么多日复一日在无法忍受的压力下工作的外科医生死于心脏病绝非巧合。他们的职业简直令人心碎,而冠状动脉硬化(心脏动脉硬化)似乎是他们的职业病。
但事实并非如此。许多外科医生经历了一个又一个紧张的情况,心脏没有特别的磨损。这些人已经学会了控制自己的情绪,学会了用大脑和手进行操作,而不是用血液和肠道。他们把所有的心都投入到工作中,除了心肌。
情绪压力导致的血管痉挛会产生奇怪的结果。其中一种被称为雷诺病,指、手或脚变白、变冷、变麻木。在某些情况下,情况非常严重,所有的血液都停止流经动脉;组织得不到营养;结果,他们在一种叫做干坏疽的情况下饿死。
在类似的情况下,皮肤可能变得如此增厚,以至于患者无法弯曲手指或合上手。这就是所谓的巩膜病。还有许多其他皮肤疾病是神经性的,但我只提到两种是由神经性血管痉挛引起的。
我们过去认为疾病导致不快乐。现在我们发现不快乐是疾病的原因,甚至是那些与特定细菌有关的疾病。Arlie V.Beck博士在一项针对1667名因感冒或感冒而接受治疗的哈佛学生的研究中指出,“在我们对人的攻击中,必须更普遍地认识到生活紧张所起的作用。”每一位鼻疾病专家都认识到了鼻神经症,一种由于情绪不安而导致眼睛流泪和鼻粘膜分泌液体、肿胀和发炎的疾病。这为细菌入侵创造了条件,而健康的组织会对细菌进行复制。
一个 10 岁的女孩是两个紧张不安的格雷曼难民的独生女,她因眼睛发炎在诊所接受了数周的治疗。当我检查这些眼睛时,在称为结膜的透明薄膜上只有几处红色。然后我检查了她的喉咙。她的扁桃体大大扩大,感染了,腺样体几乎阻止了她通过鼻子呼吸。我建议她切除扁桃体和腺样体。她开始哭了。几乎是一瞬间,她眼中的青筋就变得通红,几乎看不到白色的部分。 “看,”她的母亲哭了。 “这就是我说的麻烦” 她的结膜炎是一种血管神经症,一种由恐惧引起的疾病。如果它变成慢性的,她的结膜会出现疤痕组织,这种情况被眼科医生称为翼状胬肉,只能通过手术治疗。这只是另一个例子,说明血管神经症如何导致疤痕组织的形成——紧张如何在改变的身体组织中持续存在。
病态的头脑不会让身体正常工作。它会导致可能变得永久性和严重的变化。忽视对作为致病原因的情绪因素的重视,将导致未能及时预防。
iterbrain 不当行为的症状是身体机能失调的症状。他们是由细菌和意外伤害引起的。肩胛骨之间的疼痛可能是由肺结核、胸膜炎、刀刺或良心不安引起的。虚弱、食欲不振、过度疲劳、体重减轻和低血压是 interbrain 行为不当的症状。但这些症状与我们称之为糖尿病的疾病、肾上腺结核以及癌症并不矛盾。腹部症状通常导致“探查性”手术,切除无害的阑尾或卵巢。
现在是发出非常重要警告的时候了。因为神经问题会引起与其他疾病完全相同的疼痛和不适,除了受过医学培训、诊断经验丰富的医生外,任何患者都不应咨询任何人。患者可能认为他“只是紧张”,去看心理咨询师进行治疗,而一直患有毒性甲状腺肿或糖尿病。
精神科医生首先是受过医学训练的医生。他大概是个称职的诊断专家。此外,他还受过心理学和其他心理科学方面的专门训练。但他的知识和经验并不局限于生物学的这些分支。他非常详细地了解身体的结构,以及它在健康和疾病中的工作方式。精神病学家在考虑治疗精神疾病之前,总是确保他的病人没有患上胃病、心脏病或肺病。有时,他通过改善患者的总体健康状况来帮助患者改善心理状况。
一位患有神经衰弱的年轻女子身体非常虚弱,无法考虑进行心理治疗。她得到休息,规定饮食,并服用胰岛素以改善食欲。在这种疗法下,她体重增加了,感觉更强壮了,在短短几周的时间里,她的整个心理态度都发生了变化。建立她的身体是治疗她生病的大脑的基础。健康的途径可能有许多不同的交汇点。它的方向应该只留给受过普通医学训练的人,而不是缺乏必要知识的“心理学家”。如果一位心理学家想行医,而医学界也有很多这样的人,让他先学习医学或在医学指导下工作,扮演医生是一种危险的消遣。
医生们越来越倾向于意识到并接受心理科学在疾病治疗中的作用。一些疾病是“有机的”,而另一些疾病是“功能性的”这一古老观念正在迅速消失。精神和身体之间没有分界线。身体在任何情况下都是一个整体,是一个有机体;任何影响该生物体的疾病或状况都是有机体。因为影响一个人思维的身体物理变化和化学变化并不总是能在显微镜下或试管内证明,也不能证明它们不存在。也许显微镜不够强大,化学测试不够精细。
现代医生对病人的身体状况的科学兴趣与他们对血液计数和尿液分析的兴趣相同。当科学医生找不到导致肌肉酸痛的原因时,他不会开阿司匹林。许多聪明的病人不想通过服用阿司匹林来掩饰自己的症状。他们希望自己的问题得到一个直截了当的答案。他们想知道肌肉酸痛的原因,并希望对原因进行治疗。神经系统生理学被认为是医学中的一个新领域,这门科学中有许多悬而未决的问题。但有一件事曾经阻止医生使用可获得的知识,那就是他们的态度——一种不科学的态度,以及原始恶魔学的宿醉,即精神以某种方式与身体分离。如今,很少有医生会在他们应该从大脑紊乱的角度思考时谈论“病态的想象力”。
神经系统的功能是调节。通过我们的神经,我们获得了对环境的感知,通过我们的神经,我们适应了环境。我们看到火就后退。我们看到食物就走到桌边。我们可以称之为外部调整。但我们的神经做的不止这些。通过神经系统的功能,身体内的活动是协调的。当我们进行剧烈运动时,心率和振动速度会加快,以适应组织对氧气需求的增加。我们称之为内部调整。在健康方面,外部和内部调节共同作用,身体和精神的活动是一体的。健康的人对自己和环境都很平静。
interbrain 负责内部调整。它调节血液中微妙化学平衡的稳定性;心跳的力量和节奏;通过动脉的血液流动;排空胃;身体腺体的分泌物。大脑间神经的不当行为会破坏内部调节,干扰外部调节,并在身体其他器官之间造成身体紊乱。许多身体疾病的基础是大脑间神经细胞的工作方式,当它们以错误的方式工作时。精神问题会让你生病。这是因为精神问题本身就是一种身体疾病,由对立类型的器官行为之间的碰撞,或者,正如我们前面所说的,由相互冲突的情绪之间的碰撞引起。
大脑是一个器官,一个调节器官。它的功能影响身体其他部分的功能和结构。当它运行良好时,你的其他器官会比平衡状态更好。当它停止正常运转时,身体的其他部分就失去了运气。要想身体健康,你首先必须正确对待你的大脑。
本文为大卫芬克书籍《消除神经紧张》翻译的第二章,你可以在线阅读,关于消除神经紧张pdf电子书原版可以在公众号「wistbean」发送「消除紧张」获取。
条件反射只是情绪习惯的另一个名称。我之所以提到这一点,是因为陷入困境的人有着他们最不愉快地意识到的情绪;他们认为,条件性反射适用于狗和心理实验室。当然,你可以继续谈论条件反射;当我忘记的时候,我可能也会使用专业术语。但我有兴趣解释陷入困境的人的神经疾病,以便教会他们如何照顾自己,因此我将满足于使用家常的表达“情绪习惯”来代替“条件反射”
当狗一看到食物就流口水,并经历了所有其他意味着恐惧的动作时,它们的行为是情绪化的。Pavlov 证明,这种情绪体验不仅可以由食物引起,还可以由一些与饮食无关的刺激引起。他的实验证明,情绪习惯之间的冲突会导致我们精神崩溃。我们已经在狗身上看到了这一点。这就是情感冲突在 Aranda 身上的表现。
她最强烈的情绪习惯与两种伟大的爱联系在了一起,第一种是爱她自己,第二种是是爱她的女儿。从童年开始,享受社会的尊重就成为了她生活中最大的满足,当她富有的丈夫去世时,她作为一位显赫男子的妻子所享有的社会地位也随之消失,她是一个过时的人,她只是另一个有钱的寡妇,需要抚养一个小女孩,她觉得,不管对错,现在要重获重要地位的唯一机会就是通过她的女儿。因此她给他的女儿所有机会——舞蹈课、聚会、正确的邻居、正确的朋友、正确的私立学校、骑马课、网球、高尔夫,让她嫁给女婿,重新树立母亲的自尊心。当然,她并没有那么冷血的把它说出来,她只是希望女儿有个适合的婚姻。“为了女孩自己,你懂的”,但在潜意识中,她被自己根深蒂固的行为模式所引导,即通过家庭成员的成就来寻求社会尊重。
好吧,她有这么多优点,结果证明这个女孩是一个相当不错的人。她上了大学,学会了独立思考,嫁给了山姆海军的一名士官,而不是一名菲律宾男仆。
这位母亲心里明白,这个女孩做了一个明智的选择,她也知道,她一生的努力、她珍视的计划和策略都是“为了这个女孩”都浪费了。
“士官”,她哭了。“士官!”
她对女儿的爱和对社会地位的热爱这两种情感习惯之间的冲突并不是微不足道的。她神经完全崩溃了。一年多以来,她无法控制自己的情绪,她经历了地狱般的痛苦。
“我希望我的女儿快乐,”她一边说,一边哭着说,“我想要一个我可以吹嘘的女婿。”
当然,这些冲突并非出于意识层面。这位母亲只知道她心烦意乱,无法入睡,而且体重在减轻。实际上,她并没有将情绪冲突与身体症状联系起来。她咨询了医生,因为她认为自己可能得了癌症。在这种情况下,人们常常自己想出这样的诊断。
对立情绪之间的碰撞是每个神经症的根源。更重要的是,许多人在某种程度上遭受了他们无法控制的情感冲突。在这个程度上,他们比需要的更不快乐和无效。无数男女,无论贫富,都过着不必要的挫折和绝望的生活。无数人拥有巨大的思考、感受和行动的可能性,但他们从未在思想或行动中表达出来,由于他们没有实现的能力而感到不满意,他们在远远低于其能力的思想和行动水平上悲惨地生活。
获得情绪控制的第一步取决于理解情绪习惯的本质。很多人谈论情感就像谈论电视一样激动人心。就电视而言,这是令人满意的,因为大多数人永远不会被要求修理或购买电视机。然而,情绪习惯模式不能交给专家。专家只可以建议,可以告诉你如何处理情绪冲突。为了解决这些问题,每个病人都必须自己照顾自己。因此,如果你想知道如何控制自己的情绪,你就必须了解自己的情绪是如何运作的。
恐惧是典型的情绪,容易理解。当你害怕的时候,你认为你看到了某种威胁。你觉得有什么东西会伤害你。可能只是纸玫瑰。 Pavlov 的狗被教导害怕无害的声音,就像他们害怕电击一样。在一个遥远国家的战争难民,每当听到头顶上有飞机的声音,他们就会继续躲避,而他们的血液会凝结,他们的肉会爬行。你害怕的原因在你嫂子看来可能很愚蠢。但是情绪是不理智的,如果你已经学会在任何特定情况下看到危险,你可能会在每次意识到这种情况时感到害怕。
意识到危险并不一定是恐惧。恐惧是令人不快的,但对许多人来说,危险的意识是令人愉快的。出于这个原因,公园大道上有的人们爬山,有的人坐过山车。他们喜欢觉得自己是危险处境的一部分。更有想象力的人会有自己的生活习惯,总是感到安全是无聊的。这种危险感,无论是在过山车上,还是在与一个有魅力的人调情,或者因为一只灰熊,都会给人一种肉麻的刺激。
恐惧是生理和心理过程的复合物。除了对危险的意识,还必须加上更多的东西。你准备逃跑时的身体反应会带来更多的东西。危险,加上肌肉紧张,使膝盖震动和背部颤抖,是恐惧。危险,再加上眼球的灼热和膀胱的干燥,就是恐惧。这些身体上的恐惧反应是在神经系统的指导下进行的,神经系统也参与了复杂的恐惧行为。恐惧是一种身体和精神上的活动,其动机是迅速的战略撤退。
很容易认为恐惧就是你的感受。当然,恐惧不止于此,当你的膝盖敲打、双手颤抖、额头出汗时,你会感觉到这些不愉快的感觉。你非常清楚胃里那种下沉的感觉。你所有紧张的肌肉和翻腾的内脏都在向大脑传递信息,让你产生与恐惧有关的不愉快情绪。但是,虽然这些感觉是恐惧情绪的一部分,但它们并不是恐惧情绪的全部,甚至不是恐惧情绪的大部分。恐惧是你用你的整个身心所做的事情。你所感受到的只是你的身体和头脑为你的逃避所做准备的一部分,你所感受到的只是整个情绪中的一个成分。
让我们回到这位母亲和她的恐惧。她害怕朋友们会对她女儿的婚姻说些什么。所以每次她遇到一个朋友,她都想逃跑。她的嘴干了。她的眼球感到热。她的膝盖发抖。双腿的肌肉感觉很虚弱,好像变成了果冻。她的心怦怦直跳。她会出汗,当她在角落里躲开人群时,她的手和脚都感到冷。她的呼吸会变得急促,她会发现自己气喘吁吁。她的胃、肠甚至膀胱都会痉挛。尽管她没有意识到这一点,但她的内分泌腺体正在尽自己的力量来跟上身体的其他部分,肾上腺正在将它们的分泌物倾注到血液中,而肾上腺素正在驱动她肝脏为她疲惫的肌肉提供不必要的营养。
50年前,威廉詹姆斯说,你不会因为害怕而跑,你害怕是因为你跑了。他说的是有道理的,因为感觉是跟着身体走的,对这位母亲来说,朋友就意味着恐惧,而恐惧就是因为她整个身体所做的事,这位母亲“跑”了。
不反思的人会说他们做事是因为他们经历了恐惧,就好像恐惧是一种物理现象,比如警察的棍棒或汽车喇叭。他们将情绪过程与刺激或自己的感觉混淆。他们没有意识到恐惧是整个有机体、身体和大脑对某些可怕情况的反应,他们不会说他们走路是因为人行道,也不会在走路的过程中识别他们走路的感觉。走路只是他们做的事情之一。恐惧只是他们做的另一件事,也是他们事后经历的另一件事。
不反思的人会说他们那样是因为他们经历了恐惧,就好像恐惧是一种物理的东西,比如警察的棍棒或汽车喇叭。他们将情绪过程与刺激或自己的感觉混淆。他们没有意识到恐惧是整个有机体、身体和大脑对某些可怕情况的反应,他们不会说他们因为人行道而行走,也不会在走路的过程中识别他们走路的感觉。走路只是他们做的事情之一。恐惧只是他们做的另一件事,也是他们事后经历的另一件事。
那么我们称之为恐惧的情绪是什么呢?这不是一件事,而是一个过程,我们分五个阶段来做,首先:我们感知危险。第二:我们渴望逃离。第三:身体反应遵循前两个智力因素。第四:一些身体反应会激起不愉快的感觉和感觉,我们会摆脱这些感觉和感觉,并由此产生第五:在安全中寻求解脱的第二动机。如果安全是不可能的,这些次要的感觉可能会变得如此强烈,以至于产生瘫痪的恐怖。
当你停止这五项活动中的任何一项时,你就结束了恐惧。当你听到客厅里不寻常的声音时,你害怕窃贼。你从头到脚摇摇晃晃地往里看, 发现只有一扇窗帘在风中飘动。这真是一种解脱:结束了对危险的恐惧。你在恐惧的第一阶段就消灭了它。
你害怕爬山。一想到坎尤边缘的狭窄小径,你就不寒而栗。在你这样做了几次之后,你可能再也不想逃避这种情况了。你要学会享受危险。你会从你意想不到的登山天赋中得到乐趣,恐惧就会消失。
你害怕未来。你学会了如何放松,并间接地放松了让你抽筋的器官。我们稍后会解释这一点。没有有机反应,就不会再有恐惧。
如果没有对危险的有机反应,就不会产生令人不快的反应,从而产生人们称之为恐惧的感觉。脑外科医生可以通过切断器质性反应的神经中枢和意识中枢之间的联系来结束习惯性恐惧。这是极端和不切实际的,但它清楚地表明,通过停止恐惧过程的任何一个阶段,恐惧都会被消除。当你停止做构成恐惧过程的任何一件事时,你就没有寻求解脱的第二动机。
接下来,你将得到详细的指导,不仅要控制恐惧,还要控制你所有的情感上的疑虑。因为这是所有表情素的模式。在寻找不快乐的根源时,我们所谓的心理过程的有机本质通常被忽视。但我已经谨慎地强调了这一点,因为它在治疗中的重要性是根本性的。
器官行为的组合太多,无法统计。可以命名的情感数量没有限制。恐惧、恐怖、沮丧、恐慌、敬畏、恐惧和恐慌只是与危险意识有关的少数几种。伴随着愤怒、爱和嫉妒,器官反应的变化过于微妙,无法准确识别。所有的情绪,不仅仅是恐惧,还有所有的情绪,都是由有机反应的斗争组成的,我们很快就会看到,这些反应笼罩着大脑。
想象你的每个器官在被唤醒或减慢时都能发出特定的声音,你的心脏、呼吸器官、汗腺、胃、肠道、泪腺,每一个都可能被认为有其特有的音符。如果将其中几个组合在一起,从而产生一个声音组合或和弦,这将是情绪反应的等价物。有些直肠的组合会让人愉快,甚至会让人欣喜若狂。其他组合将难以诊断。器官行为的组合在数量上是无限的。这些,存在的或听不到的,构成了你的情绪范围。
人类的情感习惯比狗的情感习惯对训练更敏感。想想所有能让你的身体在恐惧节奏中摇摆的事情。我们不仅害怕真正危险的事情和情况,而且在闲暇的时候,我们还故意发明一些吓唬自己的东西。我们的大多数恐惧与身体危险无关。它们涉及影响我们适应一个由困惑的人组成的混乱世界的情况。在我们的人工经济中,我们担心煤气工会切断我们做饭的火;我们也担心,我们会在人造恶魔的地狱之火中被烤焦。我们一生中的大部分时间都像被困在剧院火灾中的人一样四处奔波。即使没有精神崩溃。我们经常处于紧张状态。
想想很多能让我们生气的情况。或者嫉妒,或者激发爱的情感。狗过着平静而平和的生活,但我们两足动物有强烈的情感,即使我们很好地适应了环境。我们的心脏、胃和腺体处于持续的情绪骚动中。难怪人类动物比这个星球上的任何其他物种遭受的疾病都要多。我们的神经扰乱了我们的身体。
神经控制着我们所有的器官。这些神经主要集中在神经系统的一个部分中,而这部分神经系统是中枢控制系统,通常应该使我们的心脏、胃和肺相互协调工作。我们情感生活的这个神经中心被称为间脑。
熟悉这个词,interbrain。在接下来的几年里,你会听到很多关于它的消息。您会听到以许多不同的名称提及它,因此我将告诉您其中的一些名称,以免您感到困惑。你可能会听到它被称为丘脑和下丘脑,因为这是它最重要的两个结构。那些喜欢用希腊语点头哈腰的绅士们会把它称为称为间脑。但我喜欢 interbrain 这个名称。部分是因为它是英语,部分是因为 interbrain 告诉你它是什么。它是位于现代高度文明的前脑和更古老的身体下级神经中枢之间的大脑。
让我来给你介绍一下 interbrain,这里是你情绪的所在地。爱、恨、恐惧、愤怒、嫉妒,连同他们的各种有机行为,都是从这一点开始的。甚至性也位于你神经系统的这一部分。一些研究人员对豚鼠的 interbrain 进行了研究,此后,即使是这些感情丰富的小动物,对彼此的兴趣也不过是柏拉图式的。这或许可以解释为什么紧张和阳痿经常同时发生。
Aranda 的神经性消化不良就是由 interbrain 行为不当引起的,他的黏液性结肠和痉挛性便秘也是如此。资深的博士表示, interbrain 的情绪风暴会导致胃溃疡,这就是你导致心悸的原因。哮喘是一种支气管神经症,从这里开始,当你认为这是你的神经系统的一部分,控制你的有机行为和你的情绪,这是符合逻辑的。
interbrain 位于头盖骨的正上方,把你的手指伸进耳朵,你就会对准它。interbrain 的每一半大约有拇指那么大。它很小,但很重要,因为它坐在驾驶座上。
在椎间盘下方是脊髓,这是一条巨大的神经电缆,将脉冲分配到身体几乎所有的肌肉和腺体,并携带向上的疼痛、触觉、温度和肌肉张力的感觉,所有这些感觉都传递到椎间盘,它必须知道正在发生的一切。
在 interbrain 上方是前脑,有时称为大脑,前脑是神经系统最近进化的部分,占据了颅骨内的大部分空间。这是你神经系统中分析、思考、决定的部分,它让你知道世界上正在发生什么。你是用你的前脑来阅读你的报纸的。你的前脑解释一般情况并将其发现发送到大脑间以采取行动和感觉,interbrain 将情况以兴高采烈或抑郁的形式报告回前脑。当你感到平静、快乐、悲伤或沮丧时,或者当你感到紧张或神经性消化不良时,你知道这一点,因为你的 interbrain 已经告诉了你的前脑它的感受。
interbrain 是做什么的?它有什么好处?
它使前脑、肠胃、眼睛、耳朵、肌肉、心脏、肺和甲状腺作为一个团队一起工作。 它使你的各种器官不会互相说:”你走你的路,我走我的路。”它使身体和心灵作为一个单位一起工作。
例如,以 pavlov 的狗为例,胃会向 interbrain 发出信号,表明可以接受少量的食物,interbrin 接收到信号,然后将其传递给前脑。狗意识到极饿,开始寻找食物。随之而来的是 pavlov 带来的圆形牛肉。狗看见了肉,闻到了肉。信号传递给前脑,前脑乐观的解释了情况,从前脑的视觉和听觉中心,传递到 interbrain,“吃的来了!”,interbrain 开始向整个身体发出命令,跟唾液腺说:“开始分泌唾液”,跟胃说:“开始分泌盐酸,开始你的消化节律”,对腿部和身体其它肌肉说:“嗨起来,舞起来,抑郁症已经结束了!”
当铃声随着晚餐的到来而跟着响起的时候,狗的前脑听觉中枢开始活动。接着该中枢会把视觉和嗅觉的信息传递给 interbrain,随后听觉中枢会在铃声响起的时候也将消息报告给 interbrain,即使没有食物到来,interbrain 也会收到这些虚假的报告,并导致狗的器官的反应和看到肉的反应一样。
狗的条件反射和人类的情绪习惯训练仅意味着教导前脑(神经系统中负责思考的部分)向 interbrain(神经系统中负责协调所有身体活动并为你提供感觉的部分)发送信息的过程。放你去餐厅点餐,阅读菜单,然后下单,你的整个身体会为你的晚餐做好准备,这是你前脑的阅读和你 interbrain 对身体做出反应之间所做的协调。
interbrain(间脑)是一个繁忙的小机制。它不仅调节你的消化器官。还有你的心脏,你的呼吸器官,你的内分泌腺体。当前脑报告有危险时,interbrain 会使你的心跳加快。它能让你呼吸更快,为你的肌肉提供额外的氧气。它会让你的肾上腺分泌肾上腺素,一种强大的化学物质。进入血流,刺激肝脏和肌肉活动,调节血压。它通过调节流经皮肤较冷部位的血液量来保持体温正常。它甚至能保持你血液中各种化学物质的微妙平衡——这是你继续生存所必需的。
你不知道你的身体在健康状态下有多好,有多自动。一个健康的人通常不知道自己有肾脏、肾上腺、心脏或肺。他从不考虑他们。但在它们自动运行的背后,是 interbrain 是可控的。它管理着你的器官工作,调节人和动物的功能。它知道的比你多,因为在 interbrain 内部存在着博士所说的身体智慧。
interbrain 已经工作了很长时间。早在人类存在之前,我们的前人类祖先就有一个 interbrain 来思考身体。精细而大的前脑占据了你头骨内的大部分空间,并因你敏锐的智慧而备受赞誉,这是事后才想到的。由于这种新进化的前脑,人类与其他动物的不同之处在于他的思维能力更强,而不是猿类没有前脑。他们确实如此,而且他们能够以某种朦胧的方式思考,他们的前脑与你和我的相比要小——这是唯一的区别。但是它们的 interbrain 和我们的 interbrain 的大小几乎相同。
interbrain 以多种方式使得种族保持了活力。当剑齿虎蜷缩在灌木丛中,我们的远古祖先看到他在那里,准备进攻时,正是由于 interbrain 的相互作用,使肌肉产生了弹力,腿得到了速度,身体得到了呼吸,心跳得到了力量,使我们遥远的曾祖父超越了自己和老虎。
今天,几乎所有的事情都可以启动 interbrain 的机制,启动你的恐惧反应。Aranda 看到她的蓝色制服就会感到忧郁,用纸做的玫瑰可以通过 interbrain 向男人的呼吸器官疯狂的发送信号,我知道一个足球教练,她每个周六的早上每十五分钟就得去一趟男厕所,一想到俄亥俄州立大学的猩红色和灰色毛衣,他的大脑就会陷入这样的状态,以至于他的膀胱在一次又一次痉挛中收缩。
当没有人追赶时,你的颤抖并不是 interbrain 的错。只有当你的前脑发出信号时,它才会让你陷入恐惧。当你的器官经历恐惧反应的动作时,你会感受到恐惧的情绪。无论是什么意志力,都与它无关。你的神经,包括长、宽、粗、重等身体因素,都在紧张;大自然已经让你 interbrain 的神经脱离了有意识的控制。
让我们将你的整个身心与一支拥有良好器官的足球队进行比较。14号是你的胃。21号是你的心。77是你的呼吸装置,12是身体的肌肉系统。四分卫组织是 interbrain。
现在这位四分卫在边线上得到了教练的建议。在足球比赛中,直接给建议是违法的,但由于教练是这套装备中的前脑,必须有人为球队做一些思考,我们将放弃规则,让教练告诉 interbrain 下一步该怎么做。
教练前脑发出向前传球的信号,四分卫 interbrain 发出信号,整个团队开始比赛,中锋抢球,中卫接球,两端跑向球场,两个铲球和后卫将对方击出,另一个中进行干扰,持球人讲求传给接球的另一端。这场球进行得很成功,因为他们是经过排练的。
这与身心健康的工作方式相比,身体的所有不同器官必须为了一个共同的目的共同工作,以产生明确的结果。腿、手臂、眼睛、耳朵、胃、心脏、肺,甚至血液中不断变化的化学物质,在每一个动作中,无论大小,都必须协同工作。这是你的 interbrain 协调了它们所有的活动。
让我们回到球队,教练前脑发出了快速踢球的信号,不对,是向前传球。到底是哪一个?他右手示意快速踢球,左手又示意向前传球,四分卫 interbrain 开始感到困惑,他混乱了,发出了相互矛盾的信号。全队都在争论不休,四分卫 interbrain 暂停指挥,他要休息一下。
Aranda 就是一个差劲的教练,她把所有情绪化得分的可能性都放在了一场比赛上,把女儿当作足球用,她打算把她传给某个合格的英雄,从而为自己的自尊争取胜利,这一出戏主宰了她的思想,成为她唯一的执拗。
但足球和女儿都有一种行为不稳定或独立的方式。 Aranda 没有想到这一点。因此,当一名士官拦截了球,并以婚礼的形式在加利福尼亚州跑了一段距离以触地得分时,阿兰达夫人手头没有任何情感资源。她所有的腺体和器质性反应都已习惯于只对一种主要情况做出正常反应。没有了这些,她就无法做出调整。在她混乱的大脑中,她激起了矛盾、嫉妒、愤怒、羞耻和其他一些破坏性的情绪反应。最后,她的大脑无法接受它,崩溃了,崩溃了,拒绝玩能接受它的游戏。
医生称之为精神神经症。
是的,当 interbrain 从前脑接收到混乱的信息时,同样的情况会引发相互冲突的情绪反应,旧的 interbrain 就失去了在身体各个部位之间产生完美自动协调的能力。信号传到器官去做阻碍而不是帮助的事情。胃本应放松时就会痉挛。当心脏应该缓慢而有规律地跳动时,它就会心跳加速或心悸。身体的一个器官对另一个器官起作用。这不是环境的问题,而是内战。不是人类对抗环境,而是人类对抗自己。
因此,Aranda,这位 interbrain 行为不端的患者,去看医生。她可能有局部疼痛。不管怎么说,她感觉很糟糕,她睡不着,什么都吃不下。她对任何事都不感兴趣。她体重在降低,她对生活没有兴趣。她总是觉得累。她不能集中注意力。她脾气暴躁,讨厌恨自己。因为她不明白这是怎么回事,她很害怕。
如果她被告知自己这些问题“全是想象”,她会受到伤害而不是得到帮助。这不是想象,她的问题就像神经系统一样真实,其中一些细胞已经患病。但告诉她没有什么错,只会让患者感到困惑,让她又有了一个绝望的理由。
不久前,我在一家诊所给一位病人看病,他是一个不善言辞、惊恐万分的患者,只说说自己的神经“完全崩溃”了。另一位医生看了我的检查,然后做出了贡献:“他的问题是因为他想太多了,他需要的是被骂醒。”
我倒是想给这位医生一顿揍,因为这位医生缺乏想象力,我很想,但是没有。相反,我正在写这本书。
关于紧张,首先要知道的也是最重要的事情是,它是一种身体疾病。这不是一种想象的疾病,你无法想象自己进入心理健康状态,就像你无法想象自己能治愈断腿一样。如果你很紧张,你必须治疗身体上的东西,你 interbrain 的神经,如果我必须在断腿和严重神经症之间做出选择,我会说,“让我的断腿, 因为相比之下,这样不会很痛苦。”
我知道六周后这条腿就会石膏;八周后我就会好了。在这几周里,几乎不会有痛苦,更多的是同情和慷慨的帮助。紧张不安的人忍受着痛苦的折磨,除了责备和怨恨什么也得不到。他因神经紧张而失去了朋友。
由身体废物组成的毒物会导致大脑神经失常。当一个人过度疲劳,没有足够的时间清除体内形成的废物时,他可能会出现 interbrain 症状,他有轻微的神经崩溃。大脑的神经细胞被激怒了。休息几天,疲劳毒素就消除了,一切又恢复了。
物理的冲击会动摇 interbrain 的神经细胞,产生医生所说的创伤性神经症。任何经历过严重车祸的人都会明白我的意思。饥饿会对 interbrain 做同样的事情。如果血液中没有足够的糖分,则 interbrain 就无法正常的工作。 interbrain 也喜欢被喂食。它不是美食家,但它必须要有食物。
但一般来说,interbrain 不当行为的原因是情绪习惯模式之间的冲突。这种冲突对神经细胞有什么影响?一方面,它破坏了他们传入和传出的时间。时机是协调的本质。当间脑工作不正常时,身体的正常节奏就像一辆汽车,正时齿轮和分配器失灵了。
另一种形式的 interbrain 错误行为是由于它的一些细胞组释放过多的能量,而其他组释放的能量太少。想象一下,如果一个气缸中的混合气体与 TNT 一样强,而下一个气缸中的气体是洗碗水,那么您的汽车会如何运转。
我们也已经看到,有时具有相反功能的 interbrain 细胞可能会同时释放它们的能量。然后同一个器官同时得到一个“停止”和“开始”的信号。因此信号相互抵消,产生一种 interbrain 僵局。在 interbrain 进行的这场拉锯战将阻止任何人前进,使他无法果断地采取行动或思考。interbrain 的任何不当行为都不是直接受自愿控制的。当胃不正常时,人们会意识到自己的胃以及肠子会抽筋,但他们不能说“看这里,胃先生”,因为胃先生听命于,不是来自前脑,而是脑
在或多或少的程度上,我们所有人都有过不当行为。但我们中的许多人已经使大脑恢复了正常功能。 interbrain 的问题肯定是可逆的。这就是许多医生说这种疾病是“功能性”而不是“器质性”的意思。
这种变化不会造成永久性损害,许多人在与神经的战争中获胜就证明了这一点。成功的一半是了解它的全部内容。另一半是做一些积极的事情。
相信你今天看也到了这么一则令人痛心的消息,字节跳动一位 28 岁的算法工程师在健身房心梗猝死,抢救无效,他的心脏不再跳动,不再在字节跳动,不再在这个世界跳动。
28岁的年纪,已经有了一定的积累,生活本该越来越美好,可…,据他妻子透漏,他们有了一个 2 月大的宝宝,但压力也很大,这位工程师需要经常加班,而且每个月还要还 2w+ 的房贷。
好像每隔一段时间,就有类似的新闻出现,给我的感受就是:我们这届年轻人,压力太大了,太拼了。
我有那么一段时间觉得自己很无知,所以也很拼,比如到了饭点随便吃几口就继续工作,挤地铁和蹲马桶时也毫不松懈,在手机上一页一页的看技术书,对自己要求太高了,每天都很高强度的那种。
虽然做出了一点成绩,但现在看来是很不值当的,我有很长一段时间都处于焦虑的状态,有那么一阵我连饭都吃不下,暴瘦,那会的感觉就是,给人随便来一脚,就能把我踢飞到垃圾桶。
尽管相比以前的我已经缓和了很多,不过现在的我还是会阅读一些缓解焦虑的书籍,我也才慢慢明白,我们是需要努力,但不要过度努力,累得不行了就是要去睡觉的,状态不好就是要去睡觉的,不开心就是要去睡觉的。
我之前也经常加班,有个同事每天下午吃完饭后都会去撸一两小时铁,然后回来加班到十一二点,很少间断,说实话我很佩服他的毅力,但有时也会为他担心,当项目赶进度的时候明明很累了他还去撸铁,这不是双重劳累么?我觉得这时候应该躺沙发上小憩一会才好点。
看到这位工程师的妻子压力那么大,更加让我坚定了自己的观点:我是不会买房的。
一来是一线城市的房价高得离谱,我没那么多钱,二来是我不喜欢负债太多,不想被房贷牵着鼻子走,那样的生活是没有活力的。
我觉得租房就挺好的,在我这边,一个月几千块钱,就能租到一个还不错的房子,周边交通购物也都可以。如果住烦了,想换个新环境就可以马上换,经济好点就租个高大上点的房,经济差点就租个小点的房。争取做一个不被房子绑架的人。
可能有人会说,你是还没有成家,等你要成家的时候你就知道了,长辈需要你有房才可以结婚,孩子需要户口才能上学之类的。
确实这种现像很普遍,但对于我这个放诞不羁爱自由的人来说,在我能保障你一定的物质条件下,你还要绑架我,那就是不适合的。除非哪天我有钱到买房跟玩一样,我才会考虑买它。
有句歌词让我印象深刻:
世人慌慌张张不过图碎银几两,百年阳寿殆尽终究难逃黄土里躺。
就图碎银而言,对我来说,多维思维很重要,尽可能地去打造多维的收入,千万不要在一棵树上吊死,上班绝不是唯一的收入路径。
像我,如果我因为不服 996 ,没有碎银了,那么写代码做项目也许有,如果做项目没有碎银了,那么我做的网站还可以有,如果我网站没有碎银了,那么我写公众号还可以有,如果我公众号没有碎银了那么我做视频也许可以有…你懂我意思吧?
那啥,百年阳寿殆尽终究难逃黄土里躺,放松点吧,朋友。
]]>不知道你有没有在睡不着的夜,不小心翻开自己年少时在 QQ 空间留下的痕迹,然后一边看着那些「非主流」忧郁风的说说和自己写下的日志,一边抓着被子,尴尬到无法呼吸,把自己塞进被子里,猛打几个寒颤,对自己大声吼了句:
真特么的SB!!!
这是前两天深夜里的我,不小心翻开了那该死的回忆所做出的反应,这种感觉在另一个场景也挺类似的,那就是不小心翻开了百度云盘里面存着自己以前写的代码,只不过不是骂自己 SB,而是:
那一坨坨的特么是啥??
可能这就是成长吧,所谓成长,不就是总是发现过去的自己的愚蠢么?
我在 QQ 空间里,翻到了一篇十年前写的一篇日志 ——《写给未来的自己的一封信》。
还没点进去,尴尬的气息就开始铺满整个屏幕。
虽然我早已把 QQ 空间锁得死死的,但我觉得还是可以斗胆分享这一封信里的部分内容,来一场跨越时空的对话,还是有点意思的。
尽量让多年后的我回头看这篇时,不会像个妓女似的抓着被子就好。
《写给未来的自己的一封信》,时间 2012-5-10 12:28。
十年前的我对我说:当你回首昨日时,后悔了,如果可以,来现在的我打我一顿,甚至把我至于死地,这样你也不存在了,不过,我会感到不值,替你不值,所以我会尽量让你不后悔,但请容我犯几次错,毕竟我不完美,你是知道的!
如果可以,我肯定飞过去把你这个臭小子捏死。
十年前的我对我说:我不知道你现在做什么工作,也不知道你过得是否幸福,更不知道你的心变成了怎样。但我知道我最近做得很糟糕,不幸福,心也不强!你别失望着先,我跟你说,我今天学到了很多教材以外的东西,我觉得我可以改变现状,我很开心,现在,对,就是此刻,我很开心跟你对话,这感觉有点奇妙,或许有人觉得我是个疯子,但你不这样认为,我知道的,至少还有你。
不行了,我开始尴尬了,怎么可以这么矫情?整得像异地恋似的,不过确实,这种对话有点奇妙,我只能说,我越来越放飞自我了。
十年前的我对我说:痛苦是现实与理想的差距!我知道现在是缩小差距的最好时刻,这也是我现在所能做的,为了你,我愿意,所以,我努力!
你努力个屁,知道我的段子么:「少壮不努力,老大学编程」。
十年前的我对我说:幻想在不切实际的年代让人欢快,而在现实只会让人疼痛!我有时幻想着你过的那般美好,别墅美女什么都就不说了,与心爱的人甜蜜的滋润着家园,幸福的你享受着时时刻刻的爱,笑看着自己的过去,从不为明天焦虑,每一缕阳光似乎是你新一天的幸福添加剂,一年四季似乎是你最想得到的感受,你把雨水写成了诗,把彩虹映在了纸,把阳光化成了冬的暖,你似乎忘记了伤的痛,忘记了别的愁,你悠然自得…我捏了捏自己的脸,回到了现实。
你说,你是不是小说看多了?
十年前的我对我说:我以为我的世界开了花,没想到太阳还没等花儿完全盛开就匆匆离它而去!当花儿看见太阳在照射另一朵花的时候,当花儿流出泪的时候,太阳是否还不知道,花儿喜欢了它很久了?可能等你开口的时候已经晚了,不过我还是把这份感情,留给你去表达,不管结果如何,请你不要太过伤心,因为你沉淀很久的情,可以让它不再拖着你的心!
完全不知道你在说什么,我们现在这个年代不兴这种隐晦的表达,有事直说。
十年前的我对我说:(略过一些内容…把我都整脸红了) “有时候你会处在这样一种境地,你不知道自己要为什么去奋斗,要走怎样的路,要怎样的去生活,你会一时的失意而忘记,或者说不敢想起自己当初的雄心壮志,你回不到过去,也看不到未来。你迷茫,你彷徨,或者你的努力根本就没有成效。相信我,这些都会过去的,在你的奋斗下,不会出现任何的意外,只是有的时候会多一点波折,它们是为了衬托成功的可贵”——《诗》送给你也给现在的自己!
OK,正能量,谢谢,也送给大家。
友情提醒,不要因为看了这篇就去翻自己的 QQ 空间,要不然后果自负。
]]>前几天有网友曝出了深信服提供的「离职倾向分析」监控系统,具体可以监控到员工所访问的招聘网站,比如「boss直聘」、「拉钩网」等等,还可以看到员工投递的简历,以及搜索的关键词,还可以给员工标记想要离职的风险状态,比如「高危」,「疑似」。
有人说,这把员工整得跟病毒似的监控,还是不是人了?
有点技术的都知道,其实公司只要想,不仅可以抓取你想要跳槽的数据,基本上你在公司所搜索的内容,访问的网站,摸鱼的数据都可以抓出来给你分析一顿。甚至有些公司提供的产品,在你截图的时候会给你打上你看不到的水印。在必要的时候,你的这些数据就变成了证据。
所以一般「摸鱼高手」会准备多个微信号或者多部手机,用来应对不同的场景。
有人会觉得,像这样的情况真是没有一点隐私可言,信任度极低,自己在明处,他人在暗处,想想真是恐怖啊!
是啊,你有多少个瞬间,在上班时自己内心骂起了他的娘:「老子不干了,干脆裸辞干自己的事业去」。
以我个人的经验来看,裸辞和盲目地创业都是很傻x的行为。
如果你有这么冲动过,你会发现,人可真是矛盾,墙里的人想出来,墙外的人想进去,还有的人会在门口徘徊,进也不是,出也不是。
不过我倒是觉得,在自己还没有一定资源的时候,班还是老老实实先上着,在工作之余可以多考虑一下自己这个个体的商业模式,就像有些人说的发展副业、个体轻创业,我觉得这些都是个体商业模式。
另外说一句,我并不是搞太懂「副业」这个词,我觉得事业没有主副之分,或者说很多人把「主」、「副」弄颠倒了,所谓「主」应该是最大化的为了自己,上班干的那些事哪能叫主业呢?顶多是为自己的「主业」做准备。
这么说来,自我认知的提升,也是「主业」之一,就好像很多时候,我们只是停留在「使用」和「观察」上,但是如果你在某个时刻突然开窍,转换了一下,把「使用」转化成了「服务」,把「观察」转化成了「创造」,世界立马就不同了。
举个例子,你在使用某个产品的时候,发现有些地方贼难用,你去网上搜了一下,发现别人也都在吐槽,你发掘了细分领域下的需求,你开始变成了一个服务者,做了个网站,满足了这一小部分的需求。而这,就很可能变成了你的「主业」。
而又,你从一个「观察者」变成了「创造者」,那么你就会输出,输出的方式可能是写作,可能是演讲,也可能是制作视频,而一旦你持续输出了对他人有用的内容,你就有了一定的影响力,这也很可能变成了你的「主业」。
如果你只是一直蒙头的上班,做着重复性的工作,你就不会发现信息差能给你带来的价值。
比如有个词叫「Affiliate」,知道它的人并不多,知道这个词并会去研究它的人,他就能发现别人不知道的渠道信息,从而轻松获取利益。这种方式其实在国内近几年才越来越多的产品在使用,比如比较多人熟知的知乎好物,课程分销。
可事实上,有些人早就通过这种方式在赚取美金了。而且对他们来说,如果真的有价值,有时候只需要一篇高质量的文章再加上一些 SEO 的优化就足矣。
放眼望去,人的认知差异所反应出来的行为真是天差地别,有些人总是害怕加入一些大V的付费社群,总是害怕自己被割韭菜,而有的人却巴不得加入,有可能他并不是抱着学习的心态进去的,而是进去链接他人,成为 IP 中的 IP,价值中的价值,妙啊。
好了,今天感悟比较多,可能有些人不知道我在说啥,没关系,总有一天你会明白我在讲什么。
]]>本文为大卫芬克书籍《消除神经紧张》翻译的第一章,你可以在线阅读,关于消除神经紧张pdf电子书原版可以在公众号「小帅b和他的朋友们」发送「消除紧张」获取。
我的手机响了,接着我接听了起来,我所听到的全是爆炸的声音,就像正在进行爆破一样。一名男子在突发性的咳嗽,在间隙间传来了一声喘息:“玫瑰,那该死的玫瑰。我们的女仆把玫瑰放在早餐桌子上,我踹不过气来了,我快要窒息而死了。”
“服用五滴肾上腺素”
“这气喘病要杀了我”,他接着说:“我拿走了你的肾上腺素,这没用。有件事要做,我今天早上八点半到你的办公室。”
接着又是一阵咳嗽和扼制的呼吸。哮喘的发作是可怕的,如果你以前从未见过,不管你目睹了多少次发作,都会令人感到痛苦,即使在电话里,也能感受到这种难受。
哮喘是通向肺部管道痉挛的另一个名称。这些管道或支气管实际上是中空的肌肉。当病人对某些物质过敏时,中空的肌肉管道在吸气后会夹紧,使患者无法气体从胸腔中排出。他咳嗽和喘息,直到脸部发红,额头上的静脉明显肿胀。他感觉到自己正在窒息,而且他看起来很难受。
我从未见过这个病人在我眼前发作。他拒绝了皮肤测试;他说他接受过测试,对玫瑰很敏感。我想当然地认为他应该知道。有些人对猫过敏,有些人对小麦粉过敏。而这个人对玫瑰过敏。
我自己对玫瑰花很敏感,我爱它们,玫瑰是青春和爱情的颜色,玫瑰是烂漫之花,Ben 送给他的夫人一个玫瑰色的花环,好让她只能在花环上呼吸,因此,据 Ben 说,花环闻起来不是自己的味道,而是她的味道,的确,这是一种高级的赞美,还有谁能给最芬芳的花朵喷香水呢?玫瑰可是爱情的象征。
然而,对我的病人来说,玫瑰花意味着窒息。
他在八点半的时候打我办公室的电话说他要取消预约。因为他感觉好多了,他说他下午四点来见我。
在这一天里,我一直在想,为什么他一大早给我打电话,我感觉他想要告诉我一些什么,可能是一些他自己不理解的事情,一些他无法通过语言表达的事情。在我的脑海中,我一直想着玫瑰是爱的象征。
我决定重复著名的柯日布斯基实验。那天下午 4 点,当病人走进办公室的时候,舞台已经准备好了,我的桌子上有一个大碗,里面装满了各种玫瑰,有白玫瑰、黄玫瑰、红玫瑰。
他看了一眼玫瑰花,他的下巴差点掉了下来,他的额头皱了起来,他喘着气,然后陷入了一阵阵咳嗽中,当我把他带到治疗室时,他咳嗽的方式几乎令人作呕。我给他注射了皮下注射,最后他的咳嗽停止了。
“你怎么可以这么粗心大意?” 他喘着说:“你又不是不知道我对玫瑰有多敏感。”
我走到了我的办公室,挑出了一朵玫瑰花,在他面前把它撕成粉碎,它是用纸巾做的,而且,刚刚注射的是蒸馏水,并不是肾上腺素。
“你有哮喘,” 我继续说,“但并不是因为玫瑰引起的,而是由于你的紧张引起的”,现在既然我们知道了病因,那就有对应的治疗方式。
一个病人的哮喘类似于另一个人对高处的恐惧,或者害怕封闭的地方,心悸,或者害怕人群,或者恶心呕吐,或者晕厥发作,肩胛骨之间或者背部小部位疼痛,神经症所引起的身体症状的数量是无限的。
俄罗斯心理学家 Pavlov 想研究这些东西,但他不能很好的在人类身上进行实验,因为它们有哮喘或腹部痉挛,他们不喜欢为科学进步事业贡献自己的力量。在这种情况下,他们没有一种贡献的精神。如果他们身体很棒,即使是为了满足医生的好奇心,他们也不会喜欢生病的。
所以 Pavlov 使用了人类最好的朋友——狗,以协助他的研究发现,狗被用来帮助猎杀狮子,狐狸,野鹅;他用狗来追踪神经紧张。
春天开的花怎么会引起哮喘?任何无害的,无关紧要的刺激怎么能使身体表现出它从来就不应该有的行为?这是 Pavlov 的问题。
Pavlov 也许会使用玫瑰来作为他实验的刺激物,他可能有,但是他不用,相反,他用的是在整个科学界依然可以听到的钟,他发现狗的行为可以帮助医生去了解你的问题和困惑,从俄罗斯心理实验室到你医生的办公室有很长的路要走,但这就是 Pavlov 的钟声所走过的距离。
你知道把肉放在了一只饥饿的狗面前,它会流口水,它看到并闻到了肉的味道,它的视觉和嗅觉被大脑传送到脸颊上的腺体,大脑告诉这些腺体:“分泌,分泌,食物来了。” 然后腺体就开始忙碌起来了。通过小管道,从唾液腺到狗的口腔内部,唾液涌出,狗就流口水了。
任何人都会认为狗的腺体在看到闻到食物的时候会分泌唾液,这是天性。但是,一些与食物无关的刺激会导致这种自动分泌唾液吗? Pavlov 提出了这个问题,并设计了一个巧妙的实验来回答了这个问题,这个实验简单有效。他会把肉带给他的狗,但在给它们肉之前,他会敲响铃铛。
很快,每当他敲响钟时,狗的腺体都会分泌唾液。不管有没有肉,铃铛都能刺激狗嘴里的腺体。狗和它们的腺体只对一个钟声作出反应——这是自然界中没有发现的的信号,于它们对食物的视觉和嗅觉完全相同。
Pavlov 发现,这种腺体的反应是身体的一种自动功能,不受意志控制,可以通过训练对人工刺激作出反应。他称这种反应为条件反射。
极饿和食物是一种天然的关系,它表明所有生物的亲缘关系,当你极饿的时候,你闻到了一块嫩的、棕色的、多汁的牛排在盘上滋滋作响,你会流口水,因为浓烈的气味和充满希望的景象会刺激你的大脑和想象力,你的脑细胞会向你的唾液腺发送通信。这是一种自然现象,就像刚刚的狗一样。
但是当你坐在餐厅里看菜单的时候,你看不到或闻不到食物的味道。你的脑子里只浮现出印刷出来的文字,你的嘴巴还是会流口水,这是你的条件反射。这就是阅读,写作和文化对唾液腺的影响。对你来说,菜单上的字就像铃声一样。
有个病人每当生意不好的时候就会流口水,他不停的吐痰。错误的冲动从他的达到传到了他的唾液腺。这和 Pavlov 在他的狗身上试验的过程是一样的,只是没有钟。会计师的报告会引起他的条件反射。他在童年时代就这样了,因为每当他生气,呻吟或者担心的时候,他就会随地吐痰。
我接待过一位建筑师,他不时会检查教堂的结构细节。每当他进入教堂的时候都会流口水,有时候,当他走进教堂,他就会感到恶心,不得不呕吐。这是因为它作为一个宗教仇恨盛行的欧洲男孩,每次进过某个教堂时都会被教导吐口水。
着也是条件反射,在我们没有自主控制的情况下,身体的自动腺体功能是由自然界从未发现的声音和视觉刺激。比如我们刚刚提到的受到会计报告和宗教仇恨等人为因素。
一朵美丽的玫瑰可以称为释放条件反射机制的触发器。这就是哮喘患者背后的故事。
当他在大学时,他爱上了一个女孩,在某些早晨,他经常给她送可爱的玫瑰花。“这是如此的粉红,如此的小,如此的精致” 他告诉我。“如此的纯洁,如果你懂我意思,我想让她知道,这就是我对她的看法,我连食物都没有就给她买了”。
他很穷,但是他很有决心,他想他们不能结婚,而她认为他想让她慢慢地失望。他们之间的内心想法都让两人感到内疚,每个人把这种内疚感投射到对对方的不信任上,这种不信任导致了嫉妒、争吵、打架,他离开了大学,然后进入了另一所大学。她与另一个男人订婚。他精神崩溃了。
最后,他决定完全忘记她,而且做得相当好。事实上,他第一次来见我时就已经完全忘记了她。但他的支气管并没有忘记。因为起初,在两人分开后,他一看到玫瑰就会喘气,变得僵硬。后来,这种习惯变成了一种无意识的反射,是他在不知道原因的情况下做的事情。当它变得非常严重时,他就得了哮喘。
窒息对他来说意味着很多事情,这是他踢自己的方式。这意味着要为他屈服于懦弱所犯的错误忏悔。他不愿意承认这些事情。他喜欢用“敏感”来解释自己的这些麻烦,这听起来比“支气管神经症”要好,但你不能逃避事实,逃避现实是没有治疗方式的。
条件反射是你所有习惯模式的根源,无论好坏,正是这种条件反射使你去工作,打卡,中午吃午饭,晚上大吃大喝,并让你在睡觉时没有这样做。
这是一种条件反射,它将你的身体行为和只有在文明社会中才有的情况联系在一起。当人类生活在丛林中时,他的行为从来没有被需要穿衣服所约制,谦逊是一种条件反射。他们有被别人抽的名牌香烟的欲望所约制。社会模仿是一种条件反射。他并没有因为隔壁桌的那个小伙要升职了而大吃一惊。他没有因为害怕失去工作而感到胃灼烧和消化不良。原始人不会受这些东西的约束,没有那种紧张。
在生命的早期,我们就被调教成了神经质的行为。
以一个害怕高处的病人为例。在他五岁的时候,他坐在二楼的窗台上观看游行。一些过度焦虑的成年人会抓住他的裤腰,把他往后拉。
“你这样会掉下去的!” 他被这样告知。
当他还是一个小孩子的时候,他的父母会带着他乘船兜风。他喜欢站在栏杆旁边,看着海浪拍打而过。
他又一次被抓住了:“不要靠近边缘”,接着就是争吵、眼泪、责骂。
这是他在跌倒危险的情况下开始调节涉及腺体、心脏、肺的反射。然后,当他 14 岁的时候,他受到了从未忘记的沉重打击。他和一个朋友一起爬上了一座在建设中的建设建筑物,他的朋友摔倒了,背部骨折,双脚瘫痪。
他立刻想起了所有的旧警告。这导致了人们对高处的恐惧,以至于今天,他一走进高层办公楼时,膝盖就像果冻,内脏不停翻转。
他知道这样的感觉很愚蠢,但他无法控制。他的肠道、腺体、心脏——身体中处于自动控制下的部分——以这种令人不快的方式对情况做出反应,而他无法控制它们。他的整个身体都受到了制约,就像 Pavlov 的狗的唾液腺受到制约一样,他的身体也会自动做出反应。
身体的所有功能都会自然地适应危急情况。如果你有一台 X 光机,你可以亲眼看到一些现象。你给狗喂一顿含有铋的食物,铋是一种在 X 射线下呈白色的物质。 在 X 光下观察一只狗,你可以看到它吞下铋粉,看到它的胃和肠胃充满,你可以看到它消化食物时肠胃正常、缓慢、蠕虫状的运动。
现在带一只猫来到现场。狗会变得紧张,它脖子上的毛会竖立起来,它的胃和肠的所有活动都停止了。在愤怒或其它的情绪中,比如害怕或者嫉妒,狗都会做出全身的反应。
就像狗的唾液腺能够适应任何刺激一样,他的胃和肠道也能适应。这也适用于你。
一名患者患有胃溃疡,当他还是个男孩时,晚餐的钟声是开启下一轮永无止境的家庭斗争的锣声。他的胃会痉挛,他的肠子会打结,就在吃饭的时候,他的腹部器官,不受意志的控制,一看到食物就会对恐惧做出反应,当他的胃和肠子应该轻轻放松的时候,它们现在会抑制他吞下的任何食物,在他柔软的胃壁上刮擦撕裂。他胃部的条件反射导致溃疡无法愈合。现在需要动手术了。这就是糟糕的训练, 是条件反射对一个人的影响。
在每一种神经症之下,都存在着身体某些自动功能的调节,使其以一种天生就不适合的方式活动。狗的唾液反应可以调节到听到钟声就有反应。恐惧反应,包括胃痉挛、畏缩、肌肉紧张。也可以调节到听到铃声时做出反应。
如果两种性质完全相反的反射同时被诱发,会发生什么?这个实验有做过。
狗习惯于对铃铛做出反应,铃铛的音调很低,就像它对食物的反应一样,每次听到低沉的音调,食物就会被送来,尾巴就会摇摆;他会满怀期待地跳来跳去,嘴里会流口水。很快,每当他听到低沉的音符时,他就习惯了这样做。
接下来,他的恐惧反应被训练成以高音符回应钟声。一根电线连在蓄电池上,每当高音响起时,狗都会受到轻微的点击。当然,这只狗很害怕,在很短的时间内,每当高音响起时,它都表现出同样的恐惧,即使没有发生电击。当我说他表现出恐惧时,请记住我说的是他的肌肉紧张,他蜷缩在角落里,尾巴夹在两腿之间。恐惧意味着肠子抽筋和口腔干燥。他的整个身体,从鼻尖到尾巴上的毛发,都习惯于对高音铃声做出反应。
然后钟声逐渐变了,每天都有一个音调稍低的钟被替代成音调高的钟。但狗的行为还是一样,尽管它不再受到点击,它也会害怕听到高音的铃声。
现在,在每天将引起恐惧反应的高音调换成略低的音调的同时,引起唾液分泌反应的低音调的铃声也在改变。每天,用其他的铃声代替承诺有好东西吃的铃声,每个铃声的音调都略高。在很长一段时间内,狗仍然没有注意到这一区别。当较低的音调响起时,狗的自动身体机能,如唾液分泌、肠道放松、胃液分泌等,完全像对食物本身的反应。
终于有一天,低音和高音的钟声如此相似,以至于狗无法区分它们。中间的钟声引发了两种对抗性条件反射。
狗做了什么?就像人类在类似情况下会做的那样。他得了神经症。他蹑手蹑脚地走进一个角落,浑身发抖。他拒绝所有食物。他睡不着。他非常易怒,对每个人都大发雷霆,有时他的心脏会剧烈跳动。有时他会懒洋洋的。有时他的嘴会干得像棉花一样;但他拒绝了所有的水。相互矛盾的条件性反射使这只可怜的动物神经质。这不应该发生在狗身上,但确实发生了。
花了 6 个月的精心再教育才治好了这只狗的神经症。顺便说一下,下次有人告诉你神经紧张是“想像出来的”,你可以把狗如何得神经紧张的实验告诉他,问问那些跟你说“振作起来”,“回家,然后忘了它”的人,是否知道如何治疗狗的神经紧张,如果他不能,那为什么要听他们的建议?
在狗身上通过相互冲突的反应条件反射而产生的实验性神经症,只是我们人类偶然发生的事情。我们的身体习惯于对某种刺激做出恐惧反应;然后,我们的身体习惯于对同样的刺激做出爱的反应。父亲在没有好的原因下扇儿子耳光;第二天也会因为同样的原因给他糖果。这孩子永远不知道父亲的标准。父亲成了刺激物,代表着“一块糖果”和“给他下巴上来一拳!”。
当我们无法区分各种刺激时,我们就会感到困惑。冲突发生在我们自己身上。大脑中的神经细胞之间发生了一场拔河比赛。我们感到我们必须同时做两件相互矛盾的事情。这种冲突涉及我们的腺体、胃、肠、血管。我们只知道我们感到紧张,我们有腹部痉挛,或者我们的脚又冷又湿。如果我们的消化受到影响,我们会服用碳酸氢钠,并对厨师找茬。
我们的身体和思想被灌输了数以千计的行为模式,其中许多是完全相互冲突的。几乎每个家庭都会出现产生摩擦、嫉妒和紧张的情况。也会出现产生忠诚、安全感、情感和爱的情况。结果是,孩子们同时爱、怕、恨他们的父母,只是模糊地意识到他们相互矛盾的情绪。
弗洛伊德强调嫉妒的因素,称由此产生的习惯模式为恋母情结。因为家庭是一个几乎普遍存在的社会单位,而且这种嫉妒的习惯模式非常普遍,世界各地的精神病医生都能够证实弗洛伊德的敏锐观察。在任何时候,男孩都渴望父爱,男孩都想在自己的游戏中打败老人。爱与恨之间的这种永恒的冲突导致了文学、历史、进步和神经症。
一个医生的儿子(十岁)表达了古老的冲突,他天真地指出:”我将成为一个比你更好的医生,因为我知道你能教我的一切,而且还有很多。” 他可能是对的;但如果有人没有意识到这些相互冲突的习惯模式或情结是代际间许多对立和冲突的基础,他就没有看清事情表面下的真相。
人的思想是多面的,就像钻石一样,反映出各种颜色,每种颜色都取决于接近的角度。我们所有人都属于许多团体或学院,每个团体或学院都制定了自己的公平贸易惯例和标准,对什么是公平和什么是不公平有自己的想法。所以我们有很多行为模式,每一种都适合于我们所处的特定情况。
不幸的是,这些标准之间的差异如此之大,以至于往往难以调和其中的一个。对于教练线上的贝比-鲁斯来说,对投手大喊大叫,让他放慢脚步或分散他的注意力,是完全正确的。但是,在我们所有人的经历中,有一些情况,其中有很多,我们的标准或理想之间的冲突威胁到我们生命的完整性。这些情况产生了我们这个时代的神经质行为。
例如,爱国主义理想与个人经济和社会进步理想之间的冲突解释了我们征兵部队的一些神经症。这是25岁的约翰尼·琼斯,从小就相信粗犷的个人主义。他强烈地想让自己出人头地,在这个世界上出人头地,买自己的房子,结婚,在自己的小世界里得到亲人和朋友的好感。他应征入伍并在军队服役。现在怎么办?如果他能感觉自己像集中营里的烈士,就不会有同样的精神冲突。但他知道自己不是烈士。他想为国家尽自己的责任。两种相互冲突的情绪习惯模式正在撕裂约翰尼·琼斯,产生战争神经紧张。
我们的文明是如此复杂,如此多样,如此紧密地联系在一起,以至于我们所有人都遭受着无法调和的习惯模式冲突。客厅里和蔼可亲的女主人在厨房里可能不那么和蔼可亲和体贴,当餐厅的门关上时,一个恃强凌弱、专横的丈夫在高尔夫球场或鸡尾酒会上可能是个不错的家伙。众所周知,这位饱经沧桑的道德家在远离家乡参加一次大会时会有些失望。所以他和其他男孩一起参加单身派对。我们所有人都是快速变化的艺术家,有许多制服和旗帜,当我们从一个场景移动到另一个场景时,我们能够在瞬间脱下、穿上、卷起和展开旗帜。然而,所有这一切都很难带来正直和内心的平静。
我们在工厂、商店或办公室的生活习惯模式与我们在家的生活习惯模式相冲突。在商店里,母亲每天都在和屠夫搏斗,决心尽可能少地得到骨头和软骨,最好的,最划算的。在家里,她为自己切了最差的一块,这样孩子们就有足够的食物了。但有时,在她的市场营销中,贪婪的习惯模式在家中被唤起。还有家庭问题。或者她的丈夫可能会变得心胸狭窄,像对待家庭成员一样对待顾客,直到警长在门上挂上挂锁来结束这种不安全的行为。在这种情况下,习惯模式或行为标准是不一致和冲突的。人们试图调和对立的习惯模式,并感到困惑。然后是一个漫长的夜晚,当他们在床上辗转反侧,哄着睡不着觉时,习惯模式之间的冲突会让他们感到不安。
很难意识到这些,你自己的习惯模式,因为它们与其说与你的思想有关,不如说与你的心脏、肠道和腺体的行为有关。当这种习惯模式受到挫折,或者它们所要求的行为无法继续时,你只会感到紧张。然后就产生了一种紧张感,一种缺乏活力的感觉。也许是一份失去的工作,或者是一个随风而去的农场。也许你已经从学校毕业,到了九月份,你会怀念过去的学校习惯和协会,也许你有一种被 AI 取代的贸易技能。
你站在那里,枪上了膛,瞄准了,准备射击,但从来没有下达开火的命令。
这种情况在生活中很常见,它经常发生在儿童时期。它发生在人们从一个城市搬到另一个城市,并放弃他们的老朋友和协会。当他们从一份工作转移到另一份工作时,离婚也会发生。它发生在女孩结婚时。
婚前,一个典型的案例是一位积极、训练有素、快乐的私人秘书。她阅读了所有的广告,为美丽的笑容刷了牙;用漱口水的健康气味;吃了给她带来活力和活力的维他命;使用了合适的无咖啡因咖啡,于是她嫁给了老板。
然后她的麻烦开始了。她讨厌做家务,老板,现在是她的丈夫,说:“雇一个女佣,一个厨师,一个管家。看在上帝的份上,别抱怨了。享受阳光和新鲜空气。你不需要做其他的事情了。” 无事可做,充满了习惯性的行为模式。无所事事,一心想做点什么,什么都可以,除了计划另一个徒劳、空虚的日子。
“想出要做的事情是我做过的最难的工作,”她告诉我,“不知道下一步该做什么让我感到不安。”
一个65岁的男人退休后领着丰厚的养老金,他在一个地方工作了40年。他们给了他一顿告别晚宴和一块金表。他们告诉他,他能轻松应对是多么幸运。在接下来的六个月里,他看着金表上的秒慢慢流逝。然后他死了,没有什么可做的。
老年人的这一悲剧大家都很熟悉。然而,在帮助无数受害者方面所做的是多么少啊!如何让老年人有尊严、有创造力、生活舒适,是一个巨大的社会问题。退休人员的社会保障需要的不仅仅是养老金。也许,没有了他们所爱的人,没有了熟悉的地方和习惯的方式,他们在一个生机勃勃的新世界里是陌生人。他们需要从徒劳和无聊中解脱出来。我们必须建立服务老年人的自由。
我们要感谢 Pavlov 让我们知道,我们的器官、心脏、肺、胃、肠、腺体的所谓自动工作都是由人工刺激启动或抑制的。
他表明我们的身体会因为像他的铃铛一样空洞的兴奋而兴奋不已。他表明这些身体反应不受意志的控制,当你习惯于在吊袜带掉落时脸红时,你可以指示你脸上的血管不会扩张,但它们不会听。他们已经习惯了反应,所以当出现吊袜带时,你的面部血管会扩张,你会感到尴尬。
狗的实验性神经症表明,相互冲突的条件反射会产生严重的神经症行为。狗、羊、猪、老鼠或人,都没有区别。提供相互冲突的习惯模式,并产生紧张情绪。
从这些辉煌的开端开始,我们取得了进一步的进展。我们正在探索条件反射是如何工作的。我们已经追踪到了这种反射的巢穴,发现了大脑中潜伏着紧张情绪的特殊部位。下一步是展示神经质的解剖结构,帮助你战胜神经紧张。
]]>本文为大卫芬克书籍《消除神经紧张》翻译的前言部分,你可以在线阅读,关于消除神经紧张pdf电子书原版可以在公众号「wistbean」发送「消除紧张」获取。
1912 年,我决定探索人类最黑暗的地方——人类的思想。
据我所知,探索者总是会阅读前人的发现。他们这么做是他们工作的一部分。所以我在某种程度上遵循了先例,在大学里学习并阅读相关的课程。几乎在在我发现这一点之前,我发现自己正在密歇根大学教社会学。
这是一个好的开始,当你在教书的时候,你就会学习。但你想要探索人类的心灵时,你就需要在教学以外的环境与人接触,你必须与人打交道。人类最黑暗的地方不是存在于图书馆里面,而是在于人类眼睛背后那些难以捉摸的地方。所以我离开了大学,去社会工作。我在没有评级的房间里教那些弱智儿童体育。我在师范学院里教书,可是我觉得这不够,因为我仍然是在教书和阅读,我根本没有深入到人类最黑暗的地方。
就在我不满意时,我问我自己:谁能够解释人类生活的最基本信息?谁有最好的机会来探索人类的心灵?当然是医生!一提出这个问题,我就报名参加了一所医学院。
而且我从来没有后悔过,医学的研究和实践给了我对人从里到外的理解,理论知识和实践集中在人类的问题上。我曾帮助许多婴儿来到这个世界,我也曾多次站在死亡的面前。我曾参与过千万人的情感挣扎。他们在恐惧、痛苦、绝望和羞耻的情况下,都对世界隐瞒了,而我就在这里,我不是一个旁观者,我是来帮忙的,我在这里不仅仅是做探索,而是要找到走出丛林的方法,我必须找出诊断和治疗的方法。
我发现,在社交场合中,所有的欲望都有方向性和紧迫性。在这本书中,你不会发现关于天性的讨论,因为讨论不存在的东西是没有意义的。人类没有天性,他们身体的活动是无限可塑的。社会环境是赋予人类活动方向和活动的力量。
当社会环境令人困惑时,人就会感到困惑,也许他想辞职去看望垂死的母亲,而他也想继续工作以支持他的妻子和孩子。他身处两个家庭中——他自己的家庭和他父亲的家庭——而每个家庭都对他提出了相反的要求,每个家庭都牵动着他的心。这种冲突——如此人性化,如此可以理解,如此普遍——引起了神经紧张。社会适应不良产生了个人适应不良。
神经紧张并不存在于真空中。它们不完全存在于神经系统中。它们存在于身体的所有器官中。当个人内部存在情绪上的战争时,就会出现一个器官对另一个器官的拉扯。神经紧张是生理上的。这就是为什么如此多的疾病是有情感冲突引起的原因。
人们不会自发地从情感冲突中恢复。内部冲突以器官行为习惯的形式继续存在。因此,神经紧张一种多年积累的方式引起的。而这些神经紧张——身体器官之间的失调——就会影响一个人的思想。身体告诉头脑应该怎么想。一些研究者把这种身体对思想的控制称为潜意识。潜意识由人的器官行为习惯组成。
人们试图通过采取一些妥协的行为来缓解紧张情绪,使不愉快的情况得以忍受,这些妥协的方式往往是童年时发明的,当然,她们也是幼稚的。如果他们的情况不复存在就结束了,那么也就不会那么糟糕了。但是事实并非如此,童年时期的妥协方式变成了他每天的习惯反应,成了他对成人环境的充分适应调整。
我认识一个水管工,他就是带着童年时期的方式,就像带着他的扳手一样,他想知道为什么他不能处理生活中的问题,试想一下,如果他把八岁时的玩具带到这里,他如何应对管道的问题?
这些妥协的调整方式,我们称之为神经质倾向。它们不是情绪紧张,而是试图适应情绪紧张的结果,不精通神经紧张的社会学和心理学医生将这些倾向视为唯一需要治疗的证据。然而,为了使人能够更好的运作,人潜在的情绪紧张必须得到释放。
这种方法将所有现代科学、社会学、心理学以及我们称之为医学的科学带到你的服务中。我要感谢所有创造了这些科学的人,以及为这本书作出贡献的人。这是不可能的。如果只给现代医学的创造者以适当的荣誉,我应该写一部医学史,感谢从解剖学之父维萨留斯到伟大的生理学家和临床医生沃尔特-阿尔瓦雷斯;从血液循环的发现者哈维到伟大的书目编纂者H-弗兰德斯-邓巴,他的《情感与身体变化》将成为一种制度而不是一本书。我从他们那里都学到了东西,我感谢他们。
这本书包含了许多解释性的故事。一些读过书稿的人问:“这些案例是真的吗?” 答案是:“是,也不是”,说不是,是因为它们并不以任何可识别的形式代表我任何病人或熟人的故事。他们的私人生活完全属于他们,而我对他们的了解也同样属于他们。
但是这些历史案例都是真实的,在最真实的意义上是的,因为他们在心里上是真实的,你可以在报纸上看到史密斯先生的所作所为。每个字可能都是事实,每一个事实都可以得到证实。然而,关于史密斯先生的真是情况可能不会在故事中。记者在寻找事实的过程中,可能忽略了关于史密斯先生的真实情况,有可能连史密斯先生自己都不知道自己的真实情况。他没有意识到内在的力量让他那样做。他也不知道是什么阻止了他不那样做,记者也不知道。这是你在这些历史案例中能找到的唯一真想和现实。这也是你在任何地方都能找到的唯一的现实。
基于此,你更有可能从这些事例中找到你自己,虽然这些案例并不代表真是的人,但它们是我们的人类经验,它们在我的洞察力和解释的允许范围内是真实的。如果它们能帮助你找到你自己,那它们就达到了目的。
我希望对艾格尼丝-拉姆齐小姐在本书编写过程中的帮助表示感谢,她的编辑建议非常宝贵。其他在编写过程中阅读过手稿并给予很大帮助的人有:比-弗里德曼、埃德琳-戈尼、E.Y.哈伯格、乔-帕加诺和伊丽莎白-佩迪克斯。我借此机会向他们表示感谢。我承认我最应该感谢的是成千上万的人,他们允许我分享他们的经验和情感斗争,从而使这本书成为可能。
大卫.哈罗.芬克
]]>我想你应该刷到过类似这样的短视频:一位所谓的程序员坐在电脑前,对着镜头说「教你几行代码秀翻全场,安排!」,紧接着超强节奏的背景音乐响起,只见这位程序员在电脑桌面右键新建了一个 txt 文件,粘贴了几行代码,接着保存,重命名,双击运行。
果然,一个终端飘起了超炫酷的「代码瀑布」,哇塞,黑客帝国效果拉满整个屏幕。
这些视频点赞量还挺恐怖,有的还几十万点赞量,打开评论区可以看到有很多诸如「卧槽,牛逼」的评论。
不过有点写代码经验的程序员一看到这种视频,想必当场用脚抠出了个三室一厅,再定睛一看,马上呈现出「地铁老人看手机.jpg」。
视频中那几行破代码不就是使用命令遍历输出所有文件的目录么?而且有的视频更离谱,在 txt 中粘贴的代码还有错的,但运行出来的效果一样咋咋呼呼。这不是程序员高手,这应该是剪辑高手了吧。
不过你还别说,这样的骚操作确实吸引了不少小白前来膜拜,而他们的套路也很简单:「是不是很厉害?想学是吧?来私信我呀,这就告诉你韭菜的自我修养是什么样的。」
这还不是最可乐的地方,而是视频中的人不知何来的自信,把「安排」这两个字说得那么的气宇轩昂,在打开 txt 的那一刻反差着实有点大,在下实在佩服,差点就尿了。
不过还是想提醒下这些营销号们,下次复制代码稍微注意下,别不小心把类似「sudo rm -rf/*」命令用来做效果,也算是积点德了。
所谓内行看门道,外行看热闹,程序员并不是简单几行代码就可以实现自己想要的需求,有些视频中展示的几行代码也不过是引用了其它的库文件,这些库文件才是真正实现的代码。
对程序员来说,尽管他们也会使用「copy 大法」,但是他们并非只是敲代码,很多时候,他们需要不断的学习新的技术来提升自己,他们每天都在解决问题,实现需求,有时候并不是他们自己想要 996 ,而是一定要把问题解决了才罢休。也正是通过自己把难题解决了的那一刻,他们开心得像个 200 多斤的傻子。
我想这不断地提升自己,以及通过自己实现需求带来的成就感,甚至无私分享自己的解决思路,才是他们的乐趣所在。
其实有时候想想这个互联网世界也挺魔幻的,有的博主认真制作的编程教程视频,细致讲解代码的实现方式,结果并没有多少播放量,或者有些人看几眼就划走了。反倒是营销号通过模版化制作出来的粗糙视频,受到不少的关注和追捧。
诚然他们有值得学习的地方,但是不是也要有点底线?
写到这里,我突然意识到,现在各种短视频层出不穷,在我们专业外的领域,我们也是啥都不懂的小白。
不乏有些营销号同样通过包装,打造高大上的人设在特定的领域侃侃而谈。
如果你对视频中的他并不是很了解,或许在听他讲之前,保留一些怀疑的态度,通过更多的维度去求证,这样会更好点。
]]>TikTok是抖音的国际版,用户量巨大,但是在国内无法访问,如何在国内登陆访问 tiktok 国际版本呢?解决方式如下:
使用国外的代理 IP 服务进行上网,也就是自己先搭建一个代理服务。
在使用了一些服务器之后,我觉得 vultr 的性价比超高,最低 $5/月 ,就可以拥有一台 1TB 月流量的服务器了,根本用不完。
而且现在 vultr 优惠力度很大,新用户充值 10 美元送 100 美元。点击vultr送 100 美元注册链接注册
点击 vultr送100美元注册链接 进行注册:
在这里输入你的邮箱和密码,接着点击按钮「Create Account」创建账号,然后 vultr 会给你的注册邮箱发送一份验证邮件,激活就好了。
接着就可以登录 vultr 官网了:
vultr 现在有 16 个境外节点,选择一个离你最近的就好了。
登录进去之后选择左边的 billing 的菜单进行充值,vultr提供的支付方式简直完美,支持信用卡,比特币,paypal,支付宝,微信支付,在这里可以进行充值支付。
充值完成之后,就可以左侧的 Sevrers 菜单,接着可以点击 deploy one
或者右侧的 + 号来选购你要的服务器:
其它步骤可以忽略,然后点击右下角的 Deploy Now:
点击之后你就拥有一台属于你自己的服务器了:
点击你的服务器,进去之后你就可以看到你的服务器的ip地址和账号密码了:
以上信息等会用来从你的电脑连接到你的服务器上。
需要在你的电脑连接到你的服务器,那么就需要连接工具,连接工具有很多个,根据你的需要,以下随意下载一个连接工具即可:
接着打开连接工具,然后输入你刚刚购买的服务器 ip 地址和端口(端口号是:22),账户名,和密码就可以连接了。接下来就可以操作你的服务器了。
打开你的 Terminal 终端,接着输入:ssh root@你的ip地址,接着输入你的搬瓦工的 root 密码就可以登录了。
安装 wget :
yum install wget
使用脚本:
wget https://git.io/vpnsetup-centos -O vpnsetup.sh && sudo sh vpnsetup.sh
稍等一会安装成功会提供一个 VPN 需要的信息:
Server IP: xxx.xx.xx.xxIPsec PSK: xxxxUsername: xxxxPassword: xxxx
这时候就搭建成功了,快吧?
单击开始菜单,选择控制面板。进入 网络和Internet 部分。单击 网络与共享中心。单击 设置新的连接或网络。选择 连接到工作区,然后单击 下一步。单击 使用我的Internet连接 (VPN)。在 Internet地址 字段中输入你的 VPN 服务器 IP。在 目标名称 字段中输入任意内容。选中 现在不连接;仅进行设置以便稍后连接 复选框。单击 下一步。在 用户名 字段中输入你的 VPN 用户名。在 密码 字段中输入你的 VPN 密码。选中 记住此密码 复选框。单击 创建,然后单击 关闭 按钮。返回 网络与共享中心。单击左侧的 更改适配器设置。右键单击新创建的 VPN 连接,并选择 属性。单击 选项 选项卡,取消选中 包括Windows登录域 复选框。单击 安全 选项卡,从 VPN 类型 下拉菜单中选择 "使用 IPsec 的第 2 层隧道协议 (L2TP/IPSec)"。单击 允许使用这些协议。确保选中 "质询握手身份验证协议 (CHAP)" 复选框。单击 高级设置 按钮。单击 使用预共享密钥作身份验证 并在 密钥 字段中输入你的 VPN IPsec PSK。单击 确定 关闭 高级设置。单击 确定 保存 VPN 连接的详细信息。
新建一个TXT文件,输入以下内容:
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters]"ProhibitIpSec"=dword:00000000[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002
另存为.reg格式的文件,然后双击。
将以下服务全部设置为自动启用,要不然会连接不成功:
IPsec Policy AgentRouting and Remote AccessRemote Access Auto Connection ManagerRemote Access Connection ManagerSecure Socket Tunneling Protocol Service
重启电脑后,点击右下角的网络连接,双击VPN连接,即可成功连接:
访问 tiktok网页版登录入口:
进入设置 -> 通用 -> VPN。单击 添加VPN配置...。单击 类型 。选择 L2TP 并返回。在 描述 字段中输入任意内容。在 服务器 字段中输入你的 VPN 服务器 IP。在 帐户 字段中输入你的 VPN 用户名。在 密码 字段中输入你的 VPN 密码。在 密钥 字段中输入你的 VPN IPsec PSK。启用 发送所有流量 选项。单击右上角的 存储。启用 VPN 连接。
android客户端连接方式请参考:配置 IPsec/L2TP VPN 客户端
注意事项:
之前购买了不同商家的云服务器,有阿里云的VPS,也有腾讯云VPS,还有亚马逊的VPS,最后觉得最好用的还是搬瓦工VPS。
相比较而言性价比高,而且搬瓦工是国外的,你懂的,没有什么审核限制,一般来说,使用搬瓦工搭建一个自己的 VPN 来访问 Google 查询资料,看看文献什么的速度还是很快的。
很多人不知道,搬搬瓦工官网隐藏了一个彩蛋,就是隐藏了优惠码,这个优惠码可以省掉一些费用,比如一年 19 刀的VPS,使用优惠码的时候只需 18 刀多一点,简直不能再划算了。
点击进入搬瓦工官网进行注册就可以了,注册完之后可以选择以下可以获取优惠码的服务器,如果是个人使用的话,我觉得最便宜的已经很够用了,每个月500G的流量基本用不完的。
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
当你进到这个页面的时候呢,别急着点击「Add to Cart」添加到购物车,这里面暗藏着一个优惠码,很多人不知道,使用浏览器查看源代码,
chrome浏览器的话按F12,然后搜索「code」,你会发现有一个 「Try this promo code: xxxx 」,这个xxxx就是优惠码,你把他复制下来,待会有用。
页面的 Location 就是选择服务器的地址,到时访问谷歌的时候会显示你当前访问的地址。好了,我们点击「Add to Cart」。
接下来,进入结算页面,我们刚才复制的优惠码就派上用场了,将你刚刚复制的优惠码复制进去然后点击 「Validate Code」,看!是不是优惠了!一般人不知道这种操作:
接着点击「CheckOut」完成付款即可。付款的时候选择 Alipay 就可以使用支付宝付款。
购买完毕后你就拥有一台你自己的服务器了,接着点击Services下的MyServices,可以看到你的服务器:
我们点击「KiwiVM Control Panel」进入管理界面:
可以看到你服务器的信息:
一般来说,菜单下方有一个 openvpn 的快速安装方式,但是据说很容易被强,所以现在不推荐使用这种方式搭建自己的VPN。
有了搬瓦工服务器的IP地址和端口,我们就可以连接了:
账号是root,密码可以在这里获取:
远程连接工具我一直用的是 SecureCRT , 当然你也可以使用其它的 SSH 工具。
破解版的SecureCRT可以在百度网盘这里获取:
连接到你的搬瓦工服务器之后,接下来几个命令让你快速搭建一个属于自己的ss服务器:
搬瓦工安装 wget
1 | yum install wget |
搬瓦工执行安装shadowsocks
1 | wget –no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh |
搬瓦工获取shadowsocks.sh读取权限
1 | chmod +x shadowsocks.sh |
设置密码和端口号
当你输入./shadowsocks.sh 2>&1 | tee shadowsocks.log
后就可以设置密码和端口号了:
将这些信息保存起来,那么这时候你就可以使用它们来科学上网啦。
打开 Shadowsocks 客户端,输入ip地址,密码,端口,和加密方式。接着点击确定,右下角会有个小飞机按钮,右键–>启动代理。
这时候就可以科学上网了。
不过速度并不是快到飞起来,所以接下来就可以使用 BBR 加速了。
让访问速度加速,飞起来!使用 BBR 加速工具。
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh
接着按任意键,开始安装,坐等一会。安装完成一会之后它会提示我们是否重新启动vps,我们输入 y 确定重启服务器。
重新启动之后,输入 lsmod | grep bbr
如果看到 tcp_bbr 就说明 BBR 已经启动了。
下载 Shadowsocks 软件,填上信息就可以访问了,不过iPhone的客户端需要收费的,这时候可以再搭建一个VPN专门用来手机使用连接,具体搭建和使用教程也很简单,可以看这篇文章:快速搭建一个属于自己的IPsec/L2TP VPN
时不时有朋友问我搬瓦工被墙了的事,其实按照以上的教程搭建是稳如狗的,只不过不用太高调使用,搭建VPN是用来查询资料,学习的。
在禁令的情况下,最好的解决方案是彻底清除可能触发禁令的所有服务,并等待一段时间取消禁令。
另外可以换ip,如果您需要用干净的IP替换禁用的IP,有两种选择:
免费IP替换。允许您每隔10周免费更换一个带有干净IP的黑名单IP。要访问此功能,首先像往常一样登录KiwiVM,然后访问以下隐藏页面(复制+粘贴链接到浏览器的地址栏):
https://kiwivm.64clouds.com/main-exec.php?mode=blacklistcheck
手动IP替换(收费)可从以下链接获得:
https://bwh89.net/ipchange.php
换完ip重新安装即可。
从昨天开始,我突然发现自己变傻了,连字都不会打了,说出来你可能不信,你现在看到的这些文字,是我废了好大劲才敲出来的。
我使用键盘打字,小拇指基本上很少用到,这骚操作是以前我在黑网吧自己瞎鸡儿自学成才的,然后这种错误的打字姿势形成了习惯,一直用到了现在,虽然这种野路子打法非常错误,但是可以把字打得飞快。
现在重新纠正打字方式,学习手指对应正确的键位打字,然后发现我特么不会打字了,代码都不敢撸了。
各种肌肉记忆错乱,感觉一会在梦里一会在现实中,就像被美女亲了一口,转眼又被她扇了一巴掌。。不怕你笑话,我现在依然处于这种恍惚状态。
其实我一直就想把这种错误的打字方式纠正过来,但要改变这么久的习惯确实很难。不过出来混总是要还的嘛,我这两天才狠了狠心痛改前非,在网上搜寻了一番,发现有个叫 TypingClub 的网站还不错,使用通关的模式从简入难,可以让我有效的练习到每个键位。
我说我这两天练字都不会打了一点也不夸张,如果你不是按正确的方式打字,你可以去试一下,体验那种手指忽软忽硬的感觉。
如果你是一指禅大佬,那就当我没说吧。
其实这事挺有意思的,当我使用全新的正确方式来打字的时候,我的身体细胞突然不知所措,会处于一种异常的状态,此时我的含氧量和能量会降低,细胞的新陈代谢发生了变化,DNA 中不同的基因会被激活,促使细胞达到新的平衡。
这不是我说的,这是之前我翻阅那本《刻意练习》中谈到「走出舒适区」发现的。而且,大脑的可塑性很强,如果你不去改变,那么有些地方可能永远不会被「调用」到。比如书中就有提到,盲人虽然看不到东西,但是他们的视觉神经依然在充分地运转,大脑会重新分配神经元的连接路径,能充分调动它们来做其它他们可以做的事情。
像我,现在每敲一个字都感到很别扭,很累,很想骂脏话,但我知道我正在把玩自己的大脑,正在让它帮我建立新的神经连接,让子弹飞一会儿,刻意练习一波之后,便会得到升级,便会更爽,我期待那个时刻的到来。
改变打字方式如此,改变自己亦如此。
]]>搬瓦工搭建 SSR 教程,如果你是新手,又想搭建 SSR ,那么这个一键快速搭建 SSR 教程正和你意。
SSR(ShadowsocksR ) 是 SS(Shadowsocks) 的增强版,在 SS 的基础上添加了一些功能。根据 维基百科 介绍,SSR 增加了一些数据混淆方式,称修复了部分安全问题并可以提高QoS优先级。
搬瓦工官网 提供了许多性价比高的云服务器,并且可以使用支付宝支付,可以说很是亲民了,还有专门的 CN2 路线让速度加快。
很多人不知道搬瓦工官网隐藏了一个优惠码,使用这个优惠码可以优惠 6% 左右,首先选择以下隐藏优惠码的优惠链接:
若搬瓦工无货了,可以到
优惠购买vultr云服务器,新用户首次购买可以获得 100 美元使用金
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
当你进到这个页面的时候呢,别急着点击「Add to Cart」添加到购物车,这里面暗藏着一个优惠码,很多人不知道,使用浏览器查看源代码,chrome浏览器的话按F12,然后搜索「code」,你会发现有一个 「Try this promo code: xxxx 」,这个xxxx就是优惠码,你把他复制下来,待会有用。
页面的 Location 就是选择服务器的地址,到时访问谷歌的时候会显示你当前访问的地址。好了,我们点击「Add to Cart」。
接下来,进入结算页面,我们刚才复制的优惠码就派上用场了,将你刚刚复制的优惠码复制进去然后点击 「Validate Code」,看!是不是优惠了!一般人不知道这种操作:
接着点击「CheckOut」完成付款即可。付款的时候选择 Alipay 就可以使用支付宝付款。
购买完毕后你就拥有一台你自己的服务器了,接着点击Services下的MyServices,可以看到你的服务器:
我们点击「KiwiVM Control Panel」进入管理界面:
可以看到你服务器的信息:
有了搬瓦工服务器的IP地址和端口,我们就可以连接了:
账号是root,密码可以在这里获取:
远程连接工具我一直用的是 SecureCRT , 当然你也可以使用其它的 SSH 工具。
破解版的SecureCRT可以在百度网盘这里获取:
打开你的 Terminal 终端,接着输入:ssh root@你的ip地址,接着输入你的搬瓦工的 root 密码就可以登录了。
输入命令:
yum install git
输入命令:
git clone -b master https://github.com/flyzy2005/ss-fly
输入命令:
ss-fly/ss-fly.sh -ssr
运行之后会提示你输入密码:
1 | Please enter password for ShadowsocksR: |
接着会提示你输入端口号:
1 | Please enter a port for ShadowsocksR [1-65535] (Default port: 14593):(在这里输入端口然后回车) |
接着会提示你输入加密方式:
1 | Please select stream cipher for ShadowsocksR:(这里输入 7 然后回车) |
最后就会出现下面的内容,说明你已经安装ssr成功了:
1 | Congratulations, ShadowsocksR server install completed! |
到这里你是安装成功SSR了,不过还可以加速上网:
1 | ss-fly/ss-fly.sh -bbr |
然后会提示你重启才会生效,我们按【y】进行重启。
这样就可以了。
windows点击下载:Shadowsocks windows客户端
打开 Shadowsocks 客户端,输入ip地址,密码,端口,和加密方式。接着点击确定,右下角会有个小飞机按钮,右键–>启动代理。
这时候就可以了。
Android点击下载:Shadowsocks Android客户端
打开apk安装,接着打开APP,输入ip地址,密码,端口,和加密方式。即可科学上网。
iPhone要下载的app需要在appstore下载,但是需要用美区账号才能下载,而且这个APP需要钱。在这里提供一种解决方案,就是可以再搭建一个IPsec/L2TP VPN,专门给你的iPhone使用。
前两天我跟朋友在微信上聊天,用到了张学友的「食shi啦你」表情包,突然就来了灵感:要不把这表情用 Python 做成一个搞笑版贪吃蛇小游戏?然后把整个实现过程也做成视频, 在视频号里分享给朋友们乐呵乐呵。
可以在微信搜索视频号「小帅b同学」观看。
想着做一个有用又快乐的视频教程还是挺有趣的,但让我没想到这个看似简单的视频,直接给我整了一个通宵才勉强做完。
这让我陷入了对人生的小思考。
做视频比写文章要耗费多得多的时间精力,我写公众号文章,一般是打开 Vim ,创建 Markdown 文件,一顿写完之后,用 Python 写的脚本一键排版,直接发布就完事了。
但做视频不同,除了需要写文案之外,我还需要先自己实现一遍,然后再撸一遍代码,用来屏幕录制,接着就是录音,找点音效,而后边学剪辑边剪辑视频,接着制作封面,发布。
显然,做视频的成本比较高,但相比于文章它又更生动,易于理解, 看的人也会多一些。
之前看一些 up 主分享的原创视频,短短几分钟看完乐呵完就完事了,但我现在愈加发现在这短短的视频背后他们付出了并不少,偶尔还会在观看的过程中琢磨一下他们是如何创作的。比如我之前都非常随意,视频封面随便截张图就整上去了,想着说想看我内容的人自然会看,现在发现并不是那么一回事,现在也会稍微琢磨下把封面捯饬捯饬。
有朋友问我能不能多发点干货啊?
其实我觉得我一直有在发干货,不过可能不同的人在不同的成长阶段对「干货」有不同的理解,有些人认为只有技术知识才是干货,有些人认为 7 天速成之类的武林秘籍是干货,但在我看来,一个我不曾知道的知识点,一句让我豁然开朗的话,一段表达出我难以形容出来的电影台词或歌词,一个人经历苦难后所分享出来的一点人生经验,一位作者深度思考后输出的观点等等诸如此类的吧,它们可以给我的未来提供正确的选择思考方向,能让我有所积累,能影响到我,我都觉得是干货。
不过倒是可以分开些。
我的简介是:写点代码,写点文章,做点小事业。
之后可以加上一个:做点视频。
对于文章,可以偏向我个人的观点,我的思考总结,生活记录,观后感等等,甚至写点段子消遣一下操蛋的生活。
而视频,则可以偏向技术相关的教程或技巧分享等比较实操类的,虽然制作成本高,但它演示起来比较方便,而且相对生动,亲近,也好玩些,这样结合起来应该比较有趣。
所以,正在看我文章的你,不妨把我的视频号也关注起来,两不误嘻嘻。
]]>除了使用 ss 搭建的服务 之外,也有一种新的搭建方式,那就是v2ray, v2ray 的加密方式相对稳定,v2ray 提供了各种协议,可以根据自己的需要进行搭建。本篇 v2ray 搭建详细图文教程可以让你少走弯路,通过 v2ray 一键搭建脚本以及安装注意事项可以很快让自己拥有属于自己稳定高效的代理代理服务。
关于境外云服务器,对性价比要求高的可以考虑 vultr ,vultr 最近在做活动,点击获得 100 美元优惠注册。
点击 vultr官网 进行注册:
在这里输入你的邮箱和密码,接着点击按钮「Create Account」创建账号,然后 vultr 会给你的注册邮箱发送一份验证邮件,激活就好了。
接着就可以登录 vultr 官网了:
vultr 现在有 16 个境外节点,选择一个离你最近的就好了。
登录进去之后选择左边的 billing 的菜单进行充值,vultr提供的支付方式简直完美,支持信用卡,比特币,paypal,支付宝,微信支付,在这里可以进行充值支付。
充值完成之后,就可以左侧的 Sevrers 菜单,接着可以点击 deploy one
或者右侧的 + 号来选购你要的服务器:
其它步骤可以忽略,然后点击右下角的 Deploy Now:
点击之后你就拥有一台属于你自己的服务器了:
点击你的服务器,进去之后你就可以看到你的服务器的ip地址和账号密码了:
以上信息等会用来从你的电脑连接到你的服务器上。
选好之后,点击右下角的「Deploy Now」。
这时候服务器就购买完成了:
点进去可以看到你服务器的 IP 地址和密码:
如果你使用的是 Linux 或者 Mac 系统,可以直接使用 ssh 命令连接 vps:
1 | ssh root@你的ip地址 |
如果是 win 用户可以下载连接 vps 的工具,连接工具有很多个,根据你的需要,以下随意下载一个连接工具即可:
接着打开连接工具,然后输入你刚刚购买的服务器 ip 地址和端口(端口号是:22),账户名,和密码就可以连接了。接下来就可以操作你的服务器了。
1 | bash <(curl -sL https://raw.githubusercontent.com/hijkpw/scripts/master/goV2.sh) |
执行之后出现以下内容 ,说明安装成功:
记住端口号和 UUID ,客户端配置的时候需要用到,当然,你也可以使用如下命令查看配置:
cat /etc/v2ray/config.json
1 | yum -y install ntpdate |
输入以下命令开启:
1 | systemctl enable v2ray |
复制好你定义的 port 和 id,等会在客户端中使用。
修改文件:
1 | vi /etc/systemd/system/v2ray.service |
将 Execstart 这一行改为:
1 | ExecStart=/usr/bin/env v2ray.vmess.aead.forced=false /usr/bin/v2ray/v2ray -config /etc/v2ray/config.json |
按下 Esc
然后输入 :wq
保存退出
1 | systemctl daemon-reload |
搭建好了之后可以在你的系统使用了,到 v2ray 客户端下载 ,安装后填入你刚刚在服务器中得到的ip、uuid、port后开启运行即可。
下载v2rayx, 接着打开菜单下的 Config, 将填入你刚刚在服务器中得到的ip、uuid、port填入后开启运行即可。
在客户端按照上述方法安装 v2ray ,安装完之后将 config.json 文件更改为上述的内容,将服务器的配置信息更改后运行即可。
配置如下:
1 | { |
在《推荐|哪家云服务产商性价比高,性能稳定》一文中有说到搬瓦工和vultr是性价比很高的vps,搬瓦工和vultr算是海外服务器运营商中最受欢迎的了,不管是优惠力度还是服务器本身的架构,都挺出色的,那么,搬瓦工和vultr哪个好呢?
搬瓦工和
vultr经常有提供一些优惠的活动,vultr有时候会提供充值$10送$100,而搬瓦工常年会有一个隐藏的优惠码。不过很多人不知道,搬瓦工优惠码具体获取方式可以看这里:
搬瓦工优惠码怎么来的?购买搬瓦工VPS省钱攻略:获取搬瓦工优惠码。
搬瓦工之前最便宜的是19美元/年的服务器,具体配置如下:
1 | 10G KVM – PROMO |
不过现在已经没货下架了,目前提供了$15.99/半年和$27.60/年的vps,但是配置比19美元/年的要高很多。
可以看到,搬瓦工优惠vps有 1TB 的流量,CN2路线,直连中国路线,速度很快。
而 vultr 的最低配置$2.5/月,和之前搬瓦工的最低配置差不多,也是512 MB内存,500 GB/月的流量。虽然vultr目前最低价格的配置比不上搬瓦工,但是vultr可以按月付,而且vultr按小时计费,也就是当你不用的时候可以停掉,就不会产生费用了。
搬瓦工支持的支付方式有:PayPal,支付宝,信用卡
vultr支持的支付方式有:信用卡,PayPal,比特币,支付宝,微信
之前vultr不可以用支付宝支付,现在都支持支付宝支付,算是很方便了。
搬瓦工的机房分布于美国,纽约,加拿大,香港,亚利桑那州等
vultr的机房分布于日本,新加坡,美国,伦敦等
相对来说,vultr机房多一些,选择也更多。
搬瓦工和vultr都支持KVM架构,可以使用BBR加速内核,当然了还允许执行所有基本的管理任务:启动/停止、OS重新加载、紧急控制台、rDNS(PTR)记录管理、数据中心迁移、快照、使用统计、API等。
搬瓦工提供了openVPN,Snapshots的一键安装。
vultr提供了比较多,有Docker,GitLab,LAMP,OpenVPN,WordPress等等的一键安装。
相对来说,vultr用心一些,一键安装的程序比较多,省去了用户的很多时间。
搬瓦工机房 | 搬瓦工官方测试IP地址 | 下载测试100M文件 | 下载测试1000M文件 |
---|---|---|---|
CABC_1,加拿大 | 172.93.32.16 | 100 MB | 1000 MB |
EUNL_3,荷兰 | 45.62.120.202 | 100 MB | 1000 MB |
弗罗里达 | 172.93.32.16 | 100 MB | 1000 MB |
USNY_2,纽约 | 208.167.227.122 | 100 MB | 1000 MB |
USNJ,新泽西 | 23.29.138.3 | 100 MB | 1000 MB |
USCA_FMT,弗里蒙特 | 184.105.138.67 | 100 MB | 1000 MB |
USAZ_2,凤凰城 | 198.35.46.28 | 100 MB | 1000 MB |
USCA_4 (DC4 MCOM) 洛杉矶 MCOM | 98.142.136.11 | 100 MB | 1000 MB |
USCA_2 (DC2 QNET KVM) 洛杉矶 QNET | 23.252.96.201 | 100 MB | 1000 MB |
USCA_8 (DC8 CN2 KVM) 洛杉矶 CN2 (C3) | 23.252.99.102 | 100 MB | 1000 MB |
USCA_2 (DC2 QNET KVM) 洛杉矶 CN2 (QN) | 23.252.96.201 | 100 MB | 1000 MB |
USCA_9 (DC9 CN2 GIA) 洛杉矶 CN2 GIA | 65.49.131.102 | 100 MB | 1000 MB |
HKHK_1 香港 PCCW | 23.252.97.148 | 100 MB | 1000 MB |
vultr机房 | vultr官方测试IP地址 | 下载测试100M文件 | 下载测试1000M文件 |
---|---|---|---|
(Asia) Tokyo, Japan | hnd-jp-ping.vultr.com | 100Mb | 1000Mb |
(AU) Sydney, Australia | syd-au-ping.vultr.com | 100Mb | 1000Mb |
(EU) Frankfurt, DE | fra-de-ping.vultr.com | 100Mb | 1000Mb |
(EU) Amsterdam, NL | ams-nl-ping.vultr.com | 100Mb | 1000Mb |
Seattle, Washington | wa-us-ping.vultr.com | 100Mb | 1000Mb |
(EU) London, UK | lon-gb-ping.vultr.com | 100Mb | 1000Mb |
(EU) Paris, France | par-fr-ping.vultr.com | 100Mb | 1000Mb |
Los Angeles, California | lax-ca-us-ping.vultr.com | 100Mb | 1000Mb |
Chicago, Illinois | il-us-ping.vultr.com | 100Mb | 1000Mb |
Dallas, Texas | tx-us-ping.vultr.com | 100Mb | 1000Mb |
New York / New Jersey | nj-us-ping.vultr.com | 100Mb | 1000Mb |
Atlanta, Georgia | ga-us-ping.vultr.com | 100Mb | 1000Mb |
Miami, Florida | fl-us-ping.vultr.com | 100Mb | 1000Mb |
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
vultr优惠活动经常有,包括充值10美元赠送10美元,50美元,100美元等,点击vultr官方优惠购买链接送 100 美元进行优惠购买。
搬瓦工 vps 的性价比高,很多人都购买了最便宜的配置,19美元/年,搬瓦工具体配置如下,可惜的是现在已经没有货,下架了。
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
10G KVM – PROMO SSD硬盘: 10 GB RAID-10 RAM内存: 512 MB CPU处理器: 1x Intel Xeon Transfer流量: 500 GB/月 连接速度: 1 Gigabit Multiple locations | $19.99/年 | 点击进入 |
点击搬瓦工19美元/年可以发现已经断货:
不过搬瓦工提供了另外两种优惠,分别是「网络星期一购物活动优惠」和「黑色星期五购物活动」。有点像双 11 了活动了。具体提供了如下的配置:
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*2018 网络星期一 Special V3 * SSD硬盘: 40 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit Multiple locations | $15.99 /半年 | 点击进入 |
*2018 黑色星期五 Special V3 CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 512 MB CPU处理器: 1x Intel Xeon Transfer流量: 1 TB/月 连接速度: 1 Gigabit 洛杉矶,CN2路线,使用中国的直线路线,速度加快 | $27.60 /年 | 点击进入 |
搬瓦工15美元1000G配置:
最新优惠更新
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
获取优惠码的方式:搬瓦工优惠码
今天看到一篇文章《45岁程序员发帖:精通各种技术体系,连个面试机会都没有!》, 其中写到有位 45 岁的程序员在 zf 网站留言:
我是一名计算机专业出身的软件开发人员,今年 45 岁,精通 java 的各种技术体系,包括微服务、大数据等技术,并能应用到实际工作中,帮助所在公司提升、改造所使用的技术框架,业余我还考取了PMP项目管理证书、系统架构师证书,成为所在公司的系统架构师、核心技术骨干。
我对计算机理论的理解也随着实践的增多越来越深刻,我感觉我的职业生涯进入一生中最好的时刻。
在我儿子读初二上学期时,我辞职回家陪伴儿子。半年后,当我再回来寻找工作机会的时候,却发现连个面试机会都很难得到,更别提发挥自己的专业特长了。
现在国家鼓励延迟退休,我觉得,40岁以上的有经验的专业技术人员此刻正是自身职业发展的黄金时期,他们找工作时不能被年龄限制了。
看完后你感觉如何?
我感受到了他满满的委屈,甚至可以想象得到这样的场景:
一个 45 岁的技术人,辛苦给自己写了好几页的简历,给多家公司投递,大部分 HR 看到年龄这一栏之后,直接 pass …
不过,仔细看了下这一则留言,我反倒产生一个疑问:
这是被年龄限制了,还是被自己的能力限制了呢?
他说他业余时间还去考了一些证书,但是拜托,这个行业最不需要的就是证书,因为大部分计算机相关的破证书并不能证明什么,人家更看中的是你的解决能力,是你做了什么贡献,有什么积累,不说论文什么的,你有没有博客?你有没有开源项目?有没有什么拿的出手的、属于你自己的、真正让人认可的东西?
另外,经研究表明, 99% 的人说自己 「精通」什么技术的人,不是耍流氓就是「talk is cheap」,除非在「精通xxx」后面加两个字:「拼写」。
dj, 装个逼: 我精通 Python 的大小写。
诚然,年龄确实是一个招人的衡量条件之一。相对年轻的人员更有干劲,更有精力,正所谓「年轻人便宜活又好」,倘若一个岗位的需求,年轻人和中年人都能满足,何不选前者?
尽管如此,我并不觉得中年的危机感是在于自己的年龄,而是在于自己的思维,自己的能力,自己的积累。
我始终认为,一个人工作时间比别人多,薪水比别人高,并不能代表他的能力就越强。
有句话说,把你做的事情做够 1 万小时,你就能变成你所在领域中的专家。显然,人家说的不是一直待在那个职位下简单地重复 1 万小时,而是在于一开始你给自己什么样的定位,并且是一直有积累的,这很关键。
对于我自己来说,如果我到了 45 岁,我还需要去找工作,出售自己的单位时间,那只能说明我自己混的真不咋滴啊。
我早些年就想过,对于像我这样的普通个体,要有点甲方思维,很多人上班时间久了,奴性就会越来越强,很难说不,甚至很难拒绝公司要求的工作范围以外的事情,总认为自己是在委曲求全,但事实上每次都会弄得让自己很不开心。
人们总是忘了,其实上班,只是你在拿你的时间和能力跟他们交换资源罢了。
时间是一个常量,不可(被人为)变的,但是能力是个变量,它是可变的,我们完全可以靠自己将能力提升起来。
如果说 「能交换到的资源 = 时间 + 能力」,那么提升自己的能力,我们的不可替代性就会越强,能交换的资源就会越多。
除了本职之外,可以多看看身边的机会,看看能不能整个副业出来,普通人是有斜杆优势的,哪怕真有一天公司要裁员,自己手头上还有点事情可做,不至于太苦逼。
另外就是尽量做些有影响力的事情,不要轻易给自己设限,举个小例子,我为什么要在这里写公众号,我去打几把游戏,泡泡妞它不香吗?
这不就是想让你们知道,这是属于我的「个人品牌」,我正在积累一点点的影响力,为自己的未来反脆弱一波。
]]>搬瓦工VPS相对其它的云服务产商来说,性价比高,使用起来速度快。通过优惠码购买还能再降低最多 %6 的一些费用。在这基础上使用优惠码可以少一些费用,根据你对配置的需要进行选择服务器,以下是可以获取优惠码的链接:
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
进入之后就可以获取优惠码了,选择完之后不要急着点击 「Add to Cart」。
这时候就可以获取隐藏的优惠码了,我们对着这个网页:鼠标右击-->查看网页源代码
。
接着 Ctrl + F
搜索 code
,这时候你就会看到 Try this promo code: xxxx
,这里的xxxx
就是优惠吗,把它复制下来。
页面的 Location 就是选择服务器的地址,到时访问谷歌的时候会显示你当前访问的地址。好了,我们点击「Add to Cart」。
接下来,进入结算页面,我们刚才复制的优惠码就派上用场了,将你刚刚复制的优惠码复制进去然后点击 「Validate Code」,看!是不是优惠了!一般人不知道这种操作:
接着点击「CheckOut」完成付款即可。付款的时候选择 Alipay 就可以使用支付宝付款。
购买完毕后你就拥有一台你自己的服务器了,接着点击Services下的MyServices,可以看到你的服务器:
我们点击「KiwiVM Control Panel」进入管理界面:
可以看到你服务器的信息:
有了搬瓦工服务器的IP地址和端口,我们就可以连接了:
账号是root,密码可以在这里获取:
远程连接工具我一直用的是 SecureCRT , 当然你也可以使用其它的 SSH 工具。
破解版的SecureCRT可以在百度网盘这里获取:
yum install wget
wget –no-check-certificate -O shadowsocks.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh
chmod +x shadowsocks.sh
当你输入./shadowsocks.sh 2>&1 | tee shadowsocks.log
后就可以设置密码和端口号了:
设置完密码和端口号之后,我们选择加密方式,这里选择 7:
接着按任意键进行安装。
等一会之后,就安装完成了,它会给你显示你需要连接vpn的信息:
可以看到需要连接ss的ip地址,密码,端口,和加密方式。
将这些信息保存起来,那么这时候你就可以使用它们来科学上网啦。
打开 Shadowsocks 客户端,输入ip地址,密码,端口,和加密方式。接着点击确定,右下角会有个小飞机按钮,右键–>启动代理。
这时候就可以科学上网了。
访问以下 Youtube 和 Google 试试看,速度还可以的:
让访问速度加速,飞起来!使用 BBR 加速工具。
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh
接着按任意键,开始安装,坐等一会。安装完成一会之后它会提示我们是否重新启动vps,我们输入 y 确定重启服务器。
重新启动之后,输入 lsmod | grep bbr
如果看到 tcp_bbr 就说明 BBR 已经启动了。
再访问一下 Youtube,1080p 超高清,很顺畅不卡顿!
曾今我和朋友一起合伙创业过,五五开的那种。
如果你经历过,听到了类似「合伙」,「出资和利润各占一半」等词汇,也许会有一些感概,就算你们再志同道合,感情有多么的好,但是总有那么些时候,你们开始有各自的想法,可成本就在那里,听谁的?
在谁也说服不了谁的时候,你想法再好,模式再棒,也很难达成一致。
电影《中国合伙人》有这么一句台词:
不要跟最好的朋友合伙开公司
当时我重新翻出来看,发现我擦,这…有点扎心啊。
我看到有些公众号,在劝年轻人不要想不开去创业,我觉得挺有道理的。但是,我觉得年轻人如果有自己坚定的想法,是可以创业的,只不过,最好不要与亲戚或者好朋友以合伙的方式创业,特别是重感情的,特别是五五开那种,相信我,这样迟早会出问题。
反而,我觉得如果是好朋友,好兄弟在创业,更好的方式是:
合作!
大家拿出自己的优势,在有需要的时候,大家把相应的业务结合起来,合作一波,有一个周期性,有一个结果,不管好坏,起码:
咱们合作愉快!
这是我认为除了投资外比较好的方式。
如果说,谈钱伤感情,那咱们就有机会的时候谈合作,效果可以的话就多合作几次,不伤感情。
所以后来,我只从中拿回了一小部分,不做清算,其它都交给我朋友,他也很尊重我的想法,现在我们感情依然很好。
其实当时那样操作对我来说还是有些损失的,但我觉得这不算什么,我总有一种迷之自信:老子的春天迟早会到。
那一刻,感觉自己的格局打开了,有被自己帅到!
你上班或者选择 offer 的时候,你看重的是什么?是工资,还是公司本身,还是这个行业?
从不同的角度看过去,你会发现同事们做着差不多的事情,但有些人的行为总会显得不一样。
比如我们之前有位 00 后的员工,提前离职了,要求马上结工资,但薪资都是需要到时间统一发放的。
他不管三七二十一,直接报警了!
结果呢?结果他被警察叔叔叼了一顿:这报什么警?浪费警力。
现在想想就觉得真他妈可笑。
而有些人却很不一样,看起来不那么斤斤计较,他们不觉得自己是在上班,有一种大局观在,以合作的心态,以创业者的心态在这个行业中成长, 工资对自己来说合理,公司给的条件过得去,就行了。
他们好像看得到自己身上的「经验值」,这是他们更在意的。
这,就是格局打开了
有句话说:「男人至死是少年」。
我想说:「男人至死也不要当舔狗」。
看到有些女的以自己有多少舔狗为豪我就来气,为什么要为了一个「空壳」舔到一无所有呢?为什么心甘情愿被她们吊着玩呢?我到现在还是很难理解啊。
一段关系,不能做到平等,你可以多付出,但起码也要维持相对平等一些吧,何必辛辛苦苦把人家舔得舒舒服服了,自己还要躲在角落里舔自己的伤口呢?
你要记住,娘们有的是。
把格局打开好么?
当然,我也并不是什么事情都要「格局打开」,还得分情况。
比如有黑粉根本不仔细看我写的东西,单纯为了杠而杠,为了发泄而喷,我绝壁怼回去。
比如我把你当作朋友了,但你居然要「x 我」,还一而再再而三,我绝壁拉黑。
你可以说我格局小了,但这种情况下我格局就是小了,至少我现在还是只能这样。
可能有人看到这里,想说:你特么倒是跟我说怎么把格局打开啊!?
我说多去看书的话,估计你要失望了,不过我倒是有一个方法,那就是:
把自己放到未来相当长的一个时间点,想想这个时间点的你已经成长成什么样了,然后回来看今天发生的事情。
你会发现今天发生的都不是事。
正是因为我们「看得见」,格局也就随之打开了,这时,我们所做出的改变,往往就是对的。
有一个夜晚,我和朋友走在路上,路过一个小公园,在微弱的灯光下看到有个妹纸坐在板凳上,不知道是在喝酒还是喝饮料,我朋友怂恿我去跟她要个微信,说是让我锻炼一下胆量,我说那为什么是我?
后来我们很幼稚的决定猜拳,输的就去要微信,好死不死,我输了….
我挣扎了很久,心狂跳,手心冒汗…这种生理反应,还是在挺久之前上台讲比赛项目时才发生过呢。
但没办法,输了就是输了,我鼓足了勇气,直接走到妹纸面前,激动地说出了在心里嘀咕了很久的那句:
可以加个微信吗?
她明显被吓到了,脸色有点苍白,很小声地说了句:
不好意思
这是我第一次也是唯一一次去跟陌生女生要微信,还被拒绝了。
后来跟朋友聊起,被一个渣男朋友骂了一通,说你他妈那么直接,当然把别人吓到了。
现在想来确实不妥,抱歉抱歉。
但对于有点「社恐」的我来说,当时算是挺突破自己的了,尽管无法那么地从容。
最近,「社交牛逼症」时常被提起,网上的解释是:
和「社交恐惧症」相反,在社交中不胆怯,和陌生人能游刃有余的交谈,不怕被嘲笑和冷落。
这让我想到那些销售和做服务相关的人员,比如司机,理发师,技师等,他们总能和客户无话不谈,有时候客户都懒得和他们对话,但他们依然能滔滔不绝。
上次我去烫头发,洗头的时候,妹纸一边给我冲洗,一边问我问题,可我耳边都是哗啦啦的流水声,完全不知道她在说什么,然后我就敷衍地应付「哦嗯额」,没想到她还挺开心。
这么说来,我也有「社交牛逼」的时候,比如谈到我感兴趣的事情,我能跟你聊到深夜也不睡觉。或者在一些熟悉的场景中,我也可以社交牛逼,以前跟同学去 KTV,谁生日啥的,我可以拿着麦带头搞气氛,唱生日歌。再者就是喝完酒后,我的脸皮至少厚了一倍,什么玩笑都可以开。
在正常情况下我应该属于慢热型的,我没办法跟陌生人很快就聊得水深火热,称兄道弟那种。
不过现在有时候需要做一些对接,或者上台讲些事情,我倒是没什么「社恐」的感觉。
反而是在面对亲戚长辈,特别是面对自己内心喜欢的女生时,就会有点局促,一时间不知道说点什么好。
对于社交方式,我想我们都是会有变化的,不知道你有没有像我这样的情况:在我比较「无知」的时候,我脸皮是比较厚的,我可以「社交牛逼」,当我「知道了自己不知道」时,我脸皮就变薄了,就「社恐」了,但当我「学到得到」了,我脸皮又厚了些,就又「社交牛逼」了。
我总认为,你要成为说那话的人,那么你得先配得上,你才能说出来。
最近在 b 站看到有些关于「社交牛逼」的视频,我觉得尴尬极了,在公共场合大声说话,声称「只要自己不尴尬,尴尬的就是别人」,嘴又非常地碎,说了很长时间,却不知道他在说什么,听君一席话如听一席话。
还有些陌生人一上来就是问你各种隐私的,比如你一个月赚多少钱啊?你三围多少啊?
我觉得这种不能叫「社交牛逼症」,应该叫「社交傻逼症」吧。
相比之下,那些不轻易批评他人,总是乐意鼓励和夸赞他人的人,相处起来很舒服。这样的「社交牛逼」,才是我所羡慕的,所需学习的。
在我看来,有时候人们的「社恐」,并不是真的恐,而是不想做一些无意义的社交,浪费自己的时间。
而「社交牛逼」,也不是单纯的脸皮厚,在突破自己的同时,至少不要让别人感到不舒服。
你说,是吧?
]]>关注我的公众号:小帅b和他的朋友们
搬瓦工VPS的性价比还是挺高的,可以使用搬瓦工搭建梯子,搭建自己的网站,存储等等。虽然价格算是很公道,但是其实有很多优惠码是可以减少一些费用的。那么搬瓦工的优惠码是怎么来的呢?
搬瓦工其实有一个隐藏的优惠码,这个优惠码隐藏在搬瓦工的源代码中,使用这个优惠码就可以得到优惠。
在搬瓦工官网 ,可以看到这里有一些供你选择的服务器,以下是可以获取优惠码的服务器:
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
这时候可以选择想要购买服务器的时长和服务器所处的位置。选择完之后不要急着点击 「Add to Cart」。
这时候就可以获取隐藏的优惠码了,我们对着这个网页:鼠标右击–>查看网页源代码。
接着 Ctrl + F 搜索 code ,这时候你就会看到 Try this promo code: xxxx,这里的xxxx就是搬瓦工优惠吗,把它复制下来。
然后回到我们的购买页,点击「Add to Cart」添加到购物车。
可以看到这里有一个 Promotional Code,我们输入刚才复制的搬瓦工优惠码,然后点击 「Validate Code」。可以发现得到了搬瓦工的优惠,这里我用 320G 的VPS 为例,搬瓦工优惠了 4.8%:
接着就可以以比别人更便宜的价格点击 CheckOut 付款啦。
使用 requests 请求报错如下:
Max retries exceeded with url: / (Caused by ProxyError Cannot connect to proxy)
在你的 Python 环境中,更新 pyopenssl :
pip install -U pyopenssl
]]>有个朋友,想要去面试一家还不赖的公司,但是不确定自己能不能搞得定,有点慌。问我能不能去?
我问他你有多少把握?
他说百分之六十吧。
我说:
去!
这有什么大不了的,只是面试,大不了被「等通知」打发回来,又不是创业。
于我而言,我想做的事情,长期来看,有 50% 以上的把握,就着手去做了,可能会失败多次,但这就是生活,不确定性因素永远存在,所以思来想去,只要概率 >50%,我就可以开始行动。
我一直觉得「完美」这个词有点虚。一件事物,我觉得它怎么着也得「缺」点东西,这样才能「显得完美」,要不然太不真实了。
相比之下,我更喜欢「完成」这个词,比较实在,它有行动的意味,而「完美」总是是飘飘然的,不接地气。
完成 > 完美
如果反过来,你就会一直处在永远准备状态的怪圈里面,这个怪圈,也有人称之为「舒适圈」。
这样看来,追求完美可真是个完美的借口。
而完成则不同,它可以让你跳出舒适圈,然后进入更大的舒适圈。
所以我很早就敢于承认自己就是有缺陷的,自己是不完美的。这样我才敢「有 50% 以上的把握,就着手去做了」。
比如我的英语很烂,但是烂就让它烂着了么?就要等到我背了海量的单词,精通所有语法,然后才开始运用么?
我就偏不,因为知道自己初高中的单词已经背了不少,我直接把手机的操作系统语言改为英语,我直接看英文文档。
看文档遇到不懂咋办呢,猜呗,查呗,有Google 翻译,有有道翻译,有 deepl ,有百度翻译…甚至可以自己魔改一下,写个符合自己需求的翻译器。
Chrome 有个免费的「滑词翻译」插件,我用着就不错!
英语烂就烂,先利用它来完成我需要知道的东西,这就够了,有些词反复出现,查多几次就「望文生义」了,就一不小心又进入了「大一点点的舒适圈」了。
再比如用编程开发一个产品,肯定不是要等自己把各种算法数据结构,互联网通信,Linux系统等都掌握了才开始,会一些编程基础语言,就去行动,去完成呗。
在这个过程肯定会一直卡卡卡,遇到问题了,就搜索,请教,然后补充知识;然后继续完成;然后留下一堆 bug,甩锅(开玩笑);然后接下来继续慢慢补充,完善,升级。
要什么完美呢?没有 bug 的项目能叫项目?
不过想想,这补充,这完善,这升级,不就是在跟完美打招呼么。
我喜欢通过这种学习和观察、分析,然后用一个巨简单的表达式来明确自己的行为。
我常会使用到大于号,比如刚刚的:
完成 > 完美
这样判断简单明了,实际上,你早已知道这种判断,看下下面这个,是不是一下就熟悉了:
1 | if finish > perfact and p > 0.5: |
一个 if 语句,一个大于号,有时候加上 and ,只要返回 True,那就去做相应的事。
比如我看到「进取型人格」和「表现型人格」这两个概念的时候,我发现这两种我都存在。年少的我喜欢把牛逼吹出去,然后再去执行,有时候牛逼吹大了自己也跟着信了,我想这应该是「表现型」。
后来随着自己一点成长 ,觉得应该得是:
「进取型人格」>「表现型人格」
所以我现在更多的是「装那些通过自己努力得到的逼」,把装这个行为放在大于号后面,我的行为也就随之改变了。
有时候我在 b 站刷到一些肌肉哥们的视频,我觉得他们就是 「进取型人格」>「表现型人格」的,他们每到一定的阶段会有一点成果,就拿出来装(分享)一下。
反正我是被帅到也被刺激到,然后我也开始在朋友圈装(分享)我的健身记录了。
关于这样的表达式,我总结了有那么一些,不过都是我自己个人的观点,简单举两个:
工作 > 上班
所以我就好几年没上过班了,但从没有停止过工作,没有了那种要死要活的 996,但也没有了那些愉快的摸鱼。
工作的时候也没在意什么 996、007,反正没有了上班那一套之后,有刺激也有心酸。
还是那句话:「可以不上班,但不能不工作」。
学习 > 上学
所以我会终身学习,不会因为毕业了就一直停止学习,不会因为找到了一份稳定工作就一直停止学习。
虽然有时候也不知道自己在学什么,会产生「学了这个有什么用」的想法,但反正觉得那样做是对的。
还是那句话:「可以不上学,但不能不学习」。
但有些并不是这么简单就可以做这样的比较,比如有些是含有多项的,有些是需要多个条件的,更有些是条件语句写对了,也返回 True 了,但就是难以往下执行。
这时候只能慢慢去「优化」了,比如我非常清楚地知道:
理智 > 欲望 or 情绪
但我常常执行的条件却是:
理智 < 欲望 or 情绪
我就做过非常冲动的选择,遭受到了冲动的惩罚,后果还不轻。
这里要把「<」掰过来,变成「>」实在是太难了。我想还需要很长很长的时间,需要很多很多的力量,才能一点点把它掰过来吧。
我挺建议你通过这种方式去分析自己正在做的事或者想要做的事,比如现在人们常说的搞副业。你是要多尝试呢? 还是东搞搞,西碰碰弄点蝇头小利呢?还是要结合自己的优势呢?还是只专注于自己的主业?还是…..
不妨试着根据自己的情况写写,毕竟 if 语句,大于号,and,True,这些你都不陌生。
最后想说的是,我发现我自己去执行更多 True 后面的东西后,慢慢的,有些表达式居然无形地变成我的处事原则了。
]]>转载请注明来源: 学习python的正确姿势
欢迎关注公众号:学习python的正确姿势,微信搜索:fxxkpython
观看本教程时如有疑问想要请教我,可以加入我的 VIP,便可得到我的 1v1 解答等福利。
给大家说一下,我要开始学习带你们学习 Python 了,接下来我们一起 pick up Python。是的,没错,pick up,以后你告诉别人说你要学 python,你可以很装逼的告诉他:“老子要pick up Python了!”
这个教程我会尽量做得风趣幽默,让你看起来像看小黄文一样轻松,这正是我想做的事情。
对了,还没告诉你为什么要学 Python 呢,我来说说这几点就已经足够:
现在 Python 已经成为世界上最流行的编程语言之一了,而且大部分的Linux系统,MacOS系统都直接内置了 Python ,就问你牛逼不?
现在连小学生都开始学习 Python 了,Python 已经纳入了某地区小学的教材了。Pyhon 已然成为了编程界的 “网红”,现在程序员们可能不知道Cobol,Basic,Pascal,Perl,Ruby,但没有一个程序员不知道Python的。
上手简单,现在很多从来没接触过编程的人都着手开始学习Python 了,我有一朋友,之前没有任何编程基础,学了半年多找到了份工作,工资12k妥妥的,不过不要去羡慕别人的数字,人家背后的努力你没看到而已,如果你现在也是没有任何基础或者想要从0学习 Python ,那么你来对地方了!因为人生苦短,我们一起搞 Python。
web开发,科学计算,3D建模,人工智能,嵌入式开发,云计算,大数据等等都特么能看到Python的身影,不知道你知不知道NASA(美国宇航局)使用Python来开发用于系统集成和卫星,火箭的测试自动化么?还有网易,腾讯,搜狐,金山,豆瓣,YouTube ,google,雅虎(太多,举例不完)都在用Python。所以这么牛逼,何不 pick up python 呢?
用 Python 可以做很多事情,可以爬取你想要的数据,可以做外挂,之前的微信跳一跳,12306抢票等都可以用Python实现,还有很多数据分析,项目系统,聊天系统,游戏等等多了去了。所以这么牛逼,何不 pick up Python 呢?
不妨再来看下Python官网的介绍,他说这些是使用Python的人宁愿不使用其他任何东西的一些原因:
Python很牛逼…而且很快;
可以和别人一起P;
在哪都可以搞;
非常友好&学习简单;
开放。
PS:虽然 Python 的中文意思是「蟒蛇」,但是 Python 语言的创造者 Guido van Rossum 是因为超喜欢英国广播公司的节目「蟒蛇飞行马戏」而命名这个语言的,所以你可别以为Python 创造者是个喜欢蟒蛇的怪叔叔。
不管学什么编程语言,在一开始入门的时候,都会从「Hello Wrold」开始,这已经成为编程界的不成文规定。
在1972年的时候,有个叫科比 布莱恩的人使用B语言撰写了第一个使用参数的 Hello World 相关程序。说明一下:此科比非彼科比,这哥们当然不是我的那位打NBA的偶像啊!
看下图!这就是由 科比 布莱恩 撰写的「Hello Wrold」程序:
自此,Hello World 成为了计算机程序员学习新的编程语言的传统美德!
那么,我们学习 Python 也从「Hello World」开始吧!
如果你用的 Mac 或者 Linux 的话,那么你就不需要安装了,因为系统已经内置 Python 了,如果是 Windows 系统的话,安装也很简单,比安装 LOL 英雄联盟还简单。所以我相信不用我说,你也知道怎么安装,如果你连软件都不会安装,那么可以不用关注我了。
你可以直接访问 Python 的官网 下载最新的版本。
在这里告诉一下完全没经验的朋友们,千万不要去百度搜索 python 下载,然后去到类似这样的地方下载:
因为这样做很容易被人骂傻逼的。
已经安装好Python之后呢,你可以在命令行里面输入「python」,然后你就会看到这样的东东:
有没有看到三道杠杠 「 >>>」。是不是突然想到小学的时候,那些受老师爱戴,学生中的好榜样的队长袖口上的三道杠!
不过在 Python 这里呢, >>> 是一个提示符来的,也就是在它后面可以输入一些内容,更确切的说,这是交互式Pyhon解释器接收内容的符号。
比如我们要 Python 给我们打印 Hello World 的字样,那么你就可以这样子:在 “三道杠” 后面输入 print (“Hello World”) , 然后用力按一下回车键,你就可以看到 Python 解释器打印出 Hello World 这样的字符串了:
当然仅仅是打印 Hello World 你可能觉得没什么牛逼的,但是这不是才入门么,想要做更多有趣的事情么?跟着我一步一步来!
各位 Pythoner 好啊!在这个烦躁的时代,相聚就是缘分,很高兴各位 Pythoner 能相聚于此,希望接下来的路,我们一起走下去,使用 Python 来做一些有趣的事情,有意义的事情。
我们在玩游戏的时候,我们通过层层努力的打怪升级,为的是什么?是女人么?是金钱么? 当然不是,我们有那么肤浅么?我们为了能够拥有更牛逼的装备。
所以,我们在使用 Python 来编程的时候,我们也需要一个牛逼的武器,来编写我们的代码 —— 编辑器!
在这里跟大家说一下现在市面上比较主流的 Python 编辑器供你参考,要知道,适合自己的才是好的。如果你的丁丁很小,使用再大 size 的套套也是白搭!
Sublime Text 比较适合 Python 新手使用,Sublime Text支持跨平台,而且可以使用其丰富的插件和主题。各种语法高亮和代码补全,整体看起来挺舒服的,而且主题配置起来也不难。
如果你是 Windows 系统可以使用 IDLE, 它是 Pyhton 自带的一款编辑器,所以刚开始也可以使用它来玩玩,IDLE具备语法高亮功能,还允许你在IDLE中运行你的程序。许多事情它会自动帮你处理。比如debug什么的。
Vim是一款强大的编辑器,如果你熟练使用 Vim 的话,那么你完全可以脱离鼠标,双手在键盘上像弹钢琴那般酸爽,不过 Vim 需要一定的学习成本,需要花点时间去研究一下各种快捷命令和插件的使用,但是从长远来看,这都是大有所益的。
我个人比较中意这个,如果你使用过 IntelliJ IDEA 的话,你应该会对其爱不释手,而这款 PyCharm 也是出自同一家公司,用起来会很顺手,现在很多公司,如Twitter,Groupon,Spotify,eBay和Telefonica等都在用 PyCharm 。不过你使用它的专业版需要花钱购买。
Emacs 在 python 开发界也很受欢迎,它是一款开源的编辑器,支持插件扩展,可以配置一个 python 集成开发环境, Emacs 不仅仅是一个编辑器,他是一个整合环境,可以说是一个集成开发环境。
ok,就推荐这几个市面上比较流行的编辑器,当然还有其他的编辑器,最适合自己的才是最好的,用起来顺手不尴尬才爽嘛~
在这里给点建议就是新手可以先上手使用 IDLE 和 Sublime Text ,Vim是一款强大的编辑器,没事花点时间研究下,相信我,真的会受益匪浅的。
是不是觉得我特么才安装了 Python 软件,这么快我就可以写出 python 程序了?
先别怀疑着先,一开始我就说了,Python语言简单,上手快,所以你跟着我呢,一步一步来,准没错的。
通过 Pythoner :挑选一个Python编辑器相信你已经知道使用什么样的编辑器了,因为这里力求从0到1,做一个完整 python 的体系,所以现在就先用 IDLE 这个编辑器,到时候你越来越牛逼了,咱们再换编辑器,没毛病。
首先我们来想一下我们这个 Python 程序可以干嘛?
ok,我们要达到以上的功能,咱们说干就干!
打开我们的编辑器:
现在的它是处于交互式解释器的状态,如果我们现在在这个交互解释器编写代码,那等下关掉所有的代码就不见了,我们当然是想要能够写出一个自己和别人都能够运行的程序,怎么能说代码丢掉就丢掉呢?
那么我们就使用快捷键「Ctrl + N」来新建一个编辑窗口,可以看到这里没有「三道杠」提示符了吧,我们在这里写的代码待会可以保存,爱在哪里运行就哪里运行。
我们刚刚说了,想要这个程序可以让我们输入名字,那么我们可以用一个叫做 name 的变量来接收别人输入名字,可能你现在不知道变量是什么鬼,但是没关系,你现在把它理解为是一个桶,这个桶可以来存放用户输入的名字就好了,往后我会告诉你变量的使用,别急,咱们慢慢来。
ok,那么我们就可以写我们的第一行代码了:
1 | name = input ("你他妈叫什么玩意儿?") |
解释一下这行代码的意思,input 是输入的意思,而「你他妈叫什么玩意儿?」就是显示给用户看的提示语。
我们已经完成了第一点,也就是这个程序可以让我们输入名字,那么我们继续完成第二点,可以跟我们输入的这个名字say Hello!
那么很简单,我们只要再写一行代码即可:
1 | print("Hello" + name) |
解释一下这行代码的意思, print 就是打印的意思,你可以理解为信息的输出,我们已经知道 name 这个 “桶” 已经装了用户输入的名字,所以 “Hello” + name 就是会输出 Hello xxx!
ok,我们已经写完代码了,我们「Ctrl + S」保存一下文件到桌面,你可以把它命名为「Hello.py」。
接着我们就可以来运行我们的程序了,在我们的 IDLE 中用力的按一下 F5 开始运行程序:
看到木有,我们的程序完成了。是不是挺好玩的!慢慢来,我们到时就可以写游戏,写网站,写爬虫了,是不是想想还有点小激动呢?
这两个概念很简单理解,以后我们在使用 Python 编程的时候也会经常用到。
我们知道,世界杯踢球每队会派出 11 名队员出场比赛,这里的 11 是固定不变的。我们高中的时候学的物理有个叫做重力加速度的概念,它是 9.8 m/s²,这里的 9.8 也是一样是固定不变的,对于这些固定不变的,具备字面上的意义的量我们就称为「常量」,它就像一座高高的大山,不会被轻而易举的改变,愚公移山?不存在的。
在自己动手写一个会跟你 Say Hello 的 python 程序中我们就谈到了变量这个玩意,我说变量可以把它理解为一个「桶」,你可以通过它来存储一些变化的值。
其实说白了变量只是你的计算机中存储信息的一部分内存,它可以存储所有可以变化的值。
比如说你想要用「 i 」 来表示一个变量,对python来说是一件很简单的事,你只要用 「i = 变化的值」就可以了。
举个例子:
这里使用 i 来表示一个变化的值 5,也就是说我们将 5 赋值给变量 i 。那么现在这个 i 指向的值就是 5 。
所以这里的 i+6 就是 5+6。
假如我们现在想让 i 来表示的值变成 2,这完全没问题,只要这样即可:
注意了,Python中的变量名称只能由字母、数字、下划线构成,而且不可以数字打头,像「xiaoshuaib_520」这样的是合法的,但是如果是「520_xiaoshuaib」那是不可以的。
不信你瞧:
相信通过什么是常量,什么是变量?你已经知道了变量是个什么玩意了,变量可以来处理变化的值,而这些变化的值呢,是可以对其分门别类的,也就是说每个变化的值它是有专属的类型的,你可以理解为这个值打一个标签。
在这里补充一点:Python 中的变量是不需要声明。每个变量在使用前都必须赋值,变量赋值以后这个变量才会被创建。
比如说 i = 5 ,在这里并不需要去定义这个 i 的类型,例如「整数类型 i = 5」,我们只要直接把 5 赋值给 i 就可以了,赋值后这个变量 i 就被创建了。这时候我们就可以说变量 i 现在所指的是一个为「整数类型的值5」。
接下来就来说说 Python 中基础数据类型中的「数」。
在 Python 中的数有四种,分别是整数(int)、长整数(long)、浮点数(float)、复数(complex)。
像 6 这样的数字就是整数,不带小数点的,而长整数只不过代表的是比较大一点的整数,现在 python3 中的整数(int)已经不限制数的大小限制了,所以整数类型也包括长整数。
我们可以通过 Python 交互式解释器来运算整数:
这里的 「6+6」没什么好说的吧,而 「6//2」就是6整除2的意思了,「1%2」的意思是说1除以2的余数,「%」有个专业名词叫做取余或者取模。而「2**3」就是2的三次方的意思。
怎么样?简单吧!
但是如果你试试 「1/2」,这时候你会发现结果有小数点:
在这里的 「/」是除的意思,但是不会整除,你可以看到每次的结果都会有小数点。而这些像 「0.5」,「1.0」带有小数点的数我们就叫做浮点数。
Python中的复数由实数部分和虚数部分组成。虚部的后缀为「j」。
例如:4+5j 就是一个复数,实数部分为 4.0,虚数部分为 5.0。
你可以把复数理解成为一个平面的一个点,例如上面这个例子你可以把它理解为平面上的点(4,5)。
Python连复数都支持,你说它能不强大么?
我们都知道,在计算机中,存储的数据都是像这样「010101010110010101…」的东东,这一串数字就是二进制。
想想你家里的灯,是不是只有两种状态,一种是开灯,一种是关灯。
而我们的计算机在表示数据的时候也是按照这样的状态来表示的。也就是一开一关两个状态。
我们把 0 当做关,把 1 当做开!
但是现在想想啊,我们那么多数据,比如说一个 mp3 音乐,一部苍老师的教程视频,如果只让计算机仅仅以 0 和 1 这两种状态来表达这些数据,那是心有余而力不足的。
那么怎么办呢?这时候国际标准化组织就决定了,不够用是吧,那么用 8 个这样的状态来表达一个数据!
也就是:
一个数据 = 01010101 (8个状态)
那么这样的由8个状态组成的数据就叫做字节!
不信的话你可以随便点开的桌面的文件,右键打开属性看看,是不是都会给你显示这个文件的大小都会用字节来表示:
所以知道以下的东东代表的是什么了吧:
1byte(字节)= 8bit(位,状态)1kb = 1024byte1mb = 1024kb1g = 1024mb1tb = 1024g
我们已经知道了一个字节需要8个二进制位来表示,有点长了,那么用八进制来表示的话就会短一点,比如说有怎么一个字节:
0101101
如果我们想把它变成 八进制 的话,那就从右到左,每三位当做一个,最左边的不够就补0。也就是说上面这个可以这样:
000101101
把每三位的整体转化成十进制的数,就变成八进制了。至于怎么转换,下面会说到。这时候用八进制就只用3个数就可以表示了。
同理,十六进制可以用更少的位数来表示,如果我们想把0101101变成 十六进制 的话,那就从右到左,每四位当做一个,最左边的不够就补0。也就是说上面这个可以这样:
00101101
把每四位的整体转化成十进制的数,就变成十六进制了。至于这么转换,下面也会说到。这时候用十六进制就只用2个数就可以表示了。
二进制是由 「0,1」 组成,通常以 0b 开头。
八进制是由 「0,1,2,3,4,5,6,7」 组成,以 0 开头。
十进制是由 「0,1,2,3,4,5,6,7,8,9,0」 组成。
十六进制是由 「0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f」 组成,以0x开头的。
在这里告诉大家一个进制之间快速转化的方法,当然,不是使用计算器啊 - -
首先你只要记住以下对应关系即可:
1 | 1 1 1 1 1 1 1 1 |
那么如果告诉你一个二进制 如 0b11111111,转化成十进制,怎么做呢?把对应的数加起来就可以了。
0b11111111 = 128+64+32+16+8+4+2+1 = 255
看到 255 有没有一种熟悉的感觉?
所以这时候再给你出道题,把 0b010110 转化成十进制你应该会了吧?
0b010110 = 16 + 4 + 2 = 22
同样的:
1 | 1 1 1 1 1 1 1 1 |
我们要把十进制如22,转为二进制就是:
22之内16有没有? 那么在16对应的地方就有1。
22-16=6,那么8对应的就不存在了。
6之内有4对吧,那么4对应的就有1,6-4=2,那么2也有,2-2=0,所以1就没了。
所以最后的答案就是 22 = 0b10110。
我们已经知道了在二进制中每三位的十进制代表一个八进制位:
000101101
那么这时候只要把这个二进制拆成三份,每一份转化成十进制,再组合起来就是八进制了。
000 = 0;
101 = 4+1 = 5;
101 = 4+1 = 5;
所以二进制 0b000101101 = 八进制0055。
我们已经知道了在二进制中每四位的十进制代表一个十六进制位:
00101101
那么这时候只要把这个二进制拆成两份,每一份转化成十进制,再组合起来就是十六进制了。
0010 = 2;
1101 = 8+4+1 = D;
所以二进制 0b00101101 = 十六进制0x2D。
ok,以上,其实说实话,如果不懂这个也不影响后面使用 Python 来编程,但是懂的多一些总归没有什么坏处。
我们小时候,老师都教过我们 1+1=2 ,这个 「1+1」 就是表达式, 「+」 就是运算符。
咱们接下来就来了解一下,在 python 中,那些运算符是什么意思,怎么用? 相信看完,你就能够明白了。
对于 +-*/ 我们都知道它们是什么含义了吧,就算你的数学是体育老师教的,你也会懂加减乘除吧。
不过有两个小细节值得你去注意,就是字符串之间的相加和相乘:
看懂是啥意思了么?
字符串之间的相加会被”拼接”起来,而字符串和数字相乘就会重复多次相同的字符串。
其它的大于、小于、大于等于、小于等于就不说了,因为我们小学老师都跟我们说过了。接下来说几个比较少见的符号。
幂就是以前我们学数学的时候老师讲的什么什么几次方,别一看到幂就想到杨幂。
用符号 **
表示, 比如 2**3 = 8
。
我们知道 / 是除的意思,你知道 6/3 等于多少么?你可能会觉得在侮辱你的智商对不对,不是 2 么? 在 python 中得出的结果是 2.0 , 也就是它返回的是浮点数。 那么我们只想得到整数部分怎么玩呢?
用 // 这个 : 6//3 = 2。
取模的意思不是让你去获取个模特,是得到除法的余数,比如 8%5 = 3 ,因为 8/5 = 1余3。
移的意思就是把一个数的二进制移动多少个位。
比如 2 << 2 = 8 。这是为什么呢?
首先 2 的 二进制 是 0b00000010 ,然后将它左移2位(虚位补0)就变成这样: 0b00001000 ,它对应的十进制就是 8 。
同样的道理:
8 >> 2 的意思就是将 8 的二进制向右移动2位:
0b00001000 右移动2位:0b00000010 也就是对应十进制的 2。
那么下次有人问你2*8怎么样写代码比较高效,你就直接甩给它: 2<<3 就好了。
记住一句话:”同真与真”,什么意思呢? 比如 1&1=1,1&0=0,
1就是真,0就是假。也就是只有 1&1=1,其它的都等于0。
那么 2 & 3 怎么算?
先将它们转化为二进制:
2对应的二进制 : 0b00000010
3对应的二进制 : 0b00000011
那么从右往左: 0&1=0 ,1&1=1,0&0=0,所以结果为
0b00000010,转化为十进制就是2,所以 2&3=2。
记住一句话:”同假或假”,什么意思呢? 比如 1|1=1,0|0=0,
1就是真,0就是假。也就是只有 0|0=0,其它的都等于1。
那么 2 | 3 怎么算?
先将它们转化为二进制:
2对应的二进制 : 0b00000010
3对应的二进制 : 0b00000011
那么从右往左: 0|1=1 ,1&1=1,0&0=0,所以结果为
0b00000011,转化为十进制就是3,所以 2|3=3。
相同者假,不同者真,什么意思呢?就是 1^1=0, 1^0=1。
那么 2^3 怎么算?
先将它们转化为二进制:
2对应的二进制 : 0b00000010
3对应的二进制 : 0b00000011
那么从右往左: 0^1=1 ,1^1=0,0&0=0,所以结果为
0b00000001,转化为十进制就是1,所以 2^3=1。
x的按位翻转就是是-(x+1)。
那么 ~2 怎么算?
~2 = -(2+1) ; 所以答案就是-3。
ok,以上,其实没必要去记住,了解一下就这些符号是什么意思,怎么算的就好了。
把一段文本用单引号「’」包围起来,它就变成了字符串,和数一样是一个值。比如:
text = ‘世界上最帅的人是wistbean’
这里的变量名就是text,而对应的值就是字符串「世界上最帅的人是wistbean」。
把一段文本用双引号「”」包围起来,它就变成了字符串,和数一样是一个值。比如:
text = “世界上最帅的人是wistbean”
这里的变量名就是text,而对应的值就是字符串「世界上最帅的人是wistbean」。
哈哈,是的,其实单引号的字符串和双引号的字符串是一样的,不过为什么Python要支持单引号又支持双引号呢?
那是因为,有时候我们的文本里面,不一定就只用双引号或者单引号啊,比如说:
“包钟480,包夜1200”,她说。
这句话对于 Python 解释器来说,他只认识引号里面的内容,也就是说 python 只知道字符串「包钟480,包夜1200」,而后面的「,她说。」对于 Python 来说不认识。
那么如果是这样的话:
‘“包钟480,包夜1200”,她说。’
Python 就能懂!
所以你应该理解为什么 Python 同时支持双引号和单引号了吧。
这三引号是来干嘛的呢?如果你要表示一个很长很长的字符串,那么这个三引号就可以派上用场了,因为它支持跨多行,而且在这个三引号的字符串里面你要用单引号和双引号都无所谓。
像这样:
“”” MM:”噢,请你不要吻我”MM:”噢,请你不要吻”MM:”噢,请你不要”MM:”噢,请你不”MM:”噢,请你”MM:”噢,请”MM:”噢” “””
Python 是完全看得懂的。
可能你会对这样的字符串「’”包钟480,包夜1200”,她说。’」感到别扭,老子就想都用一种引号,不想要一下双引号一下单引号的行不行?
那么这时候就可以用「转义」来解决,转义的符号是反斜杠「\」。
比如这句话「’”包钟480,包夜1200”,她说。’」我们通过转义可以变成这样:
‘ '包钟480,包夜1200',她说。’
那么这个时候 Python 就能够看懂了, 现在这玩意「'」在 Python 眼中就是「’」。
所以你可以把转义「\」理解为是为了让 Python 看的到我们想要表达的东西。
有时候我们需要两段话拼接在一起,对于 Python 来说so easy,只要像两个数字一样相加即可。
像这样:
x = "Hello, "y = "World!"x+y
这时候呢,「+」这个符号就把两个字符串连接起来了,在这里的 x+y 就等于 Hello,World!
有一些符号是代表特殊意义的,比如说 「\n」就代表换行。比如像这样:
print(“小帅b\n我爱死你了。”)
那么这时候在 Python 眼中就是:
小帅b
我爱死你了。
可是,有时候 Python 自作聪明了,比如说我们有这么一个在 c 盘下的一个叫做niubi的文件夹「C:\niubi」,那么我们这样打印的话:
print(“C:\niubi”)
结果你也知道了,路径被拆掉了。
这就尴尬了,不过还好,有个叫做原始字符串的东西,我们只要在前面加个「r」就相安无事了,这时候 Python 就知道,哦,原来你要的是原始字符串啊,那老子不帮你换行了,省的被说自作聪明。
我们只需要这样:
print(r”C:\niubi”)
ok,Python基本数据类型之「字符串」就到这里,当然字符串的使用以后会经常用到的,对字符串的操作,字符串的序列,Unicode等是接下来需要了解使用的。
还记的你以前小学的时候老师问你用「如果…那么…否则…」来造句么?每当想起这个的时候,我就会想到费玉清老师的经典名句:
「你追我,如果你追到我,我就跟你嘿嘿嘿。」
那么在Python如何表示的呢? 其实很简单,就是 if 和 else:
1 |
|
此外,如果老师要你用「如果…否则如果..否则..」来造句的话,比如说:如果你很持久,那么我嫁给你,否则如果你很有钱,那么我考虑一下,否则滚蛋。那么对应于 python 来说就是:
1 |
|
好了,我们已经知道怎么用Python去使用我们的条件语句了,那么如果你想开发一个猜数字的小程序对你来说不在话下了。
我们这就来开发一个python猜数字小游戏,首先我们自己在程序定义好一个数字,然后让用户去猜,如果猜中了我们就恭喜他,猜不中就告诉他猜的数字偏大还是偏小。
打开我们的idle,撸起我们的代码:
首先定义一个变量,把我们要被猜的数字先写好:
number = 520
接着让用户输入数字:
guessNumber = int(input('请输入你要猜的数字: '))
接着我们来判断:
1 |
|
如果你想要一个又有钱又帅的男人,怎么用 python 表示呢?
可以这样:
1 | if 有钱 and 帅 : |
在这里就用到了「and」这个逻辑符,就是并且的意思,如果有钱和帅同时成立,那么就执行 if 下的语句。如果他没钱,那么立即返回,不会再管他帅不帅了,不会去执行 if 下面的语句。
那么这时候你可能会问:那么我想要嫁给一个有钱或者帅就行了,也就是满足其一我都嫁,怎么表示呢?
可以这样:
1 | if 有钱 or 帅 : |
这里用到的「or」逻辑符,它代表的意思就是或者,如果他是一个有钱的人,那么就直接执行 if 下面的语句,不需要再去判断帅不帅了,如果他没钱,就会再去判断他帅不帅,如果帅才执行 if 下面的语句。
不知道你有没有听过这么个东西:除去睡眠,我们每个人只能活1万多天,有些人活了1万多次,而有些人呢,则只是活了1天,而重复了1万多次。
我希望我的读者不要成为后者,咱们每天提升自己一点点,活出个样子来。
在 Python 的世界里面,可以用 while 和 for 来表示重复,也就是循环。
1 | while 活着: |
这样写的意思就是,只要你活着,就一直不断的执行while下面的语句。
我们可以来写一个抛硬币的 python 程序,我们事先定义好硬币的正反面,然后让用户猜,如果用户猜对了就奖励一个吻,猜错了就继续猜,直到让他猜中为止。
打开我们的 IDLE,代码撸起来:
首先定义一个变量,我们的值定义为正面:
coin = "正面"
接着定义一个 flag :
flag = True
然后我们写一个循环:
1 | while flag : |
执行:
解释一下:当 while 发现 flag 为 true 的时候,就会一次又一次的执行执行 while 下面的一句,直到我们猜中之后,我们就将flag 这个变量改为 false ,while 发现为 false 的时候就不往下循环了。
while 可以做到在条件为真的时候反复的执行,不过有时候我们需要在特定范围循环,比如说我们要在第一天到第五天每天啪啪啪一次,那么这时候用 for 就再适合不过了:
1 | days = [1,2,3,4,5] |
我们来运行下:
可以看到第一次执行,day就是1,第二次执行day就是2,它就这样一直循环下去,没有一点念想。
有一天你突然发现,我不能再这么下去了,不能再重复的过这样的日子了,得有点改变,跳出这个重复的怪圈,那么对于 Python 来说,用break:
1 | while 活着: |
通过 break 呢,就可以跳出这个循环了。
有时候我们在循环里面,在某个地方不希望它循环下去,先跳过本次接下来的东西,直接执行下一次,这时候我们就可以用 continue了,来试试:
你可以把函数当做是一个「特定的小程序」,可以用它们来执行特定的事情。
Python中有内置了许多「特定的小程序」,我们可以非常方便的直接调用它们来执行我们想要操作的东西,这叫内置函数。
另外我们也可以根据我们自己的需要来创造「特定的小程序」,这叫自定义函数。
假设我们要自己定义一个函数,这个函数用来叫:亚麻跌,哈哈,想想我们一调用这个函数,它就叫「亚麻跌」。是不是很好玩。
像这样定义一个函数:
1 | def jiao(): |
那么当我们要调用它的时候只要这样「jiao()」就可以了。
用 IDLE 来试一试吧:
来解释一下:
1 | def jiao(): |
这里的 def 就是一个关键字来的,代表我们要去定义一个函数,而 jiao 就是函数名称,当我们要使用这个函数的时候直接调用它就可以了。而 print(”亚麻跌~~~”) 就是函数体,也就是它所具备的功能实现。
我们既然定义了一个会叫床的函数了,那么每调用一下它就叫一下是不是不太爽?如果我们能调用这个函数,然后传个数字给它,这个数字是多少,它就叫多少次,岂不是更好?
可以这样:
1 | def jiao(times) : |
在这里我们定义了一个 times 的参数,接下来我们通过这个range用内置函数生成一个序列,接着用 for 循环,这样子当我们调用函数并传一个数字进去,它就能根据这个数字,去叫相应的次数了。
比如我们调用 jiao(5),那么它就会叫 5 次。
那么如果我们想要用户输入多少次,就让它叫多少次,怎么玩呢?想必你看过之前的文章也知道怎么玩了:
可以看到我们这里的 jiao(int(time)) 传入的是一个变量,那么这样传递的参数叫做形参。而我们刚刚 jiao(5)传递的是一个实实在在的数字,我们叫实参。
我们在函数里面定义的变量,只有函数里面才可以用,在函数外面是使用不到这个变量的,所以这个变量存在函数这个局部里,我们叫这个变量为局部变量。
比如说:
1 | def jiao(times): |
这里的x就是局部变量啦。
知道了什么是局部变量之后我们在来了解一下什么是全局变量,其实顾名思义,全局嘛~ 那么就是哪里都可以使用这个变量咯。比如说我们在函数内想要更改外边的变量,怎么办呢?这时候我们可以使用 global:
1 | def jiao(times): |
那么这里 x 就是全局变量。
有时候我们需要调用一个函数返回给我们结果,比如我们定义了一个加法计算的函数,我们希望扔两个数给它,它直接计算好然后返回给我们,那么这时候我们就可以用到 return:
定义一个加法的函数,并返回结果:
1 | def addition(x,y): |
那么我们调用的时候:
print(addition(5,6))
直接返回 11 。
很多程序员其实不太喜欢写文档的,因为觉得文档这事儿好像不关自己的事情,代码才是。老子写个代码而已,凭什么还要我写文档?
Python 有个叫做 docString 的东西完美解决了这问题,让你直接在代码中写文档,其实说白了就是给代码写点注释,什么语言都会有给代码写注释的,不过 Python 的 docString 可以直接把你的注释变成文档,是不是很厉害?
我们可以通过 help(requests) 或者 requests.doc 就可以访问到它的文档了。
接下来我们自己写一个docString吧。
我们定义一个叫 myDoc 的函数,传入两个参数,再写一下docString,告诉别人我们的函数是干嘛的,传入的参数是什么,返回什么。
1 | def myDoc(param1 ,param2): |
是不是一目了然。
而且我们还可以使用 sphinx 的 autodoc 自动从docString生产api文档。是不是很方便呢?
你可以把模块理解为一个 .py文件,这个文件里面包含了所需要的函数和变量,那么下次我们任何一个程序要使用这里面的东西,我们只需要把这个模块导入到我们的程序里面来,就可以直接用了,简直不要太爽。造轮子多麻烦啊,拿来就用是了。
其实 Python 有内置了一些模块,我们可以直接引用,还有一些第三方模块,也就是我们可以自己创建模块,安装好模块就可以直接使用了。
如果我们要使用一个模块,可以将这个模块导入,使用 import ,比如我们要导入 Python 的内置的 sys 模块(sys模块包含了与Python解释器和它的环境有关的函数),那么我们就可以使用 import sys:
创建自己的模块其实就是自己写了个程序,然后给别人import,我们来写一个模块:
记住,这模块要保存到和你即将要用的 Python 程序的同一目录下,然后这文件必须是 .py 结尾不用我说了吧。
接着我们就来使用我们自己的模块吧:
运行一下:
可以看到我们不仅会使用模块,而且会自己创建模块了,真是越来越牛逼了。
世界那么大,牛人那么多,牛人写的模块,我们直接拿来用,不是很爽吗?
那么我们要使用他们写的模块之前要先将他们的模块安装到我们的 Python 环境来,然后才可以使用。
首先你要确保你的电脑已经安装好了 pip,如果你在命令行工具中输入 pip 可以像我这样那就说明你已经安装好了 pip:
推荐一个网站给你们:https://pypi.org/ 这个网站聚集了一堆牛逼的模块,你可以通过搜索任何你想要的模块:
比如说我要安装一个叫做 BTrees 的模块,那么我只需要使用「pip install BTrees」 这个命令就可以安装了。
安装完之后呢,你就可以通过 import 直接使用模块了。
为了让你更好的理解类和对象,我来举一个例子,哆啦A梦大家都很熟悉吧,那个矮胖矮胖的家伙,口袋里面有着许多我们梦寐以求的东西。
我们可以把哆啦A梦理解为它是一个对象。如果我们创建一个叫做哆啦A梦的类,那么这个类的实例,我们就叫做哆啦A梦对象。
在 python 中,可以用 class 来定义一个类,比如:
1 | class DuoLaAMeng: |
那么当我们要去使用这个类的对象的时候我们可以这样:
1 | duola = DuoLaAMeng() |
在这里呢,我们定义了一个叫做 duola 的变量,指向的是哆啦A梦这个实例。
我们的对象肯定是有一些属性给我们用的,比如说哆啦A梦这个对象可以给我们提供竹蜻蜓,所以我们可以在类中定义一些方法给别人去使用。
我们创建一个类,并且给它定义一个获取竹蜻蜓的方法:
1 | class DuoLaAMeng: |
那么当我们要调用的时候就可以这样子:
1 | duola = DuoLaAMeng() |
我们可以看到在定义 getZhuQingTing 这个方法的时候,定义了一个 self 这个参数,其实这个参数指的是DuoLaAMeng对象本身,这就和我们普通定义的函数有些许区别。
我们在调用对象的时候,有些东西是可以初始化的,这个时候 Python 就给我们提供了一个初始化函数,也就是当我们去调用这个对象的时候,它会先去执行 init 这个函数。举个例子你就明白了:
1 | class DuoLaAMeng: |
我们定义了一个 DuoLaAMeng 类, 并且给了一个初始化函数,当别人调用这个类的时候呢,传一个 name 进来,我们就可以对这个名字进行初始化了。
如果我们想要再定义一个类似哆啦A梦的对象,比如说哆啦A梦的儿子对象,那么这时候我们用继承来实现,继承就是实现代码重用的方式。
如果说哆啦A梦的儿子叫做哆啦B梦,那么当我们的哆啦B梦继承了它的爸爸哆啦A梦的时候,哆啦B梦拥有哆啦A梦的所有功能。
在 Python 中继承的表现形式只这样的:
1 | class 哆啦B梦(哆啦A梦): |
这样就说明了哆啦B梦是哆啦A梦的儿子。
举个例子:
我们在这里定义了一个叫做 DuoLaAMeng 的类,然后定义了两个方法,一个是初始化,一个是获取竹蜻蜓。
接着我们创建了 DuoLaBMeng 这个类来继承 DuoLaAMeng ,可以看到 DuoLaBMeng 其实啥也没做,但是它就是拥有了DuoLaBMeng 的所有功能。
这种继承的方式很好,比如我们以后要创建 DuoLaCMeng ,直接继承 DuoLaAMeng 就可以用所属的方法,以后我们要增加什么共同的功能的时候,只需要在父类 DuoLaAMeng 添加就好了,它的子类们都可以使用。
DuoLaBMeng 和 DuoLaCMeng 是 DuoLaAMeng 的儿子,我们也可以把它的儿子当做 DuoLaAMeng 对象来使用,比如说有一天 DuoLaAMeng在忙,这时候大雄完全可以把它的儿子们当做是 DuoLaAMeng 来使用,完全木有问题,这就是面向对象中多态的意思。
但是有些子类是独具特色的,比如 DuoLaBMeng 可以从口袋中拿出充气娃娃,而它的父亲 DuoLaAMeng 没有这个功能。
这时候父类 DuoLaAMeng 是不可以把它当做子类DuoLaBMeng 来用的,也就是子类可以用父类的方法,但是父类不能用子类的方法。
知道代码有错还狂往下写?是的没错,就是明明知道可能代码会有错误,但是我们还是往下写。就是这么任性!
有时候我们对我们的代码的报错是可预知的,比如我们想让 Python 帮我们打开一个小黄文的文件,比如 yellow.txt,可是我们的电脑不一定有,如果这个时候没有的话我们的代码会报错的对吧?
1 | document = open('yellow.txt') |
运行之后可以看到这里报错:
1 | FileNotFoundError: [Errno 2] No such file or directory: 'yellow.txt' |
告诉我们没有这个文件。
但是如果这时候我们还想往下运行怎么办呢?
那就可以把这异常给捕获掉,使用 try...except...finally...
try:用来包裹我们可能存在错误的代码;
except:当发现错了就会执行这里
finally:无论怎么样最后都会执行到的。
举个例子你就明白了:
1 | try: |
我们这里打开 yellow.txt ,Python发现不存在,那么就执行except下的语句,finally最后也会被执行:
1 | error: [Errno 2] No such file or directory: 'yellow.txt' |
那么这样子的话,以后我们就可以将预料到的错误进行捕获,然后对其进行操作。
有时候我们没有去处理异常, Python 也会给我们报出错误,这是因为 Python 有个 BaseException 的异常基类,当Python发现我们的代码错误的时候,又没人去处理,它就会层层的往上抛出错误,直到最上级。
我们可以自己定义一个异常类:
1 | class MyError(Exception): |
可以看到我们自定义了一个叫做MyError的异常类,继承与Exception,当我们传入 0 的时候就会抛出异常。在这里我们使用到的关键字是raise,就是用来抛出异常的意思。
放个异常让你心情疙瘩一下,哈哈哈:
1 | Traceback (most recent call last): |
ok,有了这两招,妈妈再也不用担心,我错误的代码该如何安放了。
什么是数据结构呢?就是存储一组相关数据的结构。
在 python 里面呢,有三种内置好了的数据结构,它们分别是「列表」、「元组」、「字典」。
我们应该都很熟悉列表吧,一个列表里面,有多个列表项,每一项就是具体的内容:
看,这个列表是不是很熟悉?那么在 python 中要表示一个列表可以用到 list 这个对象。例如:
avlist = ['亞洲無碼原創區','亞洲有碼原創區','歐美原創區','動漫原創區']
可以看到,我们用中括号把每个列表项的内容用逗号隔开,就成了一个 list 对象,然后我们将这个对象赋值给 avlist 这个变量。
在 python 中想要知道怎么运用 list 这个对象,我们可以在python 解释器中输入 help(list) 得到帮助:
来看看这里例子怎么使用 list 的吧:
运行一下:
讲讲过程:
首先我们定义了一个叫做 avlist 的列表对象,这个列表中有一些内容 [‘亞洲無碼原創區’ ,’亞洲有碼原創區’ ,’歐美原創區’ ,’動漫原創區’ ]
我们通过 len 这个列表对象的方法可以得到列表中的条目数。
可以通过 for 循环来获取列表中每一个项的内容。
我们可以通过 append 方法在列表中添加条目。
使用了 sort 对列表中的内容进行排序。
列表中的内容可以通过下标索引获取,从0开始,例如avlist[0] 就是获取avlist这个列表的第一个条目。
通过上面我们可以看到, list 这个列表对象是可变的数据类型,什么意思呢?就是我们可以对列表里面的内容进行修改,删除,添加等操作。
其实元组和列表是差不多的,不过它们有一点区别就是:元组是不可变的数据类型,也就是说元组里面的内容是不能进行修改,删除,添加等操作的。
元组使用圆括号来表示,例如:avlist = (’亞洲無碼原創區’ ,’亞洲有碼原創區’ ,’歐美原創區’ ,’動漫原創區’ )
元组通常被用来打印语句:
如果你想描述 苍井空 的特点是怎么样怎么样,波多野结衣的特点是怎么样怎么样,那么你就可以用到字典啦。
字典是以键和值组成的,键呢,是不可变的,而值可变。
字典的表示如下:
nvyou = {‘苍井空’:’美丽大方’,’波多野结衣’:’身材特好’}
接下来看看怎么使用字典吧:
可以看到,我们可以通过字典对象用[键]来获取对应的值,也可以往字典里面添加数据,我们可以用字典的items()方法获取字典中的具体内容。
我们之前所说的 列表,元组都是序列,序列还有一个叫做 字符串,为什么它们会被叫做序列呢?
那是因为它们有一些特别的地方,比如:索引,切片,相加相乘,成员资格。
对于序列来说,序列里面的每个元素都有一个编号,而这个编号是从 0 开始的,例如下面的这个序列,第 0 号就是:亞洲無碼原創區,第 1 号就是亞洲有碼原創區,以此类推。
这里我们所说的编号就是索引,我们可以通过索引去获取列表的具体想要的内容,如果我们的索引是负数的时候,那么 Python 就会从序列的最后一个元素开始数起,比如说上面这个序列,如果我们用索引 -1 ,那么就可以获取得到「在线成人电影」这个元素。
可能你这时候想说了,我用索引只能获取到一个元素,那如果我想在一个序列里面获取部分元素怎么玩?那么这时候就可以用切片来获取。
比如 [1:3]
,就代表我要获取序列中第一个元素(包含)到第三个元素(不包含)的所有内容:
这里定义一个列表:
avlist = ['亞洲無碼原創區','亞洲有碼原創區','歐美原創區','動漫原創區']
然后我们通过 avlist[1:3]
就可以获取到:
['亞洲有碼原創區', '歐美原創區']
切片最常用的还是在使用字符串这个序列中,比如:
1 | url = input("请输入你的网站:") |
在这里我们就可以通过切片的方式,来获取字符串这个序列的部分内容,比如这里我们输入:http://www.google.com
,那么这个时候我们就可以获取到[11:-4]之间的内容,也就是 google。
切片还有个叫做步长的东西,还是拿刚刚那个序列为例:
avlist = ['亞洲無碼原創區','亞洲有碼原創區','歐美原創區','動漫原創區','國產原創區','在綫成人影院 ']
在这个序列中我们如果通过 avlist[1,-1]
,那么python会从第一个元素逐一的去获取范围内的内容,也就是一步一步一个脚印的获取,那如果我们想要让它的步伐跨的大一点呢?每一步跨两个元素,那就可以这样:
序列是可以相加相乘的,比如我们之前在说Python : Hello World !中就知道了字符串的拼接,其实就是序列的相加。
如果我们想要判断一个元素是不是在这个列表中,那么我们就可以用到 in 这个关键字,如果存在的话, python 就会给我们返回 True ,如果不存在的话,那么 Python 就会给我们返回 Fasle:
我们到时候肯定是需要用到对文件进行读写操作的,也就是IO,但是我们不能直接去操作文件,我们需要去告诉操作系统,我们想操作什么文件,然后操作系统帮我们操作。
我们先创建个叫做 xiaohuangwen.txt 的文件吧:
python有个内置的函数叫做 open() , 我们可以通过它直接打开文件,打开完文件就可以读取了,但是有可能会报错,就是文件不存在,这个时候我们可以用到上次说的 try…finally 来处理异常:
1 | try: |
我们通过 open 打开了 xiaohuangwen.txt 这个文件。 r 就是读的意思, encoding就是定义好文件编码。
接着我们就打印出我们 read 出来的文件啦:
最后一定要记得将文件 close 掉,这样才不会造成系统浪费资源。
有时候你在读取文件的时候,是不是觉得每次都要 try…finally 很麻烦? 贴心的 Python 帮我们简化了流程,我们只要直接这样写就可以了:
1 | with open("G:/spider/xiaohuangwen.txt","r",encoding="UTF-8") as f: |
是不是简化了很多??
写入文件内容也是一个道理,我们首先要打开文件,然后往里写内容,如果我们传入的参数是 ‘w’ 的话,它会覆盖原来的文件,而我们传入 ‘a’ 则可以在文件末尾追加内容:
1 | with open("G:/spider/xiaohuangwen.txt","a",encoding="UTF-8") as f: |
ok,运行之后你会发现,你已经把内容写进去了,是不是很简单?
Python 有一个叫做 pickle 的模块,有了它,我们就可以在一个文件中持久的存储我们的女朋友,哦,不是,可以持久的存储我们的对象。
还有一个叫做 cPickle 的模块,它是用 C 写的,所以它更加牛逼一点,比 pickle 速度快,要快上 1000 倍,所以我么用 cPickle 这个模块会好点。
不过在 Python3 已经将 cPickle 改名为 pickle 了,所以我们就可以直接 import pickle 就可以啦。
写个文件存储器的例子:
1 | import pickle as p |
这就是存储器的使用,是不是so easy?
Python 有一个自带的库叫做 tkinter ,用它我们可以写出系统的操作界面,不管你是 Mac OS 系统,还是 Windows 系统,它都可以生成相对应的操作界面。这就是所谓的跨平台。
原理就是我们使用 Python 的代码去调用 Tkinter, Tkinter 已经封装了访问TK的接口,这个接口是一个图形库,支持多个操作系统,通过它我们就可以调用我们系统本身的GUI接口了。
接下来我们用代码玩一下吧:
1 | from tkinter import * |
在这里:
我们导入了 tkinter 的相关模块
定义了初始化函数,通过 pack() 方法将我们的组件传给父容器
自定义一个创建组件的方法,我们创建了一个标签和一个按钮,这个按钮被点击后就会触发 who 这个方法
我们通过 messagebox 来显示一个提示框
实例化我们的 APP,然后通过主线程来监听我们的界面操作
运行后如下:
###TCP客户端的编写
我们现在访问一些网页什么的,这些网页是在服务器端的,而我们访问的设备属于客户端。
比如我们现在通过浏览器访问这个地址:
那么会得到好多小姐姐的图片哈哈:
那么我们怎么通过 Python 来建立可靠的 TCP 连接,获取到这些图片呢?
1 | # 导入socket这个库 |
运行之后,我么就有了咱们的妹纸文件:
打开有惊喜。
服务端一般都是一直在运行着的,等待着客户端来连接,然后给出请求响应,服务端需要提供 ip 地址和端口给客户端去连接。
首先我们来写一个简单服务端的:
1 | import socket |
当有人连接进来我们就给他发一句:hei man,are you ok ?
接着我们再来写个客户端的连接过去:
1 | # 导入socket这个库 |
然后先运行我们的服务端,再运行客户端:
我们来先写服务端:
1 | import socket |
可以看到,在这里我们不需要跟对方连接,只要知道地址就直接发送过去就可以了。
客户端:
1 | import socket |
运行如下:
在这篇文章我们就说到了怎么使用Python爬取性感美女并保存到本地。还没了解的童鞋可以先看一下。
在这里呢,我们要使用 PyInstaller 来将我们的爬虫小程序打包成一个 exe 执行文件,然后在没有安装python环境的情况下也可以双击直接运行。
首先我们要通过 pip 来安装 PyInstaller。
1 | pip install pyinstaller |
可以先去喝杯茶,等它一顿安装:
喝完茶,差不多也安装完成了。
我们可以使用 Pyinstaller 的 F 选项来打包:
-F, –onefile Create a one-file bundled executable.
以我们的爬虫小程序为例,我们要将其打包成一个 exe ,那么我们就可以这样:
pyinstaller -F .\meizi.py
这里的 meizi.py 就是我们的项目名称。在执行的时候,Pyinstall帮我们在当前目录创建了 meizi.spec、build文件夹、dist文件夹、__pycache__文件夹。
双击dist文件夹进去一看,你会发现有一个exe执行文件。它就是一个应用程序啦。
接着我们双击一下,就开始运行啦~
可以看到它按我们的程序执行,创建了一个 meizi 的文件夹,并且去妹子网站爬取美女图片然后下载到我们这个文件夹里面。
爽!!!
打开我们的meizi文件夹,看看图片爬的怎么样了:
(完)
你能看到这里也是厉害的了,我特别为了Python开了一个公众号,名字叫做「学习python的正确姿势」,里面放了一堆福利,在里面发送python有惊喜。快关注一波。
欢迎加入我的 VIP 课程,让你的 Python 越来越棒!
详情点击:通往 Python 高手之路)
最后,记得来我的公众号呀,有更多搞笑的 Python 教程哟,微信搜索 学习python的正确姿势
就可以搜到啦!
前几天在 BOSS 直聘上招人,有个小姐姐前来跟我咨询,我们在 APP 上聊得还不错,我打算让她第二天来面个试具体沟通下细节,没想到她后面给我来一句:
不好意思,不是我本人哈,我是帮我弟来跟你沟通的。
我当时有点懵逼,这种感觉就好像,我已经预约好了技师,到房间里已经喝了点红茶,等了有一会了,准备开始放松放松,结果敲门进来的是个大哥,憨憨地跟我说:不好意思,人家今天不方便。要不,x#%#@%……
这不闹呢吗?
当时我除了懵逼之外,情绪也有点上来了,所以我回了句:
呵,不需要了,他自己要找工作,就应该他自己来啊,你来这跟我聊半天有啥子用啊!这不闹呢吗?
过了一会,她回了我说:
不好意思,不是的,是这个 APP 现在暂时不允许新用户注册…
尴尬了,这我才突然想到,从滴滴被下架开始,陆续就有些 APP 都被审查,特别是那些准备要赴美上市的…
最近也越是发觉,上面对互联网的审查监管力度越来越大。这不,现在微信和公众号已经没得注册了,放在之前,最多也就无法更换头像昵称,而这次全民级别应用的响应号召,那些所谓的技术升级,已经足以说明了些什么。
我想,这只是开始,接下来还不断会有新的动作。
好事!
对于我们用户而言,最希望的当然是我们的信息能够得到安全规范,各种生态圈不要太过于垄断,不至于想听首歌需要切换各种 APP 搜索来搜索去。买个东西不至于被来回大数据杀熟。
之前就有声音说,接下来可能互联网生态圈之间会互相开放,比如在腾讯产品中可以使用支付宝支付,在阿里产品中可以用微信支付了。我倒觉得这并没有那么容易,毕竟,在 KFC 里吃麦当劳,对有些人来说还是很「膈应」的。
不过也是,之前各种野蛮生长起来的 APP,被整治是迟早的事情。
暂且不说有些内容平台的价值观问题,现在那些流氓软件依然随处可见,广告弹窗,引诱点击,乱跳转,获取非必要的权限等乱象,这在 win 和安卓系统最为猖狂。
希望能早日规范化这些流氓玩意,让用户得以正常的使用体验和便利。而不是,用户愿意用隐私信息来换便利。谁 tm 愿意?真坏!
我以前读书的时候,因为家境贫寒,经常「被」转学,有时候刚和小伙伴熟络起来,就要和他们分开,转到别的学校去,然后又成为了一名「新生」,又得在新同学们的面前做一次自我介绍,又得被一群女同学围观着我的帅脸…
把自己弄得跟个渣男似的,比如有次转学后,以前的女同学会给我写信,发 QQ,叫我多回去一起玩。可我当时已经和新的女同学们玩的很开心了,所以只能回她一句:有些事,已经回不去了。
这可能是在她的世界里,第一次听到这么魔幻的言语。也确实从那之后我们便没再见过面。
有时候一别就是一辈子,这话倒是不假。
那时候我没得选,我只想做个好人,随着时间的推移,我开始毕业出来找工作,才觉得自己长大了些,我已经有自己认为的「选择权利」,可那时我才发现,原来要做出选择,是需要梁静茹赋予勇气的。
之前有位读者私信我说,自己快毕业找了份实习工作,可是岗位职者和自己之前所学的专业没有半毛钱关系,自己又有点喜欢那份工作的内容,他表示很纠结,不知之后怎么选了?
其实不止是他,我发现我身边大部分朋友也是这样,有学了管理最后去带娃的,有学了设计最后去做人事的,有学了计算机最后去锻炼身体,然后上钟的,还有去创业的….
我想他们当时在做选择的时候也一样纠结:那么我之前所学的专业都特么白费了么?
当你我有得选的时候,却同时也出现了很多令我们左右摇摆的因素,像刚提到的「沉没成本」,以及「知识诅咒」、「未来的不确定性」等。
当我们成为了「成人」,就开始在做一些大大小小的选择,结果的好坏,需要自己承担,最后它们都决定了自己成为什么样的人。
而对于我来说,我更加愿意尊从自己的内心,摆脱类似「专业限制」的框框。
尽管有些沉没成本在,尽管接下来的路相对难走一些…,又或者说,这么选择了之后,结果可能并不如意,你是能否接受?
这需要我们自己给自己答案。
当然,在选择前,还是需要做一些考量的,这是我之前学到的,在这里顺便分享一下,那就是你要选择的这件事情,除了你自己有那么些许兴趣,它是否具备「可积累」的条件?
也就是说,你选择的这件事,能够让你学到越多东西,能够让你的能力越来越强,能够让你越来越有价值,最好它还能和你的优势相结合。
比如一位在校的老师,选择做一位作者,持续写作。那么相比于他在学校做着简单的重复授课同样的内容,后者是可以积累他的能力和影响力的;
又比如一位客服,选择做了运营,那么相比于客服的回复各种重复的产品问题,后者可以学到更多,运营能力越强,是不是价值就越高了?
我一开始写公众号的时候,也有朋友表示不解。可我知道,如果这事能坚持下去,那它就是「可积累」的。
另外,你要选择的这件事情,它是否具备「顺应趋势」的条件?
这我就不必多说了罢,毕竟「台风来了,猪都能飞起」这话你我已经听了不下百遍了,只不过很多人在做选择的时候却时常把它抛到脑后,然后看着别人好像不需要怎么努力,然后就成了,你说,气不气。
嗯,如果你在做选择时纠结了,不妨参考一下,也许不一定对,也许刚好帮到你。
那么我们下回见,peace!
在 mac 中安装 mysqlclient 报错如下:
1 | ld: library not found for -lzstd |
zstd 库缺失货找不到
brew install zstd
1 | CFLAGS="-I$(brew --prefix)/include" LDFLAGS="-L$(brew --prefix)/lib" pip install mysqlclient |
1 | CFLAGS="-I$(brew --prefix)/include" LDFLAGS="-L$(brew --prefix)/lib" pipenv install mysqlclient |
前阵子郑爽被爆出日入 208 万,让不少打工人心态炸裂,看着每天忙碌的自己,到头来,努力了十年还不如人家在镜头前的一个微笑,这种悬殊的差距让很多人感到无望。
所以事已如此,何不躺平?
最近「躺平主义」这个梗很流行,意思是说,我们可以降低自己的欲望,不以社会世俗观念为标准,不买房,不用名牌,不结婚..反正只赚一点饭钱来填饱自己的肚子,然后躺好就行了,以此来应对「内卷」、对抗资本,宣称不做资本的奴隶,反正怎么努力也是被「割韭菜」,不如躺平就好,这样镰刀刮下来也刮不到自己,还可以舒舒服服的苟活于世。
我在网上看到不少年轻人表示赞同,但我觉得这是一种懦弱的表现,提出躺平主义的人是坏,而跟着躺平的人直接就是蠢。
因为大部分年轻人都没有资格现在就躺平,躺平意味着直接认怂,放弃任何抵抗,对机会视若罔闻。
可,真正有资格躺平的人绝对不是我们,而是那些:
已经有一定资产积累的人士,以及:死人!
是的,那些有资产的人已经可以通过投资来达到「被动」收入,即使他们躺平,也不影响自己的生活质量。
然而,当他们达到一定的生活水平,更是不会选择「躺平」,反而是更加积极努力的生活,比如每天健身,搞事业。
年轻人可能暂时看起来一无所有,不过年轻的资本就是时间和精力,把它们躺掉真的好吗?
也许你看到了与别人的财富差距,然后失去了动力,可是这种比较完全是自找的,把自己跟少数人去比较,把自己跟那些通过努力积累的人去比较,把自己跟那些很是幸运的人去比较…这样比较的后果别说躺平了,入土的心都有了。
你咋不跟那些每天吃土的人做比较呢?
若比较不对等,则结果无意义。
一种更好的方式是,跟过去的自己比较。
李诞之前有句很火的话叫「人间不值得」,他给人的印象也是那种无时无刻不想着「躺平」的人,但实际上,他比大部分人都努力,人家落户上海户口,上各种综艺,为自己的节目各种操心改版…上亿身价的他,之前告诉你「人间不值得」,你信嘛?
我能想到最烂漫的事,就是躺着也能赚钱,如果说这是一种「躺平」,那才是我们应该追求的,而这种「躺平」不是此时此刻,而是在未来的某一个时刻,那个我们通过正确积累到一定程度的时间点,而这「正确积累」的时间段,正是我们折腾的时候,怎么能躺平呢?
「延迟躺平」没什么不好的。
现在就别躺平了,起来吧,赶紧书写自己的逆袭故事,特别是在这个没办法「怀才不遇」的时代,说不定就成了呢?就算失败,也总比躺着强啊!
好了,不多说了,我去躺着了。
]]>我们在互联网上社交常常会用到「狗头表情包」来保命,很有意思的是,只要在一段文字后面加上「狗头」,它就会变得有点小幽默,尽管你说的是内心真实的想法,对方也会更加容易接受,有时候甚至还有点反讽的意味。。
是吧,小傻瓜「狗头」
在币圈,从比特币的兴起到各种衍生的「山寨币」,投机氛围可谓水深火热,狗狗币就是「山寨币」之一。
不过和其他山寨币不同的是,它使用狗头当作币,一看就知道它有多不正经。
它的发行量 1000 亿,这么大的发行量可以在一定程度上避免了投机者对币值的操控,也正因如此,狗狗币的价格远低于比特币,人们在交易狗狗币更多的是为了好玩,更多的是社区文化交流的一种手段,比如通过它来进行小额打赏,分享等操作。
特别是表情包这种搞笑文化,深得网民的心。
想象一下,如果 up 主在 b 站发布视频,粉丝们觉得视频很赞,投币投的是「狗狗币」,是不是挺好玩的?
而最近狗狗币越来越火还是马斯克在推特上的推波助澜:
使得狗狗币暴涨了一波:
搞的大家都嗨了:
不过还是把你的小心思收一收,小帅b可不是来告诉你去买它,这关于需要独立思考的东西得自行思考,特别是有风险的玩意。
不过狗狗币发行量大,倒是可以带你体验一下挖矿的乐趣,因为使用你的电脑就可以轻松挖到它,不像有的币种,需要牛逼的矿机和显卡。
那么首先,你得拥有狗狗币核心钱包,你可以进入官网,根据你相应的系统下载相关的版本:
当然,如果你因为这样或那样的问题下载速度慢的话,没关系,我已经帮你打包好了,包括接下来要使用到的挖矿脚本和软件:
你可以进入公众号微信搜索「fxxkpython」发送「狗狗」获取!
如果你是 Windows 系统,直接将钱包目录中的 exe 执行就可以了。
Linux 系统需要先解压一波:
接着进入 bin 目录,将钱包的 qt 版本打开:
一开始需要选择将钱包存放在空间大点的位置,需要同步区块:
接着你会进入狗狗币的钱包,区块同步界面你可以先隐藏,左下角让它慢慢同步:
然后点击菜单栏中的 「Much Receive」,你就可以在里面生成属于你的狗狗币公钥地址,它可以用来收款和挖矿:
当然你可以生成多个地址,再次点击 「Much Receive」进去生成就可以了。
好了,现在你钱包有了,地址也有了。
如果你电脑有显卡,可以使用刚刚你在公众号中下载的 lolminer 挖矿脚本了。
首先解压它:
接着可以编辑 mineeth.sh 或者 mineeth_4G.sh(如果你显卡有 4G 的话),然后将其中的 POOL 和 WALLET 改为你的地址:
这里的 POOL 使用的 unmineable, WALLET 改为你刚刚生成的狗狗币地址,其中格式是:狗狗币地址.矿工名称 。(这里的.「矿工名称」你可以随便定义)
接着执行命令 sh mine_eth.sh 就可以开始了。
或者,你也可以直接执行命令开始挖:
1 | ./lolMiner --algo ETHASH --pool ethash.unmineable.com:3333 --user 替换成你的狗狗币地址.替换成矿工名 --ethstratum ETHPROXY |
如果你希望使用 CPU 来挖,可以使用你刚刚在公众号下载的 unmineable,在 win 执行前需要把安全防护关掉。
打开软件,点击 Continue:
选择你要使用 GPU 还是 CPU 挖矿:
选择 Dogecoin,然后把你自己的狗狗币地址输进去:
点击开始,稍等一会就可以开挖:
简单吧?
OK,这就是小帅b今天给你的分享,希望你能玩的开心,挖到了记得给我发狗币图片。
]]>想必你应该经常听到这么一句话:
工欲善其事,必先利其器
好的器具,才能让你工作更加高效,生活更加开心,和谐…
愿你我都拥有好的器具
今天给你分享一下,小帅b常用到的设备,它们在我的工作生活中起到了很大的作用,我把它们分享出来,看下能不能给你带来一些借鉴。
我现在正在打字的这台电脑,是苹果的「MacBook Pro」,2019款, i7的CPU,搭配 16+512 的内存,对我来说码字和写一些程序完全够用了,系统用着也爽,自带的键盘打字舒服,不过就是有点重,虽然我的右手很强壮,但有时候去远点的地方携带起来不是很方便,另外就是有些项目没办法跑 GPU,因为它用的不是 N 卡。。。
机械键盘用的是 HHKB Pro,白色款的,用久会显得不是很干净,不过颜值还是可以的,刚开始使用的时候不是很习惯,毕竟很多按键都浓缩了,整个键盘只有 60 个按键,但是一旦用熟了会很爽。
可以切换不同的键盘模式配合不同的系统使用。采用的是静电轴,手感可以,键盘声音听着爽。
相对小巧,携带也方便,有时候我没带电脑,我会使用它连接到手机上办公,瞬间感觉手机变成了电脑。
降噪耳机我用的是 Airpods Pro,降噪功能确实是我的刚需,有时候我在写文章或者撸代码的时候,不希望被别人打扰,使用这个耳机听歌的时候调为降噪模式之后,感觉这个世界就是我的了哈哈,小巧,使用也方便——可能是最小的蹦迪神器了。
我的另一台主机,使用了两块显示屏,一块是 AOC 的, 27 英寸,可以旋转和升降,另一块是 Dell 的,相对尺寸小些,使用多屏显示器可以提高我的工作效率,比如开发的时候,可以一边看文档一边撸代码,不需要在一台机子上切换来切换去。
代码调试也是,我可以在一个显示器中查看代码的执行,在另一个显示器中打开与之关联的调试窗口,非常方便。
手机我用的是 iPhone12 ,256GB 的,我不玩手游,对手机的性能要求不是很高,之前买他是看完发布会觉得性价比可以,而且主要是 iOS 和 macOS 的生态系统结合的很好,文件共享什么的很方便,举个简单的例子,我在电脑上复制的文字,可以直接在手机上粘贴。。。
电子手表用的是 Apple Wacth 3 代的,虽然苹果表已经更新到 6 代了,不过我觉得我的 3 代完全够用,平时主要用来看看时间,记录下健身,刷下地铁,冥想。其它功能基本不用。
不过有一点是它的续航有点垃圾,基本上每天睡觉的时间都得拿去充电。
之前需要录制点声音,我买了个比较专业的麦克风,叫「Blue Yeti」,直接插上 USB 就可以录制,质量没得说,可以调节不同的模式,降噪功能非常棒。
我看现在挺多主播都在使用这款,说不定哪天我给你们直播可以用到它(狗头)。
不过它挺笨重的,不太适合那些需要到处跑的人。
系统主要用的是 ubuntu 和 macOS,使用体验比 win 强的不是一点半点,当然,玩游戏另说。
云服务器,主要使用的是阿里云和 vultr,阿里云算是比较成熟了,我的一些国内的服务一般都部署在阿里云服务器上,网站备案什么的也直接在里面操作了,也相对安全一些。对于不需要备案的,推荐使用国外的云服务器,我使用的 vultr 就挺稳定的。
OK,其它一些比较杂的就不多说了,如果你刚好想要换设备,希望我分享的这些我正在使用的设备可以给你带来一点参考,当然,你有什么觉得好用的设备也欢迎在后台给我分享。
不同的人消费习惯不同,在这里顺便分享一下我的消费观念,其实我对物质的要求并不高,吃顿大鱼大肉也行,吃顿方便面也行,但是对于在我工作上需要用到的产品,我会尽量购买那些在我承受范围之内最好的产品,这一点我绝不将就。因为道理很简单,它们是生产工具,是工作必需品,设备越好越能提高我的效率,减少我的时间,还不影响我心情。
把时间当作朋友,之后回头看会发现,这种消费方式是稳赚不赔的,或者说是回报率超高的操作。
有些钱,节省出来的是需要拿很多时间精力做交换的,得不偿失;而有些钱,花出去了反而让你越来越多钱,可真是奇怪吗?
好了,我们下回见,peace!
]]>你好,我是小帅b,我和大多数人一样,出身平凡,而且负二代。喜欢装逼,喜欢美女…确实,我有一些不良的嗜好。当然,我也追求进步,爱折腾,爱分享…
我之前说过这么一句话:
装逼,是人类永恒的需求!
说是「人类」有点夸张了,但不知道这是不是大部分人天性,还是「遗传」因素?
反正,我爸就挺爱装逼的,所以我自己爱装逼这事,我觉得有一部分原因是要怪我父亲的。我看过我爸年轻时的照片,那渣男烫的发型和现在的我基本一致…
在我还是个毛头小子的时候,我的社交网上,有 80% 是我的自拍照,那会还顶着一头酒红色的毛发,可把自己差点给帅死了…
不过,「生活」总会到一定的时间,开始教我们做人:
这人,还是不能太装!
后来,我就给自己做了个约定:
咱们,要装,就装那些通过自己努力得到的逼。
我这人说话有点俗,你别想歪,我想要表达的关键词是「自己」、「努力」。
说这话,是因为我之前把这句话作为我的「个签」,然后不久就被长辈误解了,后来索性就改成了:
答应自己的事情,就要做到!
这下可好,亲戚说我这样去相亲的话才容易找到对象。。。(好像有点跑题了)
我主要想说的是,因为我爱装逼的性格,所以才会不断的去折腾,自学,分享…
比如,以前大家都玩 qq 空间,我当时就研究怎么让自己的 qq 空间主题搞得非主流一点,别人发说说,我就写日志发自拍,骗同学们点赞;
比如,大家都玩 Android 手机的时候,我就开始自学怎么刷机,各种定制 rom 各种玩耍,差点变成砖,还整天拿给朋友臭显摆;
比如,有一些工具我用着不爽,我会自己去开发一个适合自己的,顺便发朋友圈吹牛逼;
比如,以前和同学参加比赛的时候,需要投票,就自己给自己的团队通过一点小手段刷到第一,因为无知,所以成员觉得我好厉害,后来被发现毙掉了- -;
比如,酒量差的我,因为有女生在场,所以死不认怂,最好把自己喝到吐;
比如,别人在使用第三方博客平台的时候,我就折腾自己搭建一个,那会用的还是Octopress;
比如,以前情人节魔改了小游戏给女票玩,恨不得让她的朋友都知道;
比如,现在有些业务上的需要,会想办法开发小机器人去「应付」,让同事开心一会;
比如…太多了,列举不完,就先不举了,反正你从公众号也多少能够看得出…我有点不一样。
也正因如此,我现在手上拥有的大部分东西,包括你看到我呈现出来的东西,都是我从 0 开始,通过折腾和自学出来的。
在一年多之前,有小伙伴建议我开个「知识星球」,其实我很早就有玩过这玩意,后来发现它不太适合我这种发教程文章的,它更适合用来像「发朋友圈」那样发贴,而且,我总觉得有被束缚的感觉,所以后来想了下,我何不:
自己搭一台子!
我个性比较自由,所以在自己的地盘,可以尽可能的写一些比较私密的东西。
所以,也就有了:
fxxkpython.com
从这域名你也能看得出来些什么?
不过,我还是想解释一下:
有时候我在起项目名称的时候,我喜欢在前面加一个「fxxk」,其实我真没那意思,它对我来说是一种「态度」,我知道,不管做什么事情,总会遇到这样那样的麻烦或者意外,我想传达的是这个意思:fxxk是一种态度——搞定它,干!
在这里,成为了我和加入 VIP 的朋友们的私密之地…
也许你会问:
在 Python 学习的路上,我和你一样,我走过一些路,所以,我懂你,我在这里要写的东西,更多的是站在你的角度,循序渐进的写着你的需要,比如,自学需要什么样的方法?为什么需要心里建设?怎么协作?怎么找源代码?在 GitHub 查找源代码的技巧?想要快速入门 Python,最需要掌握哪些内容?在什么阶段可以做什么事情?Python进阶知识是什么?如何掌握?知识体系是怎么样的?甚至于工具的使用,如何打造 Python 专用的 Vim 编辑器?再回归基础理论?数据结构算法,数据库,如何通过项目进行学习?等等…
这些我都会在接下来的 VIP 中写到,事实上,大部分内容,其实已经在里面更新了。
你可以进入 https://vip.fxxkpython.com,通过目录查看已经更新的相关类目,只不过具体文章内容非公开,但你可以检索到相关的文章标题和部分预览内容:
值得说的一点是,里面所有涉及到的例子,都是我亲自运行觉得没毛病才会分享出来的,之前是,接下来也是!
我依然会使用小帅b的风格,尽量像个朋友一样,用比较易懂的方式,用心的让你明白,理解一些东西。就像已经加入的他们一样:
当你成功订阅了小帅b 的 VIP,全网的内容立即解锁,你可以看个够,不仅如此,你接下来的一年里还将会持续得到推送,享受到我写的私密非公开的内容教程。
我更希望你能通过这里,受到我一些正面的影响,带给你一些价值,希望你可以洗得一技之长,能够利用它来解决你自己生活和工作上的问题。
互相陪伴,一起成长!
除吃之外,接下来我还会尝试做一些衍生的产品出来,不用多说,对 VIP 的朋友肯定会有最高的利益。
你可以扫下方二维码或点击申请VIP进入购买订阅,越早加入越有优势,你懂的:
来吧,我等你!
最后,送给即将加入或者已经加入的朋友们一句话:
不懂,无所谓,不行动,才是可怕,可是:
一怕,就输了一辈子!
共勉,下回见,peace!
]]>回看去年的年终总结,有点惭愧,2020 要做的事情有些并没有完成得很好,比如我虽然有健身了,不过腹肌只是隐隐若现,还不够明显,拍照的时候,需要腹部用力,对好光线,才能看到那么几块「弱小」的腹肌。
在 2020 开年之际,我和小伙伴们都说「2020牛逼」,让我没想到的是给「牛逼坏了」,那会打乱了多少人的计划,那会我们人心惶惶,那会全民带起了口罩。
也是那会,我失去了一位老人。也是那会,我第一次走进火葬场的大门。也是那会,从不去酒吧蹦迪的我去了。也是那会,几年不抽烟的我又点燃了烟。也是那会,投入了时间精力,又和朋友合伙搞新的事情。
现在站在这里,回头望过去这一年的自己,确实是有三两事情需要自己来检讨检讨的。
1,你骄傲个屁呢?
我发现我自己在做的事情,有一点点成绩了就会过于骄傲,然后那种要拼的劲儿也会随之减弱,不小心进入了安逸的状态,最初那种在低谷中疯狂往上爬的感觉,怎么就忘了?需要等到我又再一起触底才能反弹。
这一点,是我在舍弃自己大部分的安全感后意识到的,我把那「安全感」放在了现在无法获取,未来或许可以让我增值的地方去了,在这个过程中有一个「空白期」,它会把我从安逸状态中拽回来。
也许这是好事,因为其一,我又会开始像鸭子一样,在水面下不断的扑通双脚,其二,让我能够意识到自己的不足之处,调整回来。
2,知道了,然后呢?
当我去看书,付费去一些社群中学习的时候,我确实学到了不少东西,我知道了,明白了,懂了,但是,我特么就是没去做,说到底那还是没什么鸟用啊操!
有句话说「行动上的巨人,思考上的侏儒」,可是反过来,「思考上的巨人,行动上的侏儒」,也是不得行的。
so,学而不思则罔,思而不「行」则殆。
3,你的精力去哪了?
iPhone12刚出来那会,我就买了,然后就重新下载了王者荣耀游戏,想着体验一下手机的性能,然后就是各种排位,直到意识到自己的注意力全都花费在这游戏上,已经是好几天过去了。
还有那么一阵,我发现那些「推荐机制」上的 APP 占用了我大部分时间,所以索性卸了个载!
4,为什么总是睡不好?
我的睡眠质量挺差的,可能和以前的 996 有关吧,而且自己又是一个夜猫子,很多时候,躺床上过很久才能入睡。我现在深知睡眠质量对身体健康是有多重要。
不过这两天我的睡眠质量挺好的,突然找到了好睡眠的方法,那就是让自己的身体「动」起来,这两天大家都在过年放假,而我并没有,我自己一个人在仓库干苦力活,从白天干到黑夜的那种,结束后身体会感到「累并爽着」,在这种情况下入睡明显很快,而且感觉睡得香。
这种感觉不是没有过,只是时间过了很久,我给忘记了,比如以前我搬家的时候,一整天都在「搬砖」的感觉,到了晚上自然很容易睡得着,还有以前学生时期,去餐厅做服务员,去工厂做暑假工的时候,那时候晚上都是睡得贼香。
所以呢,如果你也睡眠很差,不妨试试这招——让自己的身体充分「动」起来。
另一个就是情绪的问题,自己对外界的看法,对琐碎的事情处理,情绪需要好好调整,坏的情绪也是影响睡眠质量的关键因素之一。
所以调整好情绪,配合褪黑素,也是可以提高睡眠质量的。
5,不必讨好!
不知道是不是我们的教育环境还是工作环境的问题,我发现大多数人都有「讨好型人格」,我也不例外,有时候真的是会为了对方的感受而忽略了自己的感受,最后只会让自己感到很是不爽。
后来学到了一点是,把自己的份内的事情做到足够好,对得起自己,自己真的感到尽力而为就行了。
好的合作,不是互相讨好,而是发挥各自的优势,实现「1+1>2」 。
6,拆分才是王道?
学会拆分,是做事的关键,有时候我们看到要完成的任务很繁重,很容易感到难以完成,其实把它们转化为一个又一个更小的任务,我们就可以在当下一点一点的完成,不会一下子被吓倒。
有一些优秀的人士,每天 24 小时也是被他们拿来拆分的,而后根据他们自己习惯的「时间颗粒度」来完成相对应的事情。
其实很好理解,比如我们要吃一顿牛肉火锅,不可能是将整头牛拿来锅里涮,都是要切成一片一片的才能入口。so,做事情之前别忘了拆分!
7,技师虽好,不能「贪杯」
这个就不多说了,希望新的一年多多克制吧,减少「欲望消费」。
wistbean 1.0 版本
除了之前没有完成好的事情继续完善好之外,我想从今年开始,把自己当作 1.0 版本,什么意思呢?
就像软件开发那样,一个软件从开发到测试,再到上市,一开始它只是 1.0 版本,然后通过不断的优化升级,版本号逐步增加,软件越来越强大。
所以,我希望在 「wistbean 1.0 版本」里面,开发出三个最主要的功能:
1,做别人不想做的事情
我相信不止是我「知道了,然后没有去执行」,别人不想做的事情,往往可以从这里寻找到机会,或大或小。
2,做别人不敢做的事情
王健林大佬说过「清华北大,不如胆子大」,我自己很是认同,因为在我的生活中就看过这样的例子。
不能总是怕这怕那,有时候机会在那里,但是自己不敢去尝试而错过,真的是很亏。所以我最想开发的就是「做别人不敢做的事情」这个功能,不管是建立自己的个人品牌上,还是事业或者爱情上,希望我不要脸皮太薄。
3,做别人做不到的事情
这个是建立在以上两个「功能」的基础上的,只有上面这两个功能完成了,我才能「调用」它们,并通过额外的学习和执行,从而实现「做别人做不到的事情」。
ok,以上,感谢你能看到这里,希望我们都能升级,成为更好的自己,祝你牛年大吉。
来年,咱们继续!
]]>这,马上就要过年了,你妈,逼你结婚了么?不知道你怎么样,反正我今年是被父母各种旁敲侧击,催了又催,真是操碎了心。还有一些朋友也经常想给我介绍小姐姐,希望帮我快点脱单。我知道他们都是为了我好,不过我总觉得自个都还没活出个人样来,甚至前段时间我还一度认为,单身挺好的,我爱干嘛干嘛,所以我这两年基本上没有主动去寻求一段长期关系。
有人问我,想要找什么样的人在一起?我以前总是开玩笑说,我要胸大的,屁股翘的,长得漂亮的,笑起来甜甜的…,这话就像那些小女生说的我要「长得帅的,有房有车有钱的,能把我举高高」的那样可笑。
如果把这些条件都加起来,过滤一波,能够互相匹配到对应的人,那简直就是奇迹,况且你我是那样的普通。
尽管,我确实在生活中遇到不少「胸大屁股翘的,长得漂亮的,笑起来甜甜的」人,但是她们大多是「服务人员」,也许可以在一起相处很短暂的时间,也确实是开心,不过就是没有然后的了。
而,我们要的不仅仅是短期的恋爱或者约炮关系,我们想要的是长期关系,那么我觉得就得需要考虑到一个比较底层的东西——我们的操作系统。
我们在使用计算机的时候都知道,不同的系统,是没有办法兼容所有软件的,Windows 系统里的 exe 执行文件,就是无法在 Mac OS 中运行的, Linux 的操作方式,就是不适合在 Windows 里面操作的。在同一个系统中,我们只能安装对应的软件来使用,对吗?
人,也是一样的,长的好不好看,身材好不好,都是比较浅层的,它们虽然重要,但这仅仅是加分项,因为它们远没有这个人的「底层想法」重要,比如 TA 真正想要的是什么?TA 的能力是什么?
就像软件,你做得再好看再精美,如果没有操作系统支持,怎么运行得起来呢?
假如说,你为了培养一段长期关系,你发现对方的操作系统和你的不一样, TA 的是 Windows 系统,你的是 Linux 系统,你为了 TA 专门去开了个虚拟机,在里面安装了 Windows 系统跟 TA 交流,也许一开始你可以接受,但是久而久之你会发现,这是很容易「出轨」的,不兼容终究是不兼容,你就是不习惯甚至排斥用那种系统的软件,只好卸载掉,或者,你本就不想要一段长期关系,只是想要短暂的玩玩,那么开个虚拟机对你来说无所谓,反正,系统随便换嘛,你个跨平台的渣男。
说到来,我认为一段好的长期关系,就是我们互相陪伴,你我都懂得对方想要的是什么,然后互相成就,这是最好不过的了。
你说呢?单身狗们。
]]>iPhone 有一个功能,就是可以看到你在不同 APP 的使用时长,我看了下,排在前面的有某视频 APP,使用时长占比还挺大的,索性就把把一些基于「推荐」的 APP 给卸载了,我突然意识到,我有很多时间,不知不觉就被它们「杀」掉了。
作为产品来说,让用户在在上面留存的时间越久,越好,看下我们手机上大部分的 APP,在背后的,是一个又一个的团队,在研究如何让你「频繁」使用它们,比如你的每一个行为,每一个特征,都给你打上标签,然后计算它们的权重,预测出你接下来想要看的东西,然后不断的推给你。
有句话说「you are what you eat」,你吃什么,你就成为什么样的人,之前,你还会自己选择吃什么,现在是人家直接把食物伸到你嘴边给你喂着吃,那玩意明明是shi,它跟你说这是进口巧克力,你还觉得挺好吃。客官,要不再来点~
现在的微信,知乎等平台,都特么疯狂的往视频方向整,你有想过为什么吗?其中的一点是,相比于文字,用户看视频是很「轻松」的,收割用户的「注意力」是最高效的,流量是多的。
对于用户来说,这种所谓的「轻松」带来的代价,就是我们的「阅读理解」能力会被不断的削弱,甚至会忘记了怎么独自思考,这不是危言耸听,这是迟早的问题。
所以,我决了个定,以后尽量只看「文字内容」,比如公众号上的文字,得到上的文字,知识星球上的文字,电子书上的文字,推上的文字…,其实,看文字反而是一种高效的途径。
当然,并不是说我就不看视频了,在闲暇之余,我可以看看自己喜欢的综艺节目,比如《最强大脑》、《脱口秀》,我可以看我主动关注的视频,比如那些优秀的 Youtuber 们的教程或者观点,我可以看看电影啊,而那些几分钟的「刷刷刷」短视频,就算了吧…你感觉刷了 5 分钟,其实过了 2 小时,缓过神来,得到的是空虚的「寂寞」。
事实上,人都有惰性,都想逃避现实,我也是,不可能做到每天 24 小时都在工作和学习,但是在选择休息方式的时候,如果可以作出一点点改变,谨防被别有用心的利用,陷入「奶头乐」的陷阱,也许,会好点吧!
]]>当你关上了自己的房门,拉上了窗帘,当你裸着身,这个房间变成了你的世界,你打开了微弱的灯,你点开了音乐播放器,让那些修饰过的声音环绕在身旁,你成为了你自己,床上躺着的,是一个疲乏的身体,一个可以可以告诉自己所有秘密的自己,一个充满精神自由的自己。
播放器播着周杰伦的歌,你嘴上念叨着「回家吧,回到最初的美好」,可是你压根不知道自己在念叨着什么,只是跟随着音乐轻轻哼,轻轻哼。
你打开了手机,看到的是一堆基于推荐算法的 APP,你已经被胡乱的信息投喂得忘乎所以,有些短视频真的好好笑哦,有些「瓜」真的很离谱哦,有些商品真的是无脑推哦…你骂了几句脏话,卸载了某 APP。
你闭上了眼睛,思绪万千,翻来覆去,你睁开了眼,带上了 AirPods Pro,不厌其烦的打开了 PornHub,瞬间思绪全无,此刻的你只看见你看见的,你主动搜索你感兴趣的,你一边看一边心里佩服着:「她们怎么那么敢啊?」,不知道为什么,她们口中的「亚麻跌」突然变成了「活该你单身」。
身体微微一颤,你关掉了网页,打开了各种花钱加入的付费社群,你默默围观着大佬们分享着赚钱技巧,分享着长期主义,分享着人生经验…,你也看到了群员的分享,你看到很真诚的内容会暗暗赞叹,你看到了写得比较刻意的内容会噗呲一笑,是啊,付费社群,本身就是很有价值的流量。
你知道了「知道是没用的,知道了之后要去做到才有用」。
你看着自己的业务,数据有一点点起色时,就很容易满足,数据下滑时,你的压力指数就随着上升,你想做一点改变,你做了些规划,虽然有不确定因素存在,但你还是蠢蠢欲动,你说,时间是位朋友,不要去责怪朋友,要多问问自己的时间精力都到哪了,而不是时间都去哪了。
你知道「把牛逼吹出去很容易,但是要为牛逼负责不易」。
此刻音乐播放器播放着的是「是有过几个不错对象,说起来并不寂寞孤单…」。
你点了根烟,吸了一口,烟尾红色的火焰变成了灰色的灰,你刷了下微信朋友圈,看到了小情侣在亲嘴,看到了朋友的可爱孩子,都会叫爸爸了,你赶紧关掉,拿起了桌面上的 Linux 书籍,翻了翻目录,嗯,常见的基础命令你会,不过很多命令操作你都忘记了,叫你不用。
你看了一会书,撒了泡尿,关停了音乐,喝起了枸杞水,写起了文章…
]]>关注我比较久的读者知道,我之前把我写的关于 Python 爬虫相关的系列教程,以及一些Python源代码开源在了 GitHub 上面,没想到被挺多人点赞的,刚看了一下,居然有 5.8k 的 star, 1.7k 的 fork 了。。。
当时打算写爬虫教程的时候,想着尽量写的有趣一些,好玩一些,结合一些表情包和段子跟大家一起乐呵乐呵,因为我知道我们的生活太枯燥了,整点乐子还能学到点东西,这不挺好的吗?
快说是!
然后写着写着,发现确实有那么点点受欢迎,公众号的粉丝也在一点一点的增长,不过我在公众号这里分享的内容不仅只是爬虫相关的,可能会对于一些新关注我公众号的朋友来说,有点乱了,于是我就干脆整理一波,把这个系列的教程从第一篇链接开始整理好,并且把相关的源代码都附上,放在了 GitHub 上:
可能这个系列对于初中级的朋友来说相对友好,慢慢的越来越多人关注了这个仓库,我想现在有些朋友也是从 GitHub 关注过来的,能帮助到一些朋友,或者说能给他们的学习生活带来一点点快乐,我也挺快乐的。
不过挺有意思的是我看到了有人专门开了个 ISSUE,说:
写教程就正经点写 没人想看你那些乱七八糟的什么表情包什么的
这着实让我有点哭笑不得,如果只是单纯的罗列知识点,那么最好的教程就是「官方文档」。
有句话怎么说来着,小丑竟然是我自己
我当然知道,我写的东西,不可能所有人都喜欢,我只能做到的是写教程的时候,尽量验证过正确可行,写观点的时候,说的是我内心真实的想法。
不喜欢就关了呗,为啥专门要创建一个 ISSUE 出来 Diss 我,还是说要教我做事?还是说想专门开个贴让更多人在这里喷我?
我以为没来得及 close 掉,可能要被带一波节奏了,不过往下拉,看到别的朋友的留言:
这,我就放心了,能够帮助到认同我的人,我很开心,关键时刻他们还替我发声,这让我有点感动,泪目。
顺便还让我学到了一个词:「垃圾人定律」。
垃圾人定律,形容存在很多负面垃圾情绪缠身的人,当他们身上的负能量不断堆积,就需要找个地方倾倒,有时候被人刚好碰上了,垃圾就往人身上丢。
OK,懂了,你我以后都会遇到这样或那样的人,志同道合的,就一起走一段路,不喜欢的,就各走各的路。
最后:
]]>身上有垃圾就扔对地方,毕竟垃圾桶也是要面子的啊!
今天在知乎上看到了这么一个问题:
怎么自学Python,大概要多久?
一时兴起,就给回答了一波,我觉得可能对你来说要一定的参考价值,不妨看看小帅b怎么说的吧。
自学 Python ,我觉得你要先问自己两个问题:
1.我为什么要学 Python,我希望通过它实现什么事情?
2.我有什么比较好的 Python 学习资源适合自己自学?
我认为在自学某样东西的时候,从最关乎于「自身的需求」出发,这样往往能给自己比较强的驱动力,其次是兴趣。
比如你在工作过程中,对于一些简单且重复的文件或者回复等操作,你会觉得很浪费时间,但是又不得不去完成,这是你对自动化脚本操作的需求;
比如你在一个团队中,想要有一个在线网站系统来管理你们之间的事务,或者想拥有一个自己的网站,这是你对 web 开发的需求;
比如你想批量获取一些网上对你有用的数据并加以分析,这是你对爬虫和数据分析的需求;
比如你想写一个小游戏,给你身边的朋友们玩玩,让他们觉得你很厉害的样子,这是你装逼的需求;
比如你就是单纯为了好玩;
比如你就是想找一份关于 Python 的工作,拿个 10k+;
….等等需求。
当你明确了自己的需求之后,你会更加聚焦于你「该知道的东西」,有一个词叫做「信息茧房」,说的是:
信息茧房是指人们关注的信息领域会习惯性地被自己的兴趣所引导,从而将自己的生活桎梏于像蚕茧一般的“茧房”中的现象。
虽然这种现象在信息获取或者认知中,可能并不好,但是类似的,如果我们一开始自学的时候,是通过自身的需求所引导,去获取相关的学习资源,反而是事半功倍。
在 《高效能人士的七个习惯》这本书中,有提到其中一个习惯——「以终为始」,也可以当作类似的参考,想象一下,当你亲自把你的需求给实现了,那是一个什么样的场景?是不是贼激动,你会马上想方设法的去学习去应用,尽管现在我们什么都不会,可那又如何?时间问题而已。
当然,如果你是一个完全 0 基础的小白,那么对于最基本的 Python 基础语法,还是需要先弄懂的。
你也可以在这里看到 Python 基础知识的思维导图
https://www.processon.com/view/link/5e480ea0e4b00aefb7e1a8d8#map
你也可以到这里看到官方的基础文档教程:
你还可以通过「学习python的正确姿势」左下角的「小白教程」进行学习:
你也可以买一本 Python 编程基础书籍:
也许在自学这些基础知识的过程略显枯燥,可以结合一些有意思的案例辅助学习,举几个我写的可能会让你产生兴趣学下去的教程:
你也可以去 GitHub 上面搜索,一些比较基础,并且适合你边学边看的小项目。
如果你的需求是通过 Python 实现一些你日常工作的工具,那么当你学会了 Python 基础知识,并且能够通过自己模仿一些项目,从 0 到 1 实现出来,也知道了如何去使用一些框架,那么这时候的你就可以结合 Google,去搜索一些第三方库的使用文档,应用到你自己的项目需求上,慢慢的让 Python 为你所用,做到可以实现自己的一个又一个的小需求,那就差不多了。
当然,如果你想成为一名程序员,那么这是远远不够的。
我们需要对一些进阶的 Python 语法进行学习,比如装饰器怎么写,lambda 什么时候使用,怎么样才让代码规范一点, Pythonic 一点?
如何提高效率,Python 并发编程怎么写,多进程、多线程、协程有什么区别?
在 Python 不同环境下怎么操作,虚拟环境怎么搞?
Python 解释器怎么工作的?又,C语言快,Python效率高,它们怎么结合起来?怎么扩展的等等…
甚至于算法、网络知识这些。
除了本身的进阶知识,在不同的领域还会有不同的知识点,我在这里整理了一些不同阶段不同领域的相关 Python 书籍,你可以看一看:
至于说要学多久?
我想说的是,这个是根据自己本身的需求和能力而定的,学是一个持续的过程,可以是一阵子,也可以是终身!
看你了!
上面提到的这些东西,通过自己学习掌握了它们,这种感觉是很棒的,尽管有些知识我们可能会比较少的去使用,但不用过多在意它们,因为这过程的本质是「锻炼了自己的自学能力」,当以后接触到新的领域新的知识的时候,同样的问题,虽然我们不知道学多久,但是我们知道学的比别人「快」,跟我一起成为「快男」吧。
最后,小帅b,一个看似不正经实则很正经的人,还不关注一波?
]]>我之前说过,现在很多人在工作或者学习过程中,一遇到问题就是在微信中直接发起询问,可能看起来很高效,但在我看来这会形成一种很不好的习惯,特别是在学习上,如果一遇到问题就马上跑去微信找人解答,对自己来说其实进步甚微。
比如我在我的微信上常常会收到读者发来的代码报错信息,问我怎么办,总希望我能帮他「人肉debug」,可是一来我不可能每个人都去告诉你的代码哪里哪里写错了,二来如果我这么做的话,我深知这其实并不是在帮他们,反而是让他们产生一种很不好的依赖习惯。
有时候我在微信看到类似的消息没有回复,有些人还闹情绪了,还觉得我高冷:
哼,有什么了不起的?
如果你能换位思考一下,你就会骂自己是个臭傻逼,毕竟:
我特么有什么义务帮你免费解决问题呢?
对于我来说,我在自学上,遇到问题一般不到「迫不得已」,都不会轻易的去询问别人。因为其实这是一个学习机会,难道这时候我们不应该是多尝试,多搜索,自己多想办法解决问题吗?
为什么你要把学习机会拱手让人,或者说让别人磨灭掉你的学习机会呢?
也许有人一时间给你解答了,瞬间解决了你所认为的难题,这看起来好像很有效率,甚至会有点小开心…可是,会有人一直帮你解决这些琐碎的问题吗?可是,那玩意最后会成为你的么?
显然是不可能的啊!
而关于工作学习交流,相比即时通讯,我更喜欢使用邮箱,我们在写邮箱和发微信的习惯是完全不一样的,因为邮箱有一种天然的「仪式感」,你在发邮箱的时候,会友好的称呼对方,你会想主题内容应该怎么写,你会发前校验一遍….总之,大部分人是不会像微信那么「随意」的。
我在微信中遇到另一个哭笑不得的场景是这样的:
1 | 早上 09:00 |
好家伙,我什么都没做呀,明明你就是可以自己搞定的,这不就是一个学习过程吗?
在小帅b的 VIP 网站中,没有建立什么微信群,我用的 ID 就是基于邮箱的,可能你会觉得很传统。
我说你们在这里看到的文章教程,遇到了问题,尽量使用邮箱向我提问,但是千万不要一遇到报错就截图提问,最好要交代清楚过程。我还给他们提供了一个模版:
1 | 简要概述问题 |
这样一下子沟通效率就提高了,有些朋友表示,邮箱写着写着,问题突然「不治而愈」,真是神奇。
是啊,我们常常不问自己为什么,常常认为解决方法在别人身上,当我们有一天突然问自己为什么的时候,不小心自己给解决了,这本是很正常的事情,可是我们居然会觉得「神奇」。
那些亲手把自己的「学习机会」让人抹杀掉的可怜人们,不如整点别的,吃吃喝喝玩玩乐乐,也挺好的。
]]>我毕业之后,只上了两年的班,然后就再也没有和大多数人一样,在公司体制内正常上班了,虽然我要处理的事情很多,很多时候也会慌的一笔,但是我到现在还没有后悔过,因为我很早就想过,我要做的事情不仅仅是三点一线的重复,难道我们上了那么多年的学,学习了那么长的时间,锻造了学习能力,最后只能依赖上班而活着吗?打工人?
有人会说,我可以边上班边学习边创造收入啊,但其实这很少人能做到,上班过程中,且不说会让你心烦意乱的办公政治,其实有很多琐碎的事情,都是没必要的,比如有些公司总喜欢每天都开一些低效的会议,一开就是一个下午,领导吹的天花乱坠,低下敷衍应答,领导吹的开心了,会议结束,大家继续回到工位摸鱼。
你也应该有过这样的体会,你好不容易完成领导给你安排的任务,然后第二天告诉你需求变更,你需要重新开始做,前面的都作废,关键是,做的这些事情只是简单的重复,也没有什么实质上的成长。
另一个,上班的时候,我们会很很容易就安逸,反正今天没事干就摸摸鱼,明天事情做不完就加加班,日子一天天过,到时间就领工资,稳稳的幸福,多好?可是这种幸福持续不久,你就会发现,自己跟别人的差距真不是一点点。
试想一下,如果哪天只剩下你自己,你可以通过自己一己之力得到面包吗?为什么有人 30 几岁了,突然被裁员了之后选择自杀?
我觉得在年轻的这段时间,最重要的是我们的精力和时间,如果我们只是拿精力和时间去交换不能给我们得到成长的钱,这种单纯为了钱而工作是非常不值当的。
而,为了自己而工作呢?显然,压力和焦虑剧增,但在这种情况下,我们会更愿意去思考,我们会想尽办法让自己成长,因为我们敷衍得了别人,但是敷衍不了自己,如果事情没做好,那就是自己的损失,没有人会为了你自己的过错埋单。
在不依赖上班的情况下,我们不得不逼自己努力一把,根本就停不下来,每天晚上都要问自己,把自己的时间精力卖给自己,如何利用好它们,怎么创造收入?机会在哪里?对机会敏感的要死。
年纪轻轻,追求什么安全感?
也正是因为这样,才会去做一些反人性的操作,才会持续学习,因为这时候的你才知道,给自己创造价值就是需要学习的,就是需要经验的,就是需要能力的,原来人际关系和沟通也是很重要的,原来为了钱而工作是无法长久的。
当有人跟我抱怨说自己 996 有多辛苦的时候,我就知道他们的工作有多低效,因为我体会过那种感觉,那种你明明可以很快搞定的事情,硬是拖到下班才开始,正儿八经的陪着大家演戏,那当然幸苦当然累了。而为自己工作,尽管是 7*24,我也觉得是一种自由。
当你所做的事情,都牵连到自己的每一根神经的时候,你是停不下来的,你只想把事情做得更好,你也因此有了更多的掌控感,这时候还需要努力,还需要坚持吗?完全不需要啊,干就是了。
可是,你不敢啊!
]]>我们在开发一些web应用的时候,很多时候都是这样的:
在本地搭建环境–>开发web应用–>本地测试–>远程部署到服务器上–>域名配置–>可以被外网访问
如果你开发过微信小程序相关的,你可能会遇到这么一种情况:
如果你的服务器域名没有配置好,无法调用接口。
后来我发现了一个不错的网站,localhost.run,它可以直接代理你的内网,也就是说,你自己在本地开发的web应用,不用部署到云服务器,也可以被外网的其它所有人访问得到。
在本地搭建环境–>开发web应用–>本地开启服务–>localhost.run–>可以被访外网问。
这个不管是在测试还是预览,都挺好用的,接下来我给你简单演示一下。
比如现在我们使用 Flask 在本地简单开发了一个“帅b老仙”。
接着在首页添加一张帅b图片。
现在运行起来:
我们可以在本地 http://127.0.0.1:5000/ 进行访问:
接下来我们就可以使用 localhost 命令,让自己的网站给别人访问了:
ssh -R 80:127.0.0.1:5000 ssh.localhost.run
将我们的本地服务端口映射过去,这时候可以看到我们的外网地址:
打开浏览器,直接访问 wistbean-031c23cf.localhost.run:
可以看到,本地服务可以被外网访问到了。
是不是很爽?ok,以上就是小帅b今天给你带来的分享,希望对你有帮助。
]]>先给知道什么是Box定投践行群,但是没有邀请码的朋友提供一下邀请码:
E0LE9UB7K1
这是李笑来创建的定投付费社群,在这里面汇集了几千位长期主义的定投者,一起践行,可以说是《通往财富自由之路》的实践版————让我们一起慢慢变富有!
《定投改变命运》这本书就是李笑来在创建这个社群的期间书写出来的,关键的是,整个写书的过程直接在群里分享,这其实是一个非常难得的机会,你我何曾看过一个作者从0到1的创作过程呢?
而 Box 是李笑来创建的 ETF 基金,在这里面包含了我们常见的比特币 BTC 之外,还有
EOS 和 XIN,比较牛逼的是:它是完全透明,0管理费的。
除了定投Box之外,这个社群还有很多干货课程,除了李笑来会经常讲解经验观点之外,还邀请了很多优秀的老师和大V来群里进行分享,比如编程课,逻辑课,销售课,英语课,财报课,投资课,个人品牌课程等等。
在这里除了定投和学习之外,还有一群践行的朋友可以互相探讨,认识志同道合的朋友一起进步。
需要梯子,如果你无法科学上网,可以先到这里给自己搭建一个:使用vultr(vps)搭建ss并开启BBR快速上网教程
国内 App Store 暂时下架,可以使用梯子自行下载,或者使用 TestFlight 下载,
点击下载Mixin Messenger
2. 点击添加联系人
,接着点击左下角的机器人
授权
当你作为一个新人进入一个开发团队的时候,最常听到的话可能是:
那谁谁,你把咱们的项目熟悉一下吧。
然后你 clone
好了项目,接着就开始进入了一段相当长时间的懵逼状态中,可能你会面临这么几种情况:
- 感觉项目好复杂
- 好多是你不会的
- 项目怎么跑起来都不知道
等等…
甚至你还会抱怨:
这写的什么垃圾代码?我不会是来背锅的吧?
我想大部分人都遇到过类似的情况,我以前就常常遇到,我最开始接手别人的项目的时候,我也是慌得一笔,哪哪都觉得别扭,哪哪都想骂娘。
但后来有一次经历改变了我这种想法,我竟然变成了这样:
要是我再能接手别人的新项目就好了!
事情是这样的,我那会刚工作的时候,做的是 Android
开发,表现还可以,后来上面就找到我说, Java web 后台的人手不够了,问我能不能上?
生活告诉我,要么上,要么被生活上。
所以我就只能笑嘻嘻的给答应下来了,不过心理慌得一笔,因为那会我对 Java web
那些框架完全没有学过,一窍不通啊!
当我开始着手这件事的时候,我得到的只有这么些:
一堆项目源码文件,写了一半的接口文档,以及用了什么技术选型,什么框架(现在依稀记得是
ssh…),然后就没有然后了…
当我试图把源码导入编辑器,跑起来的时候,发现我还是太天真了,各种库缺失,各种环境没搭建好…
是的,我特么连项目都跑不起来,写个鸡腿儿啊!?
后来加班了一个大晚上,各种搜索,各种安装,最后才勉强把项目跑起来,当我看到后台首页运行在浏览器的时候,才长舒一口气,嘴里不断的说着一句老潮汕话:
老爷保佑…老爷保佑…老爷保佑…老爷保佑..
接下来几天基本没怎么敲键盘,就是看代码,搜索相关框架的教程,然后看着看着有那么几个瞬间,让我虎躯震了又震,我在感叹:
这项目分的好清晰啊,各个模块都安排的刚刚好啊,高内聚低耦合啊,接口代码也写的很简洁啊…哦,原来商品订单的
SQL
语句是这样写的啊,积分优惠条件的语句是这么写的啊,自定义的工具包有这么多好用的东西啊…
后来发现新增功能也不难嘛,照着之前的模块写就好了,虽然业务不同,但是低层是怎么调用的,
SQL 语句在哪里写,在那里被调用等等,其实都差不多一个写法。
那时候我才发现,我以前做项目的时候,都是从无到有,从框架一步一步搭建写起来的,是一种很正向的方式,而这次,却是:
逆向的,直接从项目开始!
而这种逆向学习法,反而给我带来了很大的进步,或者说,相对进步的比较快,还挺神奇的。以至于到后面,我都挺期待接手大佬写的项目,因为我总能从中寻找到宝藏。
有些事情其实很简单,但是你不知道这事的操作方法,你就会一直觉得这事很比登天还难。
通过已有的项目反向学习,给我之前带来挺大用处的,所以我想把这种方法分享给你,可能你会说,那是你运气好,能遇到大佬的优秀项目。
我想说的是,没有完美的项目,我当然也有发现一些不合理的地方,人无完人嘛~多发现别人好的方面,学习它们,让它们成为我们自己的一部分,就够了。再说了,GitHub上面的优秀项目是不是很多,找一两个适合现在你的去逆向学习吧,相信我,在这个过程中你也会像我之前那样:虎躯震了又震!
]]>之前在终端使用命令的时候,总觉得少了点什么,后面发现了 “
zsh ”
这玩意之后,被惊艳到了,我想有必要给你介绍一下,毕竟谁不想效率杠杆的呢?
我们经常使用的 shell 命令行解释器是 bash、sh,而 zsh
是另外一种,不过呢,它有诸多优点,比如可定制强,效率高,高亮,命令提示等等..
你可以在你的终端中输入如下命令
zsh –version
如果没有显示相关的版本号,说明你还没安装,你可以使用 apt 安装一下:
sudo apt install zsh
当你输入 zsh –version 出现版本号说明安装成功了
zsh 5.4.2
你可以使用 chsh 命令修改默认命令解释器,将你的 bash 改为 zsh 吧:
可以使用如下命令找到你的 zsh:
which zsh
比如我的 zsh 位置位于 /usr/bin/zsh , 那么就可以这样进行切换:
chsh -s /usr/bin/zsh
重启一下,输入以下命令,如果显示的是 /usr/bin/zsh 说明切换成功:
echo $SHELL
一个命令搞定:
sh -c “$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装完了之后是这样的:
都搞定了之后,接下来就可以搞事情了!
在这个链接有很多主题供你选择:
贴几个给你看看:
找到你喜欢的主题之后,如何配置呢?
你可以到 ~/.zshrc 中编辑,比如我希望我的主题是 agnoster
风格的,那么就可以这样:
保存退出,接着使用 source 命令使其生效:
source ~/.zshrc
高亮了!是不是瞬间逼格满满?
为什么说 oh-my-zsh 能让你效率提高 10 倍呢?
其中一个原因就是它可以安装很多插件,让你使用命令用到爽!
你可以在这里找到:
找到你想要安装的插件,到你的 zshrc 文件中,把相关插件添加进来:
接着使用 source 使其生效:
source ~/.zshrc
那么现在你就可以使用这些插件了,拿 Git 举个例子:
查看 git 状态直接使用 gst:
添加文件直接 gaa, 提交直接 gcmsg:
创建分支直接 gb:
切换分支直接 gco:
当然,还有很多插件的高效使用,你都可以根据自己的需要去安装。
除了定制主题和插件之外,有一些常用的操作,也可以高效的进行,比如进入文件你可以这样:
双击tab
查看命令帮助,还是:
双击tab
进入历史目录,一个 d 就可以:
是不是很爽咧?还有很多操作,你可以到这里找到:
ok,希望对你有帮助。
]]>今天给你分享一下篇反反爬的实例。
一个思路,也许给你带来些许启发..
也许你会遇到这样的请款:
打开某个网站,可以看到页面是正常显示的,但是当你通过 Python
去请求的时候,你会得到一堆无厘头的 JS..
像这样的操作,应该怎么玩呢?接下来由【小帅b的朋友:lin】给大家演示一下。
当你使用 requests 请求的时候,得到的是这样的:
这时候就要看看是不是用啥了,是不是协议头问题呢?
通过不断的测试 最终确定是 cookie 中 acw_sc__v2 的问题。
那不就好办了 我们使用一个hook:
1 | (function () { |
这段hook有俩种使用方式:一是油猴、二是fd插件。看各位的喜好啦!
打上 hook,打开 F12 调试器,刷新网页,先是遇到了无限debugger:
常规的做法是在 debugger 一行左边右键选择 never pause here:
接着F8放行断点就行了
如果没有断下来 先清除cookie在刷新网页:
很快就能看到cookie被hook下来了
接着在 call stack 往上找:
到 reload 这里看到 x 是我们需要的值,然后再往上堆栈就进入了虚拟机:
通过观察原来是在settimeout里面做了操作:
所以我们所需要分析的逻辑就变为了:
var _0x23a392 = arg1
_0x55f3(‘0x19’, ‘\x50\x67\x35\x34’);
arg2 = _0x23a392
_0x55f3(‘0x1b’, ‘\x7a\x35\x4f\x26’);
不懂的人会看不懂这种混淆代码,其实这是一种ob混淆,可以看到很多函数名变量名基本被混淆了的。
但是不用慌 我们可以通过 AST 的方法或者硬刚的方法来解决:
可以看到只需要把解密函数的代码圈起来就能拿到解密后的值,我们就可以按照这个来分析改写了。
这里使用了arg1:
arg1就在页面上层能找到:
然后整个圈起来:
扣和改就行了 工作量不会很大:
还原改写后运行试试看,会看到报一个错,缺少提示的变量,那我们就去 js 里面找这个值:
找到这一段值补上即可,通过几次刷新尝试,发现这段值是固定的,所以可以写死。
补完后运行:
发现和网页计算的一模一样,那我们这个值就正确啦。
最后我们用python实现:
完美!撒花~~
]]>可能你是一个学生,可能你是一个刚开始实习的应届毕业生,可能你和我之前一样,工作了好几年了…我不知道我们在哪一刻相遇,不过我知道,大部分人关注到我这里,有很大一部分原因是:编程!
当你走进编程的世界,你的感受是什么呢?
在很长的一段时间里,编程世界对于我来说是非常复杂的,它好像很有魅力,但又好像捉摸不透,你是不是也有这种感觉?
前两天有朋友问我:
你觉得我适合学习编程么?
我不知道啊,是真的不知道怎么回答,首先我对他不是很了解,其次,我还没到那种一看就知道人家适合不适合的境界,要不然我现在也不会单身,不过说真的,我在编程后面加了一个“世界”,是因为:
编程是一个需要长久学习的东西。
毕竟更新迭代总是在进行,它才不管你学不学得动呢。
所以:
你内心深处,对它的兴趣有你的屁股大么?
如果有,那么我们继续。
搜索能力有多重要呢?
不管是项目开展前,还是开发过程中,我们总是需要搜索,为什么有些人可以轻松搜得到结果,而有些人死活搜不到?又为什么大家都搜到结果了,有些人却被结果误导,走了很多弯路,而有些人获得很好的思路从而项目得到了很好的进展?
习惯使用百度搜索和习惯使用 Google 搜索的人就是不一样的,习惯使用高级搜索技巧和简单的关键词搜索就是不一样的。
你还记得我之前给你写过的高级搜索技巧教程嘛?
搜索技巧也好,编程也罢,我们终归要学会,然后才能使用,对吧?
而在我自己看来,通过阅读进行学习是最好锻炼「习得能力」的手段之一。
对于文档,我们总是需要看很多遍才理解,一些技术教程我们也总是需要琢磨很久才能体会当时作者想表达的内容。
而这其中的「琢磨」,就是锻炼这种能力的方式,当我们的「习得能力」越来越强,就会越来越容易「高潮」。
为啥现在回头去看你一开始学的编程基础知识,会觉得很容易,而当时却很懵逼?
因为习得能力提高了呗。
我们随口一说,就能说出很多个主流的编程语言,什么python,什么Java,C,C++,Go,Javascript…
等等,PHP是世界上最好的语言,没有之一!
我们刚刚说的编程「捉摸不透」,说它总是「更新迭代」,说它「语言众多」…,所以会觉得编程可真他奶奶的复杂。不过总有一些是长期有用的,一劳永逸的,它们就是编程基础,也许你偶尔会有这样的疑问:
诸如此类的吧,这些疑问都可以在编程的基础原理中找到,比如:
虽然说编程语言有很多,但我们也不需要什么都学,先学好一两门主流语言再说。
虽然说学什么都是学,但是现在学 python ,Javascript 这些主流语言就是比 .net 好啊。
而业务方面,有 APP ,有 web ,有系统管理,有脚本等等,不过现在主流的就是跨平台。而跨平台,我们常用的就是 RestAPI,Json,SQL这些,对于刚踏入编程世界的你,可以针对性的学习这些主流的,也许会好一点。
开发编辑器有很多,比如 sublime text,vscode,pycharm,vim,atom,emacs…
操作系统有很多,比如 Windows,macOS,以及各种 Linux 发行版本…
浏览器有很多,比如 Chrome,火狐,Safari…
当然不同的工具也有相对应的很多插件。
选什么好呢?
选择适合你自己的就好,用的顺手的,然后把工具熟练使用起来,比如各种快捷键,直到你认为它可以让你做事很高效,把它们纳入到你的「利器收藏夹」里面,这是你的兵器库,需要用的什么的时候随时调用,又能高效做事。比如我的兵器库里就有 Ubuntu,有 vim,有macOS,有 postman 等等。
就先说这么些吧。
今天谨以此篇献给正在踏入编程世界的你,我前两天看了下《程序员修炼之道》,对其中的两个点很是认同:
- 完成 > 完美
- 持续的完善
是的,在编程世界里面,我们永远都无法完美,但我们可以在这里完成一些想法,我们可以持续的完善,这就挺好的。
共勉!
]]>前阵子深圳派发了1000万数字人民币,刚好我就在深圳,也经常去罗湖,参与了一波抽奖,不过后来没有中签..
在 “人民币” 前面加上了 “数字”,这就很 “高大上” 呀,不禁让人想了解更多一点。
接下来就把我了解到的数字人民币,尽量通俗的告诉你它是什么。
人民币我们都很熟悉,它是国家发行的法定货币,所以它有一些属性,比如:
人民币所有的属性,数字人民币都有,你可以把我们现在的纸币,当做数字人民币,不过数字人民币还有一些人民币没有的属性,比如:
也许你会觉得,这和我们常用的微信支付宝差不多?但其实不然,因为数字人民币是:
比如,我们要使用微信或者支付宝支付,首先肯定得注册一个账号才能支付,并且每笔交易都被记录,而使用数字人民币的话就不需要一个“中心”,不需要账户,直接交易就完事了。
而且微信支付宝提现都需要手续费,而数字人民币钱包是无需手续费的。
又比如,在腾讯的地方不能使用支付宝支付,在阿里的地方不能用微信支付,而,数字人民币在哪里都可以支付,谁都不敢拒收。
可能有些人会觉得支付宝微信是不是会受到冲击?
并不会,因为数字人民币和微信支付宝的属性是不一样的,你可以理解为,现在我们微信支付宝里用的是“人民币”,而以后使用微信支付宝支付的时候,可以选择使用
“数字人民币” 支付。滴滴打车,点外卖,网上购物等支付行为该怎么支付还是怎么支付。
你的钱还是你的钱,只不过把它放在了你手机的钱包上了,你的钱包不再是你之前的钱包,而是数字钱包,它会让你的生活变得更方便。
以后吃饭埋单,就没有“我手机没信号”的借口了;买个东西,也不会被“记录”,推送一堆垃圾广告;女朋友也查不到你去鬼混的“账”…
前两天有新闻说市场上出现了假冒的数字人民币钱包,我倒觉得不用慌,这是可以被预料到的,当然,之后可能对于老年人来说,是需要加强防范的。
]]>时不时有一些朋友找到我,想让我指导一下,怎么做好公众号?
我看了下自己的粉丝量和阅读量,什么?问我?
不过后来想了下,我没有什么团队,这个公众号完全是靠我自己从 0
做起来的,虽然和那些大号比不了,但是也算是有那么一点点影响力了,我很清楚那些刚做公众号不久的朋友现在的心情,因为我也是和很多人一样从这样的心情走过来的:
“特么的,辛辛苦苦写了那么久,居然没人看我的文章,此处不留爷,必有…”
居于此,我想我还是可以跟你们说一点我做公众号的经验,也许你可以借鉴一下。
可能有些朋友看到有人做公众号赚到钱了,就想跟着做,可是:
你真的喜欢写作么?
毕竟,写作是一个漫长的过程。
我记得之前 QQ
空间流行那会,我就在里面的日志模块写作了,虽然那时候非主流,但是我总想写点什么,记录点什么,慢慢的在网上写作成了我的兴趣之一。
那会哪有什么趋势不趋势的,赚钱不赚钱的,就是喜欢写而已。
你能写一年,两年,十年嘛?如果你没有一丁点兴趣,其实很难持续的。
上次回复了一个刚做公众号的朋友:
你先积累一下,然后学点产品相关的吧。
写公众号就是为了让更多人看到你的文章,那么懂点产品是挺必要的。
其实我发现大多原创公众号的作者写的内容都不错,但是仅有少部分的公众号被人熟知,这是因为一开始的时候没有好好的给自己做的公众号一个明确的定位。或者说,自己明确自己公众号的定位,但是读者不了解,不知道你这个公众号是干嘛的。
当我们连个 p 都不是的时候,什么样的名字很重要,要
“望名生义”,比如我一开始创建的这个公众号叫“学习python的正确姿势”,是不是定位就非常准备和明显了,新的读者一看:“哦,这个公众号是关于
python
学习的,学习python的正确姿势?有点好奇,就看看到底是有什么样的正确姿势”。而当你有一定的影响力时,名字就可以随意点了,比如
“小帅b和他的朋友们”?
一个好的产品定位,真的能让一个作者少走很多弯路,而且一开始谁都不知道你是谁的时候,取一个好名称很重要的。
在做产品之前,需要研究一下市场,知道什么东西可以做,什么东西不可以做。而趋势,就是判断的必要因素之一。就拿百度和微信来说,在互联网 PC 时代,百度的搜索以及互联网产品抓住了 PC 端的趋势,从而在 PC 端搜索一家独大。而到了移动互联网时代,微信崛起,各种移动端的服务层出不穷,微信成为了这个时代的不可撼动的地位。
你看,这就是趋势。
所以要让自己的产品更有机会,就需要把握趋势。我一开始为什么去做 Python 的公众号,而不写
Android 呢? 原因很简单啊, Python
是趋势,所以我就做了。不同的领域都有各自不同的趋势,这个需要自己去探索,对信息有足够的敏感,让趋势给自己赋能,而不是自己想到什么就写什么,想到什么就写什么…
写公众号不是为了自嗨,而是让别人看了你的文章之后,能够得到帮助,获得启发。
你看我这篇,是不是也在为你提供一点点思路?
老罗在做锤子手机的时候,就常常提到:“他做手机不赚钱,就是交个朋友”,
他把用户当做朋友,所以得到了很多锤友的支持,我看到的一些大V的社群,他们的名字也是
“xxx的朋友们”。可见,一个产品的好坏,有一个判断条件就是:它有没有把用户当做朋友。
最近数据分析这个领域也挺火的,越来越多的人对数据重视了起来,其实公众号后台有一个统计的功能,里面详细描述了每一篇文章的数据,以及用户的画像,通过这些数据可以了解到哪些文章用户更喜欢看,用户更倾向于什么样的内容。
比如:
我以前认为痛点就是用户不被满足的需要,但后来学习到了一个更深层次的理解:用户的痛点是恐惧,是害怕。
比如你渴了很久,这时候怕被渴死,所以最想要的是一瓶水。再比如你一直不断的去各种学习产品学习知识,这是你在害怕你知道的太少,知识焦虑太多。
你的公众号可以满足什么样的痛点?
我之前发过一个朋友圈开玩笑说:一个好的产品是能够让用户等了很久的需求被瞬间满足,并且有一种
“啊~好爽~” 的感觉,比如 P站。
你的公众号怎么让人感到爽?
这是一个很好的参考方向,因为并不是每个用户都会跟你说他喜欢什么样的内容的,而且也不一定会跟你说实话,而数据就显得真实了许多。什么样的文章被跟多人点赞了,被转发了,这都能说明用户的一些行为。
知道为什么有时候你很痛苦的写了很难的教程没什么人看么?
关注你的朋友们都不傻,你是不是用心,你是不是为用户着想,你是不是真诚相待,其实这些一眼就能看出来了。
所以用心的写好每一篇文章,多站在用户的角度去思考,坚持原创,真诚最重要。把用户当做朋友,就像一个长期陪伴成长的朋友那样。
当你有了一定粉丝量和阅读量,就会有一些商业机构找你合作,从而实现变现。但并不是什么广告都接,要有自己的底线,比如我就拒绝了很多炒股的、裂变的、骗局的推广。也并不是时时刻刻都推,比如我基本上控制在一周一个。
当你公众号得到合作,说明你的公众号有一定的影响力了,而这样的推广是你做公众号最大的动力之一。当然这时候会有人喷你,也有人会替你恰到饭而感到开心,心态放好吧。
当然,我说的这些只是一部分,很有很多东西需要学习,需要去执行,很多人说自己想做产品经理,想去做运营,那就去做一个公众号吧,把它当做一个产品,从
0 个朋友开始,去学习,去实践。微信的 slogan 说:“再小的个体,也有属于自己的品牌。”
而我想说的是,你的品牌多多少少能够反应出你的能力和态度,加油干就是了!
前两天去沐足,跟妹纸聊了聊,她说她每天要上班 10 个小时,她们一般从晚上 8 点干到早上 6 点,而且一天只休 3 天。
我想了一下,卧槽,这比程序员还累,怪不得马总说 996 是我们修来的福报,我现在终于懂了,对于在会所工作的妹纸们,我想马总应该比我更了解她们吧。
在经济学中,有这么一个概念叫做 “边际成本”,说的是你每新产一个产品或者每提供一次服务所付出的总成本增量。
举个例子,你造了一辆车,这辆车车所需要的成本很多,特别是在从无到有的这个过程中,你所付出的成本是很大的,但是如果你能把生产规模扩大,比如生产个千万辆车出售,那么你的边际成本就会很低,不需要像一开始一样投入那么大量的时间等成本了。
微软系统也是如此,从零打造一个系统固然需要很大的成本,但是一旦把系统整出来,然后批量售卖给各个互联网用户,这时候需要增加成本么?不需要了,边际成本趋近于零。因为微软每提供给一个新的用户使用系统,不需要再打造,直接授权就可以了。
而我们一开始所说的那位沐足的妹纸,她的边际成本是没办法这样的,每一次上钟,她都需要付出一样的成本,不可能将她的服务 “复制粘贴” 给下一个客人。
所以我认为,要做就做那些能让边际成本趋近于零的事情,这才是明智的选择。
在这个互联网时代里,我看到很多大牛,一开始都在网上积累自己的影响力,这个过程中,一开始都是没什么回报的,他们付出自己的时间、资源等成本,当他们的影响力越来越大的时候,就会有很多流量,当流量一大,他们的边际成本就会逐渐降低,从而比普通人更容易获得收益。
那么,对于个人在互联网上有什么让边际成本趋近于零的事情做呢?我倒是想了有这么几个:
就比如我现在写的公众号,也许有些观点我需要思考很久才发现,也许有些观点我通过看书才知道。显然这些操作都需要我私底下花些时间琢磨,那么我为什么又要费劲的把我的观点写到这里来呢?
因为有人看啊,我把我过往的时间所领悟到东西分享出来,看的人越多,我的边际成本就会降低。以前我觉得分享就是把我知道的拿出来给你看看,交个朋友。但是我现在觉得不止是这样,分享能延长我的生命。
其实现在写作的途径很多,各种自媒体平台多的是,如果觉得 low ,自己搭建个博客慢慢写也挺好。
写书也是一个道理,李笑来曾说,写书是他能够将自己的一份时间出售很多次的操作。当然了,前提是人家的影响力和书的质量够牛逼。
现在短视频这么火热,很多人只是用它来打发时间,乐呵乐呵,而有少部分人则不断的拍摄,制作短视频,在抖音、b站、甚至 YouTube 上发布自己的作品。
当他们的视频曝光量越大,边际成本是不是就越低了?
除此之外,还有 podcast,还有直播。有些人说,那谁谁直播一次赚的钱够我们赚一辈子的了。
那可不嘛?人家(巨大的IP)是在一个 “面” 上做事,咱们(打工人)是在一个 “点”
上挣扎,我们在走路,别人在飞。
一朋友做了一个 APP ,功能巨简单,就是调用一下手机的震动功能,可以设置下频率,然后就上传到 AppStore 了,没想到还有点下载量,就在里面嵌入一点广告,以后啥事不干,就可以躺着拿到广告费了。
在互联网上,不管是做网站还是 APP ,亦或是微信小程序,如果能找到用户的痛点,在细分领域琢磨的弄一个产品出来,不需要多牛逼,能够满足用户的一点需求就够了,接下来的产品维护成本其实没有多少,特别是那种细小的工具产品。
这是我最近“新”发现的具有边际成本低的特点,借着平台的流量,运营好产品链接,当权重上来的时候,就越不需要“努力”了。
在合适的时候,拿出一些时间来写付费课程或者专栏,让更多人来学习你的课程,这也是一种不错的降低边际成本的途径,就像一个老师对学生一对一补课和一个老师对着整个年级的学生讲课就是不一样,显然后者才是正确的姿势。
以上这些都是可行的操作,当然这里只是做一个引子,还有很多类似的场景都值得思考一下,比如人家拍一场电影很辛苦,但是票房可观就可以 cover ,周杰伦写一首歌可能需要很多灵感,但是歌曲一旦被追捧就可以 cover ,王者荣耀的皮肤在设计的时候可能需要很多时间,但是被很多玩家购买就可以 cover…
]]>ps:今天给你分享的这篇是我之前去洗完脚后在公众号“肯定会”中写的,如果你喜欢,还想看更多类似的文章,可以去关注一下。
我们应该有这样的体会:
在某一瞬间,突然猛地发现,时间飞快,啊哈~一天就过去了,啊哈~一年就过去了,啊哈~iPhone都发布12了…
啊哈~之前小帅b创建的
《通往Python高手之路》第一期也过去了。
我觉得有些方法论是做事情的前提,首先要知道如何操作然后再去操作,知道如何学习然后再去学习,知道如何约p然后再去约..所以我写了一些“骚话”,其中的这些方法论是我认为很有用的:
不管是协作还是自己对项目文件的分布式管理,Git是必备的,所以我写了比较容易理解的 Git
教程:
我们都知道 GitHub 这玩意,但是有些“骚操作”只有少数人知道,所以我分享了:
虽然之前分享过一些基础教程,不过在这里我还是为了一些朋友考虑,写了一些 Python
最少且必要的知识,没办法“7天速成xxx”,但有办法 “7天入门xxx”。
通过一定的基础知识,可以小试牛刀,Python可视化就是挺好的基础应用场景。
我把稍微进阶的内容起了一个分类的名称————爬阶梯。
想要更进一步,多多少少还是要花点力气的,爬它!
折腾着折腾着,就可以顺便把那啥给装了,在工具篇,我分享了如何配置 VIM,如何使用 VIM 玩
Python:
还有一些其它的就不都贴出来了。
其实我一开始没想过会写这么多面向初中级的内容,现在回头翻阅一看,我自己都替那些加入进来并且认真看的人感到值(相比那些动辄几千块的教程),而且,这里面每一篇的实例都是我自己运行后发现没毛病才写出来的。
良心
之前有朋友说,你为什么不像那些大V一样,直接整一个付费的知识星球不就好了,搞得那么麻烦?
其实知识星球刚出没多久我就有在使用了,不过我觉得像这种不太适合在知识星球里面做,它更适合分享一些经验性的纯文字。
还有就是:
老子就是想要不一样。
自己整一个台子,自己说了算,爱怎么玩就怎么玩。
前几天我把 VIP 的加入通道关闭了,现在时不时有朋友在微信问我什么时候给他们开放?
这是我第一次搭建付费网站做这样的事情,所以多多少少有我不满意的地方,或者说有些不足,以及其它的一些思考,比如是不是有更好的方式,除了图文,视频呢?边写边更新好呢?还是先写好集合再更新好呢等等?
下一期,晚一点,也许好一点…
感谢一开始加入的 b
友们,那会什么内容都没有,你们无条件的加入,给我满满的动力,希望除了教程内容能够帮助到你之外,我的坚持也能给你带来一点点影响。
那么我们下回见,peace!
在互联网赚钱,有一个比较重要的点就是信息差,很多时候你知道的东西,可能有很大一部分人并不知道,你可以利用信息不对称这一点,相对比较容易赚到钱。比如我就通过一篇文章,很轻松的赚了
1800+美金,按现在最低的汇率计算,也有 1w+ 人民币了,而这,就是利用了信息差。
信息不对称理论是指在市场经济活动中,各类人员对有关信息的了解是有差异的;掌握信息比较充分的人员,往往处于比较有利的地位,而信息贫乏的人员,则处于比较不利的地位。(信息不对称理论)
事情是这样的,之前我的 Paypal
账户里有一些美金,我想要把它们提现到自己的银行卡,不过发现要从 Paypal
提现小额美金到银行卡很难成功,手续费高之外,还很容易被银行退回。
于是我在网上搜寻了很多平台,最后发现某平台可以接收美金付款,而且可以直接在里面绑定银行卡提现人民币。
大概流程是这样子的:
Paypal –> 支付美金 –> 某平台 –> 提现人民币到银行卡
就是这么简单的事情,我花了些时间把它跑通了,成功拿到了人民币。
可能有些人到这个时候就完事了,但是我事后想了一下:
这肯定不止我一个人遇到这样的问题,做自由职业和跨境电商的大有人在。
于是我搜索了一下,发现确实很多人有这样的困惑。
而后我又去这个第三方平台研究了一番,突然发现有一个页面我当场就乐了:
现在知道这是一种常见的营销手段,不过当时我还不知道有 Affiliate
这玩意,简单点说就是,有人通过你专属的链接注册这个平台,并且在这里面使用一定的金额,那么我和新注册的朋友都可以奖励
25 美金,简直 perfect !
虽然说整个流程并不难,通过第三方平台中转一下就可以了,但是其中涉及到很多细节,比如如何在
Paypal 绑定第三方平台的账户,如何绑定银行卡,如何认证等等。
并不是简单的甩一个推荐链接给别人就完事了!
所以呢,需要站在对方的角度思考,这文章应该怎么写才真的对他们有帮助?
满足需求,才有价值!
于是我重新把整个提现的流程跑一遍,包括新手注册什么的,细致到每一个步骤都截图,并且排序好。
然后才开始写文章,放上我自己的推广链接。
写完之后还反复修改了几次,直到我觉得一个完全没接触过这玩意的小白能看完这篇文章后轻松提现,我才会发布。
接下来我几乎不需要做什么事情,就是坐等收租,躺着收钱,爽歪歪,到现在还时不时有 25
美金进账。
被动收入是一种只要付出一点努力进行维护,就能定期获得的收入。
这就是互联网的魅力之一。
今天写的这个我践行的例子,虽然也没有说赚多少钱,但是想给你带来的一点参考是:其实互联网的机会很多,但是真正去抓住机会的人不多,我们不要被自己限制住,在自己的圈子里绕着,有时候跳出来,你会发现更大的圈子,更多的机会,而这,又是需要自己多去尝试和研究的,除了对信息足够敏感之外,还要行动起来。
就比如,我今天写的这篇,有些人看了就完事了,但总归有少数人得到了启发,后面还去行动了,还不小心赚到了一点钱,那我就很开心了。
]]>我还记得当初,我自己搭建好了博客,写了第一篇文章,虽然现在看来很是不怎样,但是当时写完之后的那种感受是很久以来没有体会到的:说实话,有点震惊。
有一种不经意之间碰到了自己的“心智”
的感觉..也确确实实,坚持写博客,给我带来了不少意想不到的好处
今天想跟你分享一下,写博客这事。
因为写博客这个过程,其实一种非常有效的“学习方法”,这在我后面知道“费曼学习法”之后才后知后觉的。我们总是说“教是最好的学”,而写博客何尝不是一种“教”呢?
具体来说,费曼学习法有这么几个步骤:
写博客不就是这样么?你想要写好一篇文章,你必须要清楚的知道你要写的内容,接着要清楚的告诉别人和你自己:它是什么?它为什么这样?它可以干什么?
那么在这个过程中,一定会发现自己掌握的还不够好的地方,从而继续学习,优化文章,直到 “真的懂”。
你懂,我懂,大家懂,才是真的懂!
我们为什么要费心自己去搭建一个博客,还要不断的写文章写教程呢?
这其实是一种分享行为,而且是挺高级的分享,而高级的分享,就是最好的“利他”
之一,如果你想要获得更多的价值,就必须这么做,因为“利他“约等于“利己”。
比如你在开发过程中遇到了问题,通过自己的搜索,学习,调试等手段,最后你把整个解决过程思路理清了,你写成了一篇文章,你经历了“费曼学习法”
的整个过程,你对它的印象更深刻了,可这还没完,你竟然还把它分享出来…后来的小朋友们也遇到了同样的问题,搜到了你的文章,找到了解决方法,开心了一整天,然后给你加油鼓励,多好啊。
这是多么美妙的事情啊!
除此之外,如果你坚持写博客,还能遇见不少机会,比如就有人找我一起创业,跟我说了很多他的想法,有培训机构找我去讲课,有人找我做外包项目,有人找我投稿,有出版社找我出书等。
虽然大多我都婉拒了,但是如果我没有坚持提供内容,我想要得到的机会就会显得很是被动。
还记得我之前分享过
《坚信积累这件牛逼的事情》,写博客是一个漫长的过程,因为漫长,所以需要一点坚持,这也是一种锻炼过程。
很多时候,我们在当下短期内是无法看到自己过多的变化的,就好像种树一样,只有在满足各种“积累“的条件和长时间的陪伴下,在某个时间点,才会发现树干粗壮、树叶茂盛的样子。
写博客有着“一对多“
的性质,当你积累到一定的程度,你的博客会有流量,而在互联网中,精准的流量约等于钱,比如你常看到的一些博客,嵌入的一些广告,就是和一些广告联盟厂商的合作,根据曝光量点击量算钱。
另一种常见的就是Affiliate
,比如有些网站需要新用户,会有提供专属的分销链接给你,别人通过你的链接进行注册,你就可以得到佣金。
你的博客将成为了你特有的品牌,它的魅力之处在于,实实在在且强而有力的提升你的个人价值,这一点非常重要,可以说要多重要有多重要。
这就是我为什么建议你没事多去写写博客,去体会那种惊讶,去锻炼那种坚持,去看看你积累后的样子…
]]>我之前在
“学习Python的正确姿势”这个公众号写的文章的排版非常随意,心情好就排版的稍微好看一点,心情没那么好的时候就随便整一下,曾经一度认为只要内容足够好就行,但是我后来看了些文章后发现,好一点的排版是能让读者看起来舒服一些的,现在想想,人只要舒服了,就相对来说会更加愿意把我的文章看下去,是吧?
而且我之前的文章是直接在公众号后台编辑器里面写的,有时候写着写着电脑突然傻逼了,然后写的东西全特么不见了,怎么找都找不回来,一气之下抽根烟走人,老子不写了行吧?
但是我在 ide 里用
Markdown写就不一样了,它具有实时保存的功能,这样就不用担心我写了很久的东西付诸东流。
另外就是,我一直想要 “不一样”,或者说,我想要有我自己的风格,属于我自己的东西,以后别人一看我的文章排版,能一下子就知道那玩意是我写的。
我追求差异化,我要有我的风格,毕竟我们不一样。
接着我就去网上搜索一些公众号排版的编辑器,看了一下,虽然大多都傻瓜式复制粘贴就可以了,但是对于我来说都不咋地,甚至觉得有点无法入目。
后来我看到了可能吧博客中的一篇文章,其中就说到他是如何去排版公众号的:
后来我想了一下,如果我用 Markdown 写的文章,然后使用 Python
直接把里面的内容转化为一篇排版好了的公众号文章,岂不是很爽?
所以我打算脚本这样做:
这样我就可以把它们直接复制到公众号编辑器,然后一键发布了。
这样实现起来并不难,但是很花时间啊,不过为了你们,我愿意。
步骤都列好了,那么接下来就行动起来,干就完了。
可以使用 Python 的 markdown2 这个库,使用方法很简单,直接调用 markdown_path
方法,
将 Markdown 文件传进去,就可以得到相应的 HTML 了。
比如现在写的这篇文章的 Markdown 是这样的:
使用一行代码就可以得到相应的 HTML 了:
使用 HTML 文件打开,预览一波:
丑的一批,很正常,什么样式都没有添加,接下来就是慢慢对各个标签进行调试了,苦力活,本来在某服务平台叫人帮忙调下样式,但是结果我很不满意,只能自己慢慢搞了。
我对排版只有两个要求: 尽量简洁,尽量留白!
打开 Chrome 慢慢调试:
当然,这个过程还要时不时将调试好的样式内容复制到公众号编辑器,避免等会错乱。
调到最后的样式就是你现在看到的样子,是不是相对简洁一些,后面还会继续做调整。
调好样式之后,把 css 复制好,然后在 Python 脚本里面一顿替换就可以了。
之前不是跟你们说过嘛,公众号粉丝每次破万就给大家整点福利啥的,到达 10w
粉丝就爆我的帅照。
那么可以根据现有的粉丝数量,直接在后面追加相应的文本:
最后很简单,直接将全部整好的 HTML 写到文件里面就可以了:
ok,完事!
]]>在写程序的时候,最常遇到的就是 bug,有时候程序产生的错误很明显,但总是找不到代码错在哪里,甚至有时候排查了一整个下午的时间,最后发现那个错误竟然是如此的简单、傻x…,在那一刻的你无论是出于生理还是心理,一定会发出 “卧槽” 之类的声音,比你平常说话的声音高出好几个分贝,如果此时旁边有妹纸的话,还会被你吓得一个机灵,随着你 “卧槽” 声音的落下,妹纸心里破口大骂:“傻逼玩意”。
而你,还处于不爽的情绪里面:我特么花了这么多的时间精力,就因为这?
可是过不久,你又会遇到相同的情况,又是一声 “卧槽”,妹纸又是一句 “傻逼玩意”…依然单身,依然热泪盈眶,实在是妙啊!
虽然上面是个小玩笑,但写过程序的朋友应该或多或少遇到过类似的情况,每当发现程序测试运行有错误的时候,我们会去定位代码错误的地方,然后找出原因,接着纠正错误,然后重新运行,这个过程,我们叫做 “调试”。
在大部分编辑器里面,都内置了 debug 工具,我们可以通过它对代码进行逐行分析,每执行一步我们都可以清楚的看到,它做了些什么,以及执行的结果。(这一点其实除了在调试自己的代码之外,有时候阅读一些开源的项目也是一个有效学习的手段,反正我经常这么干。)
在软件程序的世界里面,我们相对容易发现程序存在的错误,因为我们只要运行,大部分情况下会有错误的 log 产生,我们可以比较快速的去定位相关的错误,而在我们的人生中,想发现自己存在的错误,却不是一件容易的事情,因为,这是一件需要我们主动的事情,我们好似没有一个显而易见的日志系统,一运行,就告诉你哪个地方错误了,特别是我们的思维,我们的想法,我们的选择…
很多人连寻找自身的错误都是不情愿的,就更别说去 debug 自己的人生了。毕竟,想要 debug 自己,首先是要寻找出自己错误的地方,不是吗?
在维基百科里面,对调试程序的的步骤是这么说的:
1 | 发现程序错误的存在。 |
那么对应到自己来, 我想 debug 自己就应该是这样的:
1 | 寻找自身存在的问题 |
我想把这个过程称之为 “debugging my life”。
举一个我在 debugging my life 的例子,之前我在做个人计划的时候,我总感到心有余力不足,我把工作和自己想做的事情在日程表里排的满满当当,一开始总有一种把计划写了就等于把事情做完了的错觉,但实际实施的时候,并没有我想的那般美好。
这是我多次执行计划后发现的问题所在,于是我开始 debug 自己,想想到底哪里出现了问题,我重新拿出自己之前所做的计划,差点把自己逗笑了,我他娘的快把自己当做天才了,比如有些任务明明需要至少半天才能完成,这还不包括不确定因素,我愣是计划在一个小时内完成,而在当时我却浑然不知,我把自己的做事效率想的过于牛逼,高估了自己,这就是导致我总是心有余力不足的原因。
那么怎么去解决呢?
我去看了一些关于做计划的相关书籍,后来发现确实有很多人存在和我一样类似的问题,并且从中找到了解决方法,知道如何更好的预估自己需要完成任务的时间,以及做计划的一个非常重要的点——把任务拆分成最小单位,然后再去执行。
那天,我还专门写了《开始认真地做一个计划》
找到了纠正错误的解决方法之后,我开始改变制作个人计划的时间长度,不再高估自己,并且把计划排好优先级,拆分成最小的执行单位,并在每个最小单位的计划之间安排短暂的休息。
于是,我重新运行自己的计划,心有余力不足的感受不再那么强烈,反而偶尔还有一些成就感伴随在完成计划的瞬间。
现在想来,有时候我们太想冲,太想快点达到我们的目标,但常常忽略了那些错误的出现,它们在提醒我们:“兄弟,能不能停下来看看我啊?”,倘若我们对它们不予理睬,甚至还走错了道,并总是感觉脚像灌了铅一样不要命的往前跑,那危险,可想而知。
如果此刻的你,总是感觉努力了没有收获,总是感觉每天都在忙但很迷茫,总是感觉自己很累但不知道自己究竟在累什么…停下吧,停下来,好好 debug 一下自己,debugging your life,说不定能改变点什么呢。
]]>我还记得之前刚开始学重装电脑系统的时候,把 U 盘在原有的系统上做成了启动盘,然后将要安装的新系统镜像文件放进去,接着重启电脑,把 F1 到 F12 都疯狂地按了个遍(那会我并不知道如何进入 BIOS 界面),试了很多次才进去,也花了挺多时间,才从 U 盘进入安装界面,然后开始重装系统…,等了挺长时间,系统提醒我安装成功,我有点激动,赶紧把 U 盘拔了,然后重启了电脑,果然,一个全新的操作系统展示在我的眼前,那一瞬间,突然感觉我的电脑焕然一新,虽然已经好多年过去了,但是那种感觉到现在还清楚的记得。
不过喜悦的心情并没有持续很久,因为我发现我之前所有的文件都特么不见了,当时的我还很傻逼的搜寻了很多遍,以为奇迹会发生。
是的,那会我太着急,根本不知道 “备份” 这两个字怎么写,后来玩 Android 手机,闲得蛋疼的时候就把手机可以刷的系统都给刷了,也常常没有去备份数据,总是看着新系统的 UI,玩着流畅的交互,然后默默的夸自己一句:sb。
现在我大部分文件都使用 Git 管理了,有些比较大的就扔到云盘去同步,重装系统也不像以前那么矫情了,那些需要用到的数据顶多之后从云盘同步回来呗。
后来我对计算机操作系统有了一点点了解,发现搞出这玩意的人真的是天才,他们把他们的顶级的智慧、思维、认知、甚至生活都放在操作系统里面了。
换句话说就是:“操作系统其实是一个宝藏”。
然而我居然在很长的时间里忽略了这一点,在我之前的认知里,操作系统就是拿来看视频的,拿来玩游戏的…,这是我之前理所当然的的主观判断,而操作系统却和我恰恰相反,它是那么的客观、绝对。
我们总说要向优秀的人学习,但往往很难找到那些优秀的人,即便找得到,对方也不一定会倾囊相授,而 “操作系统” 会,它的每个功能都是在教你做人,比如那些硬件的管理,软件的控制,资源的分配,接口的提供等等,背后都蕴藏着优秀人们的智慧。
或许,每个人就是每个操作系统的存在,只是有些操作系统陈旧不堪,有些操作系统在不断的优化升级罢了。
那如果是这样的话,重装自己的操作系统是应该矫情一些的,是需要勇气的,因为重装,必将损失一些东西,至少在备份这件事情上面会纠结很久,而优化和创造,更是需要很多时间去打磨和学习。就好像我第一次重装电脑操作系统那会儿,喜悦的心情并不会持续很久,而持续很久的优化升级才会产生更多的喜悦。
只不过现在所说的 “优化升级”,面向的应该是:学习操作系统的工作方式,而后运用到自己的生活和工作中去。
最后,默默的问一句:你敢重新创造你的操作系统么?
]]>我个人认为财富自由,就是我在很长的时间里,不需要为钱而担忧了,我不需要为了钱再去出售我的时间了,我想去哪去哪,不再受办公位置的限制,我想买什么稍微贵一点的产品,也不会感到心疼,不需要咬咬牙就能直接买的那种…而现在的我何止会心疼,遇到一个心仪但是很贵的产品,我牙都咬烂了也不一定会买。
但我知道的是,总有一天,我可以达到那种生活,我可以用更多的时间来做自己喜欢的事情,而不总是出售我的时间。
我们知道有一个东西叫做 “复利”,在时间和回报的加持下,到了某一个时间点,就会产生 “奇迹”。
也就是说,多存钱,然后把钱拿去投资,将得到的利息继续投资,然后继续存钱,然后继续投资…,等到有一天,这些被动收入带来的钱,足以能够满足我的生活所需,甚至远超过我的生活所需,那我就特么的财富自由了。
但这里存在一个问题就是,“存钱+投资” 就像养鸡似的,鸡养的越好,得到的金蛋才会越多,不过仅仅是靠存钱,是很难把鸡养得好的。
而养 “弱鸡” 是没什么多大的用处的,即使能憋出个蛋来,也是沾了一堆屎。有些大佬说,年轻人,自己没个百八十万,就别去理财了,大概说的就是这事。
不过话虽如此,该有的认知观念还是需要有,因为能够提早一点知道和做到,复利就多一点,就能越早实现 “退休”。
要把鸡养强养大,让它生更多的金蛋,就要想办法增加收入,所以我认为应该是这样:
“增加收入 + 存钱 + 投资 + 时间” –> “加速养鸡” –> “多生金蛋” –> “金蛋越滚越大” –> “金蛋能满足(远超)生活所需 ” –> “不受时间、钱、位置限制”
而上面这个过程中,能够让时间变短,提早实现的重要变量就是 “增加收入”,或者说场外赚钱。只有增加了收入才能带动后面一系列的动作。
搞清楚关键点了么?不是说一上来就是去研究各种股票基金,去看各种 k 线,那玩意并不重要。
而现在最重要的是如何增加收入,显然靠工作的工资是很难实现的。
很多人说在上班的时候,也搞搞副业,这样能增加自己的收入。但我觉得这顺序搞反了,上班才是副业,自己要搞的事业才叫主业,只有自己把自己想做的事情当做主业,才能有更多的热情去干。而上班,其实是在耽误自己的主业,应该尽快从上班里面挣脱出来才是。
我并不是鼓励你马上裸辞,然后自己去创业,我想说的是,自己要搞清楚什么才是重要的,接下来的方向应该怎么把握,才能缩短这个过程要实现的时间。
“增加收入 + 存钱 + 投资 + 时间” –> “加速养鸡” –> “多生金蛋” –> “金蛋越滚越大” –> “金蛋能满足(远超)生活所需” –> “不受时间、钱、位置限制”
而对于个体而言,要借助平台,给我们赋能,因为我们个体只是一个点而已,再怎么努力,也只是一只猪,而平台就是一个面,它刮起风来,猪都愉快的飞起。
在互联网上,个人品牌就显得很重要了,找到自己的天赋和热情,持续的学习,成为大半个专家,找到具有长期发展的平台(比如微信),然后持续提供能够帮助他人的内容,直到有一天,能够用较少的精力做更多的事情,却能够明显有效的增加自己的收入。
当然,这只是提高收入的一个思路,不过我觉得这挺值得普通个体去做的事情。
目标和梦想还是要有的,万一哪天我们就突然给实现了呢?
]]>嘿嘿,我是小帅b,在上个月的时候,我就跟大家提到一件事,就是能不能手把手带领 b 友一起通往「Python高手之路」。
我之前还是挺犹豫的,因为我觉得现在网上已经有很多教程了,包括我公众号分享的一些资源,为什么我还要去费力的去搞付费社群,写教程呢?所以当时我给大家说了(两件事情),那时候就说了先不要那么着急,我们都好好考虑一下,这种操作是否值得。
前不久有 b 友告诉我说:“网上确实有很多教程,但是质量有高有低,而且不知道为什么,看你的教程就很容易理解,很容易懂。”
后来我想想也对,对于部分 b 友来说,我还是有点个人魅力的哈哈,除了帅之外,我还能以我自己独有的风格给大家说明白一些事情,其实很多东西,并不是你说得越多别人就越明白,而是你能不能站在对方的角度,能够说得别人感觉通俗易懂,这才是主要的。很明显嘛,我可以做到哈哈哈!
虽然这个小小的疑惑我解开了,但是我又有了一个新的困惑: 难道我用接地气的话语来给大家说明白 Python 的一些知识点就够了吗?有些 b 友可能是初学的,有些 b 友可能是已经有了基础了,想要进阶的,还有些 b 友就单纯想听我 bb 的等等,我应该怎么做好呢?
后来我对小部分 b 友做了一个小调查,想知道他们希望跟我混一年之后能得到什么,听了一些他们的建议之后,我想了想,既然要搞,那就搞得大家都爽一点。什么意思呢?
我决定让大家都参与进来,而这种参与,不是说你看了我的教程就完事了,而是要你鸡动起来,哦,不是,要你行动起来,我要大家都会使用 Git 和 GitHub 和 ,我要建立一个项目,在这个项目里面,和所有 b 友一起参与。每个 b 友可以在项目建立自己目录,在自己的目录写着自己的所学所思,实战的代码等等。
所以一开始,我会教大家如何使用 Git 和 GitHub 和 ,从而让你可以和大家轻松的交流合作,比如到了一个阶段,我就让你们分组完成一个小项目,每个小组一起搞事,PK,看谁的牛逼。
那么我会讲什么呢?
1、一开始会给大家讲讲 Git 和 GitHub 和 的使用,一些 Git 的常用的命令操作和 GitHub 和 的一些功能的使用。学完这个不止是跟 b 友协同操作,当你在上班的时候和团队合作的时候, Git 是不能不会的技能哦。
2、通过之前的小调查,我发现还是有部分 b 友对 Python 比较生疏的,所以我会给大家讲讲快速入门 Python 所需要的基础知识,当然,我不会给你讲如何打印 hello world 这个过于简单的了,希望你具有 0.1 的 Python 基础,也就是你至少已经知道如何使用编辑器写打印 hello world 语句了。
3、基础的阶段性实战,我会到一定的时间就给大家布置作业,布置一些小项目来让你巩固好我之前讲过的知识点。然后我会进行一些点评,好的话表扬鼓励,发红包等骚操作。
4、接着再给大家说一些比较核心一点的 Python 知识,如生成器、迭代器、装饰器、什么时候使用什么样的 Python 数据结构、如何实现 Python 的高效并发编程、对象、拷贝、lambda、如何写好注释、什么样的语法需要注意等等大部分核心的我都会给你说明白。
5、核心的阶段性实战。
6、当然,除了这些之外,我还会给大家讲讲学习方法,一些学习过程中的心理建设,让你能够在 “通往 Python 的高手之路” 能够没那么痛,心没那么累。
那么跟我混完之后你会得到什么呢?
我只能说因人而异,如果有的 b 友把我说的每一字一句都认真看,都去实践,都去思考,那么我觉得会是一个质的飞跃。可以说,你比别人更进一步知道如何跟别人协作,如何在自己的代码仓库中处理一些操作,还有就是你跟着我系统学习 Python 之后,以后你再去学什么爬虫、数据分析、web、游戏等项目都能比别人更加轻松的驾驭,因为你已经有很强的底子(是的,这一年我不教你具体的方向,而是 Python 本身所需的内功),这时候你在普通人的眼中就成了那种 “xx天学会xxx” 的人了。
在这里大家都一起 happy 学习,遇到我讲的内容不懂的可以直接向我提问,只要不是太傻逼的问题我都会回答,每到一个阶段,我还会给大家做总结,比如说我之前讲过的一些知识点中,比较多 b 友困惑的,我就再给大家啰嗦几句。在每个阶段中,那几个 b 友表现得不错,就拎出来一顿夸,送点小礼物。
我所知道的大部分技术,都是通过自学得到的,所以,我能更加懂你在自学过程中的痛。
当然了,在这里还可以交一些志同道合的炮友,哦,不是,基友,哦,也不是,好朋友!!说不定以后你们就在一起了呢,哈哈哈。
以什么样的形式进行?
大部分还是以 “文字+图片” 的方式,就像你现在看到的这篇一样,你把我当做在你身旁的朋友,就是要这种很轻松的感觉。当然,如果有时候遇到大部分 b 友同时懵逼的情况,不排除会有音频或者视频来辅助 b 友从懵逼到牛逼。
说了这么多废话,如何加入?如何收费?
小帅b直接手把手带你,跟小帅b混一年,说实话,确实需要动力,那么动力只有一个,那就是钱。只能这么直接的说了。
你可以在浏览器输入以下链接了解详情:
或者直接点击:申请 Python VIP
最后说两句
因为这是虚拟服务商品,所以一旦付款,概不退款,请你再三慎重考虑考虑,觉得小帅b对你有帮助再加入!
由于我天性自由,不喜欢被束缚,又想说一些公开场合不适合说的话,所以只能自己搭一个台子了,在这里跟小帅b混一年,是一种什么样的体验呢?一年后我听你吹牛逼!
还是那句话:我不给自己标榜什么牛逼的 title,相信我的行动已经告诉了你,我是否靠谱。我还有一个不知道是优点还是缺点,就是收了别人的钱,就想把最好的呈现给大家,要不然总会觉得过意不去,所以得服务好你们这些 b。
我就在那里静静的等着你…
]]>说几个我买了到现在一直在使用的产品吧。
1、之前我想买个苹果表,主要是馋里面的的一些 app 功能,比如呼吸,健身记录,表里的界面可以随时切换,一堆主题可以选择。当然,带上去还有一点点装逼的属性。
在网上翻来覆去,发现第三代性价比高一些,就入手了, 5 代的现在是 3299 , 3 代的就一千来块,但是该有的功能足够使用了。
点击了解购买:
Apple Watch Series 3智能手表(GPS款 38毫米 深空灰色铝金属表壳 黑色运动型表带 MTF02CH/A)
系统更新到最新版本也很流畅,比如这块苹果表就可以记录我的运动记录,然后自动同步数据到手机上进行可视化:
而且表带可以随时更换,爱怎么装x怎么装:
刚开始使用会觉得挺不适应的,毕竟键位和其它的机械键盘略有不同,但是习惯之后会很爽,它采用的是静电轴,加上它键帽的设计,手感和敲键盘的声音听起来都很酸爽,不过它的价格并不便宜哦:
它有另一个让我爽的是,无线蓝牙连接,有时候需要在手机上操作一些需要输入挺多字的操作,就使用这个键盘直接连接手机,用键盘直接操作手机,效率一下子就提高了,聊天速度贼快。
不过要说一点的是,这键盘并不是人人都适合,相对来说比较适合那些打字比较多的以及写代码的人员使用。比如我,又写字又撸码…
3、再说说耳机,其实我之前已经有一个 airpods 了,不过是二代的,没有降噪功能,听朋友说 airpods pro 用起来很爽,然后就忍不住也买了一个。
我当时收到了还专门掂量掂量,感觉重量差不多,只是它变矮了也胖了:
不过确实,带上 airpods pro ,开启降噪模式,打开音乐, 瞬间 TMD 整个世界都是我的了,很适合在想静静小姐的时候带。
4、最后再说一个,扩展显示器,我觉得一台电脑,只有一块显示器是没有灵魂的,使用显示器能够大大的提高工作效率,比如你可以使用扩展显示器来查找资料,查看资料,而另一块显示器专注于当前的工作。
这是我目前的桌面:
我买的这款是 AOC 27英寸 2k 的,可以旋转,清晰度也不错:
ok,以上就是几款我一直在用,并且觉得不错的数码产品,你有什么正在使用并且觉得很不错的产品,不妨在评论区告诉我呀,我也去看看。
]]>前些天,b站的演讲视频《后浪》刷爆了朋友圈,其中有一句话我挺喜欢的:“弱小的人,才习惯嘲讽与否定,内心强大的人,从不吝啬赞美与鼓励。”
标题用了 “后浪” 这个词,我觉得挺好的,很多人会用 “年龄” 来划分后浪和前浪,但我更愿意用 “能力” 来划分大浪和小浪,我觉得不管是后浪还是前浪,只要浪够大够强就可以了。
这个时代并不是给 “后浪” 机会的,而是给能力强的人机会。一个小学生,如果他的浪很大,那他就是值得学习的,到底是什么样的基因,让他的浪如此之大?
在 b 站有一个小学生 Vita 君,在教别人编程算法,我看了都自叹不如。年龄够小,但浪够大!
移动互联网时代从诞生到现在,线上各种商业模式层出不穷,很多新兴的产业应运而生,比如移动游戏,电商,社群,自媒体…,到现在的社交电商,直播带货,短视频带货等等。
值得说的一点是,这个时代给我们个体很多机会,现在的我们不再那么需要家庭背景、人脉关系、学历等比较硬的条件,如果你真的有能力,在这个时代,一定可以找到属于自己的机会。这或许就是那个视频演讲中所说的 “羡慕” 吧。
而在互联网写作,对普通人来说,就是其中一个挺不错的机会。
我之前在 《尽量没羞没臊的做那些不需要一直努力的事情》、《坚信这件事》中提到的边际成本和积累效应,都可以应用在写作中。
之前有朋友问我说,想要写作,怎么开始?
我觉得他可能是想要得到一些 “方法论”,少走一些弯路,我以前也是有这个想法,然后付费去买了写作课,确实里面讲了一些 “套路”,比如如何取好标题,如何蹭热点,如何制造一些情绪…,先不谈价值观,有些东西别人确实研究的挺深,起码让我知道了一些我之前不知道的“骚操作”。
但我觉得在此之前,要知道写作的本质,其实是一个 “I/O 系统” ,输出的,可以是你的想法,或者你知道的知识、经验、技巧等。然后和读者产生一些思维的碰撞,或者让别人学到了些什么,知道了些什么。而你之所以可以不停的输出,一定是你在此之前不断的输入,你的经验,你的阅读,你的生活,你的思考过程,我认为都是输入。
那些 “方法论” 重要嘛?我觉得这还是取决于个人的价值观,于我而言,它可以有,但并不是最重要的,甚至于语法,修饰词这些我都觉得不是很重要。你想要传递的东西,能够清楚的表达出来,别人看的懂就可以了,重要的是内容本身想要传达的东西是否有用。
当你这样想了之后,就不需要顾虑太多,写作是一个自然的过程,一开始不用太在于如何如何,直接写就是了,慢慢写就是了,只要写得多了,自己的学习、思考、书面表达能力都会不断的优化,这本身就是有价值的事情。
写作是个积累的事,因为积累,所以长期,那么产生价值点一定不是在此刻,而是在好几年之后,但是你能看到那个点的存在,那就是你的方向。
有了方向之后,我们只要不停的往那个 “点” 走过去就行了,在这个过程中,每走一步,实际上就是给自己的 “I/O 系统” 优化升级,而你留下的每一个字,都是 log 记录,以后往前翻看,历历在目,也会感恩自己的执行。
当然,在写作这个过程中稍微久了一些,也会遇到不一样的人,也许会遇到志同道合的人给你赞赏鼓励,也许会遇到杠精的无脑黑,很正常,但如果哪天你和我一样也遇到了,别忘了的是:“不要因为 5% 的负面否定了自己 100% 的努力,不要因为脏了几根羽毛,就毁掉整个翅膀!”
]]>我写博客有好几年了吧,慢慢的发现,在 Google 搜索某些关键词可以在前几页显示到我的文章,比如在 Google 搜索 “java学习路线”,会出现 2710 万条结果,而我的java文章居然排到了第 2 页第 1 条。
这个关键词不算特殊,每天都有人在搜索,我的文章之所以能够排名靠前,除了做了点 SEO 之外,关键还是在于积累,试想一下,一个刚创建的博客,在不竞价的情况下,是不可能排到前面的。
事实上, SEO 的本质也是一种积累。
之前我看过这么一句话: “现在的你就是过去积累的结果”,给我留下了挺深刻的印象,为什么以前跟我们差不多的朋友,有些人现在变得牛逼了许多,而之前一起打闹的时候全然不知?现在想想,那些变得牛逼的朋友一定是做对了些什么,积累对了些什么。
我上次在网上看到挺有意思的图,当你看到站在这里的人是什么感觉?
当你看到站在相同地方的人,但这次是以下这样的,你又是什么样的感觉?
我前两天在朋友圈贴了这张图,配文说的是在 “拐点” 到来之前都叫 “积累”,而后便是 “爆发” ,或者说是超级复利。“拐点”,我认为那里就是穿越时空的通道,当一个人走到那里的时候,下一秒就会发生巨大的变化,或好或坏。
很多时候,我们在当下短期内是无法看到自己过多的变化的,就好像种树一样,只有在满足各种 “积累” 的条件和长时间的陪伴下,在某个时间点,才会发现树干粗壮、树叶茂盛的样子。
回到刚刚那句话: “现在的你就是过去积累的结果”,能明白这句话的人,就是能看到上图 “拐点” 的人,延伸一下这句话就是:“未来就是现在的我以及接下去很长一段时间所积累的结果,而想要让未来美好,那么现在要积累的东西就是做正确(有复利)的事”。
知道了这一点之后,“选择困难症” 在很大程度就能得到改善了,我们以前在面对选择的时候,可能比较随意,甚至听天由命,而现在有了 “积累” 这个过滤系统,那就是我命由我不由天了,比如:
“我要不要长期写作?”
扔到 “积累” 过滤系统中判断一下:恩,有复利效应,要写!
“我要成为一名小学老师还是一名摄影师?”
扔到 “积累” 过滤系统中判断一下:恩,小学老师每年都教同样的内容(初高中老师也是如此),而摄影师不断拍摄能够不断的增长经验,显然后者有复利效应,选后者!
等等…
坚信积累的力量,提前看到 “拐点”,然后在当前做出一点点改变,做正确的事情,长期坚持下去,总有一天,我们会在 “拐点” 处看到自己的身影,而后,便是别样而美好的风景。
]]>有一读者在微信找我,说:“帅b,你抽我吧!”
我说不好意思呀,兄弟,这抽奖是靠人品的,而且活动也过期了,下次有机会再来玩耍吧。
他说,不是的,我是要你抽我,骂我,骂醒我,我觉得我自己真他妈的废。
我去,没想到也有一天,真有人找骂找到我这里来,我寻思是要口吐芬芳再对他放个屁好呢,还是去找我床边的那本 《人性的弱点》,抄几句牛逼的语录发给他好呢?
我随便翻开了一页,看到卡耐基着重说了这么一句:
“要学会真诚的关心他人”
窝里割草,怎么感觉穿越时空,好似卡耐基老先生早已看透了我的小心思。
所以这次,我决定,真诚的关心一下他,于是我问了他一些问题,为何找抽?不是,为何觉得自己废?
经过一阵子的嘘寒问暖,主要问题我找到了,简单点说就是他本想通过自己,去实现一个牛逼的工具,不过自己学着学着就歇菜了,然后又开始吃鸡去了…
其实,关于学着学着就歇菜这件事,我想大部分人都有过,这一点从我 vip 网站的后台数据就可以看得出来,一开始大家热情高涨,但是讲到了比较进阶的内容,我明显感到降温,甚至觉得,你们是不是不爱我了?
那么,如何让自己不那么容易学着学着就歇菜了呢?
其实我们要做一件事是需要驱动力的,而驱动力有外在和内在,对于我来说,要让我坚持做一件事情,外在的驱动力就是有钱收,内在的驱动力就是兴趣、装逼。
有些人问我说为什么我可以在公众号这里一直原创输出?
很简单,因为这事我有驱动力,在公众号偶尔可以接广告,我有广告费拿,这是我外在的驱动力,我又有写东西的兴趣,而且有时候写完还有一些小朋友在后台吹嘘 “帅b牛逼!”,可以让我装那些努力得到的 “逼”,这是我内在驱动力,所以这就是我能坚持原创的原因。
可能这时候有人说了,这是你,我和你不一样,我既没有内在驱动力,也没有外在驱动力。
你不妨想想,为啥你一开始想要做这件事情,你一开始肯定有某种想法,而这种想法很可能就是你的内在驱动力,只是你现在忘记了。
可能你又会说了,不好意思,我早已忘记了初心…
那这个时候不妨把你要做的事情想得伟大一点,比如你学平面设计,那就想象一下,有一天大街上有你设计的海报,你设计的壁纸被人疯传,不要再惧怕 Adobe 的操作难度;又比如你学编程,那就想象一下,有一天你写的软件特好,被人疯狂 5 星分期好评,不要再惧怕各种 bug 和 error;再比如你想写公众号,那就想象一下,有一天你写了一篇文章,被人疯狂点在看和分享,觉得你好像有点厉害的样子,不要再爱惜各种脸面…
这也是驱动力的一种,我把它称为 “内在驱动力的自我创造”,有点神奇的是,当你一直认为事情会像你想的那样发展,它就真会会那样实现,这在心理学上好像叫 “自证预言效应”。
那么有了驱动力之后,怎么让自己的学习驱动力保持得久一点,如何避免碰到困难的地方就很快的痿了呢?
不要一开始就冲冲冲,一开始要慢下来,越慢越好,先想一下,我要实现什么?为了实现这个,我需要学会什么知识点?
比如说你想要数据可视化自己的一些财务数据,想要用 Python 实现。那么你就可以先去在线的图书商城搜一下这方面的书籍,把那些好评比较高的书籍给记下来,然后去看它们的目录,对比下差异,给自己一个大概的认知,然后根据这些大纲给自己整一张思维导图啥的,有一个自己的全局观,用上帝视角先偷偷观察,接下来的事情才好办些,不至于摸不着头脑。
还有人说,我学了东西就忘,是不是没必要学?
当然不对啦,学完就忘很正常,我也常常忘,但是我认为这不重要,重要的是你自己的学习能力是不是得到了锻炼,是不是每一次学习都让你的学习能力变强了?
习得学习能力才是重要的,这样当你下一次学习才能显得不费吹灰之力,怕什么忘记,下一次你再扫一眼,就都清清楚楚了。
哎,我说了这么多,不知道有没有和你产生一点灵魂上的交流?
还是躺床上玩手机香啊,不说了,我躺着去了。
]]>老罗在 4 月 1 号晚上 8 点举行了一场浩浩荡荡的电商直播,在此之前老罗就做了些许短视频对其铺垫,足以看出他对这次直播的重视,身为第一代网红的他热度丝毫未减,那天晚上我早早的就搬好了小板凳,守在了抖音的老罗直播间。是的,我和很多人一样,想要看看这个中年油腻的胖子,能把这场直播玩出个什么花样来。
抖音想要在电商直播这条赛道上争夺名次,老罗想要 “卖艺还债”,厂商想要产品曝光,用户想要一边听相声一边便宜抢购…,直播结束后的数据不赖,这场直播确实多赢,不过整场直播下来,我看到了有些朋友并不看好老罗。
比如有些朋友会把他拿去跟李佳琪作比较,认为老罗的直播有点不走心,像是在念稿子,没有李佳琪那种亲民的感觉,没有李佳琪那样对产品上心,觉得老罗太不专业,就是来捞钱的,迟早要完。也有人觉得很失望,当年说好的 “理想主义” 呢?现在这么 low 去做一个主播?说好的相声哪去了?
甚至还有人认为老罗干一行灭一行,期待他的下一次创业…
老罗的开场直播确实存在很多问题,比如有时候拖沓了,直播节奏乱了,甚至还把产品介绍成竞争对手的了…,但我觉得这些都会随着时间慢慢变好,如果第一场就 100 分那才是可怕。
老罗把他的第一次很真实的呈现在这么多人面前,要挑他毛病实在太容易了,毕竟大多数人都见不得别人的好。
而那些希望老罗能成的人,看到的不仅仅是那个在卖货的老罗,他们看到他在卖小米手机的时候会感到心酸,看到他刮胡子的时候会泪目,看到他近 2 亿的交易额会替他感到高兴。
在我眼中,罗永浩就像是打不死的小强,每次创业失败了都会找新的出路,从没有被打倒过,一直在折腾,一直在探索,这一点不就很值得学习了么?
我们常说要走出舒适区,这样才会得到成长,但是当我们真的走出去的时候,面临的是各种挑战,各种挫折,各种压力,很多人一下子就缩回去了,但他们不知道的是,越过各种阻碍,进入更高圈层的时候,那里才是真的舒适。
那晚,我抢到了电动牙刷,其它要么抢不到要么太贵。
也是那晚过后,各种 “低过老罗” 的产品补贴价格都冒出来了,你看,老罗在走出舒适区的路上,又遇到了出其不意的挑战…
而那些觉得老罗是个大忽悠,直播赚钱很容易的,只不过是一些傻逼罢了
]]>最近发现一个服务提供商的 ss秒键 服务,使用它可以快速获取到 ss 相关的账号密码,值得用的是,可以配置域名,当发现你的 IP 无法使用的时候,它会自动帮你切换 IP 。
点击 justmysocks 注册,用邮箱验证即可。
接着点击 service
–order service
:
这里提供了三种服务,一般个人使用第一种就可以了,500GB/mo on 2.5 Gbps | 5 devices, 5.88美金一个月:
可以使用支付宝支付:
支付成功之后,进入我的服务,可以看到你刚刚买到的服务器:
进入可以看到 5 台设备对应的 ss 账号密码等信息:
拿到这些信息就可以去自己的客户端配置了,值得注意的是,这里配置域名,不要配置 IP ,这样才可以做到 IP 自动切换。
使用这种方式的好处是一劳永逸,不需要自己各种搭建,也不需要自己各种手动切换 IP 。
微信一直很重视短视频这一领域,在 7.0 版本的时候,就更新了一个 “时刻视频” 的功能,那会张小龙在微信公开课就说过,微信朋友圈更多是装逼、搞人设的地方,而 “时刻视频” 能够让我们真实的记录我们自己的生活,记录我们当下真实的生活状态。
不过这个功能的入口放在了菜单 “我” 的里面,用户发布的视频不会出现在朋友圈的信息流中,而是放在朋友圈页面中的 “朋友新动态” 小菜单里,需要点进去才能看到具体的视频,除此之外,发布视频后的用户头像会出现一个小蓝圈,双击头像可以直接看到朋友发布时视频。
这个功能从发布到现在这段时间看来,使用这个功能的人其实不多,我微信有几千好友,但是看到的视频动态其实很少。我想可能有这么几个原因:
用户已经习惯直接在朋友圈里面发视频了,在朋友圈页面点击右上角的 “小相机” 按钮,直接发布视频,一气呵成。
对于刷朋友圈的人来说,懒得再点一步专门进去视频动态中看朋友发布的视频,除非那个人对他来说有过分的好感。
大多数用户也不认为这个功能是用来记录自己的真实生活,比如我看到的更多的是搬运抖音上的视频发布到这里来。
说实话,对于大部分用户来说,在微信上发布东西不就是为了装逼么,但是在 “时刻视频” 中发布的内容不可以直接出现在微信朋友圈的信息流中,而且仅一天可见,被看到的人少了很多,收不到什么赞美之声,也就没什么动力发布了。
由于这个功能主要针对的是个人用户的日常,在这里发布的视频仅朋友可见,对于短视频制作者来说,这功能有就显得有点鸡肋了,没有像抖音、b站平台那样的推荐机制,完全没有吸引力。
而这次微信发布的 “视频号” 很不同,它直接放在了 “朋友圈” 菜单之下,把 “视频号” 入口放在这个位置,可见其重视程度之高。
现在看来,视频号里面像是一个微信的短内容广场,你可以看到来自不同机构、不同领域、甚至明星大V们发布的视频或者图片内容,你可以在这里双击点赞关注评论 666。
这次微信视频号的功能是逐步开放的,有些被灰度到的用户可以看到视频号的功能,但是无法发布内容。
刚开始微信是以申请内侧的方式来邀请一些比较有影响力的作者来视频号进行内容创作,有些朋友可能会收到微信团队的内侧申请通知:
申请通过之后,微信团队会通知你获得发布视频的资格,可以开启你的视频号体验之旅了,当然,有些朋友没有申请也有可能收到内测通知,发布视频的功能应该会逐步向更大范围的用户开放。
视频号的发布前的编辑和 “时刻视频” 差不多,可以配乐,添加表情包等操作,但没有美颜瘦脸特效啥的。
时刻视频的编辑页面:
视频号的编辑页面:
视频号可以添加最多3个 tag,以及位置和扩展公众号链接:
视频号除了和微信公众号打通之外,有一个非常关键的点是它具有推荐机制,你的视频如果被赞的多,会被逐步曝光,让更多的微信用户看到你的视频。
在视频号没有出来之前,张小龙发布了一个视频,叫《对互联网的 7 个思考》,其中就说到了短内容是微信接下来的主要发力方向:
而微信现在的月活用户达到了 11.64 亿:
在我看来,视频号有着微信庞大的流量,并且打通了微信朋友圈,公众号,好友群。我想之后基于微信的产品也许会在这里做文章,比如微信直播,微信小程序,微信商城等等。
而且现在视频号是一个红利期,会更容易得到推荐,是一个机会,但我认为也并不适合每个人。
我认为视频号更有利于那些本身就具有影响力的人,他们已经有一些流量了,在视频号中发布的内容在基础流量的加持下,能够进一步得到曝光。再者就是具备创作能力的人,在视频号还没有出来之前,就有一些热爱视频创作的人,他们可以通过视频号获取第一批具有相同爱好的种子用户。
这是个人人都可创作的时代,且看吧!
]]>1 | sudo apt-get install mysql-server |
按 Y 确认安装
1 | sudo mysql_secure_installation |
1 | systemctl status mysql.service |
提示 Active: active (running
表示正确安装且运行
1 | sudo mysql -uroot -p |
输入密码即可使用:
1 | GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "你的密码"; |
*.*
代表所有数据库,如果要设置单个数据库可自行设置。
设置完后更新一下:
1 | flush PRIVILEGES; |
时不时有朋友在微信问我这样的 Java 相关问题:
如何学习 Java ?
怎么自学 Java ?
有没有好的 Java 学习资源 ?
Java 的学习路线是怎么样的 ?
学 Java 的话要看什么书籍 ?
等等..
我回想了一下自己在自学 Java 的过程中,确实也走过一些弯路,想想如果一开始,有人告诉我学习 Java 的路线是怎么样的,给我一个具体的学习 Java 的框架,能让我有一个清晰的规划,知道我此刻应该学习什么?接下来学习的又是什么?想必应该会节省很多时间,少走很多弯路,也不会产生更多的焦虑。
很多的焦虑就是来源于「自己知道自己的不知道,但是对于自己的不知道的东西很模糊,不知道怎么让不知道成为知道」,可能有点绕,不过你多体会一下这句话,应该能看得懂。所以我这篇就是想让你对于你不知道的东西具象化,让你知道怎么让你的不知道变成知道。
万事开头难,人们都说好的开始是成功的一半,对于一开始入门学习 Java 的小伙伴,最好的方式不是去买相关的书籍来看,因为编程更加注重的是实践,而不是理论,所以一开始最好是有老师教你,让他演示给你看,然后模仿学习。
可能有人说了,找老师是一件麻烦的事情,找培训机构又怕被坑很多钱。其实,如果你动手能力好一点的话,完全不用担心,因为 Google 就是最好的老师。网上已经有人提供了学习 Java 基础的视频教程了,找到它们,然后认认真真的跟着学习就是了。
当然,你有幸看到这里,也刚好是个 Java 初学者,正在找入门学习 Java 基础的视频教程,我已经帮你找好了:
链接: Java基础入门视频教程百度网盘
提取码: jtfh
这个教程我以前有看过一些,老师教的很不错,而且很详细,是 Java 入门学习的好资源。
静下心来学习完,你应该大致掌握了 Java 的基础知识了,接下里可以写点小的项目来练练手。毕竟,实践出真知。想当年,我就是在这个阶段的时候模仿着写了个坦克的游戏。
有了一定的 Java SE 基础之后,接下来就可以巩固一下,看书籍查漏补缺了。可以看看《Java核心技术》这本书。这本书有分为两卷,卷一涉及到的 Java 基础知识,卷二涉及到的就是 Java 的高级特性知识,系统全面讲解了 Java 语言的核心概念、语法、重要特性和开发方法,包含大量案例,实践性强。
《Java核心技术卷1》具体介绍:《Java核心技术卷1》具体目录。
《Java核心技术卷2》具体介绍:《Java核心技术卷2》具体目录。
接下来这个阶段就可以进入 web 开发了,可以先学习 HTML , css ,Javascript ,虽然这是前端开发者学习的基础知识,但是对于 Java 程序员,这也是需要了解的,不需要很精通,但起码要了解会用。等你写 web 项目的时候,会用到。以下是不错的HTML , css ,Javascript 的学习资源。
HTML学习教程:w3school HTML学习教程
css学习教程:w3school css学习教程
Javascript学习教程:w3school Javascript学习教程
工欲善其事必先利其器,别再使用 eclipse 了,有更加高效的工具 Intellij IDEA , 你需要学会它,如何创建项目,导入项目,使用命令,使用快捷键等。点击 Intellij IDEA 下载吧。
Intellij IDEA 学习资源:
要写 web 项目,一开始就可以从 JSP、Servlet 入手,快速了解 web 是如何交互的。
这里有两个不错的关于 JSP 和 Servlet 的教程。
做 Java 后端,肯定会涉及到数据,不会数据库怎么行?
现在很多企业在用的数据库是 MySQL ,包括 Google,百度,阿里等。免费强大,需要学会数据库的创建和一些查询操作。可以看一本叫做《《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》》 的书,是网易技术部高级 DBA 写的。这本书很适合于 MySQL 的初学者阅读。
Java web 的框架层出不穷,可以针对现在大多数人使用的框架学习,例如 Spring、SpringMVC、MyBatis、Springboot,不用过多注重框架的表现形式,而应该学习里面的一些具体实现原理。Spring 就是一个非常值得学习的框架。这个阶段推荐看这个教程:
当你了解了一些框架的使用,并且具备一定的 Java 基础之后,就可以看我这个教程了:
这个课程涉及到很多知识点,干货满满,通过这里,带你真正走进企业项目的开发实战,从 0 到 1 打造一个分布式的电商项目。当然,我这个教程站在你的角度出发,让你学会如何使用这些技术,往后运用与你的工作中。
项目实战完之后,再学习优秀的框架,Spring boot/Spring cloud 是目前比较流行的微服务框架,通过他们能够更加专注于业务的开发,减少一些繁杂的配置。
可以学习丁雪丰老师的视频课程:玩转 Spring 全家桶
越往后就会越发现基础的重要性,而那些框架层出不穷,不断的迭代更新,但是基础都是不变的,所以要回归基础,掌握好基础才是正确的选择。
诸如:
Java虚拟机
并发编程
设计模式
数据结构
算法
计算机网络
缓存技术
消息队列
Linux操作系统
等等
那么到这个阶段就可以看一些更加“高深”的书籍了,在这里推荐几本。
这本书在 Java 界可谓名声大噪,共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。
对于线程安全,并发操作是 Java 程序的重点,这本书很好的解释了线程的安全和并发性。介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则等。
这是 Java 之父重点推荐的一本书,本书由曾任职于Oracle/Sun的性能优化专家编写,系统而详细地讲解了性能优化的各个方面,帮助你学习Java虚拟机的基本原理、掌握一些监控Java程序性能的工具,从而快速找到程序中的性能瓶颈,并有效改善程序的运行性能。
设计模式是前人的智慧结晶,通过这本书可以学习到面向对象程序设计的6大原则、23种最常用的设计模式、各种设计模式之间的差别以及它们的理想应用场景、如何在实际开发中将各种设计模式混合起来使用、5种新的设计模式的原理、意图和最佳实践。
这本书对计算机网络有一个整体的介绍,如:因特网、分组交换、因特网各层详解等等。
鸟哥在Linux中文圈很出名,书中包含了鸟哥从完全不懂Linux 到现在的所有学习历程,鸟哥将这几年来的所知所学倾囊相授,以浅显易懂的文字带领您进入Linux 的世界。值得一读。
这是我看过的算法资料中最好的专栏,作者讲解通俗,学起来很轻松,分为四个模块:入门–>基础–>高级–>实战。
这个专栏分为五个模块:1. 并发理论基础 2. 并发工具类 3. 并发设计模式 4. 案例分析 5. 其他并发模型。
这个专栏也是分为五个模块,但是评论区也很精彩,很多 Java 爱好者的评论可以认真看一下,干货满满。
我的博客(有点不要脸):
wistbean|肯定会
作者从事过Java开发,近几年来主要做iOS技术相关的工作,对无线产品相关和iOS平台相关开发有粗浅理解,关注新兴技术。喜欢不断深入某技术领域的原理研究,喜欢解决有挑战性的问题:
Java文章列表 | 三石·道
随着这几年的发展,并发网组织翻译和原创了几百篇技术精品文章,包括Java,C++,JS,开源框架,管理和架构等,所以并发网从最初致力于并发编程的研究和传播,进化成现在的致力于精品技术的研究和传播:
并发编程网 - ifeve.com
egg,一个疯狂的Java爱好者!这里会分享一个程序员成长所需的点点滴滴,以Java为主体,从基础到高级知识都会不断的出炉:
智慧演绎,无处不在 - CSDN博客
阿里巴巴网络技术有限公司 资深研发工程师的blog:
HollisChuang’s Blog
满满的java干货:
java_my_life - 博客园
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站:
专注Java & Android 技术分享
我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。awesome-java就是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等:
jobbole/awesome-java-cn
以上 ,如果你掌握了我上述列出的这些,那么应该算是一个中高级的 Java 程序员了,到了这个阶段,想必接下来不必我多说,你也知道如何继续了。祝你牛逼,如果觉得本文对你有帮助,想要支持我一下,可以点击:我要支持wistbean
2020 刚来的时候,我们说:“2020 牛逼”,没想到一开始就直接给牛逼 “坏” 了,今年的春节,在疫情之下,更加没有内味了。
这次疫情不是噩梦,也不是恐怖电影,它就发生在我们生活的地方,它确确实实正在发生着。
当我们在看恐怖电影的时候,我们沉浸于剧情中时,会感到可怕,会被某些声效和画面吓到,但是我们知道那是假的,我们知道只要电影播放结束,我们就又回到了现实,我们是安全的,尽管在此过程中我们会感到恐惧,但是不至于恐慌。
但是当我们知道疫情正在发生,病毒会人传人,正在威胁人们的生命健康时,我们除了感到恐惧之外,还会慌得一批,特别是在各种谣言的散播下,以及各种事例的报道下,朋友圈的各种转发下,群里各种疫情讨论下…,这些多多少少都会 “催化” 自己的恐慌心理。
然而,恐慌,对于我们自己以及疫情的控制没有一点好处,甚至会让有些人做出一些不太理智的行为,比如这两天在疯抢的双黄连口服液的人们。
在这种信息爆炸下,要做到重视但不过度恐慌确实不太容易,这几天,很多人从醒来打开手机那一刻,就被各种信息刺激着自己的神经,直到关上手机闭上眼睡觉,脑子里还是在想着这些或真或假的事情。
所以我觉得这个时候,除了在家 “隔离”,尽量不出门之外,也要主动 “隔离” 一些信息了。
因为我们已经知道了新型冠状病毒是如何传播的,知道了如何防范,也知道我们能做的是什么。那么这时候关注官方权威的信息就够了,对于其它的各种自媒体,朋友圈,微信群相关的信息,尽量少关注,少讨论,少抱怨吧。
做到自己能做的,其它的交给时间,交给真正的专家,毕竟咱们对过多的消息干着急也没卵用。
相信美好的事情即将发生。
]]>今天早些是时候看到有人在朋友圈说科比意外去世了,我内心还在想又是哪个 B 乱造谣,后来去官方看了下发现这消息是真的,科比乘坐直升飞机坠机遇难了,实在难以相信科比的生命就这样戛然而止。
我是从初中打篮球的时候开始知道科比,知道 NBA 的。虽然从工作开始之后最很少去球场打篮球了,但是常常会想起科比的黑曼巴精神,常常会想起他那个经典的后仰跳投动作…
中学时期,对于我们班的男生来说,每天最喜欢的就是下午放学后的一段时间, 我们每天晚上都会一起打球打到七点多才一起回家,每天的校服都湿的可以拧出两桶水来,那时候我们的兄弟情感很是纯粹,也很深,我想这应该就是篮球的魅力了吧,所谓 “无兄弟,不篮球”。
高中的时候我是住校生,第一次体会到和同学一起住宿,也是因为打篮球和讨论科比让我们更加熟络起来,我记得以前我们为了打比赛,很多时候早上五点多就起床,天还没亮我们就冲到操场上打全场,输了的一队就负责接下来一个星期的宿舍卫生打扫。有了这么一点小小的赌注,就会让我们很想赢。
那时候我看 NBA 很多时候都是看湖人队,更多的是关注 24 号科比,玩 NBA 游戏的时候也是一直选湖人队,使用科比这个角色,我算不上科比的脑残粉,但是他的 “黑曼巴精神” 让我学到了很多。
科比脚受伤的时候,手指受伤的时候,他完全没有逃避和放弃,我看到他无奈的表情,眼睛里泛着泪光,可是他总是能很快的恢复,很快的复出,每一次出场,也总是没让喜欢他的人失望。
他的背后付出了许多,他曾说过:“你们知道每天早上 4 点钟的时候洛杉矶的样子吗?”
“如果你有梦想,你必须保护他。当别人做不到一件事情的时候,他们会告诉你, 你也不会做到,但如果你想做一件事,就去做吧!不要害怕失败,你不能总赢, 但不要害怕做决定!你要相信一些不同的东西是有可能发生的!”
这就是科比教会我的。
现在没怎么碰篮球了,但是时不时还是会关注科比,科比退役了,科比离开了…
虽然他的 8 号球衣和 24 号球衣在斯台普斯中心退役,虽然他已离开这个世界,但是他的精神对我的影响永不退役,一直存在。
致敬科比!
]]>又到了春节,想想上次自己和今天一样在电脑前写着 我的年终总结 ,感觉才过去了一阵子,然而这一年就真真切切的过去了,时间就是这样,总是在过后回头望去,才会显得飞快,特别是随着自己年龄的增长,这样的感受尤为明显。一个 5 岁的小屁孩,一年的时间对他来说就是 1/5 ,而一个 50 岁的正常人,一年的时间对他来说就是 1/50 ,对于后者来说,对 “一年” 的感受是极其快的。
这一年我做了一些减法,把主要的精力放在了我认为这一年比较值得做的地方上。那些被我砍掉的事情,并不是我觉得那些事不好或者不值当,而是对于当下的我来说,还没有足够的时间去做,我需要先把那些具备商业价值的事情做好,说得俗一点就是:“把能赚钱的事情先干好,等有余地了的时候,再想想那些暂时赚不了钱但是依然感兴趣的事。”
我一直把自己吹嘘为一个 “终身自学者”, 不过我确实有在践行,我觉得学习这事情就是一直去填补自己的认知 “空白” 区,很多人从毕业找到一份所谓的 “稳定工作” 开始,就停止学习了,每天看似怡然自得,但从长期看来,是需要付出无知的代价的。
在 “得到APP” 上,到年底会公布用户的学习数据,上次我看了下自己的学习情况,发现我的学习进度超过了 94% 的人,除此之外,我在其它的几个平台上都有在付费学习,一年算下来花在付费知识服务上有不少钱了,但是我觉得这些都是必需且值得花的钱,因为这些都是我能想到的最划算的投资。
虽然 19 年我在做的事情上做了一些减法,但是在输入上做了加法,除了技术相关之外,我 19 年还学了产品、商业、投资、自我提升、营销相关的知识,这些东西对我来说都是相辅相成的,它们同样具备我以前说的 “乘法原则”, 如果利用得当,我相信它们都能在未来给我起到非常大的作用。
在公众号“学习python的正确姿势”以及在 vip.fxxkpython.com 是我 19 年输出最多的地方,除了节假日之外,我都会在上面坚持更新,主要动力是关注和信任的人多一些,并且在这个公众号可以偶尔赚点钱了。
这个公众号从一开始 0 个粉丝,到现在有 4.5w 人关注,除了一直更新推文积累读者之外,我也用了一些产品的思维在里面,有些技术博主看到我那样写公众号都懵逼了,但其实懂的人就知道我在干什么,有时候站在对方思考问题,就是会受欢迎一些的。
不过,19 年在 “肯定会” 这里的输出相对少了些,有时候个把月才更新一下。在视频的领域也几乎没有输出,不过对这个领域我一直有在观察探索和思考, 2020 年会不会有什么新动作呢?嘿嘿…
19 年对于我来说,有这么几点主要的感悟,什么是对的,什么值得做?确实是需要自己身体力行去执行,才能发现的。
以前对 “流量就是钱” 的说法并不太在意,但通过践行发现,互联网中最主要的商业模式就是搞到流量,有流量就会有广告投放,就会有收益,流量越多,收益就越大。
所以我现在对于一些平台里比较热门的资源都会多加留意一下,比如为什么这篇文章阅读量这么高?为什么这个视频平淡无奇但播放量却那么恐怖?
在现在这个时代,结合流量思维,通过互联网已经让个人创业成为可能,一个比较好的个人商业模式就是:在互联网上付出足够的时间,搞到流量,从而变现。
事实上我已经在这么干,这不仅可行,而且潜能很大。
每个平台每个行业都有它的红利期,在红利期做事确实更加容易,但是潮水终将褪去,一旦褪去,裸泳的人一下子就浮出水面。
不管是 19 年的各种变相裁员,还是各种平台的红利期过去,过滤下来的一定是个人能力强的人,那种靠吹牛逼,假情假意的人逐渐被淘汰,从这个角度来看,能力强的人,不可替代性强,机会会更多的落在这些人身上。
每颗茁壮的树,都是从一颗种子开始,慢慢成长。我认为我在做的投资,学习…, 都像是在种树,眼前的得与失,沉与浮,只不过是一些小小的波动,这些玩意从长期看来,意义并不大。
关注长期,能够坚定的一点是,在很长的一段时间,自我投资的曲线一定是向上的,有时候是可以 “穿越” 的,提前活在未来,为现在做的事情做出调整,慢慢定投。
上次总结时说 19 年要做的事情大部分都完成了,除了 19 年觉得值得做的事情延续做下去,2020 还需要多考虑一些。
之前还总是觉得自己怎么吃也不会胖,现在打脸了, 19 年胖了 10 多斤,希望下次写总结的时候可以边摸着自己的 6 块腹肌边写。
19 年开始定投了一点数字资产,接下来继续坚持定投,对于看好的事物,需要长期持有,如果可能的话,对一些看好长期发展的公司也定投一些。
拓展收入渠道,把学到的一些知识应用起来,看看哪些地方有机会,现在收入渠道还不多,最好能够拓展 2 到 3 个收入渠道,最好是被动的那种。
英语搞起来,现在对一些技术文档能够看懂,但是觉得自己的英语水平还是很渣,特别是语言组织这一块。
既然能通过一些产品思维把公众号做起来,那在视频领域或许可以考虑下能不能把自己的 channel 做好。
冥想,适当的时候停下来,内观自己,需要多缓解自己的焦虑。
最后,我坚信美好的事情即将到来,也相信自己会越来越好,把握好自己的节奏,一步一个脚印,道路且长,莫问归路。
]]>vultr 是目前来说性价比很高的云服务产商,优惠不断,2020 最新的优惠来了,只要你是 Vultr 新注册的用户,就可以获取平台赠送的 100 美元,时间有限。早就是优势。
注意,只有是 vultr 的新注册用户才可以获得 vultr 的赠送 100 美元的活动。 vultr活动注册链接:https://my.vultr.com/。
vultr机房 | vultr官方测试IP地址 | 下载测试100M文件 | 下载测试1000M文件 |
---|---|---|---|
(Asia) Tokyo, Japan | hnd-jp-ping.vultr.com | 100Mb | 1000Mb |
(AU) Sydney, Australia | syd-au-ping.vultr.com | 100Mb | 1000Mb |
(EU) Frankfurt, DE | fra-de-ping.vultr.com | 100Mb | 1000Mb |
(EU) Amsterdam, NL | ams-nl-ping.vultr.com | 100Mb | 1000Mb |
Seattle, Washington | wa-us-ping.vultr.com | 100Mb | 1000Mb |
(EU) London, UK | lon-gb-ping.vultr.com | 100Mb | 1000Mb |
(EU) Paris, France | par-fr-ping.vultr.com | 100Mb | 1000Mb |
Los Angeles, California | lax-ca-us-ping.vultr.com | 100Mb | 1000Mb |
Chicago, Illinois | il-us-ping.vultr.com | 100Mb | 1000Mb |
Dallas, Texas | tx-us-ping.vultr.com | 100Mb | 1000Mb |
New York / New Jersey | nj-us-ping.vultr.com | 100Mb | 1000Mb |
Atlanta, Georgia | ga-us-ping.vultr.com | 100Mb | 1000Mb |
Miami, Florida | fl-us-ping.vultr.com | 100Mb | 1000Mb |
现在有朋友来我这,我都会带他们去大保健下,是的,来我这的主要娱乐活动就是大保健,按个摩放松下,然后去看下电影或者吃饭什么的,这种安静的快乐,就挺好。
哥们,我知道你刚才脑子闪过一些画面,但请停止,我这里说的是正规的按摩、沐足、spa..,不正规的虽有,但你懂的。
今天小帅b不是来开车的,我是认真的,程序员就应该多去大保健,我身边有些朋友,天天撸代码,对着电脑,有时候处于忘我的状态,身体一直保持一个姿势,等自己意识到了,脖子都特么硬了,颈椎长时间处于劳损状态,到最后只能去医院花大把钱就医,还很痛苦。
如果能早点意识到,拿着这笔医药费,平时多去大保健,放松放松,应该不至于这样。
程序员每天对着电脑写 bug,很多时候还带着耳机,每天开口说话很少,喝水也少,这嘴巴,不进也不出,一天又一天的过去,口不进水,容易得结石,口不出话,容易憋屈。
所以呀,没事了就多去大保健,你可以挑一个你看得过去的美女技师,她一边帮你正规服务,还会一边跟你谈心,把你的憋屈都释放出来吧,小姐姐很善解人意的。
一来你的身体得到了放松
二来你的心情还会变得好一些
何乐而不为呢?
还有些时候,你的 bug 整了几天都没找到解决方法,被 bug 整得心累不已,这时候就不要 996 的盯着这个 bug 了,有时候你要解决的那个问题,可能不在 bug 本身,这时候应该怎么办呢?恩,是的,去保健啊,见见美女技师,心情好了一些,给她按一下,心情好了一半,聊聊天,心情好了大半,你放松了,压力缓解了,说不定你的 bug 就不攻自破了呢。
虽然我自己不像以前那样需要 24 小时写 bug 了,但是我做的工作也都是需要我一直待在电脑前,时间久了自然累,所以每到累的时候我就会在微信上找小姐姐,正规的约一波,回来后又动力满满了。
不止是程序员吧,我觉得那些常常感到工作压力大的人都需要多去保健保健,毕竟,人一放松下来,压力就变小了,灵感就来了。
有些人关心价格,我这里给说下,在一线城市,正规的保健一般一次一两百块钱左右,60 到 90 分钟,如果有人给你介绍的服务是三四百块钱左右一次的话,那就别去了,那玩意可能不太正规哦。
现在朋友找我大晚上去 KTV、酒吧、蹦迪啥的我都没啥兴趣了,但是你说去按下摩,我那个兴致就来了。
熬夜 KTV、酒吧、蹦迪有害身体健康啊,保健就不同了,松筋活骨,放松身心,养养生,多好?
有人说现在的服务业不好做,我觉得有一点是去的人太少了,没事应该多去,花点钱,让自己身心放松之外,带动下经济,促进这个服务业更好的发展,这样的话,小姐姐说话就更甜了,服务就更好了…
是不是这个理?
]]>前两天去沐足,跟妹纸聊了聊,她说她每天要上班 10 个小时,她们一般从晚上 8 点干到早上 6 点,而且一个月只休 3 天。
我想了一下,卧槽,这比程序员还累,怪不得马总说 996 是我们修来的福报,我现在终于懂了,对于在会所工作的妹纸们,我想马总应该比我更了解她们吧。
在经济学中,有这么一个概念叫做 “边际成本”,说的是你每新产一个产品或者每提供一次服务所付出的总成本增量。
举个例子,你造了一辆车,这辆车车所需要的成本很多,特别是在从无到有的这个过程中,你所付出的成本是很大的,但是如果你能把生产规模扩大,比如生产个千万辆车出售,那么你的边际成本就会很低,不需要像一开始一样投入那么大量的时间等成本了。
微软系统也是如此,从零打造一个系统固然需要很大的成本,但是一旦把系统整出来,然后批量售卖给各个互联网用户,这时候需要增加成本么?不需要了,边际成本趋近于零。因为微软每提供给一个新的用户使用系统,不需要再打造,直接授权就可以了。
而我们一开始所说的那位沐足的妹纸,她的边际成本是没办法这样的,每一次上钟,她都需要付出一样的成本,不可能将她的服务 “复制粘贴” 给下一个客人。
所以我认为,要做就做那些能让边际成本趋近于零的事情,这才是明智的选择。
在这个互联网时代里,我看到很多大牛,一开始都在网上积累自己的影响力,这个过程中,一开始都是没什么回报的,他们付出自己的时间、资源等成本,当他们的影响力越来越大的时候,就会有很多流量,当流量一大,他们的边际成本就会逐渐降低,从而比普通人更容易获得收益。
那么,对于个人在互联网上有什么让边际成本趋近于零的事情做呢?我倒是想了有这么几个:
写作
就比如我现在写的公众号,也许有些观点我需要思考很久才发现,也许有些观点我通过看书才知道。显然这些操作都需要我私底下花些时间琢磨,那么我为什么又要费劲的把我的观点写到这里来呢?
因为有人看啊,我把我过往的时间所领悟到东西分享出来,看的人越多,我的边际成本就会降低。以前我觉得分享就是把我知道的拿出来给你看看,交个朋友。但是我现在觉得不止是这样,分享能延长我的生命。
其实现在写作的途径很多,各种自媒体平台多的是,如果觉得 low ,自己搭建个博客慢慢写也挺好。
写书也是一个道理,李笑来曾说,写书是他能够将自己的一份时间出售很多次的操作。当然了,前提是人家的影响力和书的质量够牛逼。
流媒体
现在短视频这么火热,很多人只是用它来打发时间,乐呵乐呵,而有少部分人则不断的拍摄,制作短视频,在抖音、b站、甚至 YouTube 上发布自己的作品。
当他们的视频曝光量越大,边际成本是不是就越低了?
除此之外,还有 podcast,还有直播。有些人说,那谁谁直播一次赚的钱够我们赚一辈子的了。
那可不嘛?人家是在一个 “面” 上做事,咱们是在一个 “点” 上挣扎,我们在走路,别人在飞。
互联网产品
一朋友做了一个 APP ,功能巨简单,就是调用一下手机的震动功能,可以设置下频率,然后就上传到 AppStore 了,没想到还有点下载量,就在里面嵌入一点广告,以后啥事不干,就可以躺着拿到广告费了。
在互联网上,不管是做网站还是 APP ,亦或是微信小程序,如果能找到用户的痛点,在细分领域琢磨的弄一个产品出来,不需要多牛逼,能够满足用户的一点需求就够了,接下来的产品维护成本其实没有多少,特别是那种细小的工具产品。
付费课程
在合适的时候,拿出一些时间来写付费课程或者专栏,让更多人来学习你的课程,这也是一种不错的降低边际成本的途径,就像一个老师对学生一对一补课和一个老师对着整个年级的学生讲课就是不一样,显然后者才是正确的姿势。
以上这些都是可行的操作,当然这里只是做一个引子,还有很多类似的场景都值得思考一下,比如人家拍一场电影很辛苦,但是票房可观就可以 cover ,周杰伦写一首歌可能需要很多灵感,但是歌曲一旦被追捧就可以 cover ,王者荣耀的皮肤在设计的时候可能需要很多时间,但是被很多玩家购买就可以 cover…
不知道为啥,写到这里的时候,突然想起了《有的人》:
有的人活着
他已经死了;
有的人死了
他还活着。
有的人 骑在人民头上:“啊,我多伟大!”
有的人 俯下身子给人民当牛马。
有的人 把名字刻入石头,想“不朽”;
有的人 情愿作野草,等着地下的火烧。
有的人 他活着别人就不能活;
有的人 他活着为了多数人更好地活。
骑在人民头上的 人民把他摔垮;
给人民作牛马的 人民永远记住他!
把名字刻入石头的 名字比尸首烂得更早;
只要春风吹到的地方 到处是青青的野草。
他活着别人就不能活的人, 他的下场可以看到;
他活着为了多数人更好地活着的人, 群众把他抬举得很高,很高。
我想你应该有这么一个瞬间,就是当你不小心听到你熟悉的音乐的时候,你会不自觉的跟着哼起来。更有趣的是,有时候即便你没听到相关的旋律,你也会不自觉的哼起来,唱起来,特别是在你洗澡的时候。
我想这应该是重复的结果,很多人遇到某些自己认为非常好听的歌,他们就会设置 “单曲循环” ,随着时间的推移,可能一首歌会被他听了上千遍,甚至上万遍。那么这个时候,这首歌就像是刻在自己的大脑一样,可以随时脱口而出,不需要再去多想下一句是怎么唱的,这首歌好像成了他身体上的一部分了。
所以我就想了,如果使用这种重复,运用到自己的学习中,应该可以做到本质上的改变。
前两天看到我朋友在做 2019 的年度总结,我看到他说他 2019 年读了 200 多本书,着实把我吓了一跳,如果说不是使用那种 “量子速度法” 阅读的,那我真是打从心底佩服。
不过我有一点点疑问,他真的能够吸收书中那么多的精华么?
我做不到一年读那么多本书,而且我也不会这么去干,我觉得把读 100 本书所需要的时间,拿来读 100 遍相同的一本书会更好一些。当然,前提是这本书的价值足够高。
每当我遇到我自认为价值很高的作品,比如专栏、演讲视频、书籍,我会想方设法弄到手,不管是付费还是搜索。弄到之后我会利用碎片时间,时不时都翻出来看,翻出来听。
并不是看完一次就完事了,我会一直重复,重复,再重复。这么说吧,有个演讲视频,我现在脑海中能够清楚的想起演讲中的每一句话,甚至里面提到的人名,场景。现在只要听前一句,我的脑子就能马上反应出他接下来要讲的下一句的内容,甚至一整段,而且我不需要费一点脑力,好似它已经长到了我的身上。
现在想来,这和我一开始说的 “单曲循环” 类似,应该就是重复的力量了。
说来好笑,每个背过英语单词的人,都不会忘记这个单词:abandon,为什么?因为这个单词被重复背了最多次。
我想你看电影的时候,也有过类似的感觉,当你看到一部让你震撼到 “起鸡皮疙瘩” 的电影,你会想方设法的二刷、三刷…n刷,每再看一次,你都能发现之前没看到的细节,每再看一次,你都会有新的感悟…,重复看的数次多了,你都能闭上眼,在脑海里面完整 “播放” 一次电影,是不是有点牛逼?
如果说在一个坐标轴中,x 轴是重复次数,y 轴是学习难度,那么它的曲线应该是类似这样的:
所以我还是认为,当我遇到有价值的书籍或者专栏的时候,至少要看它个 50 遍,这才能领悟那么一丢丢,很多人搞什么速读速记法,在我看来没有什么卵用,学习的真正捷径是:重复重复再他妈的不断的重复…
]]>文章标题 | 公众号链接 |
---|---|
python爬虫反反爬 | 像有道词典这样的 JS 混淆加密应该怎么破 |
哇靠,架构师你TM扔这些图给我到底算几个意思? | 小帅b公众号原创文章链接 |
GitHub2019年6月最牛逼的15个python项目 | 小帅b公众号原创文章链接 |
教你如何快速搞垮一个行业 | 小帅b公众号原创文章链接 |
你在浏览器输入了 baidu.com 并按下回车后,背后到底发生了什么? | 小帅b公众号原创文章链接 |
上班的时候,这 10 句话够你喝一壶的了 | 小帅b公众号原创文章链接 |
python爬虫反反爬 | 看完这篇,你几乎可以横扫大部分 css 字体加密的网站! |
吐血分享这两个爬虫用到的 Chrome 牛逼插件 | 小帅b公众号原创文章链接 |
20000粉丝福利来啦,送定制版帅b签名书籍 | 小帅b公众号原创文章链接 |
python爬虫反爬 | 对方是如何丧心病狂的通过 css 加密让你爬不到数据的 |
python如何赚钱? python爬虫如何进阶? python就业? 如何快速入门python? ….. | 小帅b公众号原创文章链接 |
高考要来了,扒一扒历年高考录取分数来压压惊 | 小帅b公众号原创文章链接 |
当 python 遇到你的微信的时候,你才发现原来你的微信好友是这样的 | 小帅b公众号原创文章链接 |
GitHub 2019 年 5 月最牛逼的 15 个 python 项目 | 小帅b公众号原创文章链接 |
00 后的互联网潮流用语了解一下 | 小帅b公众号原创文章链接 |
来跟你说两件事情 | 小帅b公众号原创文章链接 |
python爬取你喜欢的公众号的所有原创文章,然后搞成PDF慢慢看 | 小帅b公众号原创文章链接 |
520了,如果你的另一半是个程序员,发这个给TA | 小帅b公众号原创文章链接 |
python爬取 20w 表情包之后,从此你就成为了微信斗图届的高手 | 小帅b公众号原创文章链接 |
如何自学 Python 高效一些 | 小帅b公众号原创文章链接 |
python爬虫30 | scrapy后续,把「糗事百科」的段子爬下来然后存到数据库中 |
为什么我叫小帅b | 小帅b公众号原创文章链接 |
学编程不就是为了赚钱? | 小帅b公众号原创文章链接 |
python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害! |
python爬虫28 | 你爬下的数据不分析一波可就亏了啊,使用python进行数据可视化 |
GitHub2019年4月最牛逼的15个python项目 | 小帅b公众号原创文章链接 |
python爬虫27 | 当Python遇到MongoDB的时候,存储av女优的数据变得如此顺滑爽~ |
python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库。 |
小帅b的第二次「统一留言」回复以及「开奖啦!!」 | 小帅b公众号原创文章链接 |
叮咚!网站 fxxkpython.com 上线啦! | 小帅b公众号原创文章链接 |
python爬虫25 | 爬取下来的数据怎么保存? CSV 了解一下 |
来了来了,送小帅b签名书和小礼物 + 你们的第二次「统一留言」 | 小帅b公众号原创文章链接 |
把我压箱底的牛逼 Chrome 插件分享给你,嘘~偷偷用! | 小帅b公众号原创文章链接 |
这些高级的 Google 搜索秘籍,小帅b忍痛传授给你 | 小帅b公众号原创文章链接 |
来说几件小事情 | 小帅b公众号原创文章链接 |
python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。 |
看不下去了,我支持996,年轻人就该996! | 小帅b公众号原创文章链接 |
python爬虫23 | 手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处 |
python之父就是牛逼 | 小帅b公众号原创文章链接 |
python爬虫22 | 以后我再讲「模拟登录」我就是狗 |
python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别 |
去他妈的996! | 小帅b公众号原创文章链接 |
python爬虫20 | 小帅b教你如何识别图片验证码 |
爬虫,犯法吗? | 小帅b公众号原创文章链接 |
python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定! |
温馨提醒:微信群创建成功 | 小帅b公众号原创文章链接 |
python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会 |
python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 |
哥们,别再问我你适不适合学编程了好吗? | 小帅b公众号原创文章链接 |
你们的第一次「统一留言」和「小帅b的回复」 | 小帅b公众号原创文章链接 |
python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影 |
python爬虫15 | 害羞,用多线程秒爬那些万恶的妹纸们,纸巾呢? |
python爬虫14 | 就这么说吧,如果你不懂多线程和线程池,那就去河边摸鱼! |
如果你还是个大学生,快进来,小帅b想跟你说点良心的 | 小帅b公众号原创文章链接 |
python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的 |
python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞? |
python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们 |
python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!! |
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处 |
python爬虫08 | 你的第二个爬虫,要过年了,爬取豆瓣最受欢迎的250部电影慢慢看 |
python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了 |
python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍 |
python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有? |
python爬虫04 | 长江后浪推前浪,Reuqests库把urllib库拍在沙滩上 |
python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器 | 小帅b公众号原创文章链接 |
python爬虫入门02:教你通过 Fiddler 进行手机抓包 | 小帅b公众号原创文章链接 |
python爬虫入门01:教你在 Chrome 浏览器轻松抓包 | 小帅b公众号原创文章链接 |
python爬虫入门:什么是爬虫,怎么玩爬虫? | 小帅b公众号原创文章链接 |
对不起,我不应该出轨的! | 小帅b公众号原创文章链接 |
为什么会 python 的人会被另一半爱的死去活来? | 小帅b公众号原创文章链接 |
Python:好看的男人们,快到碗里来! | 小帅b公众号原创文章链接 |
python 爬虫应该学习什么知识点? | 小帅b公众号原创文章链接 |
PyCharm 使用教程:03 PyCharm常用技巧指南 | 小帅b公众号原创文章链接 |
PyCharm 使用教程:02 完全定制属于你自己的PyCharm编辑器 | 小帅b公众号原创文章链接 |
PyCharm 使用教程:01 安装PyCharm | 小帅b公众号原创文章链接 |
今日份的 Python 基础清单 | 小帅b公众号原创文章链接 |
装逼技能:把你的Python程序打包成exe可执行文件 | 小帅b公众号原创文章链接 |
Python的互联网编程 | 小帅b公众号原创文章链接 |
用python给自己写一个操作界面 | 小帅b公众号原创文章链接 |
把你的“女朋友”存储起来 | 小帅b公众号原创文章链接 |
Python是怎么读写小黄文的? | 小帅b公众号原创文章链接 |
知道代码有错还狂往下写? | 小帅b公众号原创文章链接 |
老子写个代码而已,凭什么还要我写文档? | 小帅b公众号原创文章链接 |
程序员之间为什么要相互鄙视呢? | 小帅b公众号原创文章链接 |
了解了这些之后,能让我们更愉快的玩爬虫 | 小帅b公众号原创文章链接 |
使用Python爬取性感美女并保存到本地 | 小帅b公众号原创文章链接 |
用哆啦A梦解释python面向对象(下) | 小帅b公众号原创文章链接 |
用哆啦A梦解释python面向对象(上) | 小帅b公众号原创文章链接 |
造轮子多麻烦啊,拿来就用是了 | 小帅b公众号原创文章链接 |
有这么讲Python中的序列的么? | 小帅b公众号原创文章链接 |
Python的创始人今天宣布了一件事情 | 小帅b公众号原创文章链接 |
所谓数据结构,对python来说不过如此 | 小帅b公众号原创文章链接 |
来了解一下面向对象 | 小帅b公众号原创文章链接 |
写一篇专门介绍各种符号的意义及用法 | 小帅b公众号原创文章链接 |
【精品】精心整理的一些 Python 学习资料 | 小帅b公众号原创文章链接 |
Python要你叫几次就得叫几次 | 小帅b公众号原创文章链接 |
有些人,只活了一天,重复到死 | 小帅b公众号原创文章链接 |
你追我,如果你追到我,我就跟你嘿嘿嘿 | 小帅b公众号原创文章链接 |
创建「学习python的正确姿势」公众号第二周 | 小帅b公众号原创文章链接 |
Pythoner:教你二进制八进制十六进制的快速转化 | 小帅b公众号原创文章链接 |
Python基本数据类型之「字符串」 | 小帅b公众号原创文章链接 |
Python基本数据类型之「数」 | 小帅b公众号原创文章链接 |
Pythoner:什么是常量,什么是变量? | 小帅b公众号原创文章链接 |
自己动手写一个会跟你 Say Hello 的 python 程序 | 小帅b公众号原创文章链接 |
Pythoner :挑选一个Python编辑器 | 小帅b公众号原创文章链接 |
精心整理了一份python体系的思维导图 | 小帅b公众号原创文章链接 |
Python : Hello World ! | 小帅b公众号原创文章链接 |
pick up Python | 小帅b公众号原创文章链接 |
文章标题 | 公众号链接 |
---|---|
拼多多100亿的羊毛,就问你薅不薅? | 曹大公众号原创文章链接 |
找工作么?会坐牢的那种。 | 曹大公众号原创文章链接 |
抓住职场的快车道 | 曹大公众号原创文章链接 |
从高考填志愿谈起 | 曹大公众号原创文章链接 |
我看Facebook Libra,让子弹飞一会。 | 曹大公众号原创文章链接 |
黑白之间,烦请适当宽松。 | 曹大公众号原创文章链接 |
为什么会做的越多,错的越多 | 曹大公众号原创文章链接 |
年薪百万是种怎样的体验 | 曹大公众号原创文章链接 |
听说你想炒币 | 曹大公众号原创文章链接 |
时间是把尺子 | 曹大公众号原创文章链接 |
漏斗模型被营销大师们玩烂了 | 曹大公众号原创文章链接 |
学无止境,我去考证 | 曹大公众号原创文章链接 |
俞军关于企业本质的读书思考 | 曹大公众号原创文章链接 |
哪些言论和文字,会让你受教终生? | 曹大公众号原创文章链接 |
要对抗,不要对立 | 曹大公众号原创文章链接 |
系统架构与企业管理 | 曹大公众号原创文章链接 |
不想延迟满足?早干嘛去了。 | 曹大公众号原创文章链接 |
支持保障岗位,如何刷职场存在感 | 曹大公众号原创文章链接 |
广告投手江湖之,玩转质量分 | 曹大公众号原创文章链接 |
听说你,对薪酬待遇不太满意。。。 | 曹大公众号原创文章链接 |
听说,你想干掉中介? | 曹大公众号原创文章链接 |
听说你,不想错过。。。 | 曹大公众号原创文章链接 |
所谓打破信息不对称,其实是一种幻觉。 | 曹大公众号原创文章链接 |
程序员职场的出路在哪里 | 曹大公众号原创文章链接 |
程序员相亲指南 | 曹大公众号原创文章链接 |
谈谈事实和逻辑 | 曹大公众号原创文章链接 |
关于程序员的996,我们谈谈历史和逻辑 | 曹大公众号原创文章链接 |
从COD着陆页设计优化谈起 | 曹大公众号原创文章链接 |
如何提升会员收入?从这道面试题谈谈框架思维。 | 曹大公众号原创文章链接 |
所谓成功人士,是怎么忽悠你们的 | 曹大公众号原创文章链接 |
面对裁员,该如何应对 | 曹大公众号原创文章链接 |
谈谈 To B业务的机会 | 曹大公众号原创文章链接 |
当你面临选择,所谓经验可能一文不值 | 曹大公众号原创文章链接 |
年轻人,如何抗造系列之 - 做好自己,留有空间 | 曹大公众号原创文章链接 |
看到了商机,为什么赚不到钱? | 曹大公众号原创文章链接 |
研发人员是怎样背锅的 | 曹大公众号原创文章链接 |
年轻人,如何抗造系列之 - 感恩,树洞及放空 | 曹大公众号原创文章链接 |
年轻人,如何才能抗造之 - 预期管理及心态控制 | 曹大公众号原创文章链接 |
一个爆款小程序的复盘 | 曹大公众号原创文章链接 |
年轻人,如何抗造系列之 - 无意义的忧虑与烦恼 | 曹大公众号原创文章链接 |
你的社交信息是怎么泄露的 | 曹大公众号原创文章链接 |
人际交往中,我不喜欢的那些 | 曹大公众号原创文章链接 |
谈谈To B业务的难点 | 曹大公众号原创文章链接 |
专心做业务,别想不开搞研发 | 曹大公众号原创文章链接 |
AI时代下的围棋 | 曹大公众号原创文章链接 |
社交网络的先烈们 | 曹大公众号原创文章链接 |
科技向善,一念天堂。 | 曹大公众号原创文章链接 |
你可以不喜欢 | 曹大公众号原创文章链接 |
尊重,还是不尊重 | 曹大公众号原创文章链接 |
谈谈增粉这点事 | 曹大公众号原创文章链接 |
新年出去玩么 | 曹大公众号原创文章链接 |
谈谈用户认知成本 | 曹大公众号原创文章链接 |
ofo这事吧,其实也挺好的 | 曹大公众号原创文章链接 |
看一看,好看不好看 | 曹大公众号原创文章链接 |
复盘,一个纸巾机创业项目是怎么失败的 | 曹大公众号原创文章链接 |
你矜持,你活该 | 曹大公众号原创文章链接 |
基因算命,心诚则灵 | 曹大公众号原创文章链接 |
从校园到职场 - 什么是职场经验 | 曹大公众号原创文章链接 |
从校园到职场 - 选择真的比努力重要么? | 曹大公众号原创文章链接 |
心中无敌,无敌于天下 | 曹大公众号原创文章链接 |
创业中的快与慢 | 曹大公众号原创文章链接 |
创业的虚与实 | 曹大公众号原创文章链接 |
见证人人的衰落,讲一句活该 | 曹大公众号原创文章链接 |
从关键词聚类的案例谈谈数据感 | 曹大公众号原创文章链接 |
侠之大者 | 曹大公众号原创文章链接 |
从校园到职场-如何自我估值 | 曹大公众号原创文章链接 |
腾讯过了这一坎 | 曹大公众号原创文章链接 |
关于阅读理解,我们学的,都是错的 | 曹大公众号原创文章链接 |
年轻人如何提高职场视野 | 曹大公众号原创文章链接 |
如何提拔骨干及挑选接班人 | 曹大公众号原创文章链接 |
从刷屏的卷发棒谈谈科技创新 | 曹大公众号原创文章链接 |
企业的地基与承重墙 | 曹大公众号原创文章链接 |
与烂人同行 | 曹大公众号原创文章链接 |
为什么有些“业余”的能赢。 | 曹大公众号原创文章链接 |
张小平,海底捞,比特大陆 | 曹大公众号原创文章链接 |
量子力学与创业 | 曹大公众号原创文章链接 |
家长是茬好韭菜。 | 曹大公众号原创文章链接 |
[科幻]钻石王子 | 曹大公众号原创文章链接 |
感恩,不只是一种美德 | 曹大公众号原创文章链接 |
人才的能力决定价值,真的理所当然么? | 曹大公众号原创文章链接 |
[科幻]一堂宇宙生物课 | 曹大公众号原创文章链接 |
沟通提升之 - 背景信息 | 曹大公众号原创文章链接 |
谈谈“脱裤”这点事 | 曹大公众号原创文章链接 |
一个至简推荐系统的实现(附源代码) | 曹大公众号原创文章链接 |
人在职场,都长点心吧 | 曹大公众号原创文章链接 |
人口红利的另一面 | 曹大公众号原创文章链接 |
浅谈负面评价设计 | 曹大公众号原创文章链接 |
求职是需要诚意的 | 曹大公众号原创文章链接 |
再谈话术 | 曹大公众号原创文章链接 |
小米算不算帮凶? | 曹大公众号原创文章链接 |
公众号信息流,假如我来设计。。。 | 曹大公众号原创文章链接 |
科学,宗教,与信仰 | 曹大公众号原创文章链接 |
抑郁症,莫要讳疾忌医。 | 曹大公众号原创文章链接 |
从药价高昂引申的思考 | 曹大公众号原创文章链接 |
数据驱动是怎么跑偏的 | 曹大公众号原创文章链接 |
机会源于对抗 | 曹大公众号原创文章链接 |
那些表面光鲜的成功人士背后 | 曹大公众号原创文章链接 |
从价格认知谈起 | 曹大公众号原创文章链接 |
别活成自己曾经厌恶的人 | 曹大公众号原创文章链接 |
美西自驾历险记 | 曹大公众号原创文章链接 |
与时俱进,拥抱变化 | 曹大公众号原创文章链接 |
不发这篇广告对不起我花的功夫 | 曹大公众号原创文章链接 |
这门安全课程,真的会让人受用终身。 | 曹大公众号原创文章链接 |
社会分工的理想与现实 | 曹大公众号原创文章链接 |
谈谈如何体现专业性 | 曹大公众号原创文章链接 |
腾讯的梦想,与你我何干 | 曹大公众号原创文章链接 |
竞价排名永不倒 | 曹大公众号原创文章链接 |
谈谈区块链的容错 | 曹大公众号原创文章链接 |
一别二十载 | 曹大公众号原创文章链接 |
再谈容错性 | 曹大公众号原创文章链接 |
社交障碍怎么办 | 曹大公众号原创文章链接 |
谈谈管理者的责任 | 曹大公众号原创文章链接 |
谈谈面试官的责任 | 曹大公众号原创文章链接 |
创业与投资的轮回 | 曹大公众号原创文章链接 |
谈谈招聘成本与优化 | 曹大公众号原创文章链接 |
思维的发散与收敛 | 曹大公众号原创文章链接 |
闲扯一下美团和滴滴 | 曹大公众号原创文章链接 |
当我们谈格局,我们在谈什么。 | 曹大公众号原创文章链接 |
再谈职场沟通 | 曹大公众号原创文章链接 |
从校园到职场 - 提问与交流 | 曹大公众号原创文章链接 |
论韭菜的觉悟与修养 | 曹大公众号原创文章链接 |
做个小本生意怎么赚钱 | 曹大公众号原创文章链接 |
人在职场,身不由己? | 曹大公众号原创文章链接 |
《正本清源区块链》课程分享裂变运营复盘 | 曹大公众号原创文章链接 |
谈谈仪式感 | 曹大公众号原创文章链接 |
闲扯一下新年红包 | 曹大公众号原创文章链接 |
触目惊心的互联网流量劫持 | 曹大公众号原创文章链接 |
创业者的噩梦 - 我本是守法良民 | 曹大公众号原创文章链接 |
创业者的噩梦 - 谁劫持了我们的用户! | 曹大公众号原创文章链接 |
谈谈签证这点事 | 曹大公众号原创文章链接 |
再谈职场中的用力过猛 | 曹大公众号原创文章链接 |
谈谈搬砖这门生意 | 曹大公众号原创文章链接 |
你有脑回千百转,我只用一招鲜 | 曹大公众号原创文章链接 |
那些似小实大的工作 | 曹大公众号原创文章链接 |
消费过剩时代 | 曹大公众号原创文章链接 |
不要试图挑战人性 | 曹大公众号原创文章链接 |
出海创业,不要作 | 曹大公众号原创文章链接 |
他们真的在意信用么? | 曹大公众号原创文章链接 |
信息安全攻防杂谈 | 曹大公众号原创文章链接 |
听说有人谋求稳定的工作? | 曹大公众号原创文章链接 |
如何快速有效阅读 | 曹大公众号原创文章链接 |
区块链装逼指南 | 曹大公众号原创文章链接 |
谈谈产品与运营之 - 润物细无声 | 曹大公众号原创文章链接 |
合规羊毛党小贴士,谈谈award caculator | 曹大公众号原创文章链接 |
走马观花看印尼 | 曹大公众号原创文章链接 |
有些钱,即便不脏,但也有毒。 | 曹大公众号原创文章链接 |
所谓"看棋高三段" | 曹大公众号原创文章链接 |
谈谈赚钱的套路 - 敏锐,决断及行动 | 曹大公众号原创文章链接 |
面具之下的真相 | 曹大公众号原创文章链接 |
分享即学习 | 曹大公众号原创文章链接 |
谈谈比特币分叉 | 曹大公众号原创文章链接 |
谈谈特权用户 | 曹大公众号原创文章链接 |
谈谈企业福利 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 迫不及待 | 曹大公众号原创文章链接 |
从“自相矛盾”的一些问题来谈谈认知 | 曹大公众号原创文章链接 |
谈谈产品与运营之 - 什么是用户感知 | 曹大公众号原创文章链接 |
谈谈赚钱的套路 - 消费冲动与消费信心。 | 曹大公众号原创文章链接 |
企业面试需要几轮 | 曹大公众号原创文章链接 |
关于Alphago zero,是的,我来跟风了 | 曹大公众号原创文章链接 |
巨头垄断下的创业机会 | 曹大公众号原创文章链接 |
面对学习,心存敬畏 | 曹大公众号原创文章链接 |
人生的选择题和证明题 | 曹大公众号原创文章链接 |
创业与投资 -谈谈融资这个事儿(下) | 曹大公众号原创文章链接 |
创业与投资 - 谈谈融资这个事儿(上) | 曹大公众号原创文章链接 |
共享经济的黄昏 | 曹大公众号原创文章链接 |
不是所有成功都值得尊重 | 曹大公众号原创文章链接 |
谈谈免费开源的知识产权话题 | 曹大公众号原创文章链接 |
当我们谈战略,我们究竟在谈什么? | 曹大公众号原创文章链接 |
创业者的噩梦 -商业竞争究竟有多残酷和黑暗 | 曹大公众号原创文章链接 |
有些答案,写出来其实蛮简单。 | 曹大公众号原创文章链接 |
霸王条款,新浪你担得起责么? | 曹大公众号原创文章链接 |
你还在寻找解决方案,别人已经颠覆了问题。 | 曹大公众号原创文章链接 |
从大企业常见的自嗨谈起 | 曹大公众号原创文章链接 |
我们都缺了一门必修课 | 曹大公众号原创文章链接 |
到底什么是割韭菜 | 曹大公众号原创文章链接 |
从一个独角兽的诞生说起 | 曹大公众号原创文章链接 |
关于UGC的数据隐私和所有权 | 曹大公众号原创文章链接 |
广告投手的江湖 | 曹大公众号原创文章链接 |
小程序的红利期 | 曹大公众号原创文章链接 |
共识即财富 | 曹大公众号原创文章链接 |
负成本营销 | 曹大公众号原创文章链接 |
从权力的游戏谈用户画像 | 曹大公众号原创文章链接 |
谈谈移民这点事 | 曹大公众号原创文章链接 |
阿法狗之后的围棋世界 | 曹大公众号原创文章链接 |
谈谈用户画像 | 曹大公众号原创文章链接 |
割不完的韭菜 | 曹大公众号原创文章链接 |
你会清理联系人么? | 曹大公众号原创文章链接 |
致那些“聪明”的读者 | 曹大公众号原创文章链接 |
你相信大爱无疆么? | 曹大公众号原创文章链接 |
手机是用来干嘛的? | 曹大公众号原创文章链接 |
好好说话 | 曹大公众号原创文章链接 |
怎么发现赚钱的套路 | 曹大公众号原创文章链接 |
谈谈赌博的套路 | 曹大公众号原创文章链接 |
关于知识付费,是的,我就是来砸场子的。 | 曹大公众号原创文章链接 |
谈谈用户体验与风控的平衡性 | 曹大公众号原创文章链接 |
江湖人称破锣糕 | 曹大公众号原创文章链接 |
扼杀创业的理想主义 | 曹大公众号原创文章链接 |
见微知著,从小需求里看产品的抉择和定位 | 曹大公众号原创文章链接 |
我的第一堂正式网课 | 曹大公众号原创文章链接 |
天使投资,众筹与项目背书 | 曹大公众号原创文章链接 |
如何管理和指挥你的上司 | 曹大公众号原创文章链接 |
再谈创业者的价值观 | 曹大公众号原创文章链接 |
谈谈消费升级 | 曹大公众号原创文章链接 |
从技术到管理 | 曹大公众号原创文章链接 |
读书笔记,满篇心理学家的吐槽 | 曹大公众号原创文章链接 |
前人挖坑,后人仆街 | 曹大公众号原创文章链接 |
暴走欧洲之 为信仰买单 | 曹大公众号原创文章链接 |
从校园到职场 - 技能与职位 | 曹大公众号原创文章链接 |
一个羊毛党的自白 | 曹大公众号原创文章链接 |
alphago 50盘自战棋谱的简单解读 | 曹大公众号原创文章链接 |
互联网世界的神奇逻辑 | 曹大公众号原创文章链接 |
暴走欧洲之文明的迭代 | 曹大公众号原创文章链接 |
从大数据+AI 谈谈概念与场景 | 曹大公众号原创文章链接 |
暴走欧洲之旅行的经验杂记 | 曹大公众号原创文章链接 |
是的,柯洁输了,然而又怎样。 | 曹大公众号原创文章链接 |
比输更可怕,写在人机大战之前 | 曹大公众号原创文章链接 |
暴走欧洲之在德国的反思 | 曹大公众号原创文章链接 |
暴走欧洲之流水账 | 曹大公众号原创文章链接 |
信息安全,别为了芝麻丢了西瓜。 | 曹大公众号原创文章链接 |
系统优化的前提是应用场景 | 曹大公众号原创文章链接 |
从空空狐谈信用卡套利 | 曹大公众号原创文章链接 |
中东出海浅谈 | 曹大公众号原创文章链接 |
走马观花看迪拜 | 曹大公众号原创文章链接 |
谈谈社区的用户增长 | 曹大公众号原创文章链接 |
谈谈编程 之 滥用内存的现象 | 曹大公众号原创文章链接 |
当我们追求不可替代。。。 | 曹大公众号原创文章链接 |
我知道你不想交智商税 | 曹大公众号原创文章链接 |
创业者的噩梦 - 人与人的信任呢? | 曹大公众号原创文章链接 |
微信赞赏与苹果税 | 曹大公众号原创文章链接 |
该来的总会来 - 谈谈小程序的这次升级 | 曹大公众号原创文章链接 |
创业者的噩梦 - 该我的钱怎么拿不到? | 曹大公众号原创文章链接 |
在薅流量之前,我们先谈点别的。 | 曹大公众号原创文章链接 |
编程的一些小习惯 | 曹大公众号原创文章链接 |
吐槽一下国泰航空 | 曹大公众号原创文章链接 |
所谓数据驱动,这个锅技术不能背。 | 曹大公众号原创文章链接 |
警惕那些让你ALL IN的人 | 曹大公众号原创文章链接 |
生财有术,15天,狂敛50万,付费社群实战分享 | 曹大公众号原创文章链接 |
微观经济学 读书笔记 | 曹大公众号原创文章链接 |
创业者的噩梦 - 怎么就侵权了 | 曹大公众号原创文章链接 |
名人耍大牌,怎么破? | 曹大公众号原创文章链接 |
谈谈微信公众号的交易价值 | 曹大公众号原创文章链接 |
划重点,少妇才是关键! | 曹大公众号原创文章链接 |
我讲个故事,你怎么理解? | 曹大公众号原创文章链接 |
原生态创业者,及社交想象力 | 曹大公众号原创文章链接 |
我的小密圈运营报告 | 曹大公众号原创文章链接 |
赠人玫瑰,手有余香 | 曹大公众号原创文章链接 |
Google关键词挖掘细分市场实战案例 | 曹大公众号原创文章链接 |
为国拓疆孰为不易 | 曹大公众号原创文章链接 |
真知识,也会成为毒药 | 曹大公众号原创文章链接 |
影响力阶级 | 曹大公众号原创文章链接 |
给我的偷懒找点借口 | 曹大公众号原创文章链接 |
流量技巧与内容本质 | 曹大公众号原创文章链接 |
与微信公众平台的商榷 | 曹大公众号原创文章链接 |
内容,信息与知识 | 曹大公众号原创文章链接 |
谈谈股权/期权协议 | 曹大公众号原创文章链接 |
绑架式创业 | 曹大公众号原创文章链接 |
从跨境电商方向选择谈起 | 曹大公众号原创文章链接 |
caoz的小密圈 | 曹大公众号原创文章链接 |
职场通病之 - 眼里揉不得沙子 | 曹大公众号原创文章链接 |
一路通,路路通 | 曹大公众号原创文章链接 |
流量运营,从入门到精通 | 曹大公众号原创文章链接 |
再谈大V的套路 | 曹大公众号原创文章链接 |
职场通病之 - 高不成,低不就的尴尬 | 曹大公众号原创文章链接 |
看不见的竞争 带宽优化 | 曹大公众号原创文章链接 |
没有捷径!没有捷径!没有捷径! | 曹大公众号原创文章链接 |
看不见的竞争 之 把握意见领袖 | 曹大公众号原创文章链接 |
谈谈财务自由 | 曹大公众号原创文章链接 |
看不见的竞争 文件和数据压缩 | 曹大公众号原创文章链接 |
视野与执行力 | 曹大公众号原创文章链接 |
留给春节的作业 | 曹大公众号原创文章链接 |
[重发]一年之计在于春 | 曹大公众号原创文章链接 |
小年夜的碎碎念 | 曹大公众号原创文章链接 |
谈谈创业这点事之 单点突破 | 曹大公众号原创文章链接 |
你被凤姐套路了么? | 曹大公众号原创文章链接 |
好话,真话,正确的话,你想听哪个? | 曹大公众号原创文章链接 |
从校园霸凌到职场骚扰 | 曹大公众号原创文章链接 |
别怕人家占你便宜 | 曹大公众号原创文章链接 |
空手套白狼,放端套利 | 曹大公众号原创文章链接 |
那些用力过猛的员工 | 曹大公众号原创文章链接 |
挖矿是个啥生意 | 曹大公众号原创文章链接 |
Google到底做了啥 | 曹大公众号原创文章链接 |
我的跨年趴 | 曹大公众号原创文章链接 |
向90后学习 | 曹大公众号原创文章链接 |
以爱国为名 | 曹大公众号原创文章链接 |
关于质疑精神 | 曹大公众号原创文章链接 |
所谓的干货满满,所谓的勤学不辍 | 曹大公众号原创文章链接 |
大学生创业实战 - 代充的套利故事 | 曹大公众号原创文章链接 |
AI是一场革命,不要笑,我是认真的。 | 曹大公众号原创文章链接 |
【科普】自充是个什么鬼 | 曹大公众号原创文章链接 |
【科普】搜索引擎的工作原理 | 曹大公众号原创文章链接 |
全球化的误区,本地化的机会 | 曹大公众号原创文章链接 |
知识分享,红利期还有多久 | 曹大公众号原创文章链接 |
数字交易所,人傻,钱多,速来 | 曹大公众号原创文章链接 |
扒扒当年网易的时运 | 曹大公众号原创文章链接 |
有些东西,你学不来的 | 曹大公众号原创文章链接 |
常见的媒体误读 | 曹大公众号原创文章链接 |
中国IT技术人员,是否适合新加坡发展 | 曹大公众号原创文章链接 |
你在看热闹,别人在捡钱 | 曹大公众号原创文章链接 |
从一头卖出27万的猪说起 | 曹大公众号原创文章链接 |
出了bug怎么办 | 曹大公众号原创文章链接 |
谈谈科学的本质 | 曹大公众号原创文章链接 |
如何做好创业公司CEO - 量力而行 | 曹大公众号原创文章链接 |
谈谈主动工作 | 曹大公众号原创文章链接 |
聊聊双十一和电商的盈利困境 | 曹大公众号原创文章链接 |
这个锅不该川普背 | 曹大公众号原创文章链接 |
谈谈产品和运营之 - 什么是用户预期 | 曹大公众号原创文章链接 |
新加坡的技术创新与投资 | 曹大公众号原创文章链接 |
从吃瓜群众到海盗党 | 曹大公众号原创文章链接 |
再谈东南亚创业环境 | 曹大公众号原创文章链接 |
东南亚电商创业环境 | 曹大公众号原创文章链接 |
谈谈容错性 | 曹大公众号原创文章链接 |
从新加坡谈政策和管理 | 曹大公众号原创文章链接 |
进击的OPPO | 曹大公众号原创文章链接 |
创业者的噩梦 - 明明我先想到的 | 曹大公众号原创文章链接 |
别用嘴炮救国 | 曹大公众号原创文章链接 |
南洋生活,聊聊新加坡的房地产 | 曹大公众号原创文章链接 |
AI时代 | 曹大公众号原创文章链接 |
政府信用与创业 | 曹大公众号原创文章链接 |
大公司背景的人创业困境 | 曹大公众号原创文章链接 |
创业者的噩梦 - 为什么没人能帮忙。 | 曹大公众号原创文章链接 |
mysql系统分析实战分享 | 曹大公众号原创文章链接 |
推荐算法,机器学习,会将我们带向何方? | 曹大公众号原创文章链接 |
断崖式下跌 - 创业者的噩梦 | 曹大公众号原创文章链接 |
跨界的魅力 | 曹大公众号原创文章链接 |
微信小程序的盛宴,你真的准备好了? | 曹大公众号原创文章链接 |
airbnb中国到底行不行 | 曹大公众号原创文章链接 |
谈谈帐期 | 曹大公众号原创文章链接 |
常识与现实 | 曹大公众号原创文章链接 |
月饼门,郭德纲,价值观 | 曹大公众号原创文章链接 |
谈谈用户筛选 | 曹大公众号原创文章链接 |
谈谈创业与人性 | 曹大公众号原创文章链接 |
不学点坏,怎么做好人 | 曹大公众号原创文章链接 |
那些倍受好评的烂文 | 曹大公众号原创文章链接 |
高价值信息圈的潜规则 | 曹大公众号原创文章链接 |
大佬们的智囊团 | 曹大公众号原创文章链接 |
所谓资本寒冬,不过是一厢情愿的破灭 | 曹大公众号原创文章链接 |
谈谈冯大辉与丁香园 | 曹大公众号原创文章链接 |
从Disucz能学到什么 | 曹大公众号原创文章链接 |
怀才不遇?醒醒吧。 | 曹大公众号原创文章链接 |
体制 | 曹大公众号原创文章链接 |
歧视 | 曹大公众号原创文章链接 |
浅薄 | 曹大公众号原创文章链接 |
浅谈领导力之 - 价值决策 | 曹大公众号原创文章链接 |
谢谢您看得起我 | 曹大公众号原创文章链接 |
没有乌云,天就一定晴了么 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 回归好玩 | 曹大公众号原创文章链接 |
其实,我也是个运维 | 曹大公众号原创文章链接 |
创业与投资 - 别沉浸于 to vc | 曹大公众号原创文章链接 |
傲慢与偏见之 - 轮到我们领先了 | 曹大公众号原创文章链接 |
浅谈领导力 适度冲突与权衡 | 曹大公众号原创文章链接 |
从南海到南洋 | 曹大公众号原创文章链接 |
谈谈有价值的社交 | 曹大公众号原创文章链接 |
正版缺阵,山寨称王 | 曹大公众号原创文章链接 |
德国黑科技的神话与常识 | 曹大公众号原创文章链接 |
谈谈创业这点事 之 时间窗口 | 曹大公众号原创文章链接 |
谈谈广电的游戏新政 | 曹大公众号原创文章链接 |
如何进行一次很low的speech。 | 曹大公众号原创文章链接 |
谈谈共享经济 | 曹大公众号原创文章链接 |
谈谈企业控制权之争 | 曹大公众号原创文章链接 |
不得贪胜 | 曹大公众号原创文章链接 |
公务舱攻略 | 曹大公众号原创文章链接 |
再谈信用的价值 | 曹大公众号原创文章链接 |
信用的价值 | 曹大公众号原创文章链接 |
教不来与学不会 | 曹大公众号原创文章链接 |
以创业的名义 | 曹大公众号原创文章链接 |
以知识分享为幌子 | 曹大公众号原创文章链接 |
流量的攻与防 | 曹大公众号原创文章链接 |
不干扰就是一种用户体验 | 曹大公众号原创文章链接 |
流量的旅行之路 | 曹大公众号原创文章链接 |
谈谈创业这点事 专业的盲区 | 曹大公众号原创文章链接 |
谈谈创业这点事之 流量的价值 | 曹大公众号原创文章链接 |
谈谈创业这点事 之 如何界定可行性 | 曹大公众号原创文章链接 |
从受众目标,再谈过犹不及 | 曹大公众号原创文章链接 |
从反反鸡汤谈过犹不及 | 曹大公众号原创文章链接 |
再谈万恶的kpi | 曹大公众号原创文章链接 |
万恶的kpi | 曹大公众号原创文章链接 |
谈谈激励的原则 | 曹大公众号原创文章链接 |
宣泄,还是逻辑 | 曹大公众号原创文章链接 |
傲慢与偏见之 - 山寨与创新 | 曹大公众号原创文章链接 |
傲慢与偏见之 - 因果倒置的锦上添花 | 曹大公众号原创文章链接 |
傲慢与偏见之 - 防火墙与竞争力 | 曹大公众号原创文章链接 |
傲慢与偏见之 - 谷歌中国逆袭史 | 曹大公众号原创文章链接 |
处处皆黑客 | 曹大公众号原创文章链接 |
谈谈背景调查 | 曹大公众号原创文章链接 |
邪恶的正能量 | 曹大公众号原创文章链接 |
开脑洞的套利骗局 | 曹大公众号原创文章链接 |
狼,兔子,激励 | 曹大公众号原创文章链接 |
商业价值的逻辑 | 曹大公众号原创文章链接 |
小国崛起 - 谈谈东南亚的未来(下) | 曹大公众号原创文章链接 |
小国崛起 - 谈谈东南亚的未来(上) | 曹大公众号原创文章链接 |
谈谈域名这点事 | 曹大公众号原创文章链接 |
谈谈与平台合作的逻辑 | 曹大公众号原创文章链接 |
从值乎谈执行力 | 曹大公众号原创文章链接 |
摆事实,讲歪理 | 曹大公众号原创文章链接 |
黑客的背后 | 曹大公众号原创文章链接 |
谈谈基因的黑科技 - 抛砖引玉篇 | 曹大公众号原创文章链接 |
看不懂的世界 | 曹大公众号原创文章链接 |
变坏其实很容易 | 曹大公众号原创文章链接 |
从"递弱代偿"说起 | 曹大公众号原创文章链接 |
谈谈品牌(下) | 曹大公众号原创文章链接 |
为政治正确埋单 | 曹大公众号原创文章链接 |
谈谈品牌(上) | 曹大公众号原创文章链接 |
谈谈papi酱的价值 | 曹大公众号原创文章链接 |
流行与经典 | 曹大公众号原创文章链接 |
谈谈李一男 | 曹大公众号原创文章链接 |
边界与底线 | 曹大公众号原创文章链接 |
深度学习并非最优方案 | 曹大公众号原创文章链接 |
毁灭你,与你何干 | 曹大公众号原创文章链接 |
如何正确的勾搭大V | 曹大公众号原创文章链接 |
自信,还是故步自封 | 曹大公众号原创文章链接 |
新时代的大跃进 | 曹大公众号原创文章链接 |
谈谈大V - 关于影响力 | 曹大公众号原创文章链接 |
关于判断力 - 正视事实是基础 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 聊聊黑产 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 聊聊技术 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 聊聊留存 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 聊聊挖坑 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 聊聊山寨与混搭 | 曹大公众号原创文章链接 |
创业者的技能树 -下篇 | 曹大公众号原创文章链接 |
支付,不仅仅是支付 | 曹大公众号原创文章链接 |
创业者的技能树 - 中篇 | 曹大公众号原创文章链接 |
创业者的技能树 -上篇 | 曹大公众号原创文章链接 |
视界不同,世界不同 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 进阶篇 | 曹大公众号原创文章链接 |
游戏是怎么赚钱的 - 科普篇 | 曹大公众号原创文章链接 |
科学边界的胡思乱想 | 曹大公众号原创文章链接 |
关于判断力-兼谈IT评论界冥顽不化的愚蠢 | 曹大公众号原创文章链接 |
话术 | 曹大公众号原创文章链接 |
红包大战的杂谈 | 曹大公众号原创文章链接 |
谈谈写作这点事 | 曹大公众号原创文章链接 |
了不起的网易 | 曹大公众号原创文章链接 |
没逻辑,真可怕 | 曹大公众号原创文章链接 |
学会止损 | 曹大公众号原创文章链接 |
如何应对并发(6) - 琐碎的日常 | 曹大公众号原创文章链接 |
一年之计在于春 | 曹大公众号原创文章链接 |
奇点临近 | 曹大公众号原创文章链接 |
能力不到,难做好人 | 曹大公众号原创文章链接 |
今天聊聊表情包 | 曹大公众号原创文章链接 |
帝吧出征,其实也挺好 | 曹大公众号原创文章链接 |
从网景到chrome | 曹大公众号原创文章链接 |
曾经的中国互联网 | 曹大公众号原创文章链接 |
从校园到职场 - 谈谈艺多不压身 | 曹大公众号原创文章链接 |
知易行难与抓大放小 - 不止写给百度 | 曹大公众号原创文章链接 |
外行人谈股市 | 曹大公众号原创文章链接 |
杀人游戏 | 曹大公众号原创文章链接 |
论大V的自我修养 | 曹大公众号原创文章链接 |
商旅服务的水有多深 | 曹大公众号原创文章链接 |
贴吧的水有多深 | 曹大公众号原创文章链接 |
萧衍空函定荆州 | 曹大公众号原创文章链接 |
技术选型的一些考虑 | 曹大公众号原创文章链接 |
赢得次数多,不如一把赢得大 | 曹大公众号原创文章链接 |
再谈隐性成本 | 曹大公众号原创文章链接 |
闲谈隐性成本(太多人的思维盲区) | 曹大公众号原创文章链接 |
浅谈领导力之- 赏罚分明 | 曹大公众号原创文章链接 |
翻翻旧账,关于国产当自强 | 曹大公众号原创文章链接 |
媒体传播的本质就是骗人 | 曹大公众号原创文章链接 |
开上帝视角,其实你也能 | 曹大公众号原创文章链接 |
谈谈产品和运营 - 所谓细节的探讨 | 曹大公众号原创文章链接 |
今夜我们谈谈金融 | 曹大公众号原创文章链接 |
如果你的朋友圈很low | 曹大公众号原创文章链接 |
如何应对并发(5) - 关键的关键,是认识负载 | 曹大公众号原创文章链接 |
怎样成为一名黑客 | 曹大公众号原创文章链接 |
我知道你说的都对,但是。。。 | 曹大公众号原创文章链接 |
职场通病之 - 别把自己当小受 | 曹大公众号原创文章链接 |
职场通病之 - 坐守金山不自知 | 曹大公众号原创文章链接 |
说个"扯蛋"的话题 | 曹大公众号原创文章链接 |
浅谈领导力之 - 乾坤独断还是兼听则明? | 曹大公众号原创文章链接 |
浅谈领导力之二 - 授权与放权 | 曹大公众号原创文章链接 |
海外华人建国史 | 曹大公众号原创文章链接 |
外行谈征信 | 曹大公众号原创文章链接 |
从E租宝被查谈常识 | 曹大公众号原创文章链接 |
验证码是个什么鬼 | 曹大公众号原创文章链接 |
从校园到职场 - 再谈切忌照本宣科 | 曹大公众号原创文章链接 |
键盘常胜将军 | 曹大公众号原创文章链接 |
越南游戏市场简述 之续 | 曹大公众号原创文章链接 |
浅谈关于领导力之一 - 识人之能 | 曹大公众号原创文章链接 |
越南游戏市场简述 | 曹大公众号原创文章链接 |
从历史中讲创业的韧性 | 曹大公众号原创文章链接 |
创业与投资之 - 价值观 | 曹大公众号原创文章链接 |
caoz谈能力成长 - 分享的技巧 | 曹大公众号原创文章链接 |
谈谈个人价值及平台红利 | 曹大公众号原创文章链接 |
从一则预测谈起 - 别用臆断代替求证 | 曹大公众号原创文章链接 |
从校园到职场 - 信用与操守伴你一生 | 曹大公众号原创文章链接 |
从CNZZ历史讲创业与打工的区别 | 曹大公众号原创文章链接 |
如何应对并发(4) - 分布式数据库及反范式设计 | 曹大公众号原创文章链接 |
如何应对并发(3) - 需求裁剪 | 曹大公众号原创文章链接 |
信息不对称套利之 - 羊毛党 | 曹大公众号原创文章链接 |
如何应对并发(2) - 请求合并及异步处理 | 曹大公众号原创文章链接 |
如何应对并发(1) - 关于数据索引 | 曹大公众号原创文章链接 |
谈谈产品和运营 - 什么是需求(下) | 曹大公众号原创文章链接 |
从校园到职场 - 说说求职这点事 | 曹大公众号原创文章链接 |
谈谈产品和运营 - 什么是需求(中) | 曹大公众号原创文章链接 |
谈谈产品和运营 - 什么是需求(上) | 曹大公众号原创文章链接 |
谈谈产品及运营 - 如何避免一厢情愿 | 曹大公众号原创文章链接 |
提升智商表现,切忌一厢情愿 | 曹大公众号原创文章链接 |
所谓坚持 | 曹大公众号原创文章链接 |
奇葩商业运营案例精选(1) | 曹大公众号原创文章链接 |
从校园到职场 你的目标是什么 | 曹大公众号原创文章链接 |
从习近平访新,谈谈中新关系 | 曹大公众号原创文章链接 |
caoz谈能力成长 - 取舍之道 | 曹大公众号原创文章链接 |
谈谈创业这点事(10) | 曹大公众号原创文章链接 |
谈谈创业这点事(9) | 曹大公众号原创文章链接 |
谈谈创业这点事(8) | 曹大公众号原创文章链接 |
目标客户定位及宣传方向选择 | 曹大公众号原创文章链接 |
节操与道德绑架 | 曹大公众号原创文章链接 |
企业服务,机会还是陷阱 | 曹大公众号原创文章链接 |
跨界与沟通 | 曹大公众号原创文章链接 |
知识分享,如何待价而沽 | 曹大公众号原创文章链接 |
谈谈创业这点事(7) | 曹大公众号原创文章链接 |
从校园到职场 - 不要轻易给自己定性 | 曹大公众号原创文章链接 |
凛冬将至 | 曹大公众号原创文章链接 |
运营相关问题杂谈 | 曹大公众号原创文章链接 |
10月20日杂谈 | 曹大公众号原创文章链接 |
偏见的由来-选择性阅读 | 曹大公众号原创文章链接 |
从校园到职场 - 切勿陷入照本宣科 | 曹大公众号原创文章链接 |
caoz谈能力成长系列 - 机会来自于担当 | 曹大公众号原创文章链接 |
caoz谈能力成长 - 归纳与总结 | 曹大公众号原创文章链接 |
caoz谈能力成长系列 - 提问的技术 | 曹大公众号原创文章链接 |
一则经典技术面试题目的解读 | 曹大公众号原创文章链接 |
从校园到职场 - 不要躲在舒适区 | 曹大公众号原创文章链接 |
关于互联网时代的自助旅游 | 曹大公众号原创文章链接 |
从青蒿素说一下专利与知识产权[更新] | 曹大公众号原创文章链接 |
从青蒿素说一下专利与知识产权 | 曹大公众号原创文章链接 |
从校园到职场之一 -说说实习这点事 | 曹大公众号原创文章链接 |
关于做人,以及做企业的闲聊 | 曹大公众号原创文章链接 |
关于做人的闲聊 | 曹大公众号原创文章链接 |
台湾原住民的由来-历史隐藏的枭雄 | 曹大公众号原创文章链接 |
再谈技术的价值 | 曹大公众号原创文章链接 |
关于技术合伙人的话题 | 曹大公众号原创文章链接 |
创业公司如何做好信息安全(下) | 曹大公众号原创文章链接 |
创业公司如何做好信息安全(上) | 曹大公众号原创文章链接 |
信息安全常识科普 | 曹大公众号原创文章链接 |
套利,最“容易”的赚钱创业手段 | 曹大公众号原创文章链接 |
扒一扒香港黑社会 | 曹大公众号原创文章链接 |
说说社交与人脉 | 曹大公众号原创文章链接 |
喂喂,说好的节操呢! | 曹大公众号原创文章链接 |
【旧文重贴】谈谈商业分析的思维养成 | 曹大公众号原创文章链接 |
撰写商业计划书的一些误区和建议 | 曹大公众号原创文章链接 |
分享即学习 | 曹大公众号原创文章链接 |
一个草根站长的逆袭之旅 | 曹大公众号原创文章链接 |
关于产品与技术沟通的一些建议 | 曹大公众号原创文章链接 |
谈谈社交网络的历史 | 曹大公众号原创文章链接 |
谈谈创业这点事(6) | 曹大公众号原创文章链接 |
谈谈创业这点事(5) | 曹大公众号原创文章链接 |
我记得挺久之前在某网站刷视频的时候,看到了一些关于 PUA 的教程,一开始出于好奇,想知道 PUA 到底是个什么玩意,后来了解到这个就是专门教人怎么泡妞的,我当时兴致就突然勃勃了起来,连看了好几集。
简单说下, PUA 起源于国外,说得专业点就是 Pick up artist ,也就是搭讪艺术,说白了就是通过学习一系列套路来让自己更容易泡到妞,比如如何了解对方的心理,跟对方聊天的技巧,做一些什么操作来降低对方的 ASD ,如何给自己建立一个几乎牛逼的人设,什么时候可以进行下一步,如何让对方 “解除装备”,什么时候可以 “搜身”,甚至于开房技巧和话术等等。
虽然现在我对这些都门儿清,但说实话,我还真没利用这些去泡妞,主要是我觉得靠自己的颜值和才华足以。
玩笑归玩笑,但是我觉得了解这些套路,也许可以让你多留个心眼,说不定以后就有些人通过 PUA 搞你呢?不管男女都一样。
特别是 PUA 被引进国内之后,各种自称 “恋爱大师” 疯狂割韭菜就算了,还进一步恶化它,比如各种恋爱陷阱,骗炮骗钱甚至精神控制,逼到对方自杀。有些社区还布置作业,以骗到多少炮为豪,也是醉了。更可恨的就不说了,太他妈渣了。
我今天想说的一点是,其实我们刚去认识一个人的时候,我们更多的是看这个人的 “人设”,或者说他所扮演的 “角色”,而他的“低层系统”,是需要长时间的相处才能慢慢了解的,但是很多人都很容易被 “人设” 所迷惑。比如一个农村的小伙,一开始又穷又矬,然后自己很不甘心,通过自己的努力,摇身一变,牛逼哄哄,是一种人设;比如那些让你感觉什么都无所谓,潇潇洒洒,嘻嘻嘻哈哈,相比之下,自己活得不如一条狗,也是一种人设;打开你的朋友圈,那些头像设置为自己穿的西装革履,头发梳成大人模样的照片,还是一种人设…
我想说的是,当我们去认识一个人的时候,人设可以作为一个参考,但不要过度认为他就这样的一个人,特别是想要跟对方培养长期关系,需要更多的去了解对方的“低层系统”,是否真的可以。
当然,约炮的话就另当别论了。
PUA 不仅是男对女,也有女对男,现实生活中我还真的不小心见过那么牛逼一女的,具体如何就不说了,反正那些突如其来的异性(也包括同性吧),无缘无故的对你过分的好,或者让你产生这个人很不一样并且对你还挺好,亦或者察觉到对方用各种话术整得你不要不要的(虽然有点难)…,都保持一点理性吧。
]]>在理财中有这么一个概念叫 “基金定投”,主要是说自己去找个合适的时间,然后以一定的金额投入到某个基金里面去,接着不要去管它的死活,反正每到自己规定的那个时间,就是对你选择的那个基金一顿金额投入。
比如说,你每周的星期五,都拿出 500 元去投资到某一个具备长期发展的基金中去,这就是定投。
这种投资的方式非常简单,却行之有效,不需要自己常常因为各种指数的升跌而操各种心,也不需要自己浪费很多时间去研究各种 “江湖乱吹”,反正定时定点 “吃药” 就可以了。
不过这其中有一个关键的点,就在于长期。你能抓住某样东西,一动不动,坚持个十年二十年吗?其实挺难说的,特别是在你每周五都拿出 500 元去定投的时候,在你认为的 “长时间” 里面没有看到收益,甚至还常常亏了点钱的时候,可能就没有太多的动力去坚持不断的定投了。
说到长期,我想我们自己这条命,存活在这个世界上的时间总和,可以算是一个长期了。
那么,不妨把自己当作标的,自己定投自己,因为我们自己本身是具备长期这个条件的,还有成长的潜能,并且可控,我想这世界上应该找不到比这个更好的投资标的了。
那么应该具体定投自己的什么呢?用什么来定投自己呢?
摸了一下口袋,空空如也…还是算了吧?别忘了,咱们还有比钱更宝贵的东西,那就是时间,是的,拿出自己的时间,定投到自己的成长上面去。这句话有点牛逼,容我再说一遍:
拿出自己的时间,定投到自己的成长上。
我之前也是想,本身就没几个钱,投资个屁股啊?但后来慢慢想法就不同了,几百块钱总有吧?一年买几个课程总可以吧?然后以定投的方式,花时间去学习,去内化,慢慢的提升自己。
那么终归有一天,自己的能力一定会比以前牛逼,这个时候自己的单位时间的付出所能交换到的资源就会更多,换句话说,自己越牛逼,是不是就比以前赚到的钱就越多了?是不是往后就能去寻找除了本身之外,其它具备长期的、有成长潜力的标的进行定投了?
这,就是我能想到的,最划算的投资。
]]>一般情况下,你开发了一个网页,部署到服务器上,别人通过你的页面链接在浏览器中进行访问,浏览器在请求的时候会得到一个响应码,也就是 200 ,这个时候用户就能够看到你这个页面所提供的内容。
服务器响应的状态码有很多,常见的就是以 2、 3、 4、 5 开头的,其中:
2开头的表示服务器成功接收到请求
3开头的表示页面重定向
4开头的表示客户端访问错误
5开头的表示服务器错误
我们比较常见的 404 就是请求错误的一种状态码,这种情况的发生常见的有这么两种,一种是人家的地址你访问错了,比如人家的网页目录是在 web 服务器上的 a 目录,但你偏偏去访问人家的 b 目录:
正确是这样的:
https://www.aaa.com/a/index.html
但是你这样访问:
https://www.aaa.com/b/index.html
这时候对方发现服务器上的 b 目录并没有 index.html 这个网页,那么就会返回 404 ,意思是这个页面不存在于服务器上。
还有一种常见情况就是,你前一秒还可以访问,但是过不久服务器那边把目录里的内容删除了,这时候你再去访问,就会得到 404 页面,人家不会告诉你具体是什么原因删掉内容。不过温馨点的网站会告诉你:“对不起,亲,你访问的页面不存在”。
404 对于小打小闹的网站来说价值并不大,但是对于一些大型流量的网站来说价值就不菲了。
当一个品牌耗费了大量的时间精力才打造出来的信任,如果因为某件有损坏品牌的事情被发布到各大主流网站上,那么带来的损失想想都肉疼。
所幸的是有 404 ,这个普通的三位数可以让双方通过某些特定的条件达成共识,构建 “和谐” 的坏境。
然而,当一个又一个 404 的出现,堆积起来的是人们的疑问,什么是逃避,什么是担当?堆积起来的是人们的愤怒,什么是公平?什么是对等?
人们是有底线的,当底线被击穿的时候,404 也特么能变 200。
]]>不管是想要搭建一个属于自己的网站,还是要托管一些项目给别人使用,亦或是想搭建一个自己的梯子,云服务器已经是这个互联网时代的主力军之一了。
我买过挺多厂商的服务器的了,一开始自己想折腾点东西,当时看到阿里云服务器有优惠,就买了阿里云的服务器,后来工作又用过腾讯云,华为的,亚马逊云服务器,ucloud等。有时候需要负责公司项目的一些分布式的部署,少说也用过近 10 个不同产商的云服务器了。
其实不太建议购买国内的云服务,除了需要备案之外,还会被监控。如果有些项目是需要面向国内用户,需要备案什么的话,比较推荐的还是阿里云服务器。毕竟技术摆在那里,现在不停的迭代更新。
之前也用过一些国内不太知名的云服务器产商,还没部署一天,网站就中毒了,阿里云相对来说安全性还是有的,工单处理蛮快的。但是有一点要注意的就是:不要在国内这些云服务产商搭建一些诸如区块链,VPN之类的东西,容易出事。别问我为什么知道的。
如果是个人用的话,我还是强烈推荐使用国外的云服务产商的,好处在于:
对于亚马逊,谷歌云就不多说了,虽然他们有 1 年的试用,但是需要有全球通用的信用卡,操作略繁琐。
接下来主要来推荐我用过的,性价比超高的云服务器,Vultr和搬瓦工。
第一次知道 Vultr 是因为它的价格,$2.5 一个月,而且当时还有优惠,试着买了一个日本的 VPS 服务器,速度飞快。
Vultr 全球有 16 个机房:
Vultr 支持的系统有主流的操作系统,比如:CentOS,Debian,Ubuntu,Windows:
Vultr 的价格感人,最便宜的才 2.5 刀,每月就有 500G 流量了:
Vultr后台操作简单,界面用起来也很舒服。
点击Vultr赠送新用户 $50 优惠注册后,系统会赠送新用户 $50 到账户,在购买云服务器的时候可以用上。之前还有充值 $10 送 $100 ,现在不知有没有了,不过 Vultr 有经常做优惠活动。这里的Vultr优惠链接永久有效。
Vultr支持信用卡,paypal,比特币,支付宝,微信支付:
使用vultr(vps)搭建ss并开启BBR快速上网教程 超简单10分钟搞定
另一个性价比高的云服务器就是搬瓦工了,搬瓦工云服务器很方便管理,你可以在后台直接对服务器进行操作,比如开启,关闭系统,更换系统,更换ip地址等。
搬瓦工支持的系统有:
可以看到,搬瓦工最便宜的有 $19.99 / 年(现在没了,所以还是买 Vultr 吧。),500G 的流量,对我来说完全够用。
在搬瓦工官网 ,可以看到这里有一些供你选择的服务器,目前 19 刀一年对于个人来说完全够用,以下是可以获取优惠码的服务器:
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
这时候可以选择想要购买服务器的时长和服务器所处的位置。选择完之后不要急着点击 「Add to Cart」。
这时候就可以获取隐藏的优惠码了,我们对着这个网页:鼠标右击–>查看网页源代码。
接着 Ctrl + F 搜索 code ,这时候你就会看到 Try this promo code: xxxx,这里的xxxx就是优惠吗,把它复制下来。
然后回到我们的购买页,点击「Add to Cart」添加到购物车。
可以看到这里有一个 Promotional Code,我们输入刚才复制的优惠码,然后点击 「Validate Code」。可以发现得到了优惠,这里我用 320G 的VPS 为例,优惠了 4.8%:
接着就可以以比别人更便宜的价格点击 CheckOut 付款啦。
搬瓦工支持的付费方式有:信用卡,支付宝,paypal。
前几天有一篇公众号的文章《网易裁员,让保安把身患绝症的我赶出公司。我在网易亲身经历的噩梦!》被刷爆了,说的是作者在网易工作了 5 年,后来发现自己患上了比较严重的病,结果被主管和 HR 以各种威胁的方式让作者主动离职。具体的威胁手段就不多说了,有一点让我觉得非常不人道的是作者请病假在医院住院的时候,HR 居然打电话来,用作者的父母威胁他接受协议。
作者在申请 N+1 和绩效复核的过程被百般阻挠,实在没办法才写了那篇文章。最后网易还是出了道歉声明,我看了下,作者提到的各种被威胁的方式都没有作出回应,网易基本上是默认了。
主管和 HR 能把一个身患重病的同事往死了逼,真的让人不寒而栗。有些人觉得网易大厂都能如此,不敢想象还有多少人遭受到类似的不幸。
我是认为,我们身为一个个体,还是要多为自己考虑考虑,我之前说过,要有点甲方思维,很多人上班时间久了,奴性就会越来越强,很难说不,甚至很难拒绝公司要求的工作范围以外的事情,总认为自己是在委曲求全,但事实上每次都会弄得让自己很不开心。
人们总是忘了,其实上班,只是你在拿你的时间和能力跟他们交换资源罢了。
时间是一个常量,不可变的,但是能力是个变量,它是可变的,我们完全可以靠自己将能力提升起来。如果说 “能交换到的资源 = 时间 + 能力” ,那么提升自己的能力,我们的不可替代性就会越强,能交换的资源就会越多。
有些人喜欢谈感情,会给自己的工作或者公司加上感情因素,比如这样:“能交换到的资源 = 时间 + 能力 + 感情”,但是我觉得在这个式子中,尽量不要去加可变的因素,感情是个变量,但是单靠我们自己是无法控制的,也许有些时候你会看到感情这个因素的 “数值” 会提升,但从很多的事例来看,最后往往它变成了负数。像我们一开头提到的那个作者,不就是这样吗?他自称自己是 “网易人” ,爱网易,可是到最后却变成了恨。
多了解自己,对自己的身份认知高一些,多谈职责,少谈感情。
咱们普通人,很难成为世界上最牛逼的人,所以除了本职之外,可以多看看身边的机会,看看能不能整个副业出来,普通人是有斜杆优势的,哪怕真有一天公司要赶人,自己手头上还有点事情可做,不至于太苦逼。我现在就不给自己设限,举个小例子,我除了撸代码之外,还会写写公众号,偶尔接下广告,也不觉得丢人。
当然,并不是每个公司都是操蛋的,我一朋友公司福利就很好啊,没有 996 还各种吃喝玩,我都酸了都,不过我觉得多为自己做些准备总归是好事。
我们常常会遇到这样那样的事情,谁让我们生而为人呢?如果是遇到一些小的不公,能算就算了吧,但是对于一些无法忍受的不公,千万不要憋屈,一定要像那位作者一样,想办法发声。
最后,也对自己说句:多想办法赚钱吧,尽早实现财务自由,这样才可以在很大程度上远离一些破事,做自己喜欢的事。
]]>港真,挺乱的。
某地的各种报道层出不穷,每次看完都会觉得很无奈,甚至气愤,为啥他们不好好的做个人,非要整这些暴乱?这可能是连 “废青” 自己都回答不上来的问题,他们更像是一个又一个的傀儡,任人摆布,却还自以为牛逼。
我前阵子在看《乌合之众》这本书的时候,就常会联想到这些 “废青” ,本来他们是普通人,甚至有些还是高学历的人才,但是通过目睹或者听闻了一些碎片事件,接着听到一些流传的模糊概念(比如:民主、自由),然后他们就直接高潮了。
这些毫不相干、无组织的人,通过这么一事,瞬间深有同感,好像被人点通了似的,于是聚集成为了一个群体,认为他们之间有共同的感受、相同的观念。
可怕的是,群体的力量是强大的,在群体里面的每一个人,智商会下降,会丧失独立思考能力,而产生更多的是:情绪。
所以群体一旦形成,他们的人性本能就会被激发,比如破坏,各种打、砸、抢。通过这些行为,互相传染、暗示,然后产生幻觉:胜利就在远方。
“废青” 会觉得自己很有参与感,共同在经历某一牛逼的事件。
而这,背后又是谁?
他们会用固有的话术套路,轻易断言,不会论证,只会用模糊的概念,然后不断扇动 “废青们” 的情绪,一直洗脑一直重复,直到他们产生幻觉。
进一步,传染,扩散…,群体越大,他们就会越疯狂,更加不理性,特别是那些缺乏独立思考的人。
不幸的是,大多数都是这样的人,看看现在的互联网就知道了,往往某个 大V 的情绪言论,就能引起一波高潮。
我认为教育就是个洗脑的过程,我不认为洗脑是个贬义词,好的教育,就是一次净化,而坏的教育,好好的一个人就被洗废了。
少年强,则强,少年废,则废。不无道理。
]]>前些天去看了电影 ——《少年的你》。
在看完电影之后,猫眼小程序给我发了一个评分页面,我给打了 9 分,上次打 9 分还是四年前冯小刚演的《老炮儿》。
看完《少年的你》之后,我挺有感触的,我觉得这部电影不仅好看,而且值得一看。好看的点在于易烊千玺和周冬雨的牛逼演技呈现出来的真实感,而值得看的点在于这电影大多场景尽管压抑,但却真实的反应出了 “校园霸凌” 这一现象。
当我看到小北和陈念在说 “保护世界保护你” 这个场景的时候,我突然想到那个年少的自己,也曾经那么天真的想着改变世界。当我真的去试试的时候,我才发现,这个世界是操蛋的,我被它按在地上摩擦了好几次之后,怂了,咱还是好好改变自己吧…
有句话说:“好好活着,别让这个世界改变你已经很不错了”,现在想来,确实有些道理的。
确实,在读书那会,多多少少都会发现那些老实孩子被欺负,而且大多数老实孩子都是成绩不太好的那种。老师的不喜欢,家长的责骂,自己已经够难受了,在上学的时候还要被同学欺负。
有人说:“可怜之人,必有可恨之处”,我也觉得,他们应该发声而不是忍气吞声,应该解释,应该寻求帮助。但是如果我站在他们的角度,我想我也是怂的那一个。好在那会我情商比他们稍高,成绩不算差,跟 “好学生” 能扯几句 “勾三股四玄五” ,也能跟 “坏学生” 谈论哪个妹纸胸大胸小。
之前我也在网上看过那些校园霸陵的视频,很坏,和电影展现出来的一样:好几个人围着一个老实巴交的人,轮着扇耳光,拳打脚踢,扯头发,脱衣服…
有人说这些人就该宰了,可是就算报警,他们也有所谓的 “未成年” 护航,他们几天后就没事了,而那个被欺负的人呢?
真的不希望未成年保护法被有些人别有用心的利用,别人想用它来保护你,你却用它来杀人,你说死不死?
话说回来,关于校园霸凌,也不能完全怪那些坏学生,我觉得他们的家长有问题,教育有问题。
说到家长教育问题,就让我想到最近人们常在讨论的 “豫章书院” 事件,自己的孩子不好好管教,结果出问题了,就找人强拉硬拽自己的孩子去所谓的“书院”,结果被各种虐待毒打。
这样的事很多,那些被折磨的年少的人很多,那些家长口口声声甚至有些许无奈的说是为了孩子好,可是自己以前犯的错为什么要让自己的孩子一个人去承担?要不你们也和孩子一起进去 “豫章书院学习学习”,或者一起接受杨永信的点击治疗,说不定就特么都变好了。
哎,愿每个年少的人,自强。
年少的你,坐在教室里最角落的课桌,老师在讲课,阳光洒落在讲台上,你环顾了四周,有些同学在碎碎私语,有些同学在认真听讲,你跟老师对了一眼,然后低下了头…继续做着自己的事。
]]>我们大多时候都被生活这个甲方按在地上摩擦,时间久了,自己的“乙方思维”就很容易被固化了。在家里,父母是我们的甲方;在学校,老师是我们的甲方;在公司,高管是我们的甲方。
想想,其实我们以甲方的身份出现的机会并不多,可能就是你叫了个顺风车,点了个外卖,寄了个快递,这期间的你成为了司机、外卖小哥、快递员的甲方。
使用不同的思维去对待同一件事情,在这个过程中和得到的结果往往会让人感到很是惊讶。记得之前看过一个段子,我不知道它的真实性,但是这个段子却很有意思,也说明了一些思维上的差异。
这个段子是这样的,说国外有一个程序员,工资还不赖,做事效率很高,一直很被重视,但其实这个程序员是个菜鸡,什么都不懂。但他做了一件事,就是每当有任务派下来的时候,他就去网上找中国的程序员,出了自己 1/10 的工资来聘请中国程序员帮忙写代码。然后这位国外的哥们每天就在上网,随便乱逛,潇潇洒洒…
这位国外的程序员的高管觉得他很不错,办事效率高,代码写得又好。中国程序员每次都接外包赚钱感到很开心,国外的程序员就更不用说了,每天就在公司上网撩妹,还能拿到那么多的薪资。简直就是 win win win。
我们不说道德层面的问题,当我们以一个局外人来看待这事的时候,我们会觉得这个中国程序员很勤奋也有点傻,国外的这个程序员很懒惰但也很聪明。
其实,很多时候我们就像这个中国程序员一样,少了国外这位程序员的“甲方思维”。
我们常常听到这么一个词叫做:“天道酬勤”,你现在回头看,这个词谁对你说的最多?是你自己么?还是那些所谓的“甲方”呢?
我们有些时候是可以做甲方的,只是很多时候都被动的成了乙方,或者说习惯的成了乙方。也许我们可以试着换个思维去思考一下,尝试着让自己在某些方面成为自己的甲方,或许我们的生活质量会变得更好一些。
]]>Fiddler是一款免费强大的抓包工具,有了它可以抓取我们在网上的一些请求数据,除了PC端之外,手机也可以使用它来抓包。
fiddler 抓包原理就是它能够代理我们一些数据的访问和返回,它以web代理服务器的形式工作:
那么我们有了这个 Fiddler 工具之后,就可以对一些数据进行拦截,拿到我们想要的数据,还可以对请求数据进行篡改,有一些游戏不是根据你玩了多少分然后排名的么?如果我们能够使用它来拦截请求数据,把分数改高一点,再请求给服务器,是不是很爽?当然了,Fiddler 的用处还有很多。比如Python爬虫前的数据解析等骚操作。
点击fiddler官网下载,安装之后自动打开。点击File->Capture Traffic
就可以来抓包了。
如果你觉得麻烦,没关系,我已经帮你打包好了,直接在公众号「wistbean」发送「抓包」直接获取。
Fiddler使用的代理地址:127.0.0.1,端口是:8888。我比较喜欢使用 Chrome 浏览器,简单说下配置 Chrome 使用 Fiddler ,也就是让 Fiddler 来抓取我们在 Chrome 浏览器请求和返回数据。
Chrome 默认会使用系统的代理,你可以在 Chrome 浏览器中的设置-->高级-->打开代理设置
来设置你的代理地址和端口号。
接着点击局域网设置
,勾选为 LAN 使用代理服务器
,把地址:127.0.0.1,端口:8888 填进去就可以了。
现在已经很多请求都是用 https 了,那么我们得给 Fiddler 安装证书才可以使用,有些 Windows 系统在使用的时候会发现这样的错误:
1.Tunnel to 443
2.!ERROR: Failed to generate Certificate using CertEnroll. System.Reflection.TargetInvocationException…
需要设置抓取 HTTPS 请求,点击菜单 Tools->Options
, 接着选择 HTTPS ,选择 Decrypt HTTPS traffic
。
接着点击右上角的 Action
按钮,然后选择 Reset All Certificates
。
然后在 Chrome 中输入 localhost:8888,下载证书进行安装。
如果还是发现 Tunnel to 443
错误的话,可以下载fiddlercertmaker.exe ,双击运行安装。再打开Fiddler。
最后在 菜单 Tools->Options
右上角的 Action
按钮选择 Trust Root Certificate
。
那么接下来就可以进行抓包了,在 Chrome 中输入百度的网址之后,可以看到如下的样子:
简单介绍一下每一栏都代表啥吧,其实很简单:
Result : 请求的 HTTP(s) 状态吗
Protocol : 请求协议
HOST : 请求的主机名
URL : 请求的资源目录位置
Body : 请求大小
Caching : 请求的缓存
Content-Type : 服务器响应的实体类型
Process : 是谁(进程)发送的
Comments : 备注
Custom : 自定义
当我们点击某一条请求后,在右边的 Insepector 中就可以看到具体的请求和返回信息内容了:
那么这时候就可以分析某个你想要抓取的接口的返回数据,对其进行正则分析,做你想做的事情。
移动互联网时代,人手一部手机,移动 web 网站,手机 APP 等都需要数据交互,我们想从中抓取数据,怎么办呢?
那么就需要来配置一下手机使用 Fiddler。
步骤如下:
把你的手机和电脑连接同一个 WIFI。
获取你电脑的 ip 地址。打开终端,输入ipconfig。找到你的 IPv4 地址,复制下来。
手机打开你连接的 wifi ,设置代理服务器和端口,这里的服务器地址就是你刚找到的 IPv4 地址,端口8888:
Android手机这样就配置好了,iPhone的话还要授权一下,在你手机的 设置-->通用-->关于-->证书信任-->把刚刚下载的证书打上勾
。
那么这个时候,你手机的所有访问都可以用Fiddler来抓包了。
可以看到,我手机打开了微信,网易云音乐。
我们已经 Fiddler 是干嘛的了,也设置了 PC 端和手机端都可以抓取数据和分析数据了。那么怎么做点坏事呢?哦不是,怎么去修改我们的请求和返回数据呢?
接下来就来说说,怎么在请求前修改请求数据和怎么在返回的时候把数据给改了。
按住 F11 打个断点,那么这时候的请求,就还没到服务器之前就被我们阻断下来,也就是在这个时候我们可以进行数据修改操作了。
首先在Fiddler按一下 F11 ,在请求前打断点,这样的话,你的请求就会被拦截下来。
这里以注册「逼乎」为例,哈哈真特么什么网站都有。
随便填点信息,然后点击注册按钮,这时候请求就被我们拦截下来了。我们可以使用 Filter 过滤我们想看的请求信息。
这时候我们点击左边的请求数据,看到右边,我们的请求表单数据就显示出来了,哇靠!!密码都不加密的么?
我们 user_name 这个参数的名称给改了,改成「wistbean真特么帅」,然后点击 Run to Completion
,也就是这个时候才真正的把数据传到他们的服务器去。
这就算注册完了,然后我们点击菜单下面的 「Go」 可以把剩下的拦截的所有请求直接运行,再看下我们看注册完的网页,可以发现,我们的账户名变成「wistbean真特么帅」了。
说明修改数据有效。
知道怎么在请求前修改数据了,那么修改返回数据也是一个道理的,这时候要打的断点快捷键是ALT+F11
,然后操作还是和刚刚一样,只不过是在服务器返回数据的时候被拦截,我们修改数据之后再返回客户端。
无聊的时候可以装下逼或者整蛊一些朋友,比如就有朋友给我推网易的歌,我把数据拦截了一下,把信息给改了,然后我朋友一脸懵逼:
ok,以上,主要是想说一下这个 Fiddler 怎么使用,好玩。
今天我想跟你聊聊“自由职业”,我们先把这个词拆分出来,即:“自由”、“职业”。
说到自由,这都是大部分人所向往的,我们不想要朝九晚五,总是担心上班迟到,不想看领导的脸色做事,不想被那些“办公室政治”恶心到,害怕自己的奴性越来越重。
自由,非常好,每个人都应该向往自由,追求自由,去做自己想做的事情。
不过比较悲催的是,大多数时候,我们游走在江湖,身不由己,我们需要职业养活自己,用体面的职业装扮自己,告诉别人,我们是有身份的人。
我们即希望自由,又希望自由的同时能赚到钱。于是就有了“自由职业”,很多人羡慕不已,一方面苦逼的 996 ,一方面又在幻想,我什么能想谁谁一样:做一个自由职业者呢?
前不久我就被问起,问我如何能通过自由职业,月入 1w?
今天刚好想起,就来写写罢。我现在算是半个自由职业者,我有一个创业梦,我想搞点钱,不过很遗憾,到现在也没挣到什么钱,但好在自己还相对年轻(其实也不年轻了)。
我之所以想要做一个自由职业者,是因为我觉得自己的性格不适合上班,我是真的受不了那些能够一眼看到尽头的工作,我也看不惯很多事情,但是我无力改变它们,也轮不到我去操心它们,所以最好的方式就是改变自己,当自己的主人,做自己想做的事情。当然,也有特殊原因使然,这个以后有机会再说道说道。
自由职业听起来好像挺爽的,但是,这远远没有你想的那么简单。
不信你现在辞职试试?
很多人,有想法,但是不敢去做,不一定是因为自己本身的问题,可能还来自家人,来自长辈,以及各方面的异样看法和压力:各种嘲笑,各种反对,各种不稳定因素…,特别是在一开始,没有什么资源的时候,那种压力,只有过来人才知道。
所以说,如果你没有足够大的勇气,你没有绝对的信心,你没有明确的计划、想法,劝你还是先老老实实的找份稳定点的工作,拿个“五险一金”挺好的。
我更加建议现在那些在上班的又有自由职业想法的朋友们,先给自己找点副业做,在自己工作的业余时间,找点自己兴趣的,搞点事情,管它成不成,先慢慢积累,说不定哪一天,就做起来了,到时候再做自由职业也不迟。这样的做法相对来说,没有那么大的压力。但是你要做的事情就不能那么专一了,也需要付出更多的时间才行。
有些人说,我不知道要做点什么副业好,我在这里给你点建议,要做就做那些在你感兴趣的前提下,能够积累你影响力的事情,比如:写作,制作视频…让自己成为那个能够有部分人听你话的人,觉得你是一个靠谱的人。
当你有一定的影响力的时候,自由职业只是水到渠成的事情,我知道的很多大佬,就是这样转变的。
也有人靠自己的技能,比如画画、写代码、设计等来进行远程工作。这种方式需要找到稳定的渠道,虽然付出的回馈来得及时些,但是长期来看,没有上面我说的那种方式好。因为积累的力量是惊人的,复利可是一种奇迹。
自由职业,毕竟还是职业,所以要有很强的自制力才行,还要有很强的学习能力,以及,自己本身具备了一些 “需要大量时间才能拥有” 的能力。
每当我看到有人是做自由职业的,我都会多看两眼,我会觉得,他是个有想法的人,是个敢于做少部分人的人,也是一个有能力的人,不是想想而已,而是正在路上,这是完全不一样的。
我一直说,要把自己当做是自己公司的老板,这样去做事情的时候,我们会想得更加周到,我们会有一种全局观,而不再是一直在那里“拧螺丝”。
我想大部分自由职业者就是把自己当做自己老板的人。
其实,对于很多人来说,能管好自己已经是很不容易的事情了,一旦把“自由职业”理解为“自由”,差不多就把自己弄废了。
回到刚刚的问题,至于说如何通过自由职业能月入多少钱,我觉得这个真不好说,就像你去上班,负责不同的职责岗位的人,能力不同的人,收入本来就是千差万别的,一切都是靠自己摸索和折腾。钱,只是随着时间的推移,随着自己能力的提升,顺带的事。
对于我自己而言,自由职业是利大于弊的,相对来说,虽然它有那么些不稳定的因素存在,不过这反而能够刺激自己多去折腾,去发现新机会,去学习…
]]>最近有朋友问到接外包相关的问题,突然想到小帅b以前接一些外包独自撸代码的小日子,还是有点感慨的。
那时候小帅b有接过网站开发的、微信开发的、 h5小游戏的、管理系统的、爬取数据的…
那时候赚的钱虽然不多,但是可以在工作之余搞点小钱,买点自己心仪的产品或者按个摩啥的,感觉还阔以。而且对于一些新的技术框架我也可以直接拿来试水,因为一般对方不会要求我一定要使用什么样的框架,顶多是要求用什么语言实现、用什么数据库。至于你用什么样的框架,是怎么样实现的,他们基本不管,只要你能在规定的时间内把功能整出来就行了。
接单的流程一般是这样的,对方事先会给我需求文档,我根据需求文档进行梳理,针对一些我不太清楚的功能需求进一步的沟通了解,然后对项目的工作时长进行预估和项目报价,由于有些项目需要个把月时间才能搞定,也有一些小项目几天就能搞完,所以不同的项目报价不同,有几万的,也有几千的。
对于第一次合作的客户,小帅b一般会给对方列个报价清单,具体会说到什么功能需要多少工作日以及费用,最后再总计一下。而对于一些比较熟悉的客户,小帅b基本上就直接报个价就完事了。
价格谈妥了之后,签下合同,收 50% 的定金然后就开搞,不过在开发过程还需要和客户经常沟通,了解需求中的细节,一般会跟客户拉个小群,有问题及时反馈和跟进,小帅b刚开始接单的时候经常会遇到客户改需求,有时候功能都搞得七七八八了,突然来一句这个功能不适合,然后就只能推倒搞新的功能,整的我差点爆粗,后来学聪明了,需求文档确定好就不能改了,要改以后再说,并且要加钱,自从这么规定之后,客户乖了许多。
功能开发完毕之后,一般会扔给他们接口文档和一些简要的说明,再让他们测试和验收,觉得没问题之后,就可以把尾款收了。
拿到钱之后还没完事,项目之后会出现问题或者 bug 还是得老老实实帮忙修复好。
当然,并不是所有的项目都很顺利,比如有些客户会拖尾款,有时候催债都催烦了,整得自己像个孙子似的。
不过那是少数情况,整体上来说,小帅b觉得那时候还是不错的,把外包项目当做练手项目进行学习,额外再赚点小钱,挺好的。
随着外包项目的增多,小帅b开始觉得大多业务都差不多,经常写的都是那些“增删改查”,而且牺牲了自己很多泡妞和学习的时间,有段时间 996 之后还得挤出时间来搞这些破玩意。
你要知道,有时候一个很不起眼的 bug 硬是花了很长时间才发现。
慢慢地开始发现,接外包的项目得到的费用和自己的付出不成正比了,而且经常被客户催着搬砖,没有以往那种“创新”的动力,从那时候开始就比较少去接单了。
所以小帅b还是建议那些刚毕业不久的朋友,要接外包可以,不过主要目的还是用它们来提高自己,锻炼自己,最好能接一些对于当下的你来说具有挑战性的项目,尽量从项目中总结经验。当然了,报价最好是比你工作的薪资要多一些,不要让自己成为廉价的劳动力。因为这个过程不仅仅是你用技术就能完成,还会涉及到一些时间以及沟通等的“隐形成本”。
小帅b现在基本不接外包了,因为我觉得我现在的能力,在相同的时间里面,可以产出的价值比做外包项目更高。
哦,对了,还有些小伙伴问去哪里接外包项目,网上那些威客网可信不?
我之前也在一些威客网上试水过,但是发现上面有很多人在竞标,而且很多外包公司在上面投标啥的,整的贼专业,相比之下,个人很难中标,而且吧,平台还会抽水。也有人自己开淘宝店或者添加一些群去接单,不过那玩意相对来说也是费时费力。
所以当时小帅b接单对象一般是身边的朋友,以及一些之前熟悉的客户。怎么说呢,就是你在工作的时候尽量提升自己的能力,在适当的时候表现自己,比如在工作群或者朋友圈偶尔装下(努力得到的)b,让别人知道你是干嘛的,并且觉得你做的还可以,那么下次别人有需求的时候,一般都会来找你谈的。
你接到单的时候,也要认真做好,负责到底,让客户觉得你是个靠谱的合作伙伴,以后才会经常来找你,也会介绍他们的朋友来找你做项目。
至于接什么样的项目,这个需要看你当下自己的能力以及时间分配,相对来说,搞些数据,做些小网页比较轻松,而做一些web、管理系统之类的就需要花比较多的精力。
ok,以上就是小帅b以前接单的一些小经验,希望可以给你带来一点参考吧。
]]>最近我开了一个 VIP 的网站,用的就是 wordpress 框架搭建的,我之前用过 octopress 和 hexo 搭建博客,它们相对 wordpress 更加轻量一些,更多的是面向程序员使用命令的方式,而 wordpress 就有更多的人使用,上面也有丰富的插件和主题, wordpress 有后台管理界面,操作起来也非常方便。
常常有朋友问起如何搭建一个 wordpress 的网站,这次就抽空给大家说说如何使用 wordpress 来搭建一个属于自己的博客吧。
在此之前,我们需要:
一台云服务器
一个域名
安装 mysql
安装 php
安装 nginx
安装 wordpress
wordpress
需要后台管理系统,有自己的数据库,所以我们需要有一台属于自己的服务器,关于云服务器的选择,我之前有写过:
推荐|我用了十几台云服务器VPS后,告诉你哪家云服务产商性价比高,性能稳定,如果你懒得看的话,就直接购买
vultr 吧,我一直在使用这家的云服务器,vultr 最近有活动,新用户充值 10 美元送 100
美元,点击
vultr送100美元注册链接注册。具体购买流程可以参考这个:
vultr购买教程,我选择的是
centos7 的系统哟。
关于域名和服务器我都不太推荐使用国内的,因为需要备案,关于域名可以到 godaddy 选购: https://sso.godaddy.com 。
有了自己的服务器之后,就可以连接过去操作了。
1 | rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm |
1 | yum -y install mysql-community-server |
1 | systemctl start mysqld |
1 | rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm |
1 | yum install php72w-common php72w-fpm php72w-opcache php72w-gd php72w-mysqlnd php72w-mbstring php72w-pecl-redis php72w-pecl-memcached php72w-devel |
1 | systemctl start php-fpm.service |
1 | yum install -y openssl openssl-devel |
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
1 | yum install -y zlib zlib-devel |
多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip
1 | yum install -y pcre pcre-devel |
nginx的http模块使用pcre来解析正则表达式
1 | yum install gcc-c++ |
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境
在 http://nginx.org/en/download.html 可以下载相应的 nginx 版本,这里我下载的是 1.8.1:
1 | yum intall wget |
1 | tar -zxvf nginx-1.8.1.tar.gz |
1 | cd nginx-1.8.1 |
1 | ./configure \ |
创建下刚配置到的目录:
1 | cd /var |
进入到 nginx-1.8.1 目录:
1 | make |
1 | cd /usr/local/nginx/sbin |
1 | cd /usr/local/ |
ok,现在环境都安装完毕了,接下来稍微做下配置就可以了。
1 | systemctl stop mysqld |
1 | mysqld --user=root --skip-grant-tables & |
1 | mysql -uroot |
1 | UPDATE mysql.user SET authentication_string=PASSWORD('设置你的密码') where USER='root'; |
1 | flush privileges; |
1 | exit |
1 | CREATE DATABASE wordpress; |
退出mysql,然后进入 wordpress 目录:
1 | cd /usr/local/wordpress/ |
修改文件wp-config:
1 | vi wp-config-sample.php |
改下面几行,就是你刚刚创建的数据库名称和密码:
1 | define( 'DB_NAME', 'wordpress' ); |
保存退出:
1 | 按 esc 之后,输入 :wq |
改下文件名:
1 | mv wp-config-sample.php wp-config.php |
DNS 添加 A 记录:
配置 nginx 文件:
1 | vim /usr/local/nginx/conf/nginx.conf |
在 server 中做如下配置:
1 | server { |
保存退出之后,reload 一下 niginx:
1 | [root@wistbean sbin]# ./nginx -s reload |
打开你的域名, http://fxxkpython.com/wp-admin/install.php ,这时候你会看到:
配置你网站的信息:
点击下一步,如果你不巧也出现这个错误 MySQL: 1006 - Can’t create database ‘***’ (errno: 13) ,别慌,使用如下命令开启权限:
1 | chown -R mysql:mysql /var/lib/mysql |
接着就可以登录进你的网站啦:
可以配置你的主题,你想怎么玩就怎么玩,完全听从你自己的内心:
]]>是这样的,最近 GitHub 上有一个项目 Apollo 挺火的,也就是阿波罗11号,这个项目开源的是制导计算机(AGC)中指令模块(Comanche055)和登月模块(Luminary099)原始代码。可以说非常有意义,对于对这方面感兴趣的人肯定是非常热衷参与的,毕竟这可是最专业权威的代码呀。
README 还很贴心的翻译成多个语言版本,应该想的是让全球各地感兴趣的人一起研究参与:
不过当我打开 issues 的时候发现恶心的操作来了,直接灌水:
真的是sb,直接被当做贴吧使用…GitHub 的 Issues 功能本来是让大家收集一些用户的反馈或者提交一些已知的 bug ,交流一些问题,让项目更加完善的。而不是拿来瞎 bb 的,要 bb 自己去搞个论坛 bb 啊。
其实之前 GitHub 就被封锁过,那时候还是因为很多前辈大佬做出了很多努力才“拯救”了 GitHub,才使得今天我们可以获取到最优秀的资源。不要在拥有的时候不懂得珍惜,别人为你努力争取而不懂得感恩。
GitHub 是全球开源的优质社区,而不是你瞎 bb 丢人现眼的地方,peace!
]]>我说的不是现在这个 “肯定会” 的公众号,这个公众号现在更多的是记录我自己的一些所思所想。而是去年的时候,我新建了一个公众号,叫做 “学习 python 的正确姿势”,那时候我就在想,如果我把一个公众号当作一个产品来看待,我应该能从中学到不少关于产品的思维,所以当时就干了起来,去年年底在做年终总结的时候,说今年的目标是把这个公众号做到 2w 粉,没想到这么快就实现了。
我在这里面用了一些学习到的产品思维,这次想跟大家分享一下,也许对一些刚做公众号不久的朋友有所帮助。
其实在这几年,很多人都说微信公众号的红利期已经没了,确实在早些年,只要懂点套路,公众号很容易做起来的,但是现在不同了,用户已经知道了那些套路,而且除了公众号,现在移动端的各种内容产品层出不穷,公众号不像一开始那样有那么多人去注意了。
不过,我认为这只是对那些营销号打击大一些,对于那些有深度的、原创的优质公众号来说,其实影响不大。很多人一开始做公众号的时候,发现每次发文章阅读量很少,也就认为所有新建的公众号都像那些营销号说的没什么红利期,那会跟我一起做公众号的朋友们,一开始看到阅读量都是个位数,就慢慢的没动力更新,放弃了。还好,我坚持了下来。他们信了 “红利期” 那个邪,我反而觉得这是个机会,因为我看到微信一直对公众号这个功能很重视,常常为它更新版本。那些深度的、原创的优质公众号只要结合一些产品思维,我认为还是有机会做起来的。
那么接下来就站在产品思维的角度,来说说 “学习python的正确姿势” 这个公众号是如何在将近一年的时间里做到 2w 粉的。在此之前还是说一句,对于一些大 V 来说这不算什么,但是对于一个从 0 开始做起的朋友来说,还是有一些值得借鉴的地方的。一个产品,从 0 到 1w 粉只靠自己其实是没那么容易做到的,很多人在 1w 粉之前就放弃了,但如果你能靠自己做到 1w 粉,多多少少能体现自己的能力,也能看到别样的风景。
其实我发现大多原创公众号的作者写的内容都不错,但是仅有少部分的公众号被人熟知,这是因为一开始的时候没有好好的给自己做的公众号一个明确的定位。或者说,自己明确自己公众号的定位,但是读者不了解,不知道你这个公众号是干嘛的。比如我的这个公众号,叫做 “肯定会” ,之前就写了差不多有近百篇的技术文章,可是新关注的人一看到这个名字就是懵逼的,肯定会? 会啥?会条毛啊肯定会?
很明显,我知道我这个公众号是干嘛的,但是新关注的读者不了解,当你自己连个 p 都不是的时候,什么样的名字很重要,要 “望名生义”,比如我新建的这个公众号叫 “学习 python 的正确姿势”,是不是定位就非常准备和明显了,新的读者一看:“哦,这个公众号是关于 python 学习的,学习 python 的正确姿势?有点好奇,就看看到底是有什么样的正确姿势”。
一个好的产品定位,真的能让一个作者少走很多弯路,而且一开始谁都不知道你是谁的时候,取一个好名称很重要的。
在做产品之前,需要研究一下市场,知道什么东西可以做,什么东西不可以做。而趋势,就是判断的必要因素之一。就拿百度和微信来说,在互联网 PC 时代,百度的搜索以及互联网产品抓住了 PC 端的趋势,从而在 PC 端搜索一家独大。而到了移动互联网时代,微信崛起,各种移动端的服务层出不穷,微信成为了这个时代的不可撼动的地位。再举一个例子,前不久 b 站的何同学做了一个关于 5G 的评测视频火了一把,有人开玩笑说,“他是得到 5G 红利的第一人”。你看,这就是趋势。
所以要让自己的产品更有机会,就需要把握趋势。我为什么去做 Python 的公众号,而不写 Java,不写 Android 呢? 原因很简单啊, Python 是趋势,所以我就做了。不同的领域都有各自不同的趋势,这个需要自己去探索,对信息有足够的敏感,让趋势给自己赋能,而不是自己想到什么就写什么,我以前在这个 “肯定会” 公众号写的 100 多篇技术干货文章就是一个典型的傻逼例子,想到什么就写什么…
如果说有一件事你能坚持很久,那么这件事对你来说肯定是很有意义,并且你很乐意去做,要在公众号长期提供有用的内容,就需要结合自己的优势,而不是做一些自己完全不了解的内容,那样是做不长久的。如果你画画不错,那你就去分享画画技巧好了。你喜欢技术就分享技术相关的,不要乱来。因为这需要你本身不断的学习,不断的积累,你才能源源不断的分享有价值的内容。毕竟,老是转载别人的文章一点意思没有。
以前我总认为坚持是一件很痛苦的事情,想想,好像坚持的背后总要附加这么几个词:克服,忍受,痛苦,累…,都是一些让我不爽的。后来我把要坚持的背后赋予一些不一样的定义,比如:成就感,成长,学习,进步,积累…,顿时间我就更有动力去坚持了,相对来说,坚持容易很多,而这其中,就是结合了自己的优势才可以这么去赋予的。
不知道有没有人跟我以前一样,想着说别人写的内容我也能写啊,模仿一下不就完了嘛,费那么多心思干什么呢?后来当我真的这么去做的时候,我发现我是个傻逼。因为写的那些东西是不会有人看的,你要有自己的东西,要有自己的特色才行。
如果你关注过我的 “学习 python 的正确姿势” 这个公众号你就会发现,这个公众号很独特,很多朋友比表示我把教程写的有趣不枯燥,和他们以前关注的公众号很不同,很喜欢这样的方式,有趣的同时又能学到东西。
现在,有些人听到 “小帅b” 这个名字,就知道:“哦~他是写 Python 公众号的,挺有趣的一个人。” 这就是我说的,要有自己的特色,做自己的原创内容,要有标志性。自己的东西永远都是自己的。模仿他人就是傻逼,我就是傻逼过来的。
老罗在做锤子手机的时候,就常常提到:“他做手机不赚钱,就是交个朋友”, 他把用户当做朋友,所以得到了很多锤友的支持,我看到的一些大V的社群,他们的名字也是 “xxx的朋友们”。可见,一个产品的好坏,有一个判断条件就是:它有没有把用户当做朋友。
我以前认为痛点就是用户不被满足的需要,但后来学习到了一个更深层次的理解:用户的痛点是恐惧,是害怕。
比如你渴了很久,这时候怕被渴死,所以最想要的是一瓶水。再比如你一直不断的去各种学习产品学习知识,这是你在害怕你知道的太少,知识焦虑太多。
而关注我公众号的朋友们,就是害怕对 Python 的知识知道得太少,希望能通过这里太获取更多 Python 相关的内容。这就是他们的痛点,那么我就把他们当做朋友,想办法尽量满足他们的需求,告诉他们,别怕,有我呢。
我之前发过一个朋友圈开玩笑说:一个好的产品是能够让用户等了很久的需求被瞬间满足,并且有一种 “啊~好爽~” 的感觉,比如 PornHub。
有些人以为我是在开玩笑,但是我把这个也应用到我的公众号里面了,我在写的 Python 教程的文章里面,偶尔会附加一些段子和表情包,再加上通俗易懂的文字来说清楚一些知识点。他们的需求得到了满足,还发现很轻松就能够理解,于是感到真 TM 爽,感到很愉悦。
我再一次把用户当做我的朋友,我不仅让你的痛点得到满足,还让你爽,你说用户不喜欢我喜欢谁呢?
最近数据分析这个领域也挺火的,越来越多的人对数据重视了起来,其实公众号后台有一个统计的功能,里面详细描述了每一篇文章的数据,以及用户的画像,通过这些数据可以了解到哪些文章用户更喜欢看,用户更倾向于什么样的内容。
这是一个很好的参考方向,因为并不是每个用户都会跟你说他喜欢什么样的内容的,而且也不一定会跟你说实话,而数据就显得真实了许多。什么样的文章被跟多人点赞了,被转发了,这都能说明用户的一些行为。
关注你的朋友们都不傻,你是不是用心,你是不是为用户着想,你是不是真诚相待,其实这些一眼就能看出来了。
所以用心的写好每一篇文章,多站在用户的角度去思考,坚持原创,真诚最重要。把用户当做朋友,就像一个长期陪伴成长的朋友那样。
当然,我说的这些只是一部分,很有很多东西需要学习,需要去执行,很多人说自己想做产品经理,想去做运营,那就去做一个公众号吧,把它当做一个产品,从 0 个朋友开始,去学习,去实践。微信的 slogan 说:“再小的个体,也有属于自己的品牌。” 而我想说的是,你的品牌多多少少能够反应出你的能力和态度,加油干!
]]>有些朋友遇到的一些网站
和以往不太相同
这些数据是实时变化的
比如
文字直播的数据
正在直播的弹幕
股票的指数行情
正在聊天的数据
...
这些数据因为具有时效性
所以就不能像普通网站一样
后台久久更新一次
等用户访问再将新数据渲染到网页
在网页上要实现这种
实时变化的数据
一般来说有以下两种方式
轮询
这种方式就是
用 ajax 每隔一小段时间
去请求服务器的最新数据
只有你频繁勾搭服务器
它才会给你返回最新数据
另一种是
websocket
我们今天主要来说这个玩意
什么是 websocket 呢?
它是一种网络协议
我们熟知的协议有
http 、 ftp 这些
而 websocket 的协议是 ws
它可以做到的是
客户端与服务端的数据交互变得
实时
只要让前端和服务端握一次手
然后就可以和服务端建立长期的
连接
客户端握手订阅后
服务器只要有新的数据
就可以直接推送给客户端
是不是很主动咧
比如很多聊天室
就是用 socket 做到马上收到对方的消息
问题来了
对于这种
实时变换的数据
应该怎么爬呢
那么接下来就是
关于 websocket 的调试
我们可以在 Chrome 的调试面板中
选中 WS 进行过滤
当发现有 socket 连接的时候
就会出现这个
值得注意的是
这里返回的状态码是 101
和我们玩 http 略不同
http 成功响应的状态码为 200
点进去之后
你就可以看到
请求的 socket 地址
以及请求头相关信息
我们还可以点击右边的
Messages
来查看交互信息
看下面这里就是
websocket的信息收发
获取到这些之后
我们就可以使用 Python 来连接了
Python 有专门的库来操作 socket
比如 websocket-client、websockets
我们这次就来玩玩
websocket-client
pip install websocket-client
安装玩就可以直接使用了
关于 socket 的连接
一般都有这么几个回调方法
open 方法
会在服务器与我们链接成功后触发
message 方法
会在收到消息后触发
error 方法
会在连接过程中发生错误触发
close 方法
会在连接关闭的时候触发
接着我们就来体验一下吧
连接到 websocket 服务器
连接成功后我们就给服务器发送消息
在接收服务器消息这里获取
运行起来
这样就可以获取数据啦
对了
对于一些 wss 协议
可以使用这招搞定哦
ok
今天咱们就说到这里
那我们下回见咯
peace
记得关注
么么哒
猜你还想看
有时候我们在爬取
某个用 js 渲染的网站
需要去分析一下
别人网站的数据展示规则
这个时候就不得不用 Chrome 的 DevTools 进行分析了
console.log('a');
console.log('b');
debugger;
console.log('c');
while true{
debugger;
}
扫一扫
学习 Python 没烦恼
js2py
pip install js2py
import PyV8ctxt = PyV8.JSContext() #获取对象ctxt.enter() #调用js前需要调用这个函数result = ctxt.eval(js) #执行JSctxt.leave() #执行完毕
pip install PyExecJS
>>> import execjs
>>> execjs.eval("'red yellow blue'.split(' ')")
['red', 'yellow', 'blue']
>>> ctx = execjs.compile("""
... function add(x, y) {
... return x + y;
... }
... """)
>>> ctx.call("add", 1, 2)
3
扫一扫
学习 Python 没烦恼
在抖音刚出的那会
小帅b就被抖音上
的小姐姐迷得不行
毕竟在现实生活中
小帅b比较宅
很少遇到一些这样的小姐姐
除非小姐姐自己上门
(开玩笑开玩笑)
她们
说话好听
貌美如花
人又善良
皮肤光滑
身材贼棒
妖艳贱货
啊,咽下口水先
尽管小帅b知道
她们有着
层层的滤镜
厚厚的妆容
但是
我愿意
活在虚幻中
我愿意
欺骗自己
我愿意
对着手机的小姐姐傻笑
既然我们要爬取抖音上的小姐姐
那么我就要分析一下局势
还记得我上次跟你说的
mitmproxy 么?
我们使用它来抓一下
手机抖音上的数据
打开 mitmproxy 先
接着手机做好代理
打开抖音的小姐姐
接着看看 mitmproxy 拦截
小帅b琢磨了一会发现
视频都放在了ixigua.com
这个网址了
点开其中一个请求
可以看到返回的类型就是 video/mp4
那么我们就可以从这里下手了
思路是这样的
使用 Python 脚本来拦截
手机抖音的数据返回
也就是当我们看到这个地址:
ixigua.com
就拦截返回的抖音视频
然后下载下来
那么我们就可以来写拦截脚本了
拦截请求在获取响应
把视频下载下来
很简单,跟你说一下这个脚本
监听手机的请求响应数据
然后判断我们刚刚抓到的关键 url
看看里面是否包含了 ixigua 关键字
我们导入了 requests 这个库
只要是 ixigua 这个链接我们就执行请求
从而下载相关的视频
ok
运行一波
接下来手机代理好
然后刷一刷抖音上的小姐姐
然后你就会看到
小姐姐都被你下载下来啦
偷偷告诉你
爬取下来的小姐姐视频
都是去水印的哟~
ok
以上就是帅b今天给你分享的思路
希望对你有帮助
那么我们下回见
peace
扫一扫
学习 Python 没烦恼
ps:我正在带领 b 友通往 Python 高手之路,有兴趣来了解一下:VIP。
今天小帅b想跟分享几个
关于爬虫可以用到的技巧
只要技巧使用得当
那么尽管姿势再多
也能感到爽爽的了
那么,如何才能爽呢?
接下来就是
学习python的正确姿势
技巧一
换个角度,解锁新姿势
我知道
你在爬取某些 web 网站的时候
被各种反爬弄得哭天喊地
什么几把 css 字体加密
什么几把 js 的 MD5 等
各种乱七八糟的加密
什么几把各种飞的验证码
这时候
就别太执着于 web PC 端嘛
咱们去看看人家的移动端
看看人家的 H5
在爬取前可以问问对方:
“在吗?看看 H5”
可能你会在移动端发现惊喜
数据都是一样的数据
冤冤相报何时了
技巧二
夜太美,爬虫就没那么危险
在爬取的时候
不要猛攻嘛~
人家受不了啊
你要学会停顿
克制一点
该 sleep 就 sleep
要趁人家睡觉的时候
限制防范程度低的时候
能晚点就晚点再去爬
没看过凌晨四点的洛杉矶
但是你可以看到凌晨四点的爬虫啊
这样你买的 IP 才不会频繁被封
技巧三
善用他人的 UA
如果你去看别人网站的 robots.txt
你就会看到别人的声明
声明什么东西是可以爬取
什么东西是不允许被爬的
但你常常忽略了一个东西
人家声明了希望给什么搜索引擎爬
比如这个
看到没
这是别人定义的 robots
值得注意的是
尚亮亮的 User-agent
那么当你在 Python 构造 Header 的时候
User-agent 就直接指定他们 robots 定义的就好了啊
比如 百度的UA,google的UA,360的UA
你再去爬取看看
那是一个友好啊
技巧四
插件让你节省时间
有时候我们要拿一些关键的数据
往往会用到 xpath、css selctor 之类的
自己一个一个去比对获取
那就太麻烦了啊
还记得之前说得这个吗?
记得用起来呀
技巧五
那 Header 快速生成吧
每一次你在复制 request header 的时候
是不是有一大串有的没的
又不得不复制过来
在你的 Python 中使用
可是
格式又不对
每次操作很麻烦是不?
那你可以自己写一个方法
参数就是你复制的 header 字符串
然后生成 header 的字典格式
不就完事了
技巧六
爬取整站其实是这样的
有时候你想爬取整个网站的url
怎么办呢?
不是去首页一个一个抓
你应该找到对方的 sitemap.xml
因为网站一般希望 Google 或者百度快点收录他们的网站
所以他们会把自己的网站的 url 生成 sitemap 提交
这个时候 sitemap 就包含了这个网站所有可爬取的 url
sitemap一般在网站的根目录下
可以在他们的 robots.txt 看看他们指定的位置
比如猫眼电影的sitemap:
从而获取 sitemap 再去请求里面的 url 即可!
ojbk
以上就是小帅b
给你分享的爬虫技巧
希望对你有帮助
那么我们下回见
peace
扫一扫
学习 Python 没烦恼
最近微信后台有不少问题,前几天我也在微信群中给大家说在学习 Python 过程中遇到什么问题可以私信我,我会找个时间给大家做一个统一的回复。当然了,别给我甩一堆报错什么的,我哪有那个时间给你 debug 啊。
在这些问题中,我把一些问的比较多的,大家比较关心的问题答复一下吧,希望对你有帮助。
我之前给大家说过,速成一门技能是不可能的,你需要花很多时间才能真正的掌握一门技能,但是快速入门是有可能的,而且也是必要的,你需要掌握最少且最必要的知识点,先进门再说。
其实编程,都有最基础的知识点,而且这些知识点都是共通的,什么意思?就是如果知道了这些知识点,那么你学习其他编程语言的时候,会很快就上手。这是因为编程有最少且最必要的知识。
回到 Python 来, Python 的最少且最必要的知识点是什么呢?其实我之前分享过的 今日份的 Python 基础清单 这里面就是 Python 的最少且最必要的知识点:
你一开始应该先去学习这些内容,而不是一开始就学什么计算机原理,计算机网络,数据结构与算法,这些重要吗?重要!但不是你现在该干的事情,你需要先入门,先进来,先看看在 Python 的世界里,可以做什么事情,什么是你的兴趣,接着再深入研究。
据我最近的观察,Python 目前的就业领域主要有这么几个:
对于一些网站的开发,诸如后台管理系统,或者一些微服务,写一些接口,都可以使用 Python 实现。
这个可能是你们比较关心的,爬虫相关问题后面还会多说一些,网络上有大量的数据,可是数据量太多太杂,如何获取到想要的数据,就需要数据采集了,而 Python 是最适合做爬虫的语言,你懂的。
主要是对数据进行分析、预判,从而做出选择或者对过去的复盘, Python 拥有非常成熟的数据分析库,有些人会有疑问,爬虫不也得数据分析么?咋就分开来说?其实爬虫只是数据分析的一种手段,数据来源不一定是通过爬虫获得,其它的数据也可以做分析。
这个相对难度高一些,需要掌握一定的算法,对识别技术,自动化技术,深度学习,自然语言处理等方面都得有一定的研究,当然,工资相对较高。
应该对计算机网络有一定的了解,能知道 HTTP 请求的一些规则,知道什么是 Header ,cookies,知道 HTTP 一些状态码都代表啥意思。
会使用抓包工具,对一些请求的规则进行分析,知道通过什么样的请求方式才能获取到你要的数据。然后学习使用 requests 库进行网络请求。
接着学习一些 Python 的解析库,你得到的数据各式各样,有 json 的,有 xml 的, 有 html 的,你要会(正则)解析获取关键的数据。常见的库有 xpath、pyquery、beautifulSoup、 json、 xml.sax、 re 等。
接着就是数据存储,对一些常用的 sql 语句要会,常用的数据库有 MySQL、MongoDB。
一句话,把我写的 Python 爬虫教程看了并自己实现好就是了。
假设你已经对一些普通的网站的爬取游刃有余了,那么接下来就可以学学在手机端上爬取数据,如 Fiddler 抓取 APP 的一些数据请求, appnium 的使用。
接着学习如何对于一些加密的数据进行破解,例如一些网站上的关键数据使用 css 的属性进行加密,使得你在 html 里面拿不到关键数据。那么你就需要学会 css 相关的内容,研究网站对 css 的设置,例如偏移量,然后再根据规则使用 Python 重新合成。
还有一些动态的网页使用 JS 进行渲染,除了用性能较低的 selenium 之外,你还要会知道如何去破解 JS 的加密,那么你就得知道如何抓包,如何使用浏览器的开发者工具,怎么去设置断点,从而找到 JS 的加密函数,再使用 python 的 js 库来执行得到原始的数据。
当然,还有一些更有难度的,比如 apk 的反编译,如何在 apk 的反编译中获取到数据等。
再进一步,要知道如何进行异步爬取数据了,使用多线程多进程来提高爬取效率以及分布式爬虫的部署相关操作。
接着,就要考虑如何 url 去重爬取,如何做到断点续爬,比如说你的爬虫爬着爬着突然就傻逼了,或者断网了,这个时候不可能说从头开始爬起吧。之前也有人问如何做断点续爬,这里就提供一个思路吧,你可以使用 redis 构建一个 urlpool ,在这个 pool 里面对请求的 url 做标识,可以使用消息队列,在爬取成功的时候通知 urlpool 里的 url 标识状态,在请求 url 之前通过 urlpool 判断这个 url 是否爬取了。
再来就是爬虫框架了,比如现在的 scrapy 框架,值得好好研究一波的。
最后说一句,还是多实践,毕竟实践出真知,多在实践过程中总结问题和经验,也是进阶过程中所需的道路。
满足以上 3 、4 点就很大机会可以找到工作了,当然,不同公司所需不同,有些公司对于初级爬虫工程师的要求也没那么高,只要你懂一些爬虫库的操作,能爬到数据,之前有一定的爬虫项目实战经验就可以了。所以别太担心,盘它就完事了。
比如某某网站的一些个人隐私用户信息数据。
比如知识星球,得到这些付费平台的数据。
别人系统里面自己的数据,并没有公开在互联网上。
如 robot.txt 中的声明。
之前说过一些:
如何自学 Python 高效一些
爬虫的单子相对其他的一些 web 开发会爽一些,没有那么繁琐,爬完数据就能换钱。具体费用看工作量而定,印象中我接的爬虫单子也就两三单,主要没什么时间去搞,所以没赚什么钱。
根据你自己的兴趣或者优势去做一个网站,但这个不会及时满足,也就是说你得花比较长的时间去经营,等你的网站有一定的流量之后,可以嵌入广告联盟的广告,从而赚取广告费。
如果你能找到别人的一些痛点,开发出满足用户的工具,从而让用户购买使用。这种方式没有边际成本,只要你开发出来了,多一个用户就是多一份钱,躺着赚。
像帅b我一样,写写 python 的教程,当然你得要坚持,并且一开始要忍受很久写了没什么人看的痛,还要学会更多的东西,当然我的骚操作,你是学不来的哈哈,我要说的是比如产品、运营、写作…这些。
当你公众号有了一定的阅读量之后就可以接广告赚点小钱了。当然了,文章底部的广告被点击也可以赚到钱,赞赏也可以,但是这两个真的赚不到什么钱的,赞赏更多的对作者的一种认可支持,底部广告点一下也就几毛钱到 1 块钱左右。
这是 b 友给我起的,你觉得我有法力,那就是有法力哈。好了,以上就是我最近被频繁问到的一些问题以及我的答复,希望对你有帮助吧,觉得不错的话点个在看,以后有机会再给大家分享一些经验,那么我们下回见咯,peace。
欢迎关注公众号:学习python的正确姿势,微信搜索 fxxkpython 就可以搜到啦!
]]>嘿嘿嘿,小帅b又来跟你说说一些爬虫过程中需要斗智斗勇的事情了,这次咱们就来说说关于一些 JS 混淆加密的事。所谓 JS ,就是 JavaScript ,一种前端的脚本语言,一般情况下每个网站都需要 JS 来做一些数据交互,页面渲染等一些异步操作。当然,对于反爬的人来说,JS 的用处还可以用来对一些数据进行加密。
今天咱们就以有道词典这个在线翻译的网站为例,看看他们是如何加密请求数据的,以及小帅b是如何通过 Python 模拟请求从而获得关键数据的。
咱们打开有道翻译的网站:http://fanyi.youdao.com/
输入中文然后点击翻译按钮就会翻译出来英文,比如:
Hello, everyone, I'm Small handsome b.
哈哈哈,ok,我们打开开发者工具,按下 F12 来抓一下数据,当我们点击翻译的时候,可以看到有了一个请求:
点进去看可以发现,POST请求的地址是:
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
我们再来看一下请求过去携带的参数是啥
可以看到,还是需要挺多参数的,其中的 i 就是我们要翻译的内容,那简单啊~想要得到翻译后的数据,那么我们直接把请求头和所需参数的值复制一下,然后用 requests 请求一波不就搞定了?
说干就干,代码走起!
定义一个请求的 url 和 headers
再把 form data 的数据整过来
requests 走起
运行一波
what? 返回的是一个错误码。
好的吧,如果是这么简单,小帅b何必写这篇教程呢?如果你之前玩过加密相关的,那么你应该对 form data 中的 salt、sign 这两个字眼不陌生,那么,如何破呢?
接下来就是:
我们再点多几次翻译按钮,然后就可以看到有多次请求。
可以发现,每一次的请求中的 salt、sign、ts、bv 参数是会一直变化的。
how to do it?我们回到 NetWork ,我们看到 Initiator 这一栏,可以看到它请求到了 fanyi.min.js:1 这个 js 文件。
我们就点 fanyi.min.js:1 进去看看,牛的一比,直接看不懂...
还好,左下角有一个 {} ,可以点一下
发现有惊喜,直接帮我们把压缩的 js 代码格式化。
牛逼不,行号都给我们显示出来了,不过到了这里,依然懵逼,我们还是不知道怎么拿到 salt、sign、ts、bv 这些参数的值...
咋办?恩,Chrome浏览器的打断点功能在这个时候就要派上用场了。这时候还要把帅b语录搬过来应景哈哈哈。
那么如何使用断点功能呢,我们看到 Chrome 的右边是这样的:
看到这个 XHR/fetch BreakPoints 没,在这里我们可以添加 url ,根据请求这个 url 打断点。而我们要打的断点就是一开始获取到的请求 url :
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
点击 XHR/fetch BreakPoints 右边的 + 号,然后把链接复制进去:
这时候再点击翻译按钮:
突然,你的屏幕一灰,表示好事将近,我们成功打上了断点,也就是说,现在我们可以在请求之前做一些骚操作。
这时候我们将右边的 Call Stack 展开:
这些,就是我们在点击翻译按钮之后,会调用到 js 里面的方法,从这里下手,来寻找那些参数是被如何加密的,说实话,用文字来说怎么去 debug 有点繁琐..要不,视频走起?
(放大看)
挖槽,我 1080p 的视频被腾讯压缩成 av 画质,但也不能否认我是全网第一良心博主有没有,请叫我良心b!!!
通过帅b的视频,相信你已经知道了这些参数是如何加密的了,那么接下来就可以通过 Python 模拟了。
代码走起!
ts 在 js 中是这样的:
r = "" + (new Date).getTime()
那么在 Python 中就是这样的:
bv 在 js 中是这样的:
n.md5(navigator.appVersion)
那么它在 Python 中就是这样的:
salt 在 js 中是这样的:
r + parseInt(10 * Math.random(), 10)
那么它在 Python 中就是这样的:
sign 在 js 中是这样的:
n.md5("fanyideskweb" + e + i + "@6f#X3=cCuncYssPsuRUE")
那么它在 Python 中就是这样的:
所以我们获取 form data 的方法就是这样的:
那么我们的请求就可以这样:
这样我们就使用了最正确的参数值来请求了,运行一波:
cool~~~拿到数据啦!顺便说一句,用到的库有这么几个:
完事了!
ps:觉得对你有帮助,给我点个在看,转发,赞赏。让帅b老仙,一直法力无边。另外,接下来会有骚动作,为了能让你及时收到通知,赶紧把这个公众号设置为星标,以免到时亏得一批,我们下回见,peace!
扫一扫
学习 Python 没烦恼
我们上次说了如何建立反反爬
当时还新建一个简单的帅b网页
具体可以戳以下链接
python爬虫反爬 | 对方是如何丧心病狂的通过 css 加密让你爬不到数据的
现在你已经知道了对方是
如何自定义字体加密的了
你要想去反反爬
你就要先站在对方的角度去思考问题
有句话这么说来着
“知己知彼,才能那啥”
那么对于像猫眼电影、大众点评等等
那样的 css 自定义字体加密
应该怎么破呢?
接下来就是
有人说了
不就是把字体通过 unicode 编码吗?
那就简单了啊
把每个字的编码找到
然后使用字典把编码和对应的字对应起来
抓取分析的时候
直接替换不就得了
有道理是有道理
但是
如果我每次返回给你的编码都不一样呢?
你说死不死
好了好了,先别哭得那么舒服
我们来看看天猫电影票房榜单的页面
https://maoyan.com/board/1
正如你所看到的那样
这里也使用了字体加密
通过源代码我们可以看到
font-face这里制定了字体文件路径
还是熟悉的配方
熟悉的味道~
不过小老弟
还是不要开心太早
刷新几次你就会发现
(盯着下图 2 秒钟)
看到没有
字体文件一直在变
woc!
玩呢?
我们先把字体文件下载下来
# 把整个页面搞下来
url = 'https://maoyan.com/board/1'
html = download_html(url).decode('utf-8')
用正则把字体文件名拿一下
font_file_name = re.findall(r'//vfile.meituan.net/colorstone/(\w+\.woff)', html)[0]
拿到了文件名之后就构建一下url
然后把字体文件下载下来
url = 'http://vfile.meituan.net/colorstone/' + font_file_name
font_file = download_html(url)
接着把字体文件写到本地文件中
with open('fonts/' + font_file, 'wb') as f:
f.write(new_file)
使用 fontTools 来获取字体
如果你之前没安装的话要安装才能用
接着我们把字体文件保存为 xml
font = TTFont('fonts/' + font_file)
font.saveXML('./'+font_file+'.xml')
快打开打开看看
哇,这些玩意
有点眼熟啊
这不就是加密的 unicode 码么
左边的 id 难道就是对应的数字?
恩
没那么简单
就能找到聊得来的伴
尤其是在看过了那么多背叛
总是....
不好意思
走错片场了
回到我们刚刚的 xml 文件
往下拉一下
可以看到这个
这里每一个编码都对应一个 TTGlyph 对象
从各种 x y 坐标可以猜测
它应该是用来绘制一个字的
我们把任意一个对象复制一下
然后用 matplotlib 根据坐标画个图试试看
import matplotlib.pyplot as plt
import re
str = """"
<contour>
<pt x="130" y="201" on="1"/>
<pt x="145" y="126" on="0"/>
<pt x="216" y="60" on="0"/>
<pt x="270" y="60" on="1"/>
<pt x="332" y="60" on="0"/>
<pt x="417" y="146" on="0"/>
.....此处省略一点代码
</contour>
"""
x = [int(i) for i in re.findall(r'<pt x="(.*?)" y=', str)]
y = [int(i) for i in re.findall(r'y="(.*?)" on=', str)]
print(x)
print(y)
plt.plot(x, y)
plt.show()
运行一波
哈哈
妈的,uniEA78 就是 3 !
那么其它的编码也是这个道理了
还记得 python爬虫20 | 小帅b教你如何识别图片验证码 吗?
我们把那十个编码都画一遍
然后识别成数字
再封装成字典不就好了?
好像这样做效率不高耶
有没有别的什么办法呢
我们再请求一下猫眼的字体文件
这次返回的文件又不同了
打开你会发现
返回的编码都不一样了
咋整捏
还记得我们刚刚绘制的 3 么?
我们来搜一下新下载的文件
是不是绘制 3 的坐标也是一样的呢
嘿嘿
仔细看下上面两张图里面的坐标
居然一模一样
也就是说
虽然编码的名称不同
但是
它们对象里面对应的内容是一样的
对不对?
灵感来了
就是这里了
从这里下手
我们在第一次请求字体文件的时候
把编码对应的数字先给找出来
然后记下来
那么以后再请求到不同的字体文件的时候
虽然得到的编码不同
但是我们可以根据对象对应的内容进行判断
从而就可以得出
新的编码和旧的编码指向同一个内容
那么这两个编码对应的数字就是一样的
代码走起~
第一次请求获取一个字体文件
打开 xml 获取到 unicode 编码
接着你可以通过绘制图的方式
或者通过 fontCreator 软件打开字体文件
或者通过字符去比对每个 unicode 代表的数字
然后
你就可以得到相应的数字
把它写到字典里面去
因为每次请求得到的字体编码都不同
所以上面这个就要作为我们的判断依据
当我们再请求的时候
如果得到的是和我们一开始请求
得到的字体文件一样的话
那就直接返回我们刚刚的字典
不相同的话
我们就要把新的字体文件下载下来
然后对每个编码的对象跟旧的字体文件的每个编码的对象比较
如果对象是相同的话
就把旧的编码所对应的数字赋给新的编码
因为网页上显示的是 &#x 这样开头的
所以我们也要跟着换一下
这时候运行
就会得到新的编码和对应的数字了
爽啊
有了这个之后
我想爬取具体数据对你来说不在话下了吧
这里就随便获取一个电影的实时票房来举例
简单粗暴的使用下正则
爬取到编码的时候我们转化一下
就是当编码和字典列表里面的编码有相同的
就替换成数字
运行之后
看下网页
没毛病
再爬取下总票房试试
ok
依然没毛病
扫一扫
学习 Python 没烦恼
免责声明
以上内容仅为技术交流
请勿采集数据进行商用
否则后果自负
与帅b无关
下回见
peace
这次我们来说点爬虫稍微进阶一点的
关于如何破解 css 加密后的数据
别急
我们先站在对方的角度
想一想
假如我们现在有一个网站
这个网站有些关键的数据信息
不想给别人那么轻易的爬取到
你会怎么做呢?
一个可执行的方法
就是将关键数据通过 css 加密
这样的话
当别人通过 requests 来
请求我们的网站的时候
返回的 HTML 里面就
得不到关键的数据了
举个例子
简单写一个帅b的页面
这时候我们通过 requests 去请求
在这里请求的是本地的网页
所以需要挂载一下 FileAdapter
接着会得到这样的源代码
(应该这样写:<p></p>)
问题来了
怎么把帅b的个人信息搞一下
让返回的 HTML 里面拿不到呢
可以通过添加 css 来打乱顺序
就以「姓名」为例
来定义一个 css 的类元素
这里定义了两个属性
一个是用来将它移除屏幕
一个就是不要占了行高
反正就是用来隐藏我们的干扰信息
接着 HTML 就可以这样写
再来定义一个 css 属性
意思就是说
在 EFG 选择器的这个标签后追加内容
所以我们真正的代码就是这样
那么这时候普通用户看到的网页
是可以看到关键信息的
而这个时候
你来爬取得到的却是这样的
得到的结果是不是
可以让你懵逼一会了?
一些没耐心的人
看到这里应该就不打算爬下去了
哈哈哈
当然了
这只是 css 一种反爬的思路
实际运用到项目中
还是有点复杂的
比如大众点评的网站...
那么接下来就是
来看看大众点评的广州按摩店
http://www.dianping.com/guangzhou/ch30/g141
假设你想爬取这些数据
你开始性冲冲的看它的源码
结果发现,我去
怎么数字变成一个方块?
我们来看看它的 css
这里定义了一个 PingFangSC-Regular 的字体
猫腻应该就出在这里了
我们去掉 css 定义的字体
可以看到数字也跟着消失
这个是时候你是不是好像发现了什么
来看看这个页面的源代码文件
每个数字都是变成了
&#x开头的神秘代码
这个时候你是不是
又好像发现了什么
这其实就是一种 css 的加密方式
加密自定义字体
让你爬取的时候拿不到关键的数据
还是得先站在对方的角度
想想这种丧尽天良的方式
到底是怎么做到的呢?
这就要从前端的开发说起了
下面请开始听小帅b吹水
在我们的电脑里面
都有一些字体库
比如什么宋体啊,黑体啊等等
所以你在上网的时候
看到的网页的字体都差不多
没有什么千差万别的情况
但是有些公司想要自家的
网页上的文字更加炫酷一点
就是想要不一样
就是要显得牛逼
比如苹果的官网
就整了一些自定义的字体
而要实现这种方式
在 css3 中定义字体和字体文件路径
就可以使用了
@font-face {
font-family: "自定义字体的名称";
src: "自定义字体的路径"
}
接下来
就在一开始的帅b页面中
实现一下像大众点评这样的反爬吧
可以在以下链接下载苹方字体
https://github.com/zongren/font/raw/master/PingFang-SC-Regular.ttf
我们要对字体的数字加密
可以使用 fonttools 来提取数字
pip install fonttools
安装好了之后就可以使用
如下命令来提取了
pyftsubset /home/shuaib/Desktop/PingFang-SC-Regular.ttf --text="1234567890" --output-file="PingFang-Num.tty"
这里的
/home/shuaib/Desktop/PingFang-SC-Regular.ttf
是你下载的字体文件路径
--text="1234567890"
是你要提取的内容
--output-file="PingFang-Num.tty"
定义你提取后的字体文件
ok
运行之后你在该路径下
就会生成一个新的字体文件了
打开看就都是数字啦
有了数字字体文件之后
接下来就是对字体加密了
以下这个网站可以对字体加密
http://fontello.com/
不过这个网站仅支持 svg 格式的
所以我们可以把 ttf 转化成 svg 格式
小帅b发现这个网站不错
https://convertio.co/zh/ttf-svg/
那就转化一波呗
下载下来之后
再回到 fontello
把 svg 拖进去
然后就变成这个样子
选中要加密的字
然后点击
Customize Codes
这时候就可以对字加密啦
接着点击右上角
下载加密后的字体文件
赶紧在帅b的页面试试看吧
首先定义一下
我们自定义文件的路径和名称
比如这里我们的字体就叫帅b
接着我们就可以使用刚刚加密的 code 了
打开网页
可以看到数字正常显示
而源码
变成了方块了
字体也指向了shuaib
是不是和大众点评的一模一样了
至此
你已经知道了对方的套路了
那么现在让你去爬取这样的网站
你知道怎么爬取吗?
除此之外
还有别的加密方式吗?
我们下回再一起探讨探讨
扫一扫
学习 Python 没烦恼
谢谢亲的赞赏,在看,转发,戳广
以至于我又有动力屁颠屁颠的写教程
下回见
peace
今天
小帅b来跟你玩玩
爬取微信好友
然后做一顿分析
其实
关于微信好友的爬取分析
挺早之前小帅b就分享过类似的了
但是那会
帅b我更多的是装逼
有些细节没跟你好好说说
导致有些 b 友有点懵逼
那么到现在
我想是个不错的时机了
到什么阶段就干什么事情
而且
前两篇也是写到和微信相关的
所以索性就再写一篇吧
这次
应该能让你更加容易
明白其中的道理
废话不多说
接下来就是
我们打开微信网页版本
https://wx2.qq.com
打开浏览器
可以看到一开始要
我们使用二维码登录
来看看究竟做了什么操作
打开浏览器的开发者模式
可以看到
一开始会得到一个二维码的图片
然后就开始
一顿轮询判断你是否扫码登录
我们点进去看一下
这个接口的具体请求
这个链接主要是携带了二维码的 uuid
以及一些必要的参数
https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=Yc5DKYxsrA==&tip=0&r=-215826228&_=1559288877820
当我们没有扫码登录的时候
返回的是 408
接着打开手机的微信
扫码之后就返回 201 了
接着在手机点一下登录就可以进去了
可以看到 getContact 这个接口
一看名称就知道是获取联系人的
看下返回的数据
是一个 Json
联系人被封装到这个 MemberList 数组里面了
再来
发个消息看看
数据的同步
至此
我们已经摸清了
微信网页版的具体流程了
具体是这样的
第一步
打开微信网页版首页
然后分配一个随机的 UUID
第二步
根据 UUID 获取二维码的图片
第三步
手机微信扫码这个二维码
然后确认登录
第四步
浏览器一直不停的调用同一个接口
看看是否登录
登陆的话就开始调用登录接口
第五步
获取到所有联系人的信息
第六步
可以开始向联系人发送消息
然后就不断的调用同步接口
用来获取最新的消息
知道了这些之后
我们就可以使用 python 来操作微信了
不过
你不知道这些也没关系
因为 itchat 模块早已封装了一切
我们可以使用 itchat 来进行模拟登录
然后获取到自己的好友信息
调用 itchat 的 get_friends 就会得到
好友的列表信息
具体到每个 friend 是这样的
可以看到
每个 item 里面都有好友的具体信息
包括昵称,头像,性别,地址等等
其中的 sex 字段
1 表示男的
2 表示女的
0 表示未知
来分析一波吧
将获得的 friends 这个列表中
把 sex 这个字段的数据拿出来
map(lambda x: x['Sex'], friends[1:])
然后我们再将它转化为 list
sexs = list(map(lambda x: x['Sex'], friends[1:]))
有了 sexs 这个列表之后
我们就可以通过 count 函数
来获取每个性别的人数
从而算出比例了
比如男性所占的比例如下
('小哥哥', sexs.count(1)/sum)
接着使用 pyecharts 这个模块的 Pie
来画个饼图吧
pie = Pie()
pie.add("", [('小哥哥', sexs.count(1)/sum), ('小姐姐', sexs.count(2)/sum), ('未知', sexs.count(0)/sum)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="帅b的朋友性别比例"))
pie.render('sex.html')
运行一波
知道真相的我
眼泪掉下来
咱也不知道
还有多少是伪装成女的
咱也不敢问呐
再来分析个吧
看看小帅b的py们都是在哪里的
将 friends 列表里的 province 拿出来
map(lambda x: x['Province'], friends[1:])
再转化成 list
province = list(map(lambda x: x['Province'], friends[1:]))
接着创建两个列表
keys =
values =
一个用来放省份的名称
一个用来存放对应身份的数量
for i in set(province):
keys.append(i)
values.append(province.count(i))
接着就可以通过 zip 函数
将两个列表的数据转化成元组序列
lists = list(zip(keys, values))
有了数据之后
就可以通过 pyecharts 的 map 来整个地图了
m = Map()
m.add("小帅b的py们", lists, "china")
m.set_global_opts(title_opts=opts.TitleOpts(title="小帅b的py们都在哪里?"), visualmap_opts=opts.VisualMapOpts(max_=200))
m.render('location.html')
运行一波
可以发现
广东人最多
也是
毕竟小帅b就是广东人
然而
全中国小帅b就差青海的 py 了
如果你是青海的
烦请添加我微信
让我在全中国都有人罩着
哈哈哈哈
好了
思路教给你了
发挥你自己的想象力
你可以去分析你的好友的其它东西
套路就是这么个套路
你也可以使用 itchat 来做个微信机器人...
扫一扫
学习 Python 没烦恼
看了还想看
python爬取 20w 表情包之后,从此你就成为了微信斗图届的高手
python爬取你喜欢的公众号的所有原创文章,然后搞成PDF慢慢看
ps
非常感谢你的阅读
如果文章对你有用
还烦请你多多支持
那么我们下回见
peace
一年一度的高考
就要来啦
虽然对于小帅b来说
高考是挺久远的事情了
但是
高三的那段日子
还是让小帅b有点感触
那个时候的我们
可谓
上知天文下知地理
而现在
感觉越来越弱鸡
比如
这样的化学题你做得出来吗
反正我只能这道题里
找到一点那时的回忆
这次就来
扒一扒历年高考录取分数
说不定对之后的考生有点帮助
那么接下来就是
在这里帅b爬了
全国 31 个省份的
高考录取分数线
分别是文理科的一本和二本
统计从 2006 年开始
然后将数据
渲染成直方图来瞧瞧
没过一会就得到数据啦
以北京高考为例
我们来看看数据
这是一本线的数据
这是二本线的数据
所有数据
北京近几年一本线的变化不大
今年应该也是在 530-600 之间吧
如果你还想看看其它省份的数据
没问题
我都帮你爬下来了
在微信后台发送 高考 两字
就可以获取啦
这些数据应该能卖个 5 毛钱吧
接着
再来看看全国每个省份的
往年录取分数的平均分
来两列表
一个用来放地址
一个用来放平均分
渲染一波数据
加条...线吧
加好了
以上数据是一本文科的
理科是这样
挖槽
为啥海南分数线这么高啊
江苏那么低啊
搜了一下发现
原来满分是不一样的
我还天真的以为都是 750 呢
如果分数低了点
去别的省上个本科是不是相对简单点呢
今年高考考生有
1031w 人
大家安排上
加油
好了
以上
代码就不贴了
相对简单
如果有 b 友是今年的考生
那么小帅b跟你说句
平常心就好
高考没什么大不了的
在此祝愿你高考牛逼
到时记得带 2b 铅笔哦
帅b等你考完来耍哈~
peace
扫一扫
学习 Python 没烦恼
我知道你有时候会遇到了
一个相见恨晚的公众号
比如小帅b的公众号哈哈
然后想去看看
这个公众号的历史文章
希望从第一篇开始看起
可是当你去微信里面查看的时候
会很蛋疼
因为
微信没有给文章一个时间排序
那么这时候你只能
从最近更新的文章开始
一直滑呀滑~滑呀滑~
好不容易看到了作者的第一篇文章了
结果一不小心
按了一下返回键
WTF!!!
只能重新滑呀滑~滑呀滑~
滑到外婆桥
桥里有个洞
洞里有个黑屁股
话说
能不能把公众号的文章全都爬取下来
然后制作成 PDF
这样
妈妈就再也不用担心
我无法看到作者的所有干货了
也不再担心
万一作者的突然脑抽把号给删了
文章全都消失
那岂不泪流满面
好了
那么
接下来就是
学习 python 的正确姿势
这次我们通过 fiddler 来抓取
手机上的请求
然后再把公众号的历史文章爬取下来
最后制作成 pdf 文件
小帅b来画个图吧
具体就是这样
ok
有了思路之后
我们就开干
先从数据抓包开始
将手机连好同个局域网的 WIFI
然后打开 fiddler
以小帅b的公众号为例
在手机上刷一下
学习python的正确姿势
这个公众号的历史文章
往下多滑几下
然后来看看 fiddler 抓到了什么数据
可以发现就是这个接口一直在请求
来看看其中一个具体数据请求
可以发现
微信在获取公众号历史文章的时候
有这么些参数是要携带的
小帅b看了下
比较重要的两个参数是
offset 和 is_ok
应该是用来加载更多文章的参数
其他的什么 token 参数
到时候我们直接复制到 python 中进行请求就好了
再来看看返回的数据长什么鸟样
返回了一个 json
这里有个 next_offset 字段
小帅b发现它就是用来下次请求的时候
用于 offset 这个字段的
can_msg_continue
就是用于下次请求的 is_ok 字段的
我们再来看看具体每次请求得到的
列表内容
数据很明显了
list 里面的每一个 item
都是小帅b发过的文章信息
标题、链接、作者、原文地址、封面图啥都有了
那如何区分文章是否原创的呢
小帅b公众号都是原创的文章
所以只能去抓一下其他公众号的文章
看了一会发现
copyright_stat = 11
就是原创
知道了请求规则
以及返回数据的格式
接下来就可以使用代码获取啦
先来把 header 和 cookies 定义一下
假装自己是在用手机请求数据
在请求的时候
需要携带参数
这里主要是控制一下 offset
用来加载更多数据
定义好了之后
就可以使用 requests 进行请求了
先来获取所有的原创文章
然后打印一下看看
主要就是将返回的数据
使用 json 进行解析
然后判断是否可以获取更多的数据
如果还有数据的话
我们就递归请求
ok
执行一波
公众号的所有原创文章
就被我们爬取下来啦
开心得像条狗
接下来
把文章转化为 pdf 文件
怎么弄
其实小帅b也不知道...
遇到事情不要慌
上 Google 搜索一下呗
装下b
用英文搜索
点进去第一个链接看看
woc!!
一行代码搞定??
赶紧安装试试看
安装完成之后
在代码使用一下
# 自己定义存储路径
pdfkit.from_url(content_url, '/home/wistbean/wechat_article/'+title+'.pdf')
执行
可以可以
帅b的所有原创文章
就被保存下来啦
ok
以上
本篇文章涉及的源代码已经上传
在公众号后台发送 公众号 获取
扫一扫
学习 Python 没烦恼
看了还想看
python爬取 20w 表情包之后,从此你就成为了微信斗图届的高手
ps
一直写原创教程真 jb 累
希望你多多支持
这样我才有动力一直写...么么哒
peace
前两天
周杰伦发了新歌
说好不哭
顿时间就刷屏了
周杰伦
是一个时代的符号
是我们的青春
早些天
小帅b听周杰伦的歌
还湿润了眼眶了呢
在每一次请求的时候
还要拿到最后一条评论的 id
作为下次请求的参数
可以看到
说好不哭和假面骑士
出现的频率最高
假面骑士说得是 mv 里的男主
其中的“自己”、“努力”、“人生”
也是能量满满
小帅b
谨以此篇
致敬周杰伦
以及我们的青春
下回见
peace
扫一扫
学习 Python 没烦恼
常常有 b 友问我
“小帅b,你哪来那么多的表情包”
当然是爬取来的啊
不瞒你说
在我的电脑里面
除了一些老师的教程之外
还有满满当当的表情包
每一个表情包都是那么的
生动有趣
是它们拯救了我们人类的尴尬
是它们拯救了多少的直男
是它们...
好吧
编不下去了
答应你们
这次腾出点时间
就来说说
小帅b是怎么玩表情包的
如何实现的呢?
那么接下来就是
是这样的
有一次小帅b想要斗图
配图
就在网上搜索表情包
然后发现了一个表情巨多的网站
不小心动起了邪念
产生了兴趣
那就
把它们存下来吧
用 requests 请求了一下
发现这个网站没有做反爬
小帅b发现这里有 4k+ 的页面
简单的切换一下页面
可以发现
第一页的链接是这样的
https://fabiaoqing.com/biaoqing/lists/page/1.html
所以以此类推
构建一下所有url
_url = 'https://fabiaoqing.com/biaoqing/lists/page/{page}.html'
urls = [_url.format(page=page) for page in range(1, 4328+1)
这样我们就可以得到所有表情包的链接了
我们来看一下页面里面的信息
在这里
我们只需要图片的地址和图片的名称即可
所以我们只要获取到每个页面的
所有 img 标签就可以了
可以使用 BeautifulSoup 根据类名获取
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
img_list = soup.find_all('img', class_='ui image lazy')
拿到了页面里面的所有 img
那么就可以获取每个图片的地址和名称
从而下载到我们想要的位置
for img in img_list:
image = img.get('data-original')
title = img.get('title')
# print(image)
with open(path + title + os.path.splitext(image)[-1], 'wb') as f:
img = requests.get(image).content
f.write(img)
至此
几行代码就搞定了
先来测试一下
下载一个页面的图片
可以发现
每张图片都获取到了
效果还行
不过
要下载那么多张表情包的话
这样写的代码有点慢了
还是开启多线程吧
对于这种 IO 操作
还是能加快不少下载时间的
queue = Queue()
path = '/home/wistbean/biaoqingbao/'
for x in range(10):
worker = DownloadBiaoqingbao(queue, path)
worker.daemon = True
worker.start()
for url in urls:
queue.put(url)
queue.join()
在这里创建了 DownloadBiaoqingbao 这个线程类
然后创建 10 个线程
把 url 添加到队列中
来运行一下
这时候文件夹就写入表情包啦
经过一段时间
小帅b的文件夹就存满了各种表情包了哈哈哈
谁敢跟我斗图
我就砸死他
不过呢
有个问题
文件夹里面的图片太多了
需要检索一下才行
比如我们要找到关于
小老弟
的表情包
那么我们可以使用
glob
import glob
for name in glob.glob('/home/wistbean/biaoqingbao/*小老弟*.*'):
print(name)
通过 * 这个符号进行模糊匹配
运行一下可以得到所有含有“小老弟”的表情包
到这里
已经有了大量的表情包
也可以通过关键词检索到表情包了
那么如何进一步用到微信来呢
嘿嘿,我得意的笑
开下脑洞
我们使用微信的接口和 python 对接一下
比如
我发送给我的微信说
我要关于沙雕的表情包,发 6 张来
这个时候
python接收到指令
然后就去检索表情包
发送回我的微信
哇
岂不美哉~
说干就干
可以使用 itchat 这个模块
使用网页版微信的方式登录
itchat.auto_login(hotReload=True)
itchat.run()
运行这段代码可以得到二维码
扫一下就可以登录进去操作微信了
接着就可以根据小帅b发送过来的关键词
进行文件搜索
imgs = []
def searchImage(text):
print('收到关键词: ', text)
for name in glob.glob('/home/wistbean/biaoqingbao/*'+text+'*.jpg'):
imgs.append(name)
然后就可以在回复微信的时候发送图片给自己了
在这里就给自己发前 6 张图片吧
@itchat.msg_register([PICTURE, TEXT])
def text_reply(msg):
searchImage(msg.text)
for img in imgs[:6]:
msg.user.send_image(img)
time.sleep(0.3)
print('开始发送表情:', img)
imgs.clear()
但这里有个问题
就是 itchat 在发送图片的时候
中文名的文件发了没有反应
后来小帅b发现是 requests 库的问题
修改它的 fields.py
value = email.utils.encode_rfc2231(value, 'utf-8')
value = '%s="%s"' % (name, value.encode('utf-8'))
也就是将
value = '%s*=%s' % (name, value)
改成
value = '%s="%s"' % (name, value.encode('utf-8'))
ok
搞定
运行之后是这样的
ok
以上
当然还可以优化一下
比如每次加载更多同类型的表情包
将表情包发送给特定的人等等
自己去玩吧
本篇文章涉及到的源代码已上传
在公众号后台发送“表情包”即可获取
那么
我们下回见
peace
扫一扫
学习 Python 没烦恼
也许你想知道:
长江后浪推前浪,Requests 库把 urllib 库拍在沙滩上
有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了
点个在看啊~~(破音)
上回我们说到
python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害!
WOW!!
awesome!!
怎么会有这么牛逼的框架
wow!!
awesome!!
用 scrapy 来爬取数据
岂!不!是!非!常!爽!
wow!!
接下来就是我独享的moment
哦不
接下来就是
我们已经创建了爬取糗事百科的项目
并且把糗事百科的前两页的作者和段子爬取到 json 文件了
这次
我们将我们要爬取所有的数据
使用 scrapy 存储到 mangodb 中
在此之前还是先介绍一下我们使用 scrapy 创建出来的文件目录
各个文件代表的都是啥意思
免得又有些 b 友当场懵逼
我们从上往下依个介绍一下
这个 spiders 目录呢
就是用来存放我们写爬虫文件的地方
items.py
就是用来定义我们要存储数据的字段
middlewares.py
就是中间件,在这里面可以做一些在爬虫过程中想干的事情,比如爬虫在响应的时候你可以做一些操作
pipelines.py
这是我们用来定义一些存储信息的文件,比如我们要连接 MySQL或者 MongoDB 就可以在这里定义
settings.py
这个文件用来定义我们的各种配置,比如配置请求头信息等
以上就是 scrapy 生成的目录中主要文件的作用
ok
接下来我们就进入代码中
我们上次创建了 QiushiSpider 来写我们的爬虫
当时我们只是获取了前两页的数据
我们要获取所有页面的数据怎么玩呢
打开糗事百科的链接可以看到
13 页的数据
其实按照以前我们直接写个 for 循环就可以了
不过我们这次还可以使用 scrapy 的 follow 函数
具体使用是这样的
我们先获取下一页的链接
由于下一页这个按钮都是在最后一个 li 标签中的
所以用 xpath 获取就这样
next_page = response.xpath('//*[@id="content-left"]/ul/li[last()]/a').attrib['href']
接着我们就可以让它去请求下一页的内容数据了
if next_page is not None:
yield response.follow(next_page, callback=self.parse)
你也可以用 urljoin 的方式
这样我们就可以获取到所有页面的数据了
接下来我们要把所有的数据保存到数据库
首先我们在 items.py 中定义一下我们要存储的字段
import scrapy
class QiushibaikeItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
author = scrapy.Field()
content = scrapy.Field()
scrapy.Field() =
接着我们在 parse 方法中将获取到的数据赋值给 item
具体来说就是这样
def parse(self, response):
content_left_div = response.xpath('//*[@id="content-left"]')
content_list_div = content_left_div.xpath('./div')
for content_div in content_list_div:
item = QiushibaikeItem()
item['author'] = content_div.xpath('./div/a[2]/h2/text()').get()
item['content'] = content_div.xpath('./a/div/span/text()').getall()
item['_id'] = content_div.attrib['id']
yield item
next_page = response.xpath('//*[@id="content-left"]/ul/li[last()]/a').attrib['href']
if next_page is not None:
yield response.follow(next_page, callback=self.parse)
第 7 行就是获取我们刚刚定义的 item 的类
8-10 行就是相应的赋值
那么我们定义好了要存储的字段以及写好了数据爬取
接下来还有一步
就是定义好我们要存储的数据库
到 pipelines.py 中
class QiushibaikePipeline(object):
def __init__(self):
self.connection = pymongo.MongoClient('localhost', 27017)
self.db = self.connection.scrapy
self.collection = self.db.qiushibaike
def process_item(self, item, spider):
if not self.connection or not item:
return
self.collection.save(item)
def __del__(self):
if self.connection:
self.connection.close()
在这里我们连接到本地的 MongoDB
建立了 scrapy 数据库及以下的 qiushibaike
接下来还要在 settings.py 文件中配置下
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'qiushibaike.pipelines.QiushibaikePipeline': 300,
}
这样才可以使用到pipelines
当然我们还可以在 settings.py 里面做更多的设置
比如设置请求头
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36'
ok
搞定了之后
我们使用命令来抓取一下
scrapy crawl qiushibaike
运行之后
我们打开 MongoDB 看看
可以看到
所有的数据就被我爬取到 MongoDB 了
ok
以上就是 scrapy 的简单又牛逼的操作
更多 scrapy 的牛逼操作可以前往 https://doc.scrapy.org 了解
这两篇所涉及的源代码已经上传
可以在公众号后台发送 scrapy 获取
那么
我们下回见
peace
对了
有个事
你希望接下来这个公众号能有更多什么教程
例如
爬虫实战?
ubuntu?
vim?
...?
请扫下方的码评论告诉我一下
使用 add 方法
如果元素存在就直接返回 True
如果不存在就返回 False
此外
还可以使用动态容量的方式
扫一扫
学习 Python 没烦恼
看到这两只爬虫没有?
两只爬虫
两只爬虫
跑得快
跑得快
一只没有..
不好意思
跑题了...
别误会,今天不是要教你怎么玩上面这两只沙雕玩意。
今天,我们正式从0到1
轻松学会 python 爬虫
接下来...
将是学习Python的正确姿势!
小帅b闪亮登场
在你的浏览器里面
输入百度网址
https://www.baidu.com
一回车看到一个网页
大家都很熟悉吧!
然而
你右键,查看网页源代码。
是这个样子的
(源代码的1/100)
“窝里割草”
简简单单一个页面。
这么多密密麻麻的代码
不说了
劝退前端程序员!
还是学习 Python 吧。哈哈哈
那么说这个,和爬虫有什么关系呢?
你有没有想过
这些许许多多的网站
背后都是一些数据
如果我们可以用一个自动化的程序
轻轻松松就能把它们给爬取下来
是不是很爽?
比如,一些小电影的网站
我们只要用 Python
写几行代码
然后一运行
这个程序就帮我们爬取所有的小电影到我们本地
完全不需要我们费一点力气
再比如,你想了解一个行业的趋势
是不是可以把它们往年的数据都爬取下来
然后,对这些数据做一些分析呢?
等等..
这些,以后我们都会讲到!
我们刚刚提到的
一个自动化的程序
就是爬虫
知道了什么是爬虫之后
问题来了
爬虫怎么玩的?
那就偷偷告诉你
在互联网上许许多多的网站
它们都是托管在服务器上的
这些服务器 24 小时运行着
时时刻刻,兢兢业业的等待着别人的请求
所以
我们的爬虫,首先会模拟请求
就好像你在浏览器输入网址,然后回车那样
爬虫可以用到一些 Http 库向指定的服务器偷偷摸摸的发起请求,这个时候爬虫可以假装自己是浏览器(添加一些header信息)
大多数的服务器呢,傻不拉的以为是浏览器发送请求
就直接返回数据给爬虫了
当然了,有一些网站比较精明
所以他们会建立一些反爬虫机制
但是,对于我们来说,不在话下
这个是后话了!
反正这个时候呢,服务器把数据返回给我们了
那么我们就可以对这些数据进行猥琐操作了。
不同的情况下,服务器返回给我们的数据格式不一样
有
HTML
JSON
二进制的数据啦
根据不同的情况,我们可以使用不同的方式对他们进行处理。
处理完之后
我们就可以对他们进行保存啦
保存的方式也有几种
数据库
硬盘
等等..
以上就是我们的爬虫的具体爬取流程,这是我们开启爬虫体系的第一篇,接下来我们将一步一步来操作我们的爬虫。
快加入Pythonner的聚集地
ps:坚持原创不易,转发给你的小伙伴一起玩耍,最后记得给小帅b来个好看哦!!!!!
通过
我们知道了什么是爬虫
也知道了爬虫的具体流程
那么在我们要对某个网站进行爬取的时候
要对其数据进行分析
就要知道应该怎么请求
就要知道获取的数据是什么样的
所以我们要学会怎么抓咪咪!
哦,不对。
我们要学会怎么数据抓包
虽然小馒头也是包的一种
ok...anyway...
打开我们的 Chrome 浏览器
在这里 小帅b 提醒大家一句
尽量不要用国产浏览器
很多是有后门的
所以
Chrome 是首选!
ok,打开 Chrome 浏览器之后呢
我们随便输入一个网址吧
比如
www.pornhub.com
营养跟不上?那就...
输入一个人人都能上的网站
www.baidu.com
用力回车
一个熟悉的页面显示在你的面前
这个时候,你按下 F12
你可以看到弹出一个有点装逼的窗口
这个玩意
正是我们想要的
可以看到
Element 标签下对应的 HTML 代码
其实就是这个网页的代码
我们可以在这里除了看看它的代码之外
我们还可以修改一些东西
比如我把这个按钮改成小帅b
按下回车
是不是瞬间逼格满满
哦,不好意思
今天不是要说怎么装逼的
我们点击 Network 这个标签
然后刷新一下
可以看到有很多的请求
HTTP 的请求方式有好几种
GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE
不过最常见的就是 GET 和 POST 请求
咱们就一一说道说道
接下来就是
我们直接搜索「苍老师」
然后我们就可以发现
有好多请求
这些都是 GET 请求
我们随便点击一个请求进去
可以看到我们的请求URL
https://www.baidu.com/s?wd=%E8%8B%8D%E8%80%81%E5%B8%88&rsv_spt=1&rsv_iqid=0xad707ee600011b25&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=%25E8%258B%258D%25E8%2580%2581%25E5%25B8%2588&rsv_t=5d8eqNDy4ZpyUOz7ByzyIMYfH5Jc7861dr4CFQaY3WCiDnOpBLob6Eouk23%2F3L%2BTD46O&rsv_sug3=15&rsv_pq=996e776f0000df06&rsv_sug4=19123
在 ?后面的这些 jb 玩意儿
就是 GET 请求的参数
这些参数以「键值对」的形式实现
比如这里的
wd=%E8%8B%8D%E8%80%81%E5%B8%88
就是告诉百度
我们要查询的是苍老师相关的内容
这种方式的请求方式是最简单的
所以以后我们在 Python 写 GET 请求的时候
直接在 URL 后面加个 ?然后添加参数值就好了
比如
我要百度搜索波多野结衣
那么就是
https://www.baidu.com/s?wd=波多野结衣
不信你直接在浏览器这样搜
是一毛一样的
那么,啥是 POST 请求呢?
我们在做一些信息提交的时候
比如注册,登录
这时候我们做的就是 POST 请求
POST 的参数不会直接放在 URL 上
会以 Form 表单的形式将数据提交给服务器
我们来登录一下百度
当我们点击登录的时候
就开始将我们的账号密码请求给百度服务器
可以看到我们请求了 login 这个接口
请求方法就是 POST
而我们的请求参数是以 Form 表单的方式提交的
拉到下面就可以看到
username 就是 xiaoshuaib
而密码,就是被加密了的
这些都是 POST 参数
可以发现
GET请求把请求参数都暴露在URL上
而POST请求的参数放在request body 里面
POST请求方式还对密码参数加了密
这样就相对安全一些
ok
你已经了解请求方式了
接下来说说请求头
当然说的不是上面这个 gou 头哈
我们刚刚在访问百度的时候
可以看到这个玩意
这个就是请求头
Request Header
我们在做 HTTP 请求的时候
除了提交一些参数之外
我们还有定义一些 HTTP 请求的头部信息
比如 Accept、Host、cookie、User-Agent等等
这些参数也是我们在做爬虫要用到
通过这些信息,欺骗服务器,告诉它我们是正规请求
比如
我们可以在代码里面设置 cookie 告诉服务器我们就是在这个浏览器请求的会话
User-Agent 告诉服务器我们是浏览器请求的
说完我们这边的请求了
接着我们再说说服务器的响应
你一定遇到过 404 页面吧
或者服务器错误返回个 502 吧
这些 404 啊,200啊,301啊,502啊
都是服务器的响应码
一般服务器给我们返回 200
那就说明
我们成功请求了
再来说说响应头
当我们请求成功之后
服务器会给我们返回响应码之外
还有响应头
这个头主要是告诉我们数据以什么样的形式展现
告诉我们cookie的设置
还有一个
就是响应体了
说白了,就是服务器返回给我们的数据
我们点击 Response 就可以看到相关的数据了
看,这些就是服务器返回给我们的 HTML 源代码
对于不同的请求
我们获取到的数据是不一样的
除了 HTML的,也有 JSON 的
图片二进制数据等等
可以针对不同的情况
用不同的手段来解析这些数据
说到这里
想必你已经会在 Chrome 抓包了
所谓抓包
就是我们摸清了浏览器里面的套路
知道它是怎么搞的
那么通过我们的请求
GET 请求也好
POST 请求也罢
只要知道请求方式
只要知道请求参数
只要知道请求头定义
只要知道怎么拿到返回的数据
这..
对我们来说
爬虫还难么?
完了!
爽吗?
那还不把这个公众号设置为「星标」?
那还不转发?
那还不点好看?
那就赶紧扫一扫
加入pythonner的聚集地
我们一起从装逼到牛逼
近期文章
哟~哟~哟~
hi起来
everybody
今天要说说怎么在我们的手机抓包
通过
我们知道了 HTTP 的请求方式
以及在 Chrome 中摸清了一些套路
但是
除了对数据进行解析之外
有时候我们想
对请求的数据或者响应的数据进行篡改
怎么做呢?
我们经常在用的手机
手机里面的数据
怎么对它抓包呢?
那么...
接下来就是学习 python 的正确姿势
我们要用到一款强大免费的抓包工具
你可以到
https://www.telerik.com/download/fiddler
去下载
如果你觉得麻烦
没关系
小帅b已经帮大家下载好了
直接在公众号发送
抓包
就可以直接获取 Fiddler 啦
那么 Fiddler 是怎么玩的呢?
一般情况下
我们通过浏览器来请求服务器的时候
是点对点的
我来给大家画个图
正常情况下
浏览器给服务器发送请求
服务器响应返回数据
但是这个时候
Fiddler非要来这里插一脚
然后
就变成这样了
Chrome发送请求给服务器的时候
会被 Fiddler 拦截下来
可以在这里修改请求参数什么的
然后 Fiddler 假装自己是浏览器
再发送数据给服务器
这个时候服务器接收到 Fiddler 的请求
还是天真的以为是 Chrome 发送的
于是就返回数据了
没想到在半路杀出个程咬金
返回的数据又被 Fiddler 拦截下来了
Fiddler 可以在这个时候
对数据进行修改
然后在返回给 Chrome
这就是 Fiddler 的主要使命
好了
知道了 Fiddler 的具体工作原理之后
咱们就能操作一番
安装完之后在电脑打开 Fiddler
一般情况下
我们按下 F12
就可以抓取我们在浏览器的请求了
如果这个时候你在浏览器发送请求
但是 Fiddler 没有一丁点反应
那么可以在你的浏览器配置一下代理
Fiddler 的默认代理 IP 为
127.0.0.1
端口为
8888
就拿 Chrome 浏览器为例
打开
设置-->高级-->打开代理设置
进行设置上面的 ip 地址和端口就可以了
这时候你在浏览器访问网站
在 Fiddler 就可以抓取到你的请求了
不过...
先别高兴太早
你可能会发现很多这样的错误
Tunnel to 443
因为现在很多请求都是 HTTPS 了
所以我们需要安装证书
才可以抓取 https 的请求
那么咋整咧?
点击菜单
Tools->Options
接着选择
HTTPS
勾上
Decrypt HTTPS traffic
勾完之后呢
有没看到右上角有个 Actions 按钮
轻轻按一下
选择
Reset All Certificates
完事之后
回到你的浏览器输入
localhost:8888
可以看到一个这样子的页面
点击 FiddlerRoot_certificate 下载证书
安装完之后再打开 Fiddler
你会发现你可以抓取 Https 的请求了
那么
各栏之间都代表啥意思呢
左边代表的就是你的请求
Result : 请求的 HTTP(s) 状态吗
Protocol : 请求协议
HOST : 请求的主机名
URL : 请求的资源目录位置
Body : 请求大小
Caching : 请求的缓存
Content-Type : 服务器响应的实体类型
Process : 是谁(进程)发送的
Comments : 备注
Custom : 自定义
当我们点击某一条请求后
在右边的 Insepector 中就可以看到具体的请求和返回信息内容了
说到这里
你会发现
这他妈的不就和上次讲的 Chrome 的开发工具面板差不多么
稍安勿躁
接下来就说说怎么来配置手机
使用 Fiddler 来抓取我们手机上的数据
在你的 Fiddler 中
像以下设置
接着
让你现在的这台电脑
和你的手机都连在同一个 wifi 下
接着
查看你电脑的 ip 地址
在你的手机上
打开你连接的 wifi
设置 http 代理服务器和端口
这里的服务器地址就是你刚找到的 IPv4 地址
端口 8888
紧接着
手机打开浏览器输入你的 IPv4 地址和端口
下载安装证书
安装完之后呢
Android手机这样一般就可以用了
iPhone的话
还要授权一下
在你手机的
设置-->通用-->关于本机-->证书信任设置-->把刚刚下载的证书打上勾
ok
搞定
你手机的所有访问都可以用Fiddler来抓包了
我现在就在我的手机上
打开微信和网易云音乐
可以看到我电脑上的 Fiddler
抓取到了!!
既然都抓到数据了
那么接下里就来点骚操作吧
使用 Fiddler 来修改一下我们的请求和返回数据
应该很好玩!
我们来玩玩 b 站吧
手机打开bilibili
这时候我们可以在 Fiddler 设置过滤
我们就针对 b 站的请求
然后我们在 Fiddler 按一下
ALT+F11
按完之后呢
所有服务器的返回都会被 Fiddler 拦截
ok
接下来
比如我要看 b 站的热门内容
那么我们点击这个 热门 的tab
可以看到
Fiddler 拦截了
我们点击这个请求
然后点击右边的 Inspectors
这时候可以看到 b 站服务器给我们返回了热门内容
也就是在这个时候
我们来篡改一下这些数据
让我们改的数据显示到手机上
那就把第一个视频的标题改了吧
改成
小帅b太帅了!!
改完之后呢
我们点击 Run to Completion
也就是将我们的数据发给手机
那么这个时候
看看我们的手机吧
oh
不好意思
小帅b成为b站热门第一了!
哈哈哈
ok
以上我们演示的是返回数据的拦截
那么对于请求时的拦截
快捷键是 F11
相信你也知道怎么玩了!
(完)
快来加入 Pythonner 的聚集地
相信你已经摸清了
浏览器各种请求的套路
也知道了怎么在手机上进行请求和返回数据的抓取
那么接下来我们就开始来使用 python 了
代码 lu 起来
那么
怎么用 python 写各种请求呢?
今天要给大家介绍的就是
Urllib
这可是 python 内置的库
有了它
我们写代码就轻松了
腰也不疼了
腿也不酸了
头发也不秃了
那么怎么使用 Urllib 呢?
恩
接下来
就是
在 Python 这个内置的 Urllib 库中
有这么 4 个模块
request
request模块是我们用的比较多的
就是用它来发起请求
所以我们重点说说这个模块
error
error模块呢,就是当我们在使用 request 模块遇到错了
就可以用它来进行异常处理
parse
parse模块就是用来解析我们的 URL 地址的,比如解析域名地址啦,URL指定的目录等
robotparser
这个用的就比较少了,它就是用来解析网站的 robot.txt
ok
了解了 urllib 之后
我们就用 python 代码来模拟请求吧
打开 pycharm
如果你还不太知道 pycharm 这个开发工具怎么玩的话
你可以看看这玩意
当然
你喜欢别的编辑器也无所谓
反正我觉得
Pycharm
就是
首先我们来模拟请求百度吧
超简单
request 模块中的 urlopen 方法
首先我们导入 urllib 的请求模块
import urllib.request
我们在浏览器访问百度的时候
对于 python 来说
就是一句代码的事情
urllib.request.urlopen('http://www.baidu.com')
看
我们通过 request 模块的 urlopen 方法
直接用 Get 请求方式请求百度了
那么返回的内容就是和浏览器一样的
我们可以打印出来
response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))
我们执行
百度把源码返回给我们了
request 的 urlopen 方法
可以传入的参数主要有 3 个
urllib.request.
urlopen
(url, data=None, [timeout, ]*)
第一个 url 就是我们请求的链接
比如我们刚刚就请求百度
第二个参数 data
就是专门给我们 post 请求携带参数的
比如我们在登录的时候
可以把用户名密码封装成 data 传过去
在这里的 data 的值我们可以用 byte 的类型传递
第三个参数 timeout 就是设置请求超时时间
如果等好久服务器都没有给我们返回数据
我们就不鸟他了!
这就是 request 的 urlopen 主要用法。
urlopen 好像不错
但是
如果我们要欺骗服务器说我们是浏览器或者手机请求的呢?
这个时候我们需要添加请求头信息
也就是我们上次说的
request header
那么
这个时候
就该让 request 模块中的 Request 方法出场了
这个 Request 方法的参数多一些
主要的参数
urllib.request.
Request
(url, data=None, headers={}, method=None)
我们除了定义 url 和 data 之外
我们还可以定义请求头信息
urlopen 默认是 Get 请求
当我们传入参数它就为 Post 请求了
而 Request 可以让我们自己定义请求的方式
这样我们就可以使用 Request 来封装我们的请求信息
我们来用 Request 玩一下吧
我们来模拟登陆「逼乎」吧
https://biihu.cc/
没错
就是那个山寨知乎的网站
与世界分享你的装逼技巧与见解
进入网站进行登录
我们来抓一下数据先
通过 Fiddler 可以看到我们的请求参数
这密码不加密的
然后我们再看看我们的请求头信息
好了
知道这些之后我们就可以来模拟登录了
导入 urllib
from urllib import request,parse
import ssl
在这里我们还要导入 ssl
因为逼乎这个b用的是 https
我们可以使用 ssl 未经验证的上下文
context = ssl._create_unverified_context()
接着定义一下我们的请求 url 和 header
url = 'https://biihu.cc//account/ajax/login_process/'
headers = {
#假装自己是浏览器
'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
再定义一下我们的请求参数
dict = {
'return_url':'https://biihu.cc/',
'user_name':'xiaoshuaib@gmail.com',
'password':'123456789',
'_post_type':'ajax',
}
我们把请求的参数转化为 byte
data = bytes(parse.urlencode(dict),'utf-8')
然后我们就可以封装 request 了
req = request.Request(url,data=data,headers=headers,method='POST')
最后我们进行请求
response = request.urlopen(req,context=context)
print(response.read().decode('utf-8'))
ok
这样我们就模拟登录了
运行一下看看
{"rsm":{"url":"https:\/\/biihu.cc\/home\/first_login-TRUE"},"errno":1,"err":null}
可以看到我们成功登录逼乎了
ok
以上就是 Urllib 的常用使用方法了
(完)
扫一扫
顺手,点个好看吧
最近
有些朋友
看完小帅b的文章之后
把小帅b的表情包都偷了
还在我的微信
疯狂发表情包嘚瑟
我就呵呵了
只能说一句
盘他
还有一些朋友
看完文章不点好看
还来催更
小帅b也只能说一句
继续盘他
ok
接下来我们要来玩一个新的库
这个库的名称叫做
Requests
这个库比我们上次说的 urllib 可是要牛逼一丢丢的
毕竟 Requests 是在 urllib 的基础上搞出来的
通过它我们可以用更少的代码
模拟浏览器操作
人生苦短
接下来就是
skr
对于不是 python 的内置库
我们需要安装一下
直接使用 pip 安装
pip install requests
安装完后就可以使用了
接下来就来感受一下 requests 吧
导入 requests 模块
一行代码 Get 请求
一行代码 Post 请求
其它乱七八糟的 Http 请求
想要携带请求参数是吧?
假装自己是浏览器
获取服务器响应文本内容
获取字节响应内容
获取响应码
获取响应头
获取 Json 响应内容
获取 socket 流响应内容
Post请求
当你想要一个键里面添加多个值的时候
请求的时候用 json 作为参数
想上传文件?
获取 cookie 信息
发送 cookie 信息
设置超时
除了牛逼
还能说什么呢??
扫一扫
学习 Python 没烦恼
近期文章
python爬虫入门02:教你通过Fiddler进行手机抓包
python爬虫03:那个Urllib的库让我们假装是浏览器
点好看的人
会有好运发生
现在
你已经会使用 python 模拟浏览器
进行一些 Http 的请求了
那么请求完之后
服务器返回给我们一堆源代码
我们可不是啥都要的啊
我们是有原则的
我们想要的东西
怎么能一股脑的啥都往自己兜里塞呢?
使不得
使不得
所以
在服务器返回给我们的源码之中
我们要过滤
拿到我们想要的就好
其它就丢一旁
那么
我们就需要学会怎么使用
正则表达式
通过它
我们才能过滤出我们想要的内容
...
接下来就是
真香警告
这篇文章不适合急性子的人看,要不然会把手机砸了的!但是,如果你能看完,那么正则表达式对你来说,算个 p 的难度啊?
其实
正则表达式不仅仅适用于 python
很多编程语言
很多地方都会使用到正则
试想一下
如何从下面这段字符串中快速检索所有的数字出来呢?
zui12shu234ai45der6en7sh88ixia7898os0huaib
简单来说
正则表达式就是定义一些特殊的符号
来匹配不同的字符
比如
\d
就可以代表
一个数字,等价于 0-9 的任意一个
那么你肯定想知道
其它的特殊符号表示的啥意思吧?
恩
就不告诉你
本篇完
再见
这是各种符号的解释
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符(File Format Escape,清单见本表)、或一个原义字符(Identity Escape,有^$()*+?.[\{|共计12个)、或一个向后引用(backreferences)、或一个八进制转义符。例如,“n ”匹配字符“n ”。“\n ”匹配一个换行符。序列“\\ ”匹配“\ ”而“\( ”则匹配“( ”。 |
^ | 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n ”或“\r ”之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n ”或“\r ”之前的位置。 |
* | 匹配前面的子表达式零次或多次。例如,zo*能匹配“z ”、“zo ”以及“zoo ”。*等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,“zo+ ”能匹配“zo ”以及“zoo ”,但不能匹配“z ”。+等价于{1,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)? ”可以匹配“do ”或“does ”中的“do ”。?等价于{0,1}。 |
{n} | n是一个非负整数。匹配确定的n次。例如,“o{2} ”不能匹配“Bob ”中的“o ”,但是能匹配“food ”中的两个o。 |
{n,} | n是一个非负整数。至少匹配n次。例如,“o{2,} ”不能匹配“Bob ”中的“o ”,但能匹配“foooood ”中的所有o。“o{1,} ”等价于“o+ ”。“o{0,} ”则等价于“o* ”。 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3} ”将匹配“fooooood ”中的前三个o。“o{0,1} ”等价于“o? ”。请注意在逗号和两个数之间不能有空格。 |
? | 非贪心量化(Non-greedy quantifiers):当该字符紧跟在任何一个其他重复修饰符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo ”,“o+? ”将匹配单个“o ”,而“o+ ”将匹配所有“o ”。 |
. | 匹配除“\r ”“\n ”之外的任何单个字符。要匹配包括“\r ”“\n ”在内的任何字符,请使用像“(.|\r|\n) ”的模式。 |
(pattern) | 匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\( ”或“\) ”。可带数量后缀。 |
(?:pattern) | 匹配pattern但不获取匹配的子字符串(shy groups),也就是说这是一个非获取匹配,不存储匹配的子字符串用于向后引用。这在使用或字符“(|) ”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies) ”就是一个比“industry|industries ”更简略的表达式。 |
(?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000) ”能匹配“Windows2000 ”中的“Windows ”,但不能匹配“Windows3.1 ”中的“Windows ”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?!pattern) | 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000) ”能匹配“Windows3.1 ”中的“Windows ”,但不能匹配“Windows2000 ”中的“Windows ”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 |
(?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows ”能匹配“2000Windows ”中的“Windows ”,但不能匹配“3.1Windows ”中的“Windows ”。 |
(?<!pattern) | 反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows ”能匹配“3.1Windows ”中的“Windows ”,但不能匹配“2000Windows ”中的“Windows ”。 |
x|y | 没有包围在()里,其范围是整个正则表达式。例如,“z|food ”能匹配“z ”或“food ”。“(?:z|f)ood ”则匹配“zood ”或“food ”。 |
[xyz] | 字符集合(character class)。匹配所包含的任意一个字符。例如,“[abc] ”可以匹配“plain ”中的“a ”。特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位(或末尾)则仅作为普通字符。右方括号应转义出现,也可以作为首位字符出现。 |
[^xyz] | 排除型字符集合(negated character classes)。匹配未列出的任意字符。例如,“[^abc] ”可以匹配“plain ”中的“plain ”。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,“[a-z] ”可以匹配“a ”到“z ”范围内的任意小写字母字符。 |
[^a-z] | 排除型的字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z] ”可以匹配任何不在“a ”到“z ”范围内的任意字符。 |
[:name:] | 增加命名字符类(named character class)[注 1]中的字符到表达式。只能用于方括号表达式。 |
[=elt=] | 增加当前locale下排序(collate)等价于字符“elt”的元素。例如,[=a=]可能会增加ä、á、à、ă、ắ、ằ、ẵ、ẳ、â、ấ、ầ、ẫ、ẩ、ǎ、å、ǻ、ä、ǟ、ã、ȧ、ǡ、ą、ā、ả、ȁ、ȃ、ạ、ặ、ậ、ḁ、ⱥ、ᶏ、ɐ、ɑ 。只能用于方括号表达式。 |
[.elt.] | 增加排序元素(collation element)elt到表达式中。这是因为某些排序元素由多个字符组成。例如,29个字母表的西班牙语, "CH"作为单个字母排在字母C之后,因此会产生如此排序“cinco, credo, chispa”。只能用于方括号表达式。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b ”可以匹配“never ”中的“er ”,但不能匹配“verb ”中的“er ”。 |
\B | 匹配非单词边界。“er\B ”能匹配“verb ”中的“er ”,但不能匹配“never ”中的“er ”。 |
\cx | 匹配由x指明的控制字符。x的值必须为A-Z 或a-z 之一。否则,将c视为一个原义的“c ”字符。控制字符的值等于x的值最低5比特(即对3210进制的余数)。例如,\cM匹配一个Control-M或回车符。\ca等效于\u0001, \cb等效于\u0002, 等等... |
\d | 匹配一个数字字符。等价于[0-9]。注意Unicode正则表达式会匹配全角数字字符。 |
\D | 匹配一个非数字字符。等价于[^0-9]。 |
\f | 匹配一个换页符。等价于\x0c和\cL。 |
\n | 匹配一个换行符。等价于\x0a和\cJ。 |
\r | 匹配一个回车符。等价于\x0d和\cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。注意Unicode正则表达式会匹配全角空格符。 |
\S | 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于\x09和\cI。 |
\v | 匹配一个垂直制表符。等价于\x0b和\cK。 |
\w | 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_] ”。注意Unicode正则表达式会匹配中文字符。 |
\W | 匹配任何非单词字符。等价于“[^A-Za-z0-9_] ”。 |
\xnn | 十六进制转义字符序列。匹配两个十六进制数字nn表示的字符。例如,“\x41 ”匹配“A ”。“\x041 ”则等价于“\x04&1 ”。正则表达式中可以使用ASCII编码。. |
\num | 向后引用(back-reference)一个子字符串(substring),该子字符串与正则表达式的第num个用括号围起来的捕捉群(capture group)子表达式(subexpression)匹配。其中num是从1开始的十进制正整数,其上限可能是9[注 2]、31[注 3]、99甚至无限[注 4]。例如:“(.)\1 ”匹配两个连续的相同字符。 |
\n | 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。 |
\nm | 3位八进制数字,标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。 |
\nml | 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。 |
\un | Unicode转义字符序列。其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。 |
(来自维基百科)
你能看到这里
也是
不知道你看懵逼了没?
反正我是不想看了
接下来
才是干货
小帅b就给你精简一下
通俗的把最常用的匹配告诉你
字符 | 描述 |
---|---|
\d | 代表任意数字,就是阿拉伯数字 0-9 这些玩意。 |
\D | 大写的就是和小写的唱反调,\d 你代表的是任意数字是吧?那么我 \D 就代表不是数字的。 |
\w | 代表字母,数字,下划线。也就是 a-z、A-Z、0-9、_。 |
\W | 跟 \w 唱反调,代表不是字母,不是数字,不是下划线的。 |
\n | 代表一个换行。 |
\r | 代表一个回车。 |
\f | 代表换页。 |
\t | 代表一个 Tab 。 |
\s | 代表所有的空白字符,也就是上面这个:\n、\r、\t、\f。 |
\S | 跟 \s 唱反调,代表所有不是空白的字符。 |
\A | 代表字符串的开始。 |
\Z | 代表字符串的结束。 |
^ | 匹配字符串开始的位置。 |
$ | 匹配字符创结束的位置。 |
. | 代表所有的单个字符,除了 \n \r |
[...] | 代表在 [] 范围内的字符,比如 [a-z] 就代表 a到z的字母 |
[^...] | 跟 [...] 唱反调,代表不在 [] 范围内的字符 |
{n} | 匹配在 {n} 前面的东西,比如: o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的两个o。 |
{n,m} | 匹配在 {n,m} 前面的东西,比如:o{1,3} 将匹配“fooooood”中的前三个o。 |
{n,} | 匹配在 {n,} 前面的东西,比如:o{2,} 不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。 |
* | 和 {0,} 一个样,匹配 * 前面的 0 次或多次。 比如 zo* 能匹配“z”、“zo”以及“zoo”。 |
+ | 和{1,} 一个样,匹配 + 前面 1 次或多次。 比如 zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。 |
? | 和{0,1} 一个样,匹配 ?前面 0 次或 1 次。 |
a|b | 匹配 a 或者 b。 |
() | 匹配括号里面的内容。 |
ok
知道了这些之后
我们怎么用 python 来进行判断呢?
那就要使用到 python 的库了
它就是
re
接下来我们就来使用 re 模块
对其常用的方法
来使用正则表达式
re.match
使用这个方法
主要传入两个参数
第一个就是我们的匹配规则
第二个就是需要被过滤的内容
例如
我们想要从这
Xiaoshuaib has 100 bananas
拿到一个数字
那么我们就可以这样
import re
content = 'Xiaoshuaib has 100 bananas'
res = re.match('^Xi.*(\d+)\s.*s$',content)
print(res.group(1))
通过我们刚刚说的匹配符号
可以定义出相应的匹配规则
在这里我们将我们需要的目标内容用 () 括起来
此刻我们获得结果是
0
那么如果我们想要 100 这个数字呢?
可以这样
import re
content = 'Xiaoshuaib has 100 bananas'
res = re.match('^Xi.*?(\d+)\s.*s$',content)
print(res.group(1))
看出区别了么
第二段代码我们多了一个 ?符号
在这里呢
涉及到两个概念
一个是
贪婪匹配
另一个是
非贪婪匹配
所谓贪婪匹配
就是我们的第一段代码
一个数一个数都要去匹配
而非贪婪呢
我们是直接把 100 给匹配出来了
刚刚我们用到的
.*?
是我们在匹配过程中最常使用到的
表示的就是匹配任意字符
但是
.*?的 . 代表所有的单个字符,除了 \n \r
如果我们的字符串有换行了
怎么办呢?
比如这样
content = """Xiaoshuaib has 100
bananas"""
那么我们就需要用到 re 的匹配模式了
说来也简单
直接用 re.S 就可以了
import re
content = """Xiaoshuaib has 100
bananas"""
res = re.match('^Xi.*?(\d+)\s.*s$',content,re.S)
print(res.group(1))
可能有些朋友会觉得
匹配一个东西还要写开头结尾
有点麻烦
那么就可以使用 re 的另一个方法了
re.search
它会直接去扫描字符串
然后把匹配成功的第一个结果的返回给你
import re
content = """Xiaoshuaib has 100
bananas"""
res = re.search('Xi.*?(\d+)\s.*s',content,re.S)
print(res.group(1))
这样子也是可以获取 100 的
但是如果我们的内容是这样的
content = """Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;"""
想要获取所有的 100 呢?
这时候就要用到 re 的另一个方法了
re.findall
通过它我们就能轻松的获取所有匹配的内容了
import re
content = """Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;"""
res = re.findall('Xi.*?(\d+)\s.*?s;',content,re.S)
print(res)
这里的结果是
['100', '100', '100', '100']
又有朋友觉得
如果我们想直接替换匹配的内容呢
就比如刚刚的字符串
可不可以把 100 直接替换成 250 呢?
那就要用到 re 的另一个方法了
re.sub
可以这样
import re
content = """Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;
Xiaoshuaib has 100 bananas;"""
content = re.sub('\d+','250',content)
print(content)
那么结果就变成了
Xiaoshuaib has 250 bananas;
Xiaoshuaib has 250 bananas;
Xiaoshuaib has 250 bananas;
Xiaoshuaib has 250 bananas;
250 个香蕉
吃....得完么??
再来说说 re 的另一个常用到的方法吧
re.compile
这个主要就是把我们的匹配符封装一下
import re
content = "Xiaoshuaib has 100 bananas"
pattern = re.compile('Xi.*?(\d+)\s.*s',re.S)
res = re.match(pattern,content)
print(res.group(1))
其实和我们之前写的一样的
res = re.match('^Xi.*?(\d+)\s.*s$',content,re.S)
只不过 compile 一下
便于以后复用
好了
关于 re 模块和正则表达式就介绍完啦
知道了怎么请求数据
也知道了将返回的数据如何正则过滤
那么
爬虫对我们来说还难么?
这次本篇真的完啦
再见
扫一扫
学习 Python 没烦恼
近期文章
python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器
python爬虫04|长江后浪推前浪,Requests 库把 urllib 库拍在沙滩上
也不知道为什么
你点了好看之后
你变得更好看了
来啦,老弟
我们已经知道怎么使用
进行各种请求骚操作
也知道了对服务器返回的数据如何使用
来过滤我们想要的内容
...
那么接下来
我们就使用 requests 和 re 来写一个爬虫
作为一个爱看书的你(说的跟真的似的)
怎么能发现好书呢?
所以我们
爬取当当网的前 500 本好五星评书籍
怎么样?
ok
接下来就是
请在电脑的陪同下
边看本文边练习
首先我们要对我们的目标网站进行分析
先摸清对方的底
我们才能战无不胜
打开这个书籍排行榜的地址
http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1
我们可以看到是这样的一个网页
每一页显示 20 本书
当我们点击下一页的时候
你可以发现地址变了
http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2
也就是我们翻到第几页的时候
链接地址的最后一个参数会跟着变
那么我们等会在 python 中可以用一个变量
来实现获取不同页数的内容
接着
用我们之前说的 Chrome 骚操作
来分析一下
我们要的内容是怎么请求的
以及
返回给我们的源代码是什么样的
可以看到
我们通过 GET 请求
我们的请求头
这是服务器返回来的数据
接着我们再来分析一下我们要抓取的关键信息
我们要的就是前 500 本书的
排名
书名
图片地址
作者
推荐指数
五星评分次数
价格
通过源码我们可以看到
这些信息被放在了 <li> 标签中
那么我们等会就可以使用
来进行过滤我们要的信息
一顿分析完了之后
接下来撸代码了
主要思路
使用 page 变量来实现翻页
我们使用 requests 请求当当网
然后将返回的 HTML 进行正则解析
由于我们暂时还没学到数据库
所以解析完之后就把内容存到文件中
def main(page):
url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(page)
html = request_dandan(url)
items = parse_result(html) # 解析过滤我们想要的信息
for item in items:
write_item_to_file(item)
请求当当网
当我们请求成功之后
拿到源代码
def request_dandan(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
except requests.RequestException:
return None
拿到源代码了
就要对其解析
使用正则表达式获取我们想要的关键信息
获取到了之后我们封装一下数据
def parse_result(html):
pattern = re.compile('<li>.*?list_num.*?(\d+).</div>.*?<img src="(.*?)".*?class="name".*?title="(.*?)">.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span></div>.*?<p><span\sclass="price_n">¥(.*?)</span>.*?</li>',re.S)
items = re.findall(pattern,html)
for item in items:
yield {
'range': item[0],
'iamge': item[1],
'title': item[2],
'recommend': item[3],
'author': item[4],
'times': item[5],
'price': item[6]
}
打印一下看看结果
for item in items:
print(item)
可以看到这样的数据
没毛病
现在我们获取的是第 1 页的数据
如何自动获取 25 页 500 条数据呢
来个 for 循环呗
if __name__ == "__main__":
for i in range(1,26):
main(i)
获取完 500 本书的数据之后
存到 book.txt 文件
def write_item_to_file(item):
print('开始写入数据 ====> ' + str(item))
with open('book.txt', 'a', encoding='UTF-8') as f:
f.write(json.dumps(item, ensure_ascii=False) + '\n')
f.close()
完成
项目跑起来
打开我们存储的 book.txt 看看
前 500 本书的数据就被我们拿到啦
本篇完
完整代码小帅b已经放到公众号后台啦
需要的朋友
在公众号发送
500
即可获取
ok
咱们下回再见
扫一扫
学习 Python 没烦恼
近期文章
python爬虫03 | 那个叫做Urllib的库让我们的python假装是浏览器
python爬虫04 | 长江后浪推前浪,Requests库把urllib库拍在沙滩上
python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?
支持小帅b的就顺手
点个好看吧
我们上次做了
有些朋友觉得
利用正则表达式去提取信息
太特么麻烦了
有没有什么别的方式
更方便过滤我们想要的内容啊
emmmm
你还别说
还真有
有一个高效的网页解析库
它的名字叫做
BeautifulSoup
那可是
它
是一个可以从 HTML 或 XML 文件中提取数据的 Python 库
那么这么玩呢
...
接下来就是
学习python的正确姿势
首先我们要安装一下这个库
pip install beautifulsoup4
beautifulsoup支持不同的解析器
比如
对 HTML 的解析
对 XML 的解析
对 HTML5 的解析
你看
一般情况下
我们用的比较多的是 lxml 解析器
我们先来使用一个例子
让你体验一下
beautifulsoup 的一些常用的方法
可流弊了呢
比如我们有这样一段 HTML 代码
html_doc = """
<html><head><title>学习python的正确姿势</title></head>
<body>
<p class="title"><b>小帅b的故事</b></p>
<p class="story">有一天,小帅b想给大家讲两个笑话
<a href="http://example.com/1" class="sister" id="link1">一个笑话长</a>,
<a href="http://example.com/2" class="sister" id="link2">一个笑话短</a> ,
他问大家,想听长的还是短的?</p>
<p class="story">...</p>
"""
在不使用 re 来进行正则表达式的情况下
如何快速获取到我们想要的内容呢?
先安装一下
pip install beautifulsoup4
pip install lxml
接着将 html 的源代码传给 BeautifulSoup
soup = BeautifulSoup(html_doc,'lxml')
此时此刻
就不需要自己写正则匹配了
我们要做的就是从这个对象直接获取我们要的内容
获取标题的内容
print(soup.title.string)
#学习python的正确姿势
获取 p 标签里面的内容
print(soup.p.string)
#小帅b的故事
获取 title 的父级标签
print(soup.title.parent.name)
#head
获取超链接
print(soup.a)
#<a class="sister" href="http://example.com/1" id="link1">一个笑话长</a>
获取所有超链接
print(soup.find_all('a'))
#[<a class="sister" href="http://example.com/1" id="link1">一个笑话长</a>, <a class="sister" href="http://example.com/2" id="link2">一个笑话短</a>]
获取 id 为 link2 的超链接
print(soup.find(id="link2"))
#<a class="sister" href="http://example.com/2" id="link2">一个笑话短</a>
获取网页中所有的内容
print(soup.get_text())
# 学习python的正确姿势
小帅b的故事
有一天,小帅b想给大家讲两个笑话
一个笑话长,
一个笑话短 ,
他问大家,想听长的还是短的?
...
除了find方法之外
如果你对css比较熟悉
也可以使用 select 方法
soup = BeautifulSoup(html_doc,'lxml')
print(soup.select("title"))
print(soup.select("body a"))
print(soup.select("p > #link1"))
以上就是 BeautifulSoup 常用的方法
想进一步了解可以到这
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
有了它
妈妈再也不用担心我的正则表达式了
下次还有人这样问你
你可以傲娇的告诉他
睡得着
本篇完
再见
近期文章
python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?
python爬虫04 | 长江后浪推前浪,Reuqests库把urllib库拍在沙滩上
扫一扫
学习 Python 没烦恼
好看的人都点了
马上就要过年啦
过年在家干啥咧
准备好被七大姑八大姨轮番「轰炸」了没?
你的内心 os 是这样的
但实际上你是这样的
应付完之后
闲暇时刻不妨看看电影
接下来咱们就来爬取豆瓣上评分最高的
250部电影
这次我们就要来使用上次说的
进行爬取啦
这次
我们将爬取到的内容存放到 excel 吧
那么
接下来就是
我们还是老样子
先摸清对方的底
知己知彼
百战不殆
首先打开我们的目标链接
https://movie.douban.com/top250
可以看到这样一个网页
每一页显示了 25 条数据
当我们点击下一页的时候
链接请求参数变了
https://movie.douban.com/top250?start=25&filter=
我们一眼就看的出来
这里就是从第 25 条数据开始加载的
所以
我们可以使用这个 start=25 来做变量
实现翻页获取信息
接下来我们来看下我们要的主要信息
电影名称
电影图片
电影排名
电影评分
电影作者
电影简介
等会我们可以使用 BeautifulSoup 超简单获取
一顿分析之后
我们就开始撸代码啦
主要思路
请求豆瓣的链接获取网页源代码
然后使用 BeatifulSoup 拿到我们要的内容
最后就把数据存储到 excel 文件中
def main(page):
url = 'https://movie.douban.com/top250?start='+ str(page*25)+'&filter='
html = request_douban(url)
soup = BeautifulSoup(html, 'lxml')
save_to_excel(soup)
请求豆瓣电影
def request_douban(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
except requests.RequestException:
return None
获取到的主要源代码
...
<ol class="grid_view">
<li>
<div class="item">
<div class="pic">
<em class="">1</em>
<a href="https://movie.douban.com/subject/1292052/">
<img width="100" alt="肖申克的救赎" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg" class="">
</a>
</div>
<div class="info">
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
<div class="bd">
<p class="">
导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
1994 / 美国 / 犯罪 剧情
</p>
<div class="star">
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.6</span>
<span property="v:best" content="10.0"></span>
<span>1286755人评价</span>
</div>
<p class="quote">
<span class="inq">希望让人自由。</span>
</p>
</div>
</div>
</div>
</li>
...
BeatifulSoup 解析
list = soup.find(class_='grid_view').find_all('li')
for item in list:
item_name = item.find(class_='title').string
item_img = item.find('a').find('img').get('src')
item_index = item.find(class_='').string
item_score = item.find(class_='rating_num').string
item_author = item.find('p').text
item_intr = item.find(class_='inq').string
# print('爬取电影:' + item_index + ' | ' + item_name +' | ' + item_img +' | ' + item_score +' | ' + item_author +' | ' + item_intr )
print('爬取电影:' + item_index + ' | ' + item_name +' | ' + item_score +' | ' + item_intr )
打印一下
爬取电影:1 | 肖申克的救赎 | 9.6 | 希望让人自由。
爬取电影:2 | 霸王别姬 | 9.6 | 风华绝代。
爬取电影:3 | 这个杀手不太冷 | 9.4 | 怪蜀黍和小萝莉不得不说的故事。
爬取电影:4 | 阿甘正传 | 9.4 | 一部美国近现代史。
爬取电影:5 | 美丽人生 | 9.5 | 最美的谎言。
爬取电影:6 | 泰坦尼克号 | 9.3 | 失去的才是永恒的。
爬取电影:7 | 千与千寻 | 9.3 | 最好的宫崎骏,最好的久石让。
爬取电影:8 | 辛德勒的名单 | 9.5 | 拯救一个人,就是拯救整个世界。
爬取电影:9 | 盗梦空间 | 9.3 | 诺兰给了我们一场无法盗取的梦。
爬取电影:10 | 机器人总动员 | 9.3 | 小瓦力,大人生。
爬取电影:11 | 忠犬八公的故事 | 9.3 | 永远都不能忘记你所爱的人。
...
爬取电影:21 | 无间道 | 9.1 | 香港电影史上永不过时的杰作。
爬取电影:22 | 当幸福来敲门 | 9.0 | 平民励志片。
爬取电影:23 | 疯狂动物城 | 9.2 | 迪士尼给我们营造的乌托邦就是这样,永远善良勇敢,永远出乎意料。
爬取电影:24 | 触不可及 | 9.2 | 满满温情的高雅喜剧。
爬取电影:25 | 怦然心动 | 9.0 | 真正的幸福是来自内心深处。
拿到数据啦
循环获取 10 页的所有数据
来个循环吧
for i in range(0, 10):
main(i)
获取到数据当然是要存储了
导入 excel 的库
import xlwt
创建一个 excel 的 sheet
每一列就是我们要的关键内容
book=xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)
sheet.write(0,0,'名称')
sheet.write(0,1,'图片')
sheet.write(0,2,'排名')
sheet.write(0,3,'评分')
sheet.write(0,4,'作者')
sheet.write(0,5,'简介')
将爬取到的所有数据写入 excel
sheet.write(n, 0, item_name)
sheet.write(n, 1, item_img)
sheet.write(n, 2, item_index)
sheet.write(n, 3, item_score)
sheet.write(n, 4, item_author)
sheet.write(n, 5, item_intr)
最后来个保存
book.save(u'豆瓣最受欢迎的250部电影.xlsx')
运行一下吧
生成了一个 excel 文件
老规矩
小帅b把本篇涉及到的源代码放在后台了
公众号发送「250」获取
完
再见
近期文章
python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了
python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?
扫一扫
学习 Python 没烦恼
好看的人都点了
作为一个男人
在最高光的时刻
就是说出那句
之后
还不会被人打
...
虽然在现实生活中你无法这样
但是在这里
就让你体验一番
那种呼风唤雨的感觉
我们之前在爬取某些网站的时候
使用到了一些 python 的请求库
模拟浏览器的请求
我们需要抓包啥的
能不能不这样
可不可以就写几行代码
让它自己去打开浏览器
自己去请求我们要爬取的网站
自己去模拟我们的一些搜索
等等
反正就是
老子躺着,让它自己动
躺好
让 selenium 满足你的要求
怎么玩呢?
那么接下里就是
什么是 selenium ?
其实它就是一个自动化测试工具,支持各种主流的浏览器
直到遇到了 python
转身一变
selenium 变成了爬虫利器
我们先来安装一下
pip install selenium
接着我们还要下载浏览器驱动
小帅b用的是 Chrome 浏览器
所以下载的是 Chrome 驱动
当然你用别的浏览器也阔以
去相应的地方下载就行了
Chrome: | https://sites.google.com/a/chromium.org/chromedriver/downloads |
Edge: | https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ |
Firefox: | https://github.com/mozilla/geckodriver/releases |
Safari: | https://webkit.org/blog/6900/webdriver-support-in-safari-10/ |
下载完之后
要配置一下环境变量
接着打开 pycharm
撸点代码
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
input = driver.find_element_by_css_selector('#kw')
input.send_keys("苍老师照片")
button = driver.find_element_by_css_selector('#su')
button.click()
运行一下
可以看到
它自己打开了 Chrome 浏览器
访问了百度
搜索了苍老师的照片
这就是 selenium 的魅力
我们来看下我们刚刚写的代码
我们导入了 web 驱动模块
from selenium import webdriver
接着我们创建了一个 Chrome 驱动
driver = webdriver.Chrome()
有了实例之后
相当于我们有了 Chrome 浏览器了
接着使用 get 方法打开百度
driver.get("https://www.baidu.com")
打开百度之后
我们获取到输入框
至于怎么获取
等等会讲
获取到输入框之后我们就往里面写入我们要搜索的内容
input = driver.find_element_by_css_selector('#kw')
input.send_keys("苍老师照片")
输入完了之后呢
我们就获取到搜索这个按钮
然后点击
button = driver.find_element_by_css_selector('#su')
button.click()
就这样完成了一次自动的百度搜索
当我们使用驱动打开了一个页面
这时候其实没什么鸟用
因为我们要对那些元素进行操作
就像刚刚我们要获取输入框然后输入一些内容
还有获取按钮点击什么的
selenium 提供了挺多方法给我们获取的
当我们要在页面中获取一个元素的时候
可以使用这些方法
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
想要在页面获取多个元素呢
就可以这样
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
比如我们打开了一个页面
是这样的 HTML
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input class="login" name="continue" type="submit" value="Login" />
</form>
</body>
<html>
可以通过 id 获取 form 表单
login_form = driver.find_element_by_id('loginForm')
通过 name 获取相应的输入框
username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')
通过 xpath 获取表单
login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")
通过标签获取相应的输入框
input1 = driver.find_element_by_tag_name('input')
通过 class 获取相应的元素
login = driver.find_element_by_class_name('login')
用 Chrome 浏览器的审核元素
可以很方便获取相应的属性
直接 copy 就完事了
如果你觉得
find_element_by_xxx_xxx
太长了
那么你还可以这样
driver.find_elements(By.ID, 'xxx')
By.属性和上面的是一样的
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
当然
我们玩的是爬虫
要的就是源代码
我们已经知道
通过
driver = webdriver.Chrome()
可以拿到浏览器对象
那么要获取源代码还不简单么?
获取请求链接
driver.current_url
获取 cookies
driver.get_cookies()
获取源代码
driver.page_source
获取文本的值
input.text
ok
以上就是 selenium 的常用方法
想要了解更多相关 selenium 的可以到官方文档查看
https://selenium-python.readthedocs.io/
下一次
小帅b将带你使用它来爬取网站
本篇完
再见
近期文章
python爬虫08 | 你的第二个爬虫,要过年了,爬取豆瓣最受欢迎的250部电影慢慢看
python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了
python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
扫一扫
学习 Python 没烦恼
坚持原创
给小帅b来个好看
今天
小帅b想给大家讲一个小明的小故事
...
话说
在很久很久以前
小明不小心发现了一个叫做
学习python的正确姿势
的公众号
从此一发不可收拾
看到什么网站都想爬取
有一天
小明发现了一个小黄网
里面的小姐姐
一个比一个诱人
看了一会这个小黄网
小明不知道在倒腾什么
反正30秒之后小明虎躯一震
....
那天晚上
小明躺在床上
夜不能寐
脑子一直都停留在那个小黄网上
突然灵光一闪
我这不是刚学了爬虫技术么
我应该把那个网站上的小姐姐都爬取到自己的电脑啊
就算下次那个小黄网没了
自己也还有东西可看
真是佩服自己的机智啊
.....
第二天小明就开始爬取小黄网了
小明使用
python爬虫入门01:教你在 Chrome 浏览器轻松抓包
抓了一下数据的请求
然后用
python爬虫04 | 长江后浪推前浪,Reuqests库把urllib库拍在沙滩上
开启一顿的骚操作
...
哎~
小明还是太年轻了
这时候网络运维人员看到了自己的服务器
“瓦里割草”
怎么突然被疯狂的请求?
赶紧看一下日志
妈的,都是同一个 IP
谁他妈闲着没事来搞我?
小伙再定睛一看
我去, user-agent 是 python 程序
把小伙子给气的啊
直接把对方的 ip 地址给封了(加入黑名单)
....
小明本来以为一切都能按自己计划行事
没想到突然中断了
小明重新运行了一下程序
发现完全无法连接了
以为是自己的网络断了
可是自己上百度是可以的啊
后来突然想到
好像之前 小帅b 说过
爬虫要学会伪装,要不然很容易被对方识破的
....
原来如此
小明使用了代理ip
把 user-agent 设置为 Chrome 浏览器
然后又开始一顿的爬取了
还特么开启了多线程
....
运维人员又发现不对劲
妈的
这数据不正常,这不正常
肯定有人又来搞事情了
然后就把网站设置为只有登录的人才可以获取数据
.....
小明发现了
觉得这是小意思
在这个网站注册了账号
然后设置了相应的cookie
继续爬!
....
没过多久
小明的手机突然响了
小明以为是自己的外卖到了
拿起电话就说:来了~
结果没想到的是
手机那边传来:wcnmlgb!你他妈再爬你看我不弄死你
吓得小明差点yw
挖槽
原来刚刚自己注册的是自己的手机号码
小明突然觉得自己太 sb 了
....
小明本来想就这样算了的
可是刚被骂的觉得很不爽
小明把自己的手机关机
然后自己注册了很多个账号
搞了多个 cookie 池
一起爬!!
....
这次运维人员慌了
没想到对方这么会搞事情
开始对那些频繁访问的ip给封了
然后给自己的网站加了验证码
谁他妈想要请求数据
都要先输入一次验证码才可以
这次看你怎么搞
....
小明这次真的是杠上了
机器学习识别验证码都搞上了
直接在程序自动识别验证码然后进行请求
这次小明完全不把小帅b放在眼里了
....
运维人员快要没办法了
突然看到了一些大量的请求都只是获取 HTML 数据
但是 js 和 css 这些都不请求的
不合理
于是把整个网站
都不直接返回 HTML 了
用 ajax 加载
.....
小明呵呵一笑
这能难倒我?
拿出最近小帅b说的
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处
直接模仿人类操作
这还没完
听 小帅b 说还有一个叫做 phantomjs 的玩意
selenium + phantomjs 可以达到完全模拟浏览器操作
友情提示:小帅b 下篇推文会跟大家说怎么使用selenium + phantomjs
....
这下
运维人员真的没办法了
玩不动了
只能说一句
真的求求你们了,不要再来爬取了!
...
哈~
本故事纯属乱吹
如有雷同
别在意
最后
大家都是程序员
不容易
别乱搞事情
扫一扫
学习 Python 没烦恼
在上一篇中
python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!!
小帅b给大家透露了我们这篇要说的牛逼利器
selenium + phantomjs
如果你看了
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处
那么你应该知道 selenium 是什么了
它能做到自动操作
比如我们上次说的自动百度苍老师
但有时候
我们不想要让它打开浏览器去执行
能不能直接在代码里面运行呢
也就是说
有没有一个无形的浏览器呢
恩
phantomJS 就是
它是一个基于 WebKit 的浏览器引擎
可以做到无声无息的操作各种动态网站
比如 js,css选择器,dom操作的
所以对于市面上大多通过 js 渲染的动态网站
难以解析的网站
想要爬取的话
就会使用到
selenium + phantomjs
那么怎么玩呢
这次
小帅b就带领你
使用它们来爬取b站上的 蔡徐坤和他的球友 们
接下来就是
如果你还不知道蔡徐坤是谁
那么 小帅b 在这里给你介绍几点
你将会体会到人家有多么牛逼
首先比吴京帅
其次是他的微博动不动就被转发上亿次,还被央视点名表扬
唱得了歌
还跳得了舞
打得了篮球,当过 NBA 形象大使
除此之外
还有诸多优点
在这里就不说了
相信你已经和我一样
已经被他的优秀所折服了
(蔡徐坤本蔡)
正因为如此优秀
所以 b 站上很多 up 主向他学习打篮球
那么话不多说
开始爬取b站上的 蔡徐坤和他的球友 们
首先来分析一下 b 站
打开
https://www.bilibili.com/
可以看到有一个搜索按钮
我们就输入「蔡徐坤 篮球」
按一下搜索
跳出来另一个窗口
在这个页面可以看到
我们需要的数据有
名称
视频地址
描述
观看次数
弹幕数量
发布时间
待会我们就把这些数据都爬下来
分析完之后
就开始撸代码了
首先我们要拿到浏览器的对象
browser = webdriver.Chrome()
接着开始访问 b 站
browser.get("https://www.bilibili.com/")
获取到b站首页的输入框和搜索按钮
input = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#banner_link > div > div > form > input")))
submit = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="banner_link"]/div/div/form/button')))
在这里的
WAIT.until(EC.presence_of_element_located...
就是等到这个元素可操作的时候才会继续执行下一步
获取到输入框元素后输入「蔡徐坤 篮球」
接着点击搜索
input.send_keys('蔡徐坤 篮球')
submit.click()
然而
不妙的事情发生了
b站弹出了一个登录框
正好挡住了我们要操作的搜索
那么就在搜索之前
点击一下首页刷新一下再输入吧
# 被那个破登录遮住了
index = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#primary_menu > ul > li.home > a")))
index.click()
这样登录框就不会出来了
(当然,你在这里也可以使用模拟登录,但这个,小帅b往后说)
ok..
浏览器自动点击搜索之后
这个时候会弹出一个新的窗口
这个窗口里的内容
就是我们要的搜索结果
所以我们要让我们当前的浏览器对象获取到当前的窗口
接着获取到第一页的所有数据
# 跳转到新的窗口
print('跳转到新窗口')
all_h = browser.window_handles
browser.switch_to.window(all_h[1])
get_source()
我们还要获取总页数
因为每一页的内容
我们都是要抓取的
total = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.last > button")))
return int(total.text)
获取到总页数之后
我们就开始循环
for i in range(2,int(total+1)):
next_page(i)
如何获取下一页呢
当然是模拟点击「下一页按钮」的操作
我们获取「下一页按钮」的元素
然后点击
点击之后判断一下是否在我们当前的页数
然后获取数据
print('获取下一页数据')
next_btn = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.next > button')))
next_btn.click()
WAIT.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#server-search-app > div.contain > div.body-contain > div > div.page-wrap > div > ul > li.page-item.active > button'),str(page_num)))
get_source()
有时候可能网速卡
在刷到某一页的时候数据加载不出来
可以来个异常捕获
刷新一下
再递归一下嘿嘿
except TimeoutException:
browser.refresh()
return next_page(page_num)
获取资源很简单
我们已经用 selenium 跳转到我们要的页面了
那么就拿下当前页面的源码
然后用
python爬虫07 | 有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了
来解析一下
最后把数据放到 excel 中
WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#server-search-app > div.contain > div.body-contain > div > div.result-wrap.clearfix')))
html = browser.page_source
soup = BeautifulSoup(html,'lxml')
save_to_excel(soup)
解析爬取
def save_to_excel(soup):
list = soup.find(class_='all-contain').find_all(class_='info')
for item in list:
item_title = item.find('a').get('title')
item_link = item.find('a').get('href')
item_dec = item.find(class_='des hide').text
item_view = item.find(class_='so-icon watch-num').text
item_biubiu = item.find(class_='so-icon hide').text
item_date = item.find(class_='so-icon time').text
print('爬取:' + item_title)
global n
sheet.write(n, 0, item_title)
sheet.write(n, 1, item_link)
sheet.write(n, 2, item_dec)
sheet.write(n, 3, item_view)
sheet.write(n, 4, item_biubiu)
sheet.write(n, 5, item_date)
n = n + 1
最后别忘了关闭浏览器哦
finally:
browser.close()
来运行一下项目吧
数据到手
哦~ 对了
不是说还有一个叫做 phantomjs 的么?
简单简单
接下来我们就利用它来打造一个无痕的浏览器
首先我们要下载phantomjs
你可以到
http://phantomjs.org/download.html
这里去下载
下载完之后你需要配置一下环境变量哦
接着回到我们的代码
将 Chrome 换成 phantomjs
browser = webdriver.PhantomJS()
这次我们再来运行项目
这次就是真正的不会打开任何有界面的浏览器了
看下我们抓到的数据
ok~
本篇的源代码和爬取到的数据已经放到公众号了
在「学习python的正确姿势」公众号发送 bb 获取
本篇完
近期文章
python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!!
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处
扫一扫
学习 Python 没烦恼
在前面我们玩了好多静态的 HTML
想必你应该知道怎么去爬这些数据了
但还有一些常见的动态数据
比如
商品的评论数据
实时的直播弹幕
岛国动作片的评分
等等
这些数据是会经常发生改变的
很多网站就会用到 Json 来传输这些数据
因为 Json 非常轻量
用 key-value 的形式封装成对象
就像 python 里的字典似的
那么遇到 Json 我们应该怎么玩呢?
这次
小帅b以「爬取微信好友列表」为例
告诉你怎么玩 Json 数据
那么接下来就是
学习python的正确姿势
微信有一个网页版
这个网页版的数据请求啥的
很多人都想拿来搞事情
所以现在市面上有很多微信机器人
当然
对于 Python 来说
少即是多
能封装就封装
所以有了一个叫做 itchat 模块
你不再需要去各种抓包
直接使用就得了
比方便面还方便呢
好像有点偏题了
今天是要说 Json 的是吧
打开微信网页版
https://wx2.qq.com/
我们使用 Chrome(←可以点击) 来看一下具体的返回数据
可以看到
微信的每一个好友
被封装成一个一个的 Json 对象
最后封装成一个 Json 数组
也就是 MemberList
我们来看看具体的一个好友的数据是怎么样的
{
"Uin":0,
"UserName":"@c482d142bc698bc3971d9f8c26335c5c",
"NickName":"小帅b",
"HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=500080&username=@c482d142bc698bc3971d9f8c26335c5c&skey=@crypt_b0f5e54e_b80a5e6dffebd14896dc9c72049712bf",
"ContactFlag":3,
"MemberCount":0,
"MemberList":[
],
"RemarkName":"",
"HideInputBarFlag":0,
"Sex":1,
"Signature":"",
"VerifyFlag":0,
"OwnerUin":0,
"PYInitial":"XSB",
"PYQuanPin":"xiaoshuaib",
"RemarkPYInitial":"",
"RemarkPYQuanPin":"",
"StarFriend":0,
"AppAccountFlag":0,
"Statues":0,
"AttrStatus":98491,
"Province":"广东",
"City":"广州",
"Alias":"",
"SnsFlag":48,
"UniFriend":0,
"DisplayName":"",
"ChatRoomId":0,
"KeyWord":"che",
"EncryChatRoomId":"",
"IsOwner":0
}
在这个 Json 对象里面
包含了微信好友的很多信息
比如 昵称、头像、备注、性别等等
那么如何从这些数据中拿到我们想要的呢?
我们可以用到 json 模块了
python 的 json 模块有两个主要的函数
1
将 python 对象转化为 json是这样的
json.dumps()
2
将json数据转化为python对象是这样的
json.loads()
这也是我们用的比较多的方法
就拿我们刚刚获取到微信好友的数据来玩
import json
jsondata = '''
{
"Uin":0,
"UserName":"@c482d142bc698bc3971d9f8c26335c5c",
"NickName":"小帅b",
"HeadImgUrl":"/cgi-bin/mmwebwx-bin/webwxgeticon?seq=500080&username=@c482d142bc698bc3971d9f8c26335c5c&skey=@crypt_b0f5e54e_b80a5e6dffebd14896dc9c72049712bf",
...此处省略一些..
"DisplayName":"",
"ChatRoomId":0,
"KeyWord":"che",
"EncryChatRoomId":"",
"IsOwner":0
}
'''
myfriend = json.loads(jsondata)
这样子我们就可以直接操作了
因为 myfriend 已经被转化为 python 可以使用的字典对象了
比如我们要获取他的昵称
那么可以这样
myfriend.get('NickName')
这就是我们拿到一个 Json 数据对象后对它的操作
当然
我们刚刚举的例子只是 Json 对象
常见的还有 Json 数组
也就是把多个对象组合起来
就像我们 Python 的 list
比如有这样的 Json 数组的数据
{
"MemberList":[
{
"UserName":"小帅b",
"sex":"男"
},
{
"UserName":"小帅b的1号女朋友",
"sex":"女"
},
{
"UserName":"小帅b的2号女朋友",
"sex":"女"
}
]
}
这个时候我们想要获取好友列表
myfriends = json.loads(jsondata)
memberList = myfriends.get('MemberList')
我们得到的 memberList 就是一个 Python 的 list 对象了
那么对于 list 里面的数据
我们用个 for 循环就能轻而易举的获取到啦
ok
下次小帅b还会在爬取项目中带你玩玩 Json
本篇完
近期文章
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处
python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!!
python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们
扫一扫
学习 Python 没烦恼
ps:小帅b力求由浅入深带你玩转 python ,如果觉得对你有帮助的话还希望你点点好看和戳戳广,这样小帅b能赚到不良商家 2 毛钱哦~~想想就开心。
快
快了
啊
嘿
小老弟
想啥呢
今天这篇爬虫教程的主题就是一个字
快
想要做到秒爬
就需要知道
什么是多进程
什么是多线程
什么是协程(微线程)
你先去沏杯茶
坐下来
小帅b这就好好给你说道说道
关于线程这玩意
沏好茶了吗
那么
接下来就是
首先我们来了解什么是进程
进程就是正在运行的程序
比如你的系统现在运行着的微信
就是一个进程
一旦你的「微信」运行起来
系统就会给「微信」分配了内存和资源
那什么是单进程呢?
单进程就是说你的电脑只能做一件事情
比如
你在电脑打开了微信
就不能再去打开淘宝了
但是你会发现
现在你的电脑
很是牛逼
可以一边看片一边听歌
可以一边玩游戏一边撸代码
这就是多进程
你的电脑
在同一段时间里面
可以 “同时” 执行多个任务
这样是不是提高了你家 CPU 的使用率了呢
其实
一个单核的 CPU 在一个时间点上只能运行一个程序
之所以你能感觉到你电脑上的程序在同时运行
是因为
CPU 在做着切换
因为 CPU 的切换速度超级快
快到让你感觉到
你开着的所有程序好像是在同时运行
知道了什么是进程之后
我们再来谈谈线程
在一个进程里面
可以执行多个任务
在这里的每一个任务就是线程
线程可以说是程序用 CPU 的一个基本单元
所以
一个程序里面如果只是单一的一个执行路径
那么它就是单线程的
一个程序如果有多个执行路径
那么它就是多线程的
所以你想要让你的爬虫高效
就可以让你的爬虫实现多线程
这样它就可以有更加高的几率抢到 CPU 的执行权
每当小帅b跟别人吹线程的时候
还会说到并行和并发
我们刚刚说了
一个单核的 CPU
它每次只能执行一个进程
那么如果是多核的 CPU 呢
是不是就可以同时执行多个进程了
这就是并行
在某一个时间段里,可以同时执行多个进程
而并发呢
就是在一个时间点,同时执行多个进程
你想想
在双十一的时候
是不是在那个晚上的 12 点
很多人同时秒杀了某一个商品
这就是并发
在系统里面
进程和进程之间是互相独立的
而一个进程里面的多个线程
这些线程之间是共享一个进程空间的
这个时候
线程就要搞事情了
毕竟一块蛋糕被共享了
谁都想多分一点
就挤破头的想要抢占多一点资源
哇靠啊
这可不行啊
这样数据就不安全了
所以就有了互斥锁
所谓互斥锁
就是让线程乖一点
别他妈的乱来
一个一个线程安全有序的去执行
在 python 里呢
有一个叫做 GIL 锁
这个锁是干嘛的呢
它就是用来控制线程执行权限的
所以当一个线程需要执行的时候
要先获得 GIL 之后才可以执行
这样就不会产生线程安全问题
但有一个问题是
那他妈的还多线程个毛啊?
恩..有一点是
在 I/O 流阻塞的时候,GIL会被释放
(I/O流就是输入输出流,如果你此刻不太理解这个概念也没关系)
所以呀
我们的 Python 程序
如果是要处理多任务,想要充分的去利用我们多核的CPU
就开启多进程(multiprocessing)
而对于一些输入输出的多任务
就开启多线程(threading.Thread、multiprocessing.dummy)
哦对了
还有一个玩意叫做协程
协程也叫做微线程
在一个线程里面可以执行多个函数
线程和进程是通过系统调度的
而微线程则不需要,可以根据需要自己调度
因为微线程是函数之间在切换
所以开销很小
在 python 中使用微线程时一般会用到 genvent、monkey.patch_all
本篇就到这里
主要让你理解这几个概念
下一篇
小帅b就会使用多进程、多线程、协程的方式来实现 python 的爬虫
敬请
近期文章
python爬虫12 | 爸爸,他使坏,用动态的 Json 数据,我要怎么搞?
python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们
扫一扫
学习 Python 没烦恼
点个好看啊~~(破音)
你知道吗?
在我的心里
你是多么的重要
就像
恩
请允许我来一段 freestyle
你们准备好了妹油
你看
这个碗
它又大又圆
就像
这条面
它又长又宽
你们
在这里
看文章
觉得 很开心
就像
我在这里
给你们
写文章
觉得很开心
skr~~
不好意思
走错片场了
ok..
接下来,就是
咱们在上一次的
python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的
了解了一些 python 高效爬虫的概念
比如多线程、多进程、协程等
那么我们这一篇就开始了解多线程的具体使用
在 python 中
常用的多线程的模块有这么几个
_thread
threading
Queue
之前有个 thread 模块
被 python3 抛弃了
改名为 _thread
但其实 _thread 也没什么人用
因为 _thread 有的 threading 都有
_thread 没有的 threading 依然有
那么接下来我们就先来玩玩 threading 吧
在此之前
(请允许小帅b又开始吹水了~)
介绍一下 小帅b 的一点背景
小帅b呢
平常上班时间都会去河边摸鱼
每天得摸 20 条鱼
一条一条的摸
为的是什么
为的是安抚这些鱼的心情
这样以后送到餐前的红烧鱼才更加美味
恩
小帅b每天得摸 20 条鱼
每隔一秒钟摸一条
也就是这样
import time
def moyu_time(name, delay, counter):
while counter:
time.sleep(delay)
print("%s 开始摸鱼 %s" % (name, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
counter -= 1
if __name__ == '__main__':
moyu_time('小帅b',1,20)
后来
小帅b知道了多线程
拍脑一想
我靠
应该把小明和小红拉过来
让他们一起帮我摸鱼啊
也就是让小明和小红同时一人摸 10 条鱼
想想就开心
在 小帅b 的威逼利诱下
他们俩不情愿的手拉着手来到了河边
小帅b看小红是女生
就让小红每摸一条鱼休息 2 秒钟
而小明每摸一条鱼休息 1 秒钟
先扔一段代码给你
# encoding = utf-8
import threading
import time
# 创建一个线程子类
class MyThread(threading.Thread):
def __init__(self,threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print("开始线程:" + self.name)
moyu_time(self.name, self.counter, 10)
print("退出线程:" + self.name)
def moyu_time(threadName, delay, counter):
while counter:
time.sleep(delay)
print("%s 开始摸鱼 %s" % (threadName, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
counter -= 1
# 创建新线程
# 小帅b找了两个人来摸鱼
# 让小明摸一次鱼休息1秒钟
# 让小红摸一次鱼休息2秒钟
thread1 = MyThread(1, "小明", 1)
thread2 = MyThread(2, "小红", 2)
# 开启新线程
thread1.start()
thread2.start()
# 等待至线程中止
thread1.join()
thread2.join()
print ("退出主线程")
在这里呢
我们创建了一个线程类
然后继承 threading.Thread
在我们这个线程类里面定义了一个 run 方法
这个 run 方法去调用了摸鱼的方法
可以看到我们创建了两个线程
一个叫小明线程
一个叫小红线程
thread1 = MyThread(1, "小明", 1)
thread2 = MyThread(2, "小红", 2)
当我们的线程调用 start 方法的时候
它们就会去执行 run 方法
而我们用到的 join 方法呢
是为了让线程执行完
再终止主程序
运行一下就是这样
开始线程:小明
开始线程:小红
小明 开始摸鱼 2019-03-10 23:15:26
小红 开始摸鱼 2019-03-10 23:15:27
小明 开始摸鱼 2019-03-10 23:15:27
小明 开始摸鱼 2019-03-10 23:15:28
小红 开始摸鱼 2019-03-10 23:15:29
小明 开始摸鱼 2019-03-10 23:15:29
小明 开始摸鱼 2019-03-10 23:15:30
小明 开始摸鱼 2019-03-10 23:15:31
小红 开始摸鱼 2019-03-10 23:15:31
小明 开始摸鱼 2019-03-10 23:15:32
小明 开始摸鱼 2019-03-10 23:15:33
小红 开始摸鱼 2019-03-10 23:15:33
小明 开始摸鱼 2019-03-10 23:15:34
小红 开始摸鱼 2019-03-10 23:15:35
小明 开始摸鱼 2019-03-10 23:15:35
退出线程:小明
小红 开始摸鱼 2019-03-10 23:15:37
小红 开始摸鱼 2019-03-10 23:15:39
小红 开始摸鱼 2019-03-10 23:15:41
小红 开始摸鱼 2019-03-10 23:15:43
小红 开始摸鱼 2019-03-10 23:15:45
退出线程:小红
退出主线程
Process finished with exit code 0
恩
小帅b再也不用摸鱼了
后来小明和小红都不乐意了
凭什么就我们两个摸鱼
这时候 小帅b 只能去找更多人了
连 小帅b 家的狗都叫过来了
然后
就疯狂的开启线程
thread1 = MyThread(1, "小明", 1)
thread2 = MyThread(2, "小红", 2)
thread3 = MyThread(3, "小黄", 2)
thread4 = MyThread(4, "小绿", 2)
...
thread5 = MyThread(55, "小青", 2)
thread6 = MyThread(56, "小白", 2)
thread7 = MyThread(57, "小狗", 2)
stop!!!
这可不行
因为频繁的创建线程 销毁线程
非常的浪费资源
所以呢
应该把他们放到池子里面去一起洗澡
哈,也就是
线程池
通过线程池就可以重复利用线程
不会造成过多的浪费
在 python 中
可以使用 ThreadPoolExecutor 来实现线程池
我们来往池子里塞 20 个线程
然后在循环的时候每次拿一个线程来摸鱼
def moyu_time(name, delay, counter):
while counter:
time.sleep(delay)
print("%s 开始摸鱼 %s" % (name, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
counter -= 1
if __name__ == '__main__':
pool = ThreadPoolExecutor(20)
for i in range(1,5):
pool.submit(moyu_time('xiaoshuaib'+str(i),1,3))
运行一下
xiaoshuaib1 开始摸鱼 2019-03-10 23:30:10
xiaoshuaib1 开始摸鱼 2019-03-10 23:30:11
xiaoshuaib1 开始摸鱼 2019-03-10 23:30:12
xiaoshuaib2 开始摸鱼 2019-03-10 23:30:13
xiaoshuaib2 开始摸鱼 2019-03-10 23:30:14
xiaoshuaib2 开始摸鱼 2019-03-10 23:30:15
xiaoshuaib3 开始摸鱼 2019-03-10 23:30:16
xiaoshuaib3 开始摸鱼 2019-03-10 23:30:17
xiaoshuaib3 开始摸鱼 2019-03-10 23:30:18
xiaoshuaib4 开始摸鱼 2019-03-10 23:30:19
xiaoshuaib4 开始摸鱼 2019-03-10 23:30:20
xiaoshuaib4 开始摸鱼 2019-03-10 23:30:21
可以看到
我们每次从线程池里面去拿一个线程来摸鱼
这样就不会去重复的创建销毁线程了
当然
我们还可以用一个叫做 Queue 的队列来创建线程池
队列嘛~
就是可以往里塞东西
也可以往里拉东西
所以我们在使用队列的时候
最常用的方法就是 put 和 get 了
还是拿摸鱼为例
我们创建一个长度为 6 的队列
接着根据队列的长度创建了线程
每个线程都让它们处于守护状态
也就是需要的时候
马上执行
def queue_pool():
queue = Queue(6)
for i in range(queue.maxsize):
t = CustomThread(queue)
t.setDaemon(True)
t.start()
接着我们就可以用 put 方法
把我们想做的事情往队列里面塞
比如这里我们想要摸鱼
for i in range(20):
queue.put(moyu)
queue.join()
def moyu():
print(" 开始摸鱼 %s" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
要执行的话就需要去队列里面取了
q_method = self.__queue.get()
q_method()
self.__queue.task_done()
完整代码如下
import threading
import time
from queue import Queue
class CustomThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.__queue = queue
def run(self):
while True:
q_method = self.__queue.get()
q_method()
self.__queue.task_done()
def moyu():
print(" 开始摸鱼 %s" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))
def queue_pool():
queue = Queue(5)
for i in range(queue.maxsize):
t = CustomThread(queue)
t.setDaemon(True)
t.start()
for i in range(20):
queue.put(moyu)
queue.join()
if __name__ == '__main__':
queue_pool()
本篇就到这里吧
ps:本来想接着写一下用多线程来爬取网站的,篇幅有限,咱们下一篇再见
peace
点个好看啊~~(破音)
有时候
只是在人群中多看了一眼
就再也没办法忘掉那些容颜
小帅b在普通的一天
上着普通的网
不小心打开了一个不太普通的网站
https://www.mzitu.com/
从此进入了不普通的一天
看着不普通的妹纸
动起了不普通的心思
恩
这么多妹纸
不爬取下来
可惜了
那么
接下来就是
首先我们来分析一下
打开这个妹纸的网站首页
可以看到一共有 211 页
其中
每一页有不同妹纸的主图
再点击进去就是每个妹纸的详情组图
每一个妹纸的组图中的图片数量不同
比如其中一个妹纸就有 46 张
够了
我们回到首页
看一下源代码
可以发现
每一页的每一个妹纸都被放在 li 标签里面了
再来
当我们点击第 2 页的时候
可以发现 URL 变了
https://www.mzitu.com/page/2/
这个我们遇到很多次了
直接当做变量处理
所以第一个思路就是拿到每一个页面的所有妹纸的地址
在这里
我们可以使用 for 循环来获取每一页的内容
用 bs4 获取每一个地址然后放到 urls 里面去
def get_page_urls():
for i in range(1,212):
baseurl = 'https://www.mzitu.com/page/{}'.format(i)
html = request_page(baseurl)
soup = BeautifulSoup(html, 'lxml')
list = soup.find(class_='postlist').find_all('li')
urls= []
for item in list:
url =item.find('span').find('a').get('href')
urls.append(url)
return urls
在这里 212 页太多了
小帅b来获取一页的数据
运行一下得到第一页每个妹纸的 URL
https://www.mzitu.com/171304
https://www.mzitu.com/175090
https://www.mzitu.com/171608
https://www.mzitu.com/171795
https://www.mzitu.com/171041
https://www.mzitu.com/175154
https://www.mzitu.com/170736
https://www.mzitu.com/174947
https://www.mzitu.com/174762
https://www.mzitu.com/170806
https://www.mzitu.com/174433
https://www.mzitu.com/174860
https://www.mzitu.com/173541
https://www.mzitu.com/173063
https://www.mzitu.com/173109
https://www.mzitu.com/173760
https://www.mzitu.com/170563
https://www.mzitu.com/170263
https://www.mzitu.com/166044
https://www.mzitu.com/173721
https://www.mzitu.com/168454
https://www.mzitu.com/171747
https://www.mzitu.com/173845
https://www.mzitu.com/173635
恩
下一步
拿到每一页的每个妹纸的地址之后
当然是要从每个地址进去
获取每个妹纸的所有组图
遍历一下刚刚获取到的 list
for url in list_page_urls:
download(url)
那么进入一个妹纸的详情页面的时候
我们需要获取
组图的所有图片数量
组图的名称(真特么sao)
图片的地址
知道了这些信息之后
我们就可以很简单获取了
def download(url):
html = request_page(url)
soup = BeautifulSoup(html, 'lxml')
total = soup.find(class_='pagenavi').find_all('a')[-2].find('span').string
title = soup.find('h2').string
image_list = []
for i in range(int(total)):
html = request_page(url + '/%s' % (i + 1))
soup = BeautifulSoup(html, 'lxml')
img_url = soup.find('img').get('src')
image_list.append(img_url)
download_Pic(title, image_list)
在这里我们获取了 total 总页数
获取到了组图题目 title
根据总页数进行遍历
一个页面可以获取到组图中的一张图片
然后我们把这些图片都放到组图集合中
接着就可以开始下载了
我们可以根据这个组图的名字来创建文件夹
然后将下载的图片放进去
def download_Pic(title, image_list):
# 新建文件夹
os.mkdir(title)
j = 1
# 下载图片
for item in image_list:
filename = '%s/%s.jpg' % (title,str(j))
print('downloading....%s : NO.%s' % (title,str(j)))
with open(filename, 'wb') as f:
img = requests.get(item,headers=header(item)).content
f.write(img)
j+=1
ok
我们运行一下吧
可以看到
每张图片都被我们爬下来了
名字太他妈引入犯罪
小帅b不得不打马赛克
反正你们阅片无数
心中自然无码
打开文件夹可以看到
每一个美女都根据组图生成文件夹
每个文件夹就是组图里面的图片
我这马赛克打得是不是很棒?
但其实
发现我们在爬的时候
有点慢了
还记不记得上次摸鱼提到的多线程?
python爬虫14 | 就这么说吧,如果你不懂多线程和线程池,那就去河边摸鱼!
恩
我们来开启多线程试试
根据我们一开始获取到每个页面的多个妹纸的 URL 来使用线程池
def download_all_images(list_page_urls):
# 获取每一个详情妹纸
works = len(list_page_urls)
with concurrent.futures.ThreadPoolExecutor(works) as exector:
for url in list_page_urls:
exector.submit(download,url)
这次我们再爬取试试看
可以看到这次就不是一组一组的爬了
而是多个线程同时爬取多个组图
OMG
我的文件夹
不行了
我赶紧删掉
完整代码
公众号发送「mm」获取吧
警告
本文仅作为学习例子
你别乱来啊
咱们下回见
peace
点个好看啊~~(破音)
我们在之前的文章谈到了高效爬虫
在 python 中
多线程下的 GIL 锁会让多线程显得有点鸡肋
特别是在 CPU 密集型的代码下
多线程被 GIL 锁搞得效率不高
特别是对于多核的 CPU 来说
如果想要充分利用 CPU
还是用多进程吧
这样我们就可以做到并行爬取
提高了爬取的效率
那么,怎么玩多进程呢
恩
接下来就是
可以使用 multiprocessing 来实现多进程
使用起来也是很简单的
比如我们使用 Process 这个类来创建进程
from multiprocessing import Process
def f(name):
print('hello', name)
if __name__ == '__main__':
p = Process(target=f, args=('xiaoshuaib',))
p.start()
p.join()
还可以使用进程池的方式
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
还记得我们之前爬取过 250 部电影么
python爬虫08 | 你的第二个爬虫,要过年了,爬取豆瓣最受欢迎的250部电影慢慢看
那会我们还不知道啥是多进程
你先去运行一下
记录一下运行时间
接着
我们对这个代码修改一下
让它具备多进程
def main(url):
html = request_douban(url)
soup = BeautifulSoup(html, 'lxml')
save_content(soup)
if __name__ == '__main__':
start = time.time()
urls = []
pool = multiprocessing.Pool(multiprocessing.cpu_count())
for i in range(0, 10):
url = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='
urls.append(url)
pool.map(main, urls)
pool.close()
pool.join()
简单解释一下代码
在这里
我们根据电脑 CPU 的内核数量
创建相应的进程池
pool = multiprocessing.Pool(multiprocessing.cpu_count())
我们的进程数不需要大于内核数
因为进程数创建得再多反而没什么好处
通过 map 方法去执行我们的主函数
将我们获得的 url 传过去
pool.map(main, urls)
然后我们调用了进程池的 close 方法
让它不再创建进程
pool.close()
我们调用了 join 方法
pool.join()
为的是让进程池的进程执行完毕再结束
ok
你再运行一下
再记录一下运行时间
对比一下
你会发现速度翻了好几番了
当然
这取决于你电脑的 CPU
你还可以去爬取数据量大一些的数据
这样对比会更加明显一些
快去试一下吧
往期文章
python爬虫15 | 害羞,用多线程秒爬那些万恶的妹纸们,纸巾呢?
python爬虫14 | 就这么说吧,如果你不懂多线程和线程池,那就去河边摸鱼!
python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的
扫一扫
学习 Python 没烦恼
点个好看啊~~(破音)
这两天
有小伙伴问小帅b
为什么我爬取 xx 网站的时候
不返回给我数据
而且还甩一句话给我
“系统检测到您频繁访问,请稍后再来”
小帅b看了一下他的代码
for i in range(1,10000):
requests.get(url)
瞬间震惊了
这就感觉
被连续 fxxk 了 1w 次
你说对方受得了?
不封你 IP 封谁?
要会伪装
要想想看
人是怎么访问网站的
这次我们来说说伪装 Header
那么
接下来就是
学习python的正确姿势
当你要去爬取某个网站的数据的时候
你要想想看
如果是别人爬取你的数据
你会做什么操作
你是不是也不想
让别人随随便便就疯狂请求你的服务器
你是不是也会
采取一定的措施
比如
小帅b有一个网站
你分析到了小帅b的地址
当你想要通过 python 来爬取的时候...
恩
小帅b来写一个简单的可以被请求的例子
from flask import Flask
app = Flask(__name__)
def hello_world():
return "这里假装有很多数据"
if __name__ == "__main__":
app.run(debug=True)
ok
假设你现在分析到了小帅b的地址了
也就是可以通过 /getInfo 就可以获取到小帅b网站上的数据了
你感觉很爽
就开始请求了
url = 'http://127.0.0.1:5000/getInfo'
response = requests.get(url)
print(response.text)
没错
这个时候你确实获取到数据了
小帅b觉得有点不对劲了
想看看请求的 header 信息
def hello_world():
print(request.headers)
return "这里假装有很多数据"
if __name__ == "__main__":
app.run(debug=True)
结果看到的 headers 信息是这样的
Host: 127.0.0.1:5000
User-Agent: python-requests/2.21.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
哇靠
User-Agent: python-requests/2.21.0
居然使用 python 的库来请求
你说小帅b不封你封谁呢?
所以小帅b这个时候进行判断
你就获取不到数据了
def hello_world():
if(str(request.headers.get('User-Agent')).startswith('python')):
return "小子,使用爬虫是吧?滚你的"
else:
return "这里假装有很多数据"
if __name__ == "__main__":
app.run(debug=True)
你这个时候的请求
if __name__ == '__main__':
url = 'http://127.0.0.1:5000/getInfo'
response = requests.get(url)
print(response.text)
得到的结果就是
小子,使用爬虫是吧?滚你的
你已经在小帅b面前暴露了
那么怎么办呢?
伪装自己呗
python 不可以访问
浏览器可以访问呀
所以你可以修改你的请求头
还记得 Fiddler(可点击) 吗?
你可以先在浏览器访问
然后在抓取数据的时候获取到 Header 数据
当然你也可以使用 Chrome (可点击) 的控制面板获取 Header
有了 Header 信息之后
就可以使用 requests(可点击) 模块轻松获取
恩,现在的你学会假装自己是浏览器了
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
url = 'http://127.0.0.1:5000/getInfo'
response = requests.get(url,headers=headers)
print(response.text)
再获取一次可以发现
返回的是
这里假装有很多数据
ok,你又获取到数据了
当然
仅仅是伪装自己是浏览器还不够的
要多站在对方的角度想问题
往后
小帅b还会继续跟你扯
怎么应对反爬虫的种种策略
peace
帅b老仙
法力无边
与本文相关的文章
我们上次说了伪装头部
↓
python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部
让自己的 python 爬虫假装是浏览器
小帅b主要是想让你知道
在爬取网站的时候
要多的站在对方的角度想问题
其实
这和泡妞差不多
你要多站在妹纸的角度思考
她的兴趣是什么
她喜欢什么
而不是自己感动自己
单方面的疯狂索取
哦..
扯远了
我们回到反爬虫
这次教你怎么伪装自己的 ip 地址
别让对方轻易的就把你给封掉
如何伪装呢
那么
接下来就是
其实
对于 python 来说
使用代理访问很简单
就拿我们经常使用的 requests 库来说
使用代理 ip 如下
定义代理IP
proxie = {
'http' : 'http://xx.xxx.xxx.xxx:xxxx',
'http' : 'http://xxx.xx.xx.xxx:xxx',
....
}
使用代理
response = requests.get(url,proxies=proxies)
这样就可以使用你定义的代理地址去访问网站了
我知道你要问了
代理地址哪里来
在网上有很多免费的代理
随便搜就有一堆了
不过你知道的
免费的话很多人都去使用
所以这些代理IP很不稳定
如果你有钱的话
市面上有人就专门提供代理IP的
直接去买就行了
不想花钱呢?
可以搞一个IP代理池
主要就是通过 python 程序去抓取网上大量免费的代理 ip
然后定时的去检测这些 ip 可不可以用
那么下次你要使用代理 ip 的时候
你只需要去自己的 ip 代理池里面拿就行了
道理都懂
但是不想自己弄一个代理池
有没有现成的?
不瞒你说
小帅b发现了一个不错的开源 ip 代理池
https://github.com/Python3WebSpider/ProxyPool.git
如何使用呢
首先使用 git clone 将源代码拉到你本地
git clone https://github.com/Python3WebSpider/ProxyPool.git
接着打开项目中的 setting.py
在这里可以配置相关信息
比如 Redis 的地址密码相关
(如果你之前没有使用过 redis 的话,可以到如下地址下载 https://github.com/MicrosoftArchive/redis/releases)
接着在你 clone 下来的文件目录中
安装相关所需的 python 模块
pip3 install -r requirements.txt
接下来开启你的 redis
redis 的默认端口就是 6379
接着就可以运行 run.py 了
代理池开始运行
* Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)
开始抓取代理
获取器开始执行
Crawling http://www.66ip.cn/1.html
正在抓取 http://www.66ip.cn/1.html
抓取成功 http://www.66ip.cn/1.html 200
成功获取到代理 201.69.7.108:9000
成功获取到代理 111.67.97.58:36251
成功获取到代理 187.32.159.61:51936
成功获取到代理 60.13.42.154:9999
成功获取到代理 106.14.5.129:80
成功获取到代理 222.92.112.66:8080
成功获取到代理 125.26.99.84:60493
...
如果你在运行的时候出现这个错误
更新一下 redis 版本
pip3 install redis==2.10.6
运行 run.py
这时候在你的 redis 中就有爬取到的代理 ip 了
项目跑起来之后
你就可以访问你的代理池了
比如随机获取一个代理 ip 地址
http://localhost:5555/random
这样访问之后就会获取到一个代理 ip
在代码中获取代理也不在话下啦
import requests
PROXY_POOL_URL = 'http://localhost:5555/random'
def get_proxy():
try:
response = requests.get(PROXY_POOL_URL)
if response.status_code == 200:
return response.text
except ConnectionError:
return None
恩
这样
我们就成功的在我们的代理池中获取代理 ip 了
那么下次谁还敢封你ip
你就拿出你的代理ip
继续爬呗
peace
帅b老仙
法力无边
你好
由于你是游客
无法查看本文
请你登录再进
谢谢合作
当你在爬某些网站的时候
需要你登录才可以获取数据
咋整?
莫慌
小帅b把这几招传授给你
让你以后从容应对
那么
接下来就是
登录的常见方法无非是这两种
1、让你输入帐号和密码登录
2、让你输入帐号密码+验证码登录
今天
小帅b先跟你说说第一种
需要验证码的咱们下一篇再讲
第一招
Cookie大法
你平常在上某个不为人知的网站的时候
是不是发现你只要登录一次
就可以一直看到你想要的内容
过了一阵子才需要再次登录
这就是因为 Cookie 在做怪
简单来说
就是每一个使用这个网站的人
服务器都会给他一个 Cookie
那么下次你再请求数据的时候
你顺带把这个 Cookie 传过去
服务器一看
诶,小伙子是老客户啊
有登录过
直接返回数据给他吧
在服务中还可以设置 Cookie 的有效时间
也就是说
当你下次携带一个过期了的 Cookie 给服务器的时候
服务器虽然知道你是老客户
但是还是需要你重新再登录一次
然后再给你一个有效的 Cookie
Cookie 的时长周期是服务器那边定的
ok
了解了这一点之后
我们就来玩一下吧
我们以「逼乎」为例
https://biihu.cc/account/login/
输入地址之后
按一下 F12
点击 network 标签
然后登录你的帐号
然后点击其中一个
你就可以看到在 Request Headers 有你的 Cookie
有了 Cookie 之后
我们在代码中直接获取我的个人信息
import requests
headers = {
# 假装自己是浏览器
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36',
# 把你刚刚拿到的Cookie塞进来
'Cookie': 'eda38d470a662ef3606390ac3b84b86f9; Hm_lvt_f1d3b035c559e31c390733e79e080736=1553503899; biihu__user_login=omvZVatKKSlcXbJGmXXew9BmqediJ4lzNoYGzLQjTR%2Fjw1wOz3o4lIacanmcNncX1PsRne5tXpE9r1sqrkdhAYQrugGVfaBICYp8BAQ7yBKnMpAwicq7pZgQ2pg38ZzFyEZVUvOvFHYj3cChZFEWqQ%3D%3D; Hm_lpvt_f1d3b035c559e31c390733e79e080736=1553505597',
}
session = requests.Session()
response = session.get('https://biihu.cc/people/wistbean%E7%9C%9F%E7%89%B9%E4%B9%88%E5%B8%85', headers=headers)
print(response.text)
运行后可以发现不用登录就可以直接拿到自己的个人信息了
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
<meta name="renderer" content="webkit" />
<title>小帅b真特么帅 的个人主页 - 逼乎</title>
<meta name="keywords" content="逼乎,问答,装逼,逼乎网站" />
<meta name="description" content="逼乎 ,与世界分享你的装逼技巧与见解" />
<base href="https://biihu.cc/" /><!--[if IE]></base><![endif]-->
<link rel="stylesheet" type="text/css" href="https://biihu.cc/static/css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="https://biihu.cc/static/css/icon.css" />
<link href="https://biihu.cc/static/css/default/common.css?v=20180831" rel="stylesheet" type="text/css" />
<link href="https://biihu.cc/static/css/default/link.css?v=20180831" rel="stylesheet" type="text/css" />
<link href="https://biihu.cc/static/js/plug_module/style.css?v=20180831" rel="stylesheet" type="text/css" />
<link href="https://biihu.cc/static/css/default/user.css?v=20180831" rel="stylesheet" type="text/css" />
<link href="https://biihu.cc/static/css/mood/mood.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var _02AEC94D5CA08B39FC0E1F7CC220F9B4="a5359326797de302bfc9aa6302c001b8";
var G_POST_HASH=_02AEC94D5CA08B39FC0E1F7CC220F9B4;
var G_INDEX_SCRIPT = "";
var G_SITE_NAME = "逼乎";
var G_BASE_URL = "https://biihu.cc";
var G_STATIC_URL = "https://biihu.cc/static";
var G_UPLOAD_URL = "/uploads";
var G_USER_ID = "188";
var G_USER_NAME = "小帅b真特么帅";
var G_UPLOAD_ENABLE = "Y";
var G_UNREAD_NOTIFICATION = 0;
var G_NOTIFICATION_INTERVAL = 100000;
var G_CAN_CREATE_TOPIC = "1";
var G_ADVANCED_EDITOR_ENABLE = "Y";
var FILE_TYPES = "jpg,jpeg,png,gif,zip,doc,docx,rar,pdf,psd";
</script>
<script src="https://biihu.cc/static/js/jquery.2.js?v=20180831" type="text/javascript"></script>
....
第二招
表单请求大法
很简单
就是通过抓包
获取请求登录的时候需要用到的用户名密码参数
然后以表单的形式请求服务器
如果你细心一点的话应该会知道之前说过拉
具体在这
去看下
我就不多说了
python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器
第三招
Selenium 自动登录法
你应该看过这两个
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处
python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们
看过的话
那么对于你来说
Selenium 自动登录也太 tm 简单了吧
获取到两个输入框的元素
再获取到登录按钮
往输入框写你的帐号密码
然后自动点击一下登录
username = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "帐号的selector")))
password = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "密码的selector")))
submit = WAIT.until(EC.element_to_be_clickable((By.XPATH, '按钮的xpath')))
username.send_keys('你的帐号')
password.send_keys('你的密码')
submit.click()
登录完之后拿到 Cookie
cookies = webdriver.get_cookies()
有了 Cookie 你就可以拿到你想要的数据了
ok
以上这三招
希望对你有帮助
咱们下一篇说说验证码相关
下回见
peace
帅b老仙
法力无边
(你想约我么?)
点个在看
继续发力
人们在一生中都会有多个阶段,聪明的人,每进入一个新的阶段,思考都是递进的,而不是还停留在以前的阶段,做着看似不同的事情,但是本质却和以往的阶段没有什么改变。
举个例子,假设有这么 3 个阶段:
1、我们拿出自己的时间去换资源,是一个阶段。
2、我们拿出自己的时间去投资自己,是一个阶段。
3、我们拿出自己的资源去买别人的时间,这是一个高级的阶段。
当我处在第一个阶段的时候,我是不会知道第二个、第三个阶段里面所蕴含的一些智慧的,就像我现在所处的空间,此刻所有的思维,不会知道我以后的阶段会发生什么不可想象的事情。但我现在能够明确的一点的是:我越早知道,越好!
所以我就常常在想,我要怎么做到 “越早知道” 呢? 想着想着,随着时间的推移,我就得出了这么几个:
1、 只有我自己经历过,然后后知后觉。显然这做不到早知道,但是能够做到知道,总比不知道好吧?
2、 我能不能从别人的身上 “早知道” ,好像可以,这个人一定要比我牛逼,比我经历更多,而且,他乐于分享,我能从他身上发现另一个阶段的 “智慧” 。
3、 超前进入角色,谁规定我现在只能是个程序员?我假装自己是产品经理,我进入这个角色,我是不是能 “早知道” 产品思维 ,我假装自己是个架构师,我是不是能 “早知道” 更多业务场景的解决方案? 我甚至把自己当做老板,我是不是能 “早知道” 得更多。
想到这一点的时候我兴奋不已,所以我就决定了,除了多阅读牛人写的东西之外,我要把自己当做自己的老板。
在这个过程中,我体验到前所未有的乐趣,比如我会把自己划分成多个角色,然后有一个老板的身份去吩咐另一个我做事情,这看起来有点精神分裂的感觉,比如现在的我,就是由我的老板(也就是我自己)吩咐我来写的文章。
有一种,我把时间卖给我自己的感觉,虽然我不能做到分身,但是我可以把某段时间切出来,然后让自己以不同的角色进入,当我是 “老板” 的时候,我做计划和思考总结,以及分配任务,当我是个 “程序员” 的时候,我就被 “老板” 叫去撸代码,当我是个 “产品经理” 的时候,我就被 “老板” 叫去观看用户数据,研究用户痛点,爽点,当我是个 “学生” 的时候,我就被老板叫去学对 “公司” 有用的东西….
慢慢的我发现,我似乎能够稍微做到 “早知道” 了,能够站在比现在所处的位置更高一点点角度去观察事情了,比如我现在在 “把自己的时间出售给别人” 到 “把时间更多的出售给自己” 的路上,但我现在一定会知道,往后我会 “用资源买别人的时间”。
还有另一点就是,当我把自己当做老板之后,我自动努力,我有一种吩咐别人的那种掌控感,虽然吩咐的是我自己,我有为老板做事情的那份热情,虽然老板就是我自己。不过我真的没有了那种要死要活的努力,而我的努力完全自动,更加 6 的是,我发现 “我们” 合作效率非常高,直接砍掉沟通效率的问题。
从此,我快乐工作,自动努力!
]]>当你在爬取某些网站的时候
对于你的一些频繁请求
对方会阻碍你
常见的方式就是使用验证码
验证码的主要功能
就是区分你是人还是鬼(机器人)
人
想法设法的搞一些手段来对付技术
而
技术又能对付人们的想法
一来一去
就有了各种各样的变态验证码
也有了各种各样的应对方式
常见的验证码有这么几种
图像验证
语音验证
短信验证
极验验证
点击验证
今天
小帅b想跟你先说说如何识别图像验证码
那么
接下来就是
我们来看看这些图片验证码
(此图来源网络)
可以发现
这些验证码大多是数字和字母组成
然后在此之上再添加一些像毛一样的线
或者搞一些噪点
或者把这些字符扭曲一下
为了增加识别难度也是辛苦人家了
接下来我们思考一下
我们要识别这类验证码要怎么做呢
首先要处理一下验证码图片
什么噪点乱七八糟的
我们尽量把它们去掉
让图片
尽量黑白
尽量只剩下字符本身
然后再用 python 强大的 OCR 工具
Python-tesseract
来识别我们优化好的图片
这样正确率就会大大的提高
哎呀
我真是个聪明 boy 啊
为了让你更清楚的知道怎么识别图像验证码
小帅b用 python 搞了几张识别难度不同的验证码
第一张
难度系数:
第二张
难度系数:
第三张
难度系数:
第四张
难度系数:
第五张
难度系数 :
先对第一张进行识别
这张看起来没什么 "污染"
所以相对简单
先安装一下 pytesseract
pip install pytesseract
接着安装一下 tesseract-ocr
如果你是 ubuntu 系统可以直接使用如下命令安装
sudo apt install tesseract-ocr
如果你是 win 系统自行 Google 一下安装 tesseract-ocr 以及环境变量配置
完了之后就导入相关模块到我们的代码文件中
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
接着我们就打开第一张图片
使用 pytesseract 识别
打印一下
captcha = Image.open("captcha1.png")
result = pytesseract.image_to_string(captcha)
print(result)
打印结果
ok,么有问题
接着我们来识别第 2 张
captcha = Image.open("claptcha2.png")
result = pytesseract.image_to_string(captcha)
print(result)
结果打印出来是
1924??
这就说明
pytesseract 是没办法识别太多噪点的图片的
如果这个图片再加上一点彩色背景
那么对 pytesseract 来说更是有点吃力的
所以我们先对这张图片灰度处理一下
captcha = Image.open("captcha2.png")
result = captcha.convert('L')
result.show()
图片就变成灰了
虽然灰了
但是还不够
我们除了处理灰度还需要对其 二值化
def convert_img(img,threshold):
img = img.convert("L") # 处理灰度
pixels = img.load()
for x in range(img.width):
for y in range(img.height):
if pixels[x, y] > threshold:
pixels[x, y] = 255
else:
pixels[x, y] = 0
return img
调用一下
convert_img(captcha,150)
这时候图片就变成这样了
是不是一下子就清晰很多了呢
这时候我们对这张图片识别一下
# 识别一下
result = pytesseract.image_to_string(result)
print(result)
成功识别
接下来我们再来看看有毛有噪的图片
这时候直接去识别是识别不出来的
所以还是老办法
先处理灰度
再 二值化
这次我们再降一下噪
data = img.getdata()
img.size =
count = 0
for x in range(1,h-1):
for y in range(1, h - 1):
# 找出各个像素方向
mid_pixel = data[w * y + x]
if mid_pixel == 0:
top_pixel = data[w * (y - 1) + x]
left_pixel = data[w * y + (x - 1)]
down_pixel = data[w * (y + 1) + x]
right_pixel = data[w * y + (x + 1)]
if top_pixel == 0:
count += 1
if left_pixel == 0:
count += 1
if down_pixel == 0:
count += 1
if right_pixel == 0:
count += 1
if count > 4:
y), 0)
图片变成这样了
再识别一下
不过
pytesseract 不是万能的
对于稍微复杂一点的就识别不出来了
至于这张
你能看出它是 1l1l0oO0 么?
如果你能
算你牛逼
反正小帅b不能
所以 pytesseract 也不能
对于一些简单的验证码
使用 pytesseract 还是可以的
如果你想提高 pytesseract 识别率
还可以去搞些图片去训练一下 tesseract-ocr
ok
以上
主要让你了解一下图片识别库的使用
以及对一些图片的常用降噪操作
那么下次你爬到一些需要图像的简单验证码
应该不在话下了
完
下回见
听说你要 约 我啊!?
peace
点个在看啊~~(破音)
今天
要来说说滑动验证码了
大家应该都很熟悉
点击滑块然后移动到图片缺口进行验证
现在越来越多的网站使用这样的验证方式
为的是增加验证码识别的难度
那么
对于这种验证码
应该怎么破呢
接下来就是
打开 b 站的登录页面
https://passport.bilibili.com/login
可以看到登录的时候需要进行滑块验证
按下 F12
进入 Network
看下我们将滑块移到缺口松开之后做了什么提交
可以看到是一个 GET 请求
但是
这请求链接也太特么长了吧
就是比小帅b短了一点点
我们来看看请求的参数是怎么样的
哇靠
gt?
challenge?
w?
这些都是什么鬼参数
还加密了
完全下不了手啊
那么
本篇完
再见
peace
说
你是不是迷恋我??
好吧
你居然滑到这里来了
说明你还是有点爱小帅b的
小帅b是那种遇到一点困难就放弃的人吗
显然不是
那么接下来才是真的
既然以请求的方式不好弄
我们从它们的源代码入手
看看有什么突破口
回到 b 站的登录页
按下 F12
进入 Element
然后点击滑块出现了图片
定位一下
发现有两个 a 标签
一个 class 是 gt_bg gt_show
一个 class 是 gt_fullbg gt_show
和小帅b想的一样
这个验证码应该是有两张图片
一张是完全的背景图片
一张是缺口的图片
那把这两张图片下载下来对比一下不就行了
打开 a 标签一看
哇靠
一张图片被切割成很多小块
原来这张图片是拼出来的
我们看看原始图片是怎么样的
什么乱七八糟的
再仔细看下源代码
原来是在同一张图片通过偏移量合成了一张完整的图片
background-position: -277px -58px;
厉害厉害
小帅b看了一下缺口的图片也是如此
到这里
我们的第一个思路就是
下载这两张原始图片
然后通过偏移量合成两张真正的图片
背景图
↓变身
缺口图
↓变身
那么怎么做呢?
因为我们还要模拟滑动滑块
所以呢
我们要用到 selenium
打开b站的登录页
然后等到那个滑块显示出来
driver.get(url)
slider = WAIT.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, "#gc-box > div > div.gt_slider > div.gt_slider_knob.gt_show")))
接下来我们就获取页面的源码
driver.page_source
然后使用 bs 获取两张原始背景图片的 url
bs = BeautifulSoup(driver.page_source,'lxml')
bg_div = bs.find_all(class_='gt_cut_bg_slice')
fullbg_div = bs.find_all(class_='gt_cut_fullbg_slice')
bg_url = re.findall('background-image:\surl\("(.*?)"\)',bg_div[0].get('style'))
fullbg_url = re.findall('background-image:\surl\("(.*?)"\)',fullbg_div[0].get('style'))
拿到了图片地址之后
将图片下载下来
bg_url = bg_url[0].replace('webp', 'jpg')
fullbg_url = fullbg_url[0].replace('webp', 'jpg')
bg_image = requests.get(bg_url).content
fullbg_image = requests.get(fullbg_url).content
print('完成图片下载')
ok
我们已经把两张原始图片下载下来了
那么接下来就是要合成图片了
我们要根据图片的位置来合成
也就是源码中的 background-position
获取每一个小图片的位置
我们可以通过字典的形式来表示这些位置
然后将数据放到列表中
bg_location_list = []
fullbg_location_list = []
for bg in bg_div:
location = {}
location['x'] = int(re.findall('background-position:\s(.*?)px\s(.*?)px;', bg.get('style'))[0][0])
location['y'] = int(re.findall('background-position:\s(.*?)px\s(.*?)px;', bg.get('style'))[0][1])
bg_location_list.append(location)
for fullbg in fullbg_div:
location = {}
location['x'] = int(re.findall('background-position:\s(.*?)px\s(.*?)px;', fullbg.get('style'))[0][0])
location['y'] = int(re.findall('background-position:\s(.*?)px\s(.*?)px;', fullbg.get('style'))[0][1])
fullbg_location_list.append(location)
那么
现在我们已经有了原始图片
还知道了每个位置应该显示原始图片的什么部分
接下来我们就写一个方法
用来合成图片
# 写入图片
bg_image_file = BytesIO(bg_image)
fullbg_image_file = BytesIO(fullbg_image)
# 合成图片
bg_Image = mergy_Image(bg_image_file, bg_location_list)
fullbg_Image = mergy_Image(fullbg_image_file, fullbg_location_list)
那么问题又来了
怎么合成啊
我们再看看一开始分析的图片
这里图片被分割成的每一个小图片的尺寸是
10 * 58
所以我们也要将我们刚刚下载的原始图片切割成相应的尺寸大小
而且
这张图片是由上半部分的小图片和下半部分的小图片合成的
所以我们定义两个 list 来装这些小图片
# 存放上下部分的各个小块
upper_half_list =
down_half_list =
然后将原始的图片切割好放进去
image = Image.open(image_file)
# 通过 y 的位置来判断是上半部分还是下半部分,然后切割
for location in location_list:
if location['y'] == -58:
# 间距为10,y:58-116
im = image.crop((abs(location['x']), 58, abs(location['x'])+10, 116))
upper_half_list.append(im)
if location['y'] == 0:
# 间距为10,y:0-58
im = image.crop((abs(location['x']), 0, abs(location['x']) + 10, 58))
down_half_list.append(im)
至此
我们这两个 list 就分别放好了各个切割的图片了
那么接下来就创建一张空白的图片
然后将小图片一张一张(间距为10)的粘贴到空白图片里
这样我们就可以得到一张合成好的图片了
哎
我真是个天才
# 创建一张大小一样的图片
new_image = Image.new('RGB', (260, 116))
# 粘贴好上半部分 y坐标是从上到下(0-116)
offset = 0
for im in upper_half_list:
(offset, 0))
offset += 10
# 粘贴好下半部分
offset = 0
for im in down_half_list:
(offset, 58))
offset += 10
那么到现在
我们可以得到网页上显示的那两张图片了
一张完全的图片
一张带缺口的图片
接下来我们就要通过对比这两张图
看看我们要滑动的距离是多远
# 合成图片
bg_Image = mergy_Image(bg_image_file, bg_location_list)
fullbg_Image = mergy_Image(fullbg_image_file, fullbg_location_list)
# bg_Image.show()
# fullbg_Image.show()
# 计算缺口偏移距离
distance = get_distance(bg_Image, fullbg_Image)
% str(distance))
可以通过图片的 RGB 来计算
我们设定一个阈值
如果 r、g、b 大于这个阈值
我们就返回距离
def get_distance(bg_Image, fullbg_Image):
#阈值
threshold = 200
print(bg_Image.size[0])
print(bg_Image.size[1])
for i in range(60, bg_Image.size[0]):
for j in range(bg_Image.size[1]):
bg_pix = bg_Image.getpixel((i, j))
fullbg_pix = fullbg_Image.getpixel((i, j))
r = abs(bg_pix[0] - fullbg_pix[0])
g = abs(bg_pix[1] - fullbg_pix[1])
b = abs(bg_pix[2] - fullbg_pix[2])
if r + g + b > threshold:
return i
现在
我们知道了关键的滑动距离了
激动人心的时刻到了
我们使用 selenium
拿到滑块的元素
然后根据这个距离拖动到缺口位置不就好了么
马上打开 selenium 的文档
看到了这个函数
它可以使用左键点击元素
然后拖动到指定距离
最后释放鼠标左键
挖槽
正合我意
赶紧试一下
knob = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#gc-box > div > div.gt_slider > div.gt_slider_knob.gt_show")))
ActionChains(driver).drag_and_drop_by_offset(knob, distance, 0).perform()
运行一下试试看吧
哇哦你妹哦~
妖怪吃了拼图了
看来直接拖拽是不行的
容易遇到妖怪
毕竟这太快了
就算加藤鹰也没那么快吧
小帅b试着拖完滑块让它睡一下再释放
ActionChains(driver).click_and_hold(knob).perform()
ActionChains(driver).move_by_offset(xoffset=distance, yoffset=0.1).perform()
time.sleep(0.5)
ActionChains(driver).release(knob).perform()
发现拼图还是特么的被妖怪吃了
后来小帅b发现原来别人也遇到了这样的问题
然后又发现了
有个叫匀速直线运动的东西
什么 加速度
什么 v = v0 + at
什么 s = ½at²
哇
这不是高中的知识点么
瞬间想起小帅b高中的时候在最角落的课桌
此刻往右上方抬起头
45 度角
让我的眼泪划出一条美丽的弧线
什么鬼
回到正题
我们可以使用它来构造一个运动路径
该加速时加速
该减速的时候减速
这样的话就更像人类在滑动滑块了
def get_path(distance):
result = []
current = 0
mid = distance * 4 / 5
t = 0.2
v = 0
while current < (distance - 10):
if current < mid:
a = 2
else:
a = -3
v0 = v
v = v0 + a * t
s = v0 * t + 0.5 * a * t * t
current += s
result.append(round(s))
return result
这次
我们使用这个轨迹来滑动
knob = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#gc-box > div > div.gt_slider > div.gt_slider_knob.gt_show")))
result = get_path(distance)
ActionChains(driver).click_and_hold(knob).perform()
for x in result:
ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()
time.sleep(0.5)
ActionChains(driver).release(knob).perform()
好了好了
我们再来运行一下吧
哈哈哈
cool
成功识别了哇
我不管
当然了
成功率不是 100%
可以多调戏它几次
ok
以上就是识别滑动验证码的具体过程了
对于其它大部分的滑动验证码
也是可以使用这招搞定的
由于篇幅有限
源代码我放在了这个公众号后台了
你发送〔滑动〕两个字
就可以获取啦
那
这次本篇就真的完啦
听说你想约我?
peace
相关文章
点个在看啊~~(破音)
接下来就是
学习python的正确姿势
做爬虫
绕不开模拟登录
为此小帅b给大家支了几招
python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!
有些网站的登录很弱鸡
传个用户名和密码
来个 POST 请求就搞定了
但还是少数
大多网站还是需要验证码的
登录需要验证码
频繁请求需要验证码
为此小帅b教你如何自动识别
python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别
当然了
市面上还有许多打码验证平台
花点钱买个接口
直接调用就行
小帅b不建议你去购买这些玩意
自己能学着搞定为啥要花钱
除非真的是识别率低到叫爸爸
当然如果是公司项目就另当别论了
人
总该站在不同的角度去思考
该花公司钱的地方还是得花的嘛
为啥我说
以后我再讲「模拟登录」我就是狗
因为我觉得前面讲的几篇已经够用了
万变不离其宗
有些套路是可以在不同地方使用的
效果都差不多
不过小帅b还想给你加个餐
小帅b经常会去瞎逛 Github
一不小心就发现了一个不错的开源项目
这个项目使用 python 模拟登录了各大型网站
确实有点 awesome
不过实现原理和小帅b之前讲的都差不多
登录完拿到 cookie
然后做你想做的事情
这个项目现在实现了这些网站的模拟登录
哈
发现好东西当然要第一时间跟各位分享一下
不用谢
小帅b就是除了帅还这么好
地址在这
https://github.com/CriseLYJ/awesome-python-login-model
那么
有了小帅b前面的几篇文章
再结合这个
我想模拟登录对你来说
应该不在话下了
(有没发现这次字体小了点)
好了
咱们下次见
peace
帅b老仙
法力无边
右下角
沾点法力
你有没有想过让你的手机帮你自动完成某些事情
比如自动帮你抢红包
有些软件不是有签到活动么
这些傻瓜式的操作
能不能让手机自动签到呢?
自动帮你叫外卖
自动帮你打电话
等等
还有
对于手机上的一些比较难以通过抓包获取的数据
想不想像 selenium 那样轻松获取?
之前小帅b就给大家介绍了 selenium
python爬虫09 | 上来,自己动 !这就是 selenium 的牛逼之处
可以模拟人类自动操作浏览器上的网页
我们还使用它爬取了
“鸡你太美”
python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们
相信你已经体验到 selenium 的魅力了
对于一些复杂的 PC 端的网页爬取
它就是个利器
不过
对于手机上的一些稍微复杂点的 APP 数据
selenium 就显得有点无能为力了
那么
有没有像 selenium 这样的框架
可以模拟人类自动操作手机上的 APP 呢
答案是肯定的
那就是
Appium
如何让它来自动操作我们的手机呢
那么
接下来就是
为什么说 Appium 牛逼呢
说 4 点足以
1、他是开源的手机端自动测试框架
2、selenium可以做的 Appium 都可以做,selenium不可以做的Appium 依然可以做,它能够支持 Android、iOS、windows 系统的原生 APP 进行自动操作
3、它可以支持不同的语言写脚本,比如我们的 Python,还有Java、JavaScript 等
4、以前你想要爬取 App 的数据的时,对于较难抓取的数据,你还需要对 App 进行反编译,很麻烦,但是 Appium 就不需要这么麻烦
那 Appium 是怎么玩的呢
你可以把 Appium 当做是一个服务器
我们将我们写的控制操作 APP 的 python 代码
扔给 Appium
Appium 得到了请求,看到你跟它说要怎么去操作 APP
它就乖乖的听你话去操作 APP 了
我们在使用 Appium 之前
我们需要安装相关的环境才可以使用
由于 Android 开源又好用,又有虚拟机可以玩
所以我们要的就是自动操作 Android 手机
具体来说
我们需要安装以下环境
真香警告
Appium 虽然比 selenium 对环境的要求相对复杂一丢,但是相信我,搞定之后你绝对会体验到 Appium 的魅力,接下来要说的内容相对干货,你需要拿出点时间,然后跟着 小帅b 一步一步装起来,如果你之前没接触相关的环境安装,可能在安装过程中你会说几次脏话,没关系,"挖槽","TMD" 完之后,都给我安装好以下内容。
1、node.js 和 npm
Appium需要
2、JDK
java 环境,Android需要这个环境
3、Android SDK
Android强大的开发工具包
4、Android虚拟机
可选,如果你用你的真鸡也可以的,用 usb 插入电脑就行
5、Appium
我们的主角
6、Appium-Python-Client
python客户端,用来连接 Appium
7、Python
python相信你早已经安装了,还没有安装的是猪吧?
那么接下来
小帅b教你一步一步地安装起来
不同的操作系统安装方式可能有些许不同
但都差不多也就那会事
1、安装node和npm
你可以到以下链接去下载 node 安装包
https://nodejs.org/zh-cn/download/
然后一顿安装
windows安装的时候记得勾选 Add to path (添加到环境变量)
如果你和小帅b一样用 ubuntu 这种类 Unix 系统的话输个命令就行
sudo apt-get update
sudo apt-get install nodejs
然后你输入命令 node -v
如果显示版本号就说明你成功安装 node 了
xiaoshuaib@xiaoshuaib:~$ node -v
v10.15.3
安装 node 过程中同时也安装了 npm 了
输入 npm -v 有显示版本好的话说明你安装好了 npm
xiaoshuaib@xiaoshuaib:~$ npm -v
6.4.1
2、安装JDK
你可以到以下链接去下载 jdk
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根据你的系统自行选择相应的 jdk
安装完成之后记得配置好 Java 环境变量
如何配置 jdk 环境变量就不在这里说了
因为不同的系统配置方式不同
你可以自行 Google
在你的终端输入 javac ,如果你得到如下的东西说明你成功安装好 jdk 和 配置好环境了
xiaoshuaib@xiaoshuaib:~$ javac
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath <path> Specify where to find user class files and annotation processors
-cp <path> Specify where to find user class files and annotation processors
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-endorseddirs <dirs> Override location of endorsed standards path
-proc:{none,only} Control whether annotation processing and/or compilation is done.
...
3、安装Android SDK
有些小伙伴可能之前没开发过 Android
不过没关系
Android SDK 是 Android 开发的工具包
下载方式和 JDK 类似
可以到以下链接去下载 sdk
https://developer.android.com/studio#downloads
如果你打不开这个链接的话
可以用镜像链接
http://www.android-studio.org/index.php/download/hisversion
下载完之后就一顿解压
解压完之后打开 sdkmanager
windows的话有界面
直接选择一个 Android 版本
然后你点击 install package 就可以了
或者你也可以像 Linux 一样
解压完之后
进入目录中的 /tools/bin
输入以下命令安装最新的工具
xiaoshuaib@xiaoshuaib:~/android/tools/bin$ ./sdkmanager "platform-tools" "platforms;android-28"
接着配置一下环境变量
ubuntu 的话可以这样配
打开 profile
sudo vim /etc/profile
添加你安装的sdk的目录
export ANDROID_HOME=/home/xiaoshuaib/android
export PATH=$PATH:${ANDROID_HOME}/tools
export PATH=$PATH:${ANDROID_HOME}/platform-tools
然后设置生效后重启一下
source /etc/profile
windows配置环境变量的话
也是这个道理
在你的电脑--属性--高级--环境变量
新建一个变量 ANDROID_HOME
值就是你刚刚解压下来的 Android 目录
然后在你的 path 中添加
${ANDROID_HOME}/tools;${ANDROID_HOME}/platform-tools
接着
在命令行输入 adb shell
如果你出现和小帅b以下这样的就说明你配置对了
xiaoshuaib@xiaoshuaib:~$ adb shell
* daemon not running; starting now at tcp:5037
* daemon started successfully
4、安装 android 虚拟机
其实你有真鸡的话不用安装也可以
安装虚拟机你可以到以下链接下载
https://www.genymotion.com/download
想当年小帅b在玩 Android 开发的时候就经常用 genymotion
速度相对来说快了不少
打开虚拟鸡或者用你的真鸡连接电脑(记得打开usb调试)
然后输入 adb devices
如果你像小帅b一样列出你现在的 Android 手机
xiaoshuaib@xiaoshuaib:~$ adb devices
List of devices attached
88CKBM622PAM device
那么就说明是正确的啦
5、安装 Appium
第一种安装方式
使用命令行用 npm 安装 Appium
npm install -g appium
ubuntu需要权限的话可以使用如下命令
sudo npm install -g appium --unsafe-perm=true --allow-root
第二种安装方式
你也可以到以下链接直接下载安装包
https://github.com/appium/appium-desktop/releases
安装完之后输入命令 appium
如果你和小帅b这样的就说明成功安装 Appium了
xiaoshuaib@xiaoshuaib:~$ appium
[Appium] Welcome to Appium v1.12.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
6、Appium-Python-Client
pip install Appium-Python-Client
OK
那么到现在我们就把该装的装完了
酸爽~
我们可以来安装以下 appium-doctor 来检测一下我们安装的环境是否都可以了
npm install -g appium-doctor
安装完之后输入 appium-doctor
如果你也出现这样的
congratulation
你已经搞定所需环境啦
事不宜迟
赶紧整个小例子试试水先
我们就让它自动打开手机的微信 APP 吧
确保手机连接到电脑
xiaoshuaib@xiaoshuaib:~$ adb devices
List of devices attached
88CKBM622PAM device
开启 Appium
xiaoshuaib@xiaoshuaib:~$ appium
[Appium] Welcome to Appium v1.12.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
写个python
# coding=utf-8
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': '88CKBM622PAM',
'platformVersion': '5.1',
'appPackage': 'com.tencent.mm',
'appActivity': 'com.tencent.mm.ui.LauncherUI'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
运行python之后
Appium 开始执行
看看你的手机
自动打开了!
cool~
ok
本篇主要让你知道怎么安装这些所需要的环境
可能你现在有点疑问
怎么知道微信的包名的
怎么知道微信的启动页面的
python代码如何写自动操作的
别急
你先把环境安装好
下一篇
小帅b将带你使用 Appium 来爬取 APP 上的数据
期待就好了
帅b老仙
法力无边
右下角点一下
给小帅b发点功
昨天小帅b看到一些事情不顺眼
有人偷换概念
忍不住就写了一篇反讽 996 的
没想到有些人看不懂
这就算了
还来骂我
早些时候关注我的小伙伴应该知道我第一时间就发过反对 996 的文章
哎~
不过也好
洗掉一些无脑假粉丝
“你个假粉丝,小帅b不是蔡徐坤”
好了
进入正题
上次
小帅b跟你说了如何安装 Appium 的相关环境
以及让它自动打开了手机上的微信App
python爬虫23 | 手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处
相信你已经跃跃欲试
想要来爬取一些手机上的 APP 数据了
那么这次
小帅b就带你爬取微信朋友圈的数据
接下来就是
友情提醒
本篇需要你先安装好 Appium 相关环境才可以哟,如果你还没安装的话快点出门左转,安装完之后再来这里玩耍。
ok
首先我们要知道微信这个 apk 的包名和启动页的 Activity
将你的 Android 鸡连接到电脑
在终端输入 adb devices 确保你已经将你的鸡连接到电脑
如果像上面这样出现设备名称就说明你连接上你的电脑了
如果你插进电脑之后还没发现有任何设备名称显示
那就记得打开 USB 调试,多拔插几次,总会连上的,这是过来人经验
接着
在你的手机里面打开微信
然后打开你的终端输入
adb shell
然后输入
dumpsys activity | grep mFocusedActivity
这时候我们就获取到微信的包名和启动页面的名称了
我们还要知道我们的手机是什么版本的
输入以下命令获取
adb shell getprop ro.build.version.release
那么现在我们就知道了这些必要的信息了
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '88CKBM622PAM'
desired_caps['appPackage'] = 'com.tencent.mm'
desired_caps['appActivity'] = '.ui.LauncherUI'
接下来
主要思路就是
自动开启微信
模拟登录微信
找到小帅b的朋友圈
把朋友圈的数据抓下来
想要模拟登录
我们就需要获取到微信的登录按钮这个元素
如何获取呢?
在你安装好的 sdkmanager 的 tool 目录下
有一个叫做 uiautomatorviewer 的工具
windows用户直接双击打开
ubuntu的话可以进入相应的目录
用命令 ./uiautomatorviewer 行打开
~/android/tools/bin$ ./uiautomatorviewer
打开之后是这个鸟样
我们点击菜单栏的第二个图标按钮
这时候你就会发现
手机的屏幕被抓过来了
用鼠标点一下登录按钮你会看到
相应的资源信息都被定位到了
那么要让它自动点击登录按钮就简单了
# 获取到登录按钮后点击
login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e4g")))
login_btn.click()
点击登录之后页面是这样的
我们要切换到用邮箱登录
还是老样子
我们获取到按钮,然后让它点击
# 获取使用微信号登录按钮
change_login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cou")))
change_login_btn.click()
那么接下来就输入账号密码了
恩
获取到账号和密码的 EditText 和 登录按钮
然后自动输入账号密码
最后点一下登录
# 获取输入账号元素并输入
account = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/cos"]/android.widget.EditText')))
account.send_keys("你的微信账号")
# 获取密码元素并输入
password = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/cot"]/android.widget.EditText')))
password.send_keys("你的微信密码")
# 登录
login = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cov")))
login.click()
登录之后会弹出一个界面
你愿意把你的通讯录授权给我吗?
呵呵
no!
# 点击去掉通讯录提示框
no_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/az9")))
no_btn.click()
这样
我们就成功登入微信了
接下来找到小帅b的微信
需要点击上方的搜索按钮
# 获取到搜索按钮后点击
search_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/iq")))
search_btn.click()
这时候会出现输入框
搜索小帅b本b
# 获取搜索框并输入
search_input = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mm:id/kh")))
search_input.send_keys("wistbean")
这时候会出现一个 item
没错
点击头像进去
# 点击头像进入
xiaoshuaib_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/py")))
xiaoshuaib_btn.click()
接下来几步都是一个道理
主要是进入小帅b的朋友圈
# 点击右上角...进入
menu_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/jy")))
menu_btn.click()
# 再点击头像
icon_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e0c")))
icon_btn.click()
# 点击朋友圈
moment_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/d86")))
moment_btn.click()
就这样点进去
进入朋友圈之后
我们来分析一下
可以看到小帅b的朋友圈是这样的
我们需要滑动获取到更多内容
可以使用 Appium 的 swipe 方法
再来
我们需要循环获取到数据
可以看到每条朋友圈都被封装到 ListView 这个容器里面
所以我们要从这里面获取所有数据
然后再进行遍历
那么每一个具体的条目呢?
可以看到
数据被放在了 LinearLayout 的具体容器里面了
所以我们可以根据 id 获取相应的内容
# 获取 FrameLayout
items = self.wait.until(EC.presence_of_all_elements_located((By.ID, 'com.tencent.mm:id/eew')))
# 滑动
self.driver.swipe(self.start_x, self.start_y, self.end_x, self.end_y, 2000)
#遍历获取
for item in items:
moment_text = item.find_element_by_id('com.tencent.mm:id/kt').text
day_text = item.find_element_by_id('com.tencent.mm:id/eke').text
month_text = item.find_element_by_id('com.tencent.mm:id/ekf').text
print('抓取到小帅b朋友圈数据: %s' % moment_text)
print('抓取到小帅b发布时间: %s月%s' % (month_text, day_text))
至此
我们的代码写完了
来运行一下吧
首先打开 Appium
[Appium] Welcome to Appium v1.12.1
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
接着运行爬取朋友圈的代码
截取部分结果
微信启动...
登录成功...
搜索小帅b...
进入朋友圈...
抓取到小帅b朋友圈数据: 那天马云说:我从来没碰过钱,我对钱没兴趣。
最近马云说:能 996 是一种福气,我每天都 1212。
果然,有钱爸爸说话就是好听。
抓取到小帅b发布时间: 4月月12
抓取到小帅b朋友圈数据: 有本事双击我头像
抓取到小帅b发布时间: 4月月10
抓取到小帅b朋友圈数据: 刚点了外卖,小哥有点超时才送到。我倒不觉得有什么,可是小哥将餐物双手递给我后接下来的动作让我惊讶到了:
他对我深深地鞠了一躬……😳
抓取到小帅b发布时间: 4月月01
抓取到小帅b朋友圈数据: 有人抱怨现在的互联网产品太霸道,微信不能打开淘宝链接,头条不能放微信二维码,百度搜不到知乎高质量问题……
但其实出门看一下,好像也没有哪家麦当劳可以直接开在肯德基里面卖全家桶的。
抓取到小帅b发布时间: 3月月29
抓取到小帅b朋友圈数据: 有人抱怨现在的互联网产品太霸道,微信不能打开淘宝链接,头条不能放微信二维码,百度搜不到知乎高质量问题……
但其实出门看一下,好像也没有哪家麦当劳可以直接开在肯德基里面卖全家桶的。
抓取到小帅b发布时间: 3月月28
抓取到小帅b朋友圈数据: 这两天听到最多的一句话就是:帅b老仙,法力无边。
整的我差点以为自己有法力了……
抓取到小帅b发布时间: 3月月25
抓取到小帅b朋友圈数据: 夸夸群,写几个微信机器人放群里,搞点夸奖人的语句数据库,根据用户的话检索一下,然后返回相应的夸奖语句。
嗯,然后把我自己放进群里,享受一顿夸,觉得不爽还可以继续改那些夸我的话。
抓取到小帅b发布时间: 3月月22
抓取到小帅b朋友圈数据: 突然发现我好久好久没有讲潮汕话了...
抓取到小帅b发布时间: 3月月20
抓取到小帅b朋友圈数据: 夸夸群,写几个微信机器人放群里,搞点夸奖人的语句数据库,根据用户的话检索一下,然后返回相应的夸奖语句。
嗯,然后把我自己放进群里,享受一顿夸,觉得不爽还可以继续改那些夸我的话。
抓取到小帅b发布时间: 3月月15
抓取到小帅b朋友圈数据: 根据监管部门规定以及相关投诉
这条朋友圈无法观看,但你可以点赞
抓取到小帅b发布时间: 3月月10
抓取到小帅b朋友圈数据: 之前想的是再好的产品也抵不过有强大 IP 支撑的破产品。
但现在想想,IP 也是产品的一部分。
抓取到小帅b发布时间: 3月月05
抓取到小帅b朋友圈数据: 之前想的是再好的产品也抵不过有强大 IP 支撑的破产品。
但现在想想,IP 也是产品的一部分。
抓取到小帅b发布时间: 3月月04
抓取到小帅b朋友圈数据: 9102了,还是有那么多 zf 的网站又丑又难用。
抓取到小帅b发布时间: 3月月01
...
ok
拿到数据还可以进一步存储
小帅b就不说了
因为从下一篇开始
小帅b会说说爬取下来的数据存储相关的
这一篇
主要让你知道如何爬取 app 的数据
如果你想去抓包爬取朋友圈的数据
是很难的
微信做了限制
所以用 Appium 相对来说就简单好多啦
本篇涉及到的源代码一样放在了公众号
在后台发送 「朋友圈」获取
下次见
peace
帅b老仙
法力无边
相关文章
2、手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处
右下角
发功+1
大家好
我是小帅b
是一个练习时长两年半的练习生
喜欢
唱!
跳!
rap!
篮球!
敲代码!
装逼!
不好意思
我又走错片场了
接下来的几篇文章
小帅b将告诉你
如何将你爬取到的数据保存下来
有文本文件、redis、数据库(MySQL、MangoDB)等的存储方式
今天先说说
CSV
什么是 CSV?
怎么玩?
牛逼么?
那么接下来就是
学习 Python 的正确姿势
CSV 是一个文本文件来的
有点像 excel
也就是它是以一定的表格的格式来展示数据的
我们通常会使用逗号(,)来对每一个单元数据进行分割
分隔符不止是逗号
也可以是制表符(tab)、冒号(:)、分号(;)
比如我们要来表示一个表格中的数据
就可以这样
第1列的名称,第2列的名称,第3列的名称
第1行第1格的数据,第1行第2格的数据,第1行第3格的数据
第2行第1格的数据,第2行第2格的数据,第2行第3格的数据
...
这就是 CSV 的格式
有啥好处呢
说 3 点足以
它支持存储比较大量的数据
我们可以非常方便地利用它进行数据的导入或者导出到电子表格或者数据库
所有支持文本文件的输入输出的编程语言(比如我们的 python),都可以直接操作使用 CSV 文件。
恩
了解什么是 CSV 之后
接下来小帅b会告诉你怎么使用 python 去存储数据到 CSV 文件中
代码走起
我们导入 CSV 这个库
通过 csv.DictWriter 获取 writer 对象
然后就可以写入了
具体看下代码
import csv
with open('xiaoshuaib.csv', mode='w') as csv_file:
fieldnames = ['你是谁', '你几岁', '你多高']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'你是谁': '小帅b', '你几岁': '18岁', '你多高': '18cm'})
writer.writerow({'你是谁': '小帅c', '你几岁': '19岁', '你多高': '17cm'})
writer.writerow({'你是谁': '小帅d', '你几岁': '20岁', '你多高': '16cm'})
我们这里以字典的方式写入数据到 xiaoshuaib.csv 这个文件中
运行之后
可以看到多了一个文件
打开看看
可以看到
我们的数据就被写进来了
说:是高还是长?
再给大家介绍一个库
pandas
它可以更加方便的操作 CSV 文件
我们先安装一下 pandas
pip install pandas
安装完之后
我们用 pandas 来读取一下我们刚存储的 xiaoshuaib.cvs 文件
import pandas
xiaoshuaib = pandas.read_csv('xiaoshuaib.csv')
print(xiaoshuaib)
打印结果是这样的
是不是又方便又好看呢
用 pandas 来存储 CSV 数据也是很简单的
一个方法就搞定
to_csv
import pandas as pd
b = ['小帅b', '小帅c', '小帅d']
c = ['18岁', '19岁', '20岁']
d = ['18cm', '17cm', '16cm']
df = pd.DataFrame({'你是谁' : b, '你几岁' : c, '你多高' : d})
df.to_csv("xsb.csv", index=False, sep=',')
运行一下
ok
以上就是对 CSV 的主要操作
当你把数据爬取下来的时候
可以使用这招试试把数据存储下来
好了
那么我们下篇再见
peace
猜你喜欢
python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。
python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别
点个在看啊~~(破音)
小帅b说过
在这几篇中会着重说说将爬取下来的数据进行存储
上次我们说了一种 csv 的存储方式
这次主要来说说怎么将爬取下来的数据保存到 MySQL 数据库
接下来就是
学习python的正确姿势
真香假设
本文假设你已经安装好MySQL
并且懂了一些 MySQL 的使用
例如简单“增删改查”的语句
如果你还没安装 MySQL
可以到以下链接去安装一下
https://www.mysql.com/downloads/
在你的 MySQL 中创建一个数据库吧
就叫...
AV-Idol
用 root 的身份进入你的 MySQL
sudo mysql -u root -p
输入 MySQL 的用户名密码之后
就可以开始操作 MySQL 啦
我们来创建一个数据库
如果 avIdol 这个数据库不存在于我们的 MySQL 里面
那就创建一个出来
mysql> create database if not exists avIdol;
Query OK, 1 row affected (0.01 sec)
这样
我们就创建出一个数据库了
接下来
我们就使用 python 来操作这个数据库吧
我们需要使用到 pymysql 这个库
专门用来操作 MySQL 的
可以用 pip 安装一下
pip install pymysql
接下来我们就连接到我们刚刚创建的数据库
然后在这个数据库里面创建一张 beautyGirls 表
专门用来存放漂亮美眉的信息
import pymysql
# 使用 connect 方法,传入数据库地址,账号密码,数据库名就可以得到你的数据库对象
db = pymysql.connect("你的数据库地址", "数据库账号",
"数据库密码", "avIdol")
# 接着我们获取 cursor 来操作我们的 avIdol 这个数据库
cursor = db.cursor()
# 比如我们来创建一张数据表
sql = """create table beautyGirls (
name char(20) not null,
age int)"""
cursor.execute(sql)
# 最后我们关闭这个数据库的连接
db.close()
运行一下
没报什么错就说明我们成功创建数据表了
我们回到数据库看下是否创建成功
通过 show tables
可以看到我们数据库成功创建了 beautyGirls 这张婊,哦不,表
通过 show full columns from beautyGirls;
可以看到我们在这张表中创建了 name 和 age 这两个字段
有了数据库和数据表了
那么接下来我们就往数据库插入数据看看
import pymysql
# 使用 connect 方法,传入数据库地址,账号密码,数据库名就可以得到你的数据库对象
db = pymysql.connect("localhost", "root", "root", "avIdol")
# 接着我们获取 cursor 来操作我们的 avIdol 这个数据库
cursor = db.cursor()
# 插入一条记录
sql = "insert into beautyGirls(name, age) values ('Mrs.cang', 18)"
try:
cursor.execute(sql)
db.commit()
except:
# 回滚
db.rollback()
# 最后我们关闭这个数据库的连接
db.close()
再来数据库查询一下这张表
可以看到
苍老师的数据就被我们插进来了
当你使用 pymysql 对数据进行更新的时候
记得调用
db.commit()
这样才会执行到哦
知道如何创建数据表、插入数据
那么对于更新数据以及删除数据
也是同样的道理
只是 sql 语句不同而已
比如删除 18 岁的苍老师
sql = "delete from beautyGirls where age = '%d'" % (18)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
可能你在操作数据库的时候
做一些数据的更新或者添加
有些数据在添加过程可能出现异常
为了让我们的数据能够完全的添加
可以使用
db.rollback()
回滚操作
这样才能让我们的事务具有一致性
当然
我们也可以将 csv 中的内容插入到 MySQL 中
就拿上次我们生成的 xsb.csv 文件来说
我们把这里面的内容插到 xsb 数据库吧
还是一样,我们来创建一个叫做 xsb 的数据库
并且把字符集设置为 UFT-8 ,防止中文乱码
CREATE DATABASE xsb CHARACTER SET utf8 COLLATE utf8_general_ci;
接着创张帅b表
mysql> CREATE TABLE xsb (name char(20), age char(20), length char(20));
Query OK, 0 rows affected (0.34 sec)
回到代码来
这次我们安装一下 mysql 的 python 客户端
pip install mysqlclient
使用 sqlalchemy 来连接我们的数据库
然后就可以使用代码将 csv 文件的内容插到 xsb 这张表了
import pandas as pd
from sqlalchemy import create_engine
df = pd.read_csv('xsb.csv')
# 当engine连接的时候我们就插入数据
engine = create_engine('mysql://root@localhost/xsb?charset=utf8')
with engine.connect() as conn, conn.begin():
df.to_sql('xsb', conn, if_exists='replace')
运行一下
然后打开我们刚刚创建的 xsb 数据库查询一下
可以看到
我们就将 csv 中的内容插入到数据库啦
ok
以上就是使用 python 操作数据库的具体操作
以后小帅b在爬虫项目例子中还会提及 MySQL
那么
我们下回见
peace
上次
我们知道了怎么操作 MySQL 数据库
python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库。
MySQL 有些年头了
开源又成熟又牛逼
所以现在很多企业都在使用 MySQL
MySQL 是关系型数据库
其实当前主流的数据库
例如
Oracle、DB2、PostgreSQL、Microsoft SQL Server 等等
都是关系型数据库
这样的话
它们可以在数据表之间建立索引、约束
进行关联
让表与表之间产生联系
可以让数据重复利用,不会浪费
相对应的就是
非关系型数据库
NoSQL
它不用传统的 SQL 语句进行操作
而是有自己的独特的数据存储方式
可以说相当方便
NOSQL 的经典代表数据库就是我们今天要说的
MongoDB
由 C++ 写的 文档存储 形式的非关系数据库
如果你对 JSON 有所了解
那么 MongoDB 对你来说so easy
由于它是基于内存对数据进行处理的
所以读写速度相对更高一些
好了
吹了一波 MongoDB 的牛逼之后
接下来小帅b就来跟你说说
怎么玩 MongoDB
接下来就是
我们先来看看这样的数据
name | quantity | size | status | tags | rating |
---|---|---|---|---|---|
journal | 25 | 14x21,cm | A | brown, lined | 9 |
notebook | 50 | 8.5x11,in | A | college-ruled,perforated | 8 |
paper | 100 | 8.5x11,in | D | watercolor | 10 |
planner | 75 | 22.85x30,cm | D | 2019 | 10 |
postcard | 45 | 10x,cm | D | double-sided,white | 2 |
(来自 mongodb 官方例子)
有些字段里面包含多个信息
如果按传统的 SQL 的话
查询起来比较麻烦
而且需要创建多张表进行关联
而用文档格式存储的话就可以使用这样的格式表示
{
"name": "notebook",
"qty": 50,
"rating": [ { "score": 8 }, { "score": 9 } ],
"size": { "height": 11, "width": 8.5, "unit": "in" },
"status": "A",
"tags": [ "college-ruled", "perforated"]
}
是不是很简单咧
那么接下来小帅b就带你使用 python 来操作 MangoDB 吧
真香假设
本文假设你的操作系统已经安装好 MangoDB 了
如果你还没安装的话
可以到以下链接进行下载安装
https://docs.mongodb.com/manual/installation/?jmp=footer&_ga=2.246611149.899311115.1556631996-38380112.1556631995
当你安装完之后
启动 mongodb
然后输入 mongo 就可以操作 MongoDB 了
好了好了
我们使用 python 代码来操作一下吧
这次我们需要一个库
Pymongo
from pymongo import MongoClient
连接到你的 MongoDB
conn = MongoClient('mongodb://localhost:27017/')
27017 是你的 MongoDB 的默认端口
创建一个 avIdol 数据库,如果 mongodb 没有会自行创建
db = conn.avIdol
往数据库插入一条数据
db.col.insert({"name": '波多野結衣', 'bwh': '{ "b": 90, "w": 59, "h": 85}' , 'age': 30})
运行一下
没报什么错
接着我们使用
print(db.col.find_one())
来查询一下是否插入数据了
可以看到
数据插入成功
来个批量插入吧
db.col.insert([
{"name": '波多野結衣', 'bwh': '{ "b": 90, "w": 59, "h": 85}' , 'age': 30},
{"name": '吉泽明步', 'bwh': '{ "b": 86, "w": 58, "h": 86}' , 'age': 35},
{"name": '桃乃木香奈', 'bwh': '{ "b": 80, "w": 54, "h": 80}' , 'age': 22},
{"name": '西宫梦', 'bwh': '{ "b": 85, "w": 56, "h": 86}' , 'age': 22},
{"name": '松下纱荣子', 'bwh': '{ "b": 88, "w": 57, "h": 86}' , 'age': 28}
])
这次我们使用 for 循环查询一下数据库
for item in db.col.find():
print(item)
可以看到
数据被我们存储下来了
当然
你也可以通过条件查询
例如根据 id 查询
删除 波多野结衣
db.col.remove({"name": "波多野結衣"})
删除全部
db.col.remove()
把 吉泽明步 换成 苍井空
db.col.update({'name': '吉泽明步'}, {'$set': {'name': '苍井空'}})
ok
以上就是 python 对 MongoDB 的操作
更多关于 MongoDB 的介绍可以到官方看看
https://docs.mongodb.com/
以后
小帅b带你玩爬虫项目实战的时候
还会提及 MongoDB 的
期待就好
那么
我们下回见了
peace
记得素质三连!!!!!!!!!!!!!!!!
我不知道我骨子里是不是天生就存在一些 “隐性叛逆” 的基因,这种叛逆好似不太能让人轻易知道,因为一般人觉得叛逆就是顶撞父母,离家出走,甚至做一些令人非常恼火的事情。但是我自己的叛逆属于隐性的,隐性叛逆是需要被时间证明的,它不一定是错的。
不太了解我的人,不太容易看得出我的叛逆,更多的是自己在思考自己走过来的路时,觉得自己和大多数人想的不太一样,做的不太一样,也常常导致自己觉得是不是自己错了,又有时候觉得好像是对的,但是不被理解。每当这种情况发生的时候,我就有些许无奈,为什么?我要跟他们活得一样才能是 “对的” 呢?虽然这个问题现在还在困扰着我,但是我已经比以前更从容一些了。
我时常也听到别人说想活的不一样,活出一个不一样的自己,但很奇怪的是,每当身边有不一样的人出现的时候,往往我们会不爽这个人,会去指责他,这个人怎么这样?这个人是不是有病?
这就很矛盾了,自己希望自己不一样,但是有不一样的人出现的时候,就会被当成一个事件来看待,而且往往会被贴上负面的标签。
后来我想到了一个词叫做 “接受” ,我发现很多人和我一样,很难去接受别人比我们好,很难接受别人不一样,也很难接受自己的缺点,很多时候我们无法轻易接受自己的缺点,然后把它隐藏起来,从而轻松逃避。这时候看到别人敢于去做那些我们逃避的事情的时候,我们为了不让自己的缺点显露出来,只能想办法把别人拉下水:
你这么有文化的人怎么能去捡垃圾呢?
你长得这么好看,你还那么努力干啥呢?
就你独特,看看你会有什么好下场。
等等…
每当这个时候,“隐性叛逆” 会很难被理解,更别说被支持了,因为在这个过程中还没被时间证明你是对的, 这个阶段有点尴尬,你没时间停下来跟他们解释,即便解释也是徒劳,也是浪费时间。这本身就存在认知差异,那怎么办呢?
默默承受以及等时间来证明。
很多事情回过头去看,根本不是事,可是事情发生在当下是无法轻松释怀的,“外柔内刚” 就变得很重要,不断的锤炼自己的内在,让它变得越来越刚强,防御别人的乱入,而外柔,就是微笑面对:“你说的对,我是不应该那样的” ,而我的内心恰恰相反,你怎么能让我和你一样呢?
这,也许是我们的 “隐性叛逆” 最好的应对方式吧。
]]>通过这段时间
小帅b教你从抓包开始
到数据爬取
到数据解析
再到数据存储
相信你已经能抓取大部分你想爬取的网站数据了
恭喜恭喜
但是
数据抓取下来
要好好分析一波
最好的方式就是把数据进行可视化
这样才能直观的感受到数据的魅力
不过有一点
现在市面上可以使用 python 的可视化库多如牛毛
各有各的优点
接下来小帅b把自己常用的一些可视化数据库分享给你
好不?
那么
接下来就是
先来说说一个经典的可视化库
matplotlib
它是基于 NumPy 的一个数据可视化工具,内置了非常多图给我们使用
接下来我们就来玩玩吧
首先你得去下载一下这个库
python -m pip install -U pip setuptools
python -m pip install matplotlib
下载完之后
就可以来玩代码啦
画画sin和cos线
import numpy as np
import .pyplot as plt
x = np.linspace(-np.pi, np.pi, 256)
cos = np.cos(x)
sin = np.sin(x)
plt.plot(x, cos, '--', linewidth=2)
plt.plot(x, sin)
plt.show()
画个饼图
# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
画画直方图
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mu = 200
sigma = 25
x = np.random.normal(mu, sigma, size=100)
fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(8, 4))
ax0.hist(x, 20, normed=1, histtype='stepfilled', facecolor='g', alpha=0.75)
ax0.set_title('stepfilled')
# Create a histogram by providing the bin edges (unequally spaced).
bins = [100, 150, 180, 195, 205, 220, 250, 300]
ax1.hist(x, bins, normed=1, histtype='bar', rwidth=0.8)
ax1.set_title('unequal bins')
fig.tight_layout()
plt.show()
更多关于 matplotlib 的文档可以到以下链接查看
https://matplotlib.org/2.0.2/contents.html
seaborn 是基于 matplotlib 的库,所以有更加高级的接口给我们使用,相对来说更加简单使用一些
画个散点图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")
tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", data=tips);
plt.show()
画个折线图
fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", y="signal", hue="event", kind="line", data=fmri);
plt.show()
画个直方图
titanic = sns.load_dataset("titanic")
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic);
plt.show()
更多关于 seaborn 的可以看看以下链接
https://seaborn.pydata.org/index.html
这是基于百度开源的数据可视化的 echarts 的库
echarts 遇上了 python 之后
就像巧克力遇上了音乐
丝滑~
特别是当 pyechart 结合 Notebook 的时候
简直不能在丝滑了
来画个直方图
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
)
bar.render()
画个饼图
def pie_base() -> Pie:
c = (
Pie()
.add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c
# 需要安装 snapshot_selenium
make_snapshot(driver, pie_base().render(), "pie.png")
再来画个词云图
words = [
("Sam S Club", 10000),
("Macys", 6181),
("Amy Schumer", 4386),
("Jurassic World", 4055),
("Charter Communications", 2467),
("Chick Fil A", 2244),
("Planet Fitness", 1868),
("Pitch Perfect", 1484),
("Express", 1112),
("Home", 865),
("Johnny Depp", 847),
("Lena Dunham", 582),
("Lewis Hamilton", 555),
("KXAN", 550),
("Mary Ellen Mark", 462),
("Farrah Abraham", 366),
("Rita Ora", 360),
("Serena Williams", 282),
("NCAA baseball tournament", 273),
("Point Break", 265),
]
def wordcloud_base() -> WordCloud:
c = (
WordCloud()
.add("", words, word_size_range=[20, 100])
.set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-基本示例"))
)
return c
# 需要安装 snapshot_selenium
make_snapshot(driver, wordcloud_base().render(), "WordCloud.png")
是不是很丝滑
更多关于 pyecharts 的可以到以下链接看看
https://pyecharts.org
好了
以上就是小帅b常用到的几个可视化数据库
当然
还有很多可视化数据库
不过这几个算是很友好的了
希望对你有用
那么
我们下回见
peace
是时候给你说说
爬虫框架了
使用框架来爬取数据
会节省我们更多时间
很快就能抓取到我们想要抓取的内容
框架集合了许多操作
比如请求,数据解析,存储等等
都可以由框架完成
有些小伙伴就要问了
你他妈的
为什么不早点说呢?
是这样的
当你不知道 1+1 是什么的时候
你去使用计算器来计算
也是没用的
对吧
所以框架的使用
在现在这个时候(爬虫28篇之后)讲
就是一个不错的时机
今天
小帅b就跟你说说
scrapy这个框架
到底有多牛b
那么
接下来就是
要使用 scrapy
首先当然你得需要有啊
你可以使用 conda 安装
conda install -c conda-forge scrapy
你也可以使用 PyPI 安装
pip install Scrapy
scrapy依赖一些相关的库
lxml
parsel
w3lib
twisted
cryptography and pyOpenSSL
如果你在使用 scrapy 的时候发现相关库缺失
把裤子穿上就是了
哦不是
把你缺失的库安装上就完事了
好了
现在假设你已经安装好了 scrapy 这个框架
那么接下来
小帅b会带你使用它来爬取一下 糗事百科 的段子
主要让你知道 scrapy 的使用以及体验它的牛逼之处
废话不多说
在你想要存放的爬虫文件目录下
使用命令来创建一个 scrapy 爬虫项目
比如在这里
我们要创建一个 qiushibaike 的爬虫项目
就可以这样
scrapy startproject qiushibaike
这时候你就会发现
scrapy帮你自动生成了项目文件
在这里面有一些配置文件和预定义的设置文件
而我们的爬虫代码
可以在 spiders 目录下创建
在这里我们就创建一个 qiushibaike_spider 吧
要使用 scrapy 爬虫
我们就需要继承 scrapy.Spider 这个类
这样我们才能使用它定义的一些方法
class QiushiSpider(scrapy.Spider):
接着我们要定义一个爬虫的名称
这里定义一个唯一的名称
用来标识糗事的爬虫
在项目中不能和别的爬虫名称一样
等会会用到这个名称
name = "qiushibaike"
接着我们就可以来定义我们的请求了
比如我们要爬糗事百科的段子的第一和第二页
所以我们可以这样定义请求链接
def start_requests(self):
urls = [
'https://www.qiushibaike.com/text/page/1/',
'https://www.qiushibaike.com/text/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
我们在这个方法 start_requests 需要返回一个 yield 生成的迭代
而其中的参数 callback=self.parse 就是要让它去回调我们的数据解析方法
回调方法是这样的
def parse(self, response):
page = response.url.split("/")[-2]
filename = 'qiushi-%s.html' % page
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
主要是把我们抓取下来的 html 存入到本地文件
我们来使用 scrapy 运行一下这个爬虫
使用如下命令即可
cd qiushibaike/
scrapy crawl qiushibaike
scrapy crawl qiushibaike 中的 qiushibaike 就是我们刚刚定义的名称
不过这个时候运行后你会发现报错了
这是因为你懂得
糗事做了反爬
我们定义一个 header 吧
haders = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36'
}
def start_requests(self):
urls = [
'https://www.qiushibaike.com/text/page/12/',
'https://www.qiushibaike.com/text/page/2/',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse, headers=self.haders)
再次运行命令
scrapy crawl qiushibaike
这次可以发现
源代码被我们爬取下来了
是不是很方便咧
接下来我们再来解析关键数据
比如我们只需要段子的作者和段子的内容
scrapy 也内置了 css、xpath 选择器的解析了
而且
scrapy 还内置了很多好用的命令
我们可以使用 scrapy shell 来请求我们的网页
scrapy shell /home/wistbean/PycharmProjects/spider/qiushibaike/qiushi-1.html
shell 后面可以是你爬下来的 HTML 文件
也可以是你一个链接
进去之后是这样的
我们可以在这里面做一些命令操作了
比如我们在这里坐一下解析操作
打开我们刚刚要爬的糗事百科的链接
可以看到
每个段子都被包含在一个 id 为 content-left 的 div 里面
我们使用如下命令获取
'//*[@id="content-left"]') > content_left_div = response.xpath(
接着我们获取它下面的所有 div
'./div') > content_list_div = content_left_div.xpath(
我们试着获取这个页面的所有作者名称和内容
作者名称位于 a 标签下的 h2
内容位于div下的span
我们还是一样
通过 xpath 获取
我们先来获取一个条目看看
content_div = content_list_div[0]
获取作者名称
'./div/a[2]/h2/text()').get() > author = content_div.xpath(
> print(author)
街角*
获取段子内容
'./a/div/span/text()').getall() > content = content_div.xpath(
> print(content)
['\n\n\n刚上小学一年级时,一次肚子有点不舒服拉肚子,跑到厕所后运动裤上面的绳子竟然打了死结,在厕所里面如无头苍蝇一样乱转。', '这时看到老师在旁边上蹲坑,也不顾难为情了'此时老师蹲在蹲坑躲闪不及,浑身上下星星点点,屎喷了满脸如同长满麻子般!', '又是开心的一天,没有拉裤子!\n\n']
>>>
这样
我们就通过命令行的方式可以知道如何获取我们想要的数据了
回到代码来
我们把 parse 方法改成这样
def parse(self, response):
content_left_div = response.xpath('//*[@id="content-left"]')
content_list_div = content_left_div.xpath('./div')
for content_div in content_list_div:
yield {
'author': content_div.xpath('./div/a[2]/h2/text()').get(),
'content': content_div.xpath('./a/div/span/text()').getall(),
}
然后再使用命令行运行
scrapy crawl qiushibaike
可以看到我们要的信息被打印出来了
那么
要将爬下来的数据存储为 json 文件怎么办呢
一个命令就搞定了
scrapy crawl qiushibaike -o qiushibaike.json
运行之后你会看到你的项目下多了一个 json 文件
不过中文乱码了
在 settings.py 中加一句
FEED_EXPORT_ENCODING = 'utf-8'
我们在运行一下
中文回来了
什么?
你想实现翻页抓取所有内容?
还想保存到数据库里?
好吧
篇幅有限
今天就到这里
且听帅b下回讲解
peace
我平常大多时候都会叫外卖,自己做饭的次数不是很多,很多时候都是心血来潮才会去菜市场买菜来烧,每每我都会花不少时间在做饭这件事情上,从学到买到洗到切再到烧,对于我这种厨房经验不是很多的人来说,每烧一顿饭菜都需要 1 个小时以上。当然,这其中的过程还是挺有乐趣的,特别是尝到自己做的饭还挺香挺可口的时候。
现在的移动互联网着实太方便,通过一个 WiFi,一部手机,一个外卖软件,一种移动支付,我就能购买到别人的时间。买别人做饭的时间,买别人送餐的时间。如果这个过程不会涉及到用餐的卫生情况和对身体的健康影响,我想我每餐都会乐此不疲地点外卖。要知道,我居然花点钱就能买到别人的时间,这世界上没有比这个更便宜的了。
以前不懂,觉得怎么点一份外卖要比我自己买菜做饭要贵那么多?但现在想多几次这其中的道理也就明白了,我买的不止是一份餐,还有别人的时间。从小别人就告诉我:“ 一寸观音一寸金,寸金难买寸光阴。” 但我现在发现,我 “寸金” 确实能买到别人的一点 “光阴” ,而且在这个时代,不仅仅是外卖,很多的书籍,专栏等有价值的知识产品,也是同样的道理,所以下次再购买 “光阴” 的时候我也就没像以前那样犹犹豫豫的了。我个人认为,那些 “寸金就能买寸光阴” 的产品,就是这个世界上最划算最便宜的东西,特别是对能力强的人来说,没有之一。
说到外卖这件事,我遇到过 3 个令我影响深刻的外卖小哥,虽然我已经忘记他们长什么样,也仅仅是一面之交,但他们却让我懂了些许道理,而且能够运用在我往后的人生中,他们不是什么教授,不是什么人生赢家,也不是别人认为的成功人士,但他们却一不小心成为了我的老师,而且好笑的是,他们全然不知。
接下来就说说外卖小哥教给我的人生道理,按时间顺序,暂且分别叫他们小哥A、小哥B、小哥C吧。
那天是周末,阳光明媚,我睡到了中午快 1 点才起床,肚子饿得慌,于是打开手机点了份外卖——一碗粥和一盒肠粉。我想粥和肠粉应该能很快就做好,而且店家离我的距离也不远,我去洗漱然后上个厕所应该就能吃上了。
可是过去了快一个钟,餐还没到,我开始有点不爽了,肚子越来越饿,仅有的一点存货也排在厕所被冲走了。你知道的,人在饿的情况下,是比较容易发脾气的,于是我在外卖软件上催了好几次单,还想着给小哥A打电话叼他一顿,不过没人接…当时我心想:我操啊,这尼玛是什么态度?
过了没多久小哥打电话叫我下去,我本来打算下去跟他理论的,不过见到他的时候我愣了一下,小哥的眼神像极了我以前考试不及格见家长的样子,看到他手上刮伤的血痕在创可贴下还隐隐若现,我的餐也惨不忍睹,筷子都插进装餐盒里了,小哥跟我说他刚才给我送餐的时候摔了,语气有点弱,我也不知道怎么的,瞬间脑海中浮现出小哥摔倒的画面,感觉有点惨,于是接过小哥的餐说了句:“没事,你也不是故意的”。
没想到小哥此时有点惊讶,急忙跟我说了好几句对不起,还从他口袋里面拿出一张 20 元人民币,说是要补偿我。我说不用了,没事。可小哥硬是要把钱塞给我,不过最后我还是没要,在我往家里走的时候,巷子里还回荡着小哥的 “对不起” 。
回到家后我想了一下,如果我刚刚骂了他一顿,然后把 20 块钱拿了直接走人,小哥应该会一整天都心情不好,说不定还会再摔一次。而且小哥没找什么借口,直接跟我认错了,我也不知道是不是我在外卖软件上催单的时候,他太着急然后摔了…
我认为我做对了,我没有批评小哥。
小哥B上次在给我送餐的时候,不认识路,打电话问我怎么走,但是我发现小哥B说话的语气有点冲,不知道他是失恋了还是干嘛。在电话中我越听越不爽,就忍不住说了句:“你他妈的什么态度”。
结果小哥B怒了,“你才他妈的…” , 跟我吵起来了。挂完电话后我觉得不可思议,这小哥不怕我差评的么?
后来小哥找对了路,把餐送给了我,说了句 “刚不好意思” 扭头就走。那段时间正是 “滴滴司机奸杀了女大学生事件” 闹得沸沸扬扬,我想想有点后怕,如果小哥B往我的餐里下毒我是不是就挂了?
也许小哥B刚好压力大,或者说话就这样?
我认为我做错了,我批评小哥。
也就前几天吧,我点了外卖之后就去看剧了,也没太在意送餐的时间,小哥送到了敲我门,我开了门,小哥C双手将餐递给我,然后接下来的动作让我一惊,他给做了个差不多 90 度的鞠躬,然后说了句:“不好意思,让你久等了”。
后来我看了下,原来小哥送餐超时了,不过我给了一个大大的好评。就是因为他的动作,让我感到我 “具重要性” 。
他把态度拿出来,即便犯了一点小错,但是让我感到我的重要性,那点小错又算的了什么呢?
其实现在想想,最了解你的陌生人应该就是快递或者外卖小哥了,他们知道你住在哪里,知道你喜欢什么,知道你的手机号码。是不是有点可怕?所以能不得罪就不要得罪他们吧。
批评一个人很简单,但是没啥好处,设身处地的想想,倘若我被批评了,我会逆反,我会找借口。而且有些事情已经不得已的发生了,批评只会给你我双方带来更多的负面情绪。
让他人感受到尊敬,也许你的要求会更加容易被满足,合作会更加顺利。
这,就是我从 3 位外卖小哥身上学到的人生道理。
]]>最近,我发现了一个问题,就是我之前在跟朋友聊天时,时不时会轻易的说出一两句负能量的话,比如:“哎,累”,“如果…就…”,“妈的,怎么…”。
发现了这种不假思索地说出这样的话后,我瞬间感到可怕:我,怎么会是这样子的?
后来我又思考了一下,我身边的挺多人,都有类似的举动,在谈话之间,都有一方会先有意无意的抱怨起哪里哪里不爽。有时候,我会安慰两句,有时候,会跟着一起抱怨。
这种理所应当的感觉…太可怕了!
有些人可能会觉得这没什么,把自己的不爽,跟朋友倾诉一下,这不是很正常吗?要不然朋友拿来干嘛的?
我想先说说在我的认知里,会让自己感到不爽有这么几种情况:
1、被人欺骗了,我很不爽。
2、日常陪伴的「人事物」突然坏了(或是不见了,对其失望了),我很不爽。
3、待办的事情拖了很久了还没搞定,我很不爽。
4、成为不了自己想成为的人,我很不爽。
5、自己想学的总是学不会,我很不爽。
6、生活好累,我很不爽。
以上是我暂时能想到的一些会让人感到不爽的事情,再仔细看一下,没有一样是可以通过跟朋友抱怨就可以解决的。是的,没有一样!
而且每一件让你感到不爽的事情,当你把它拿去跟朋友抱怨的时候,你会不自觉的把事情夸大化,原本没那么惨,被你一说,很惨,再说,更惨,最后,你真的信了你就是惨得不能再惨了!
这还没完,你和你朋友的时间就这样被白白浪费掉了,你的朋友被你搞得也心情不好了,这是一件多么不划算的事情啊。
说来也巧了,我发现在跟一些层次高一点的朋友聊天的时候,没有一个会轻易的说出一些负能量的话的,就拿我之前的一个老板来说,我在跟他聊天的时候,他从来都是充满希望,谈笑之间总能让人感到格外的轻松。好像他一路走来都特别顺,没有一点坎坷似的。
但想想啊,哪有人,不会遇到点破事,只不过他们不把时间花费在跟朋友的抱怨上,而是自己默默舔着伤口,把那些让自己不爽的事情,一件一件给解决了。而每一次的解决,又让自己成长了。他们很清楚的知道,跟朋友说负能量的话一点 p 用没有,而且是一种傻逼的行为。
再回到刚刚那个问题,我只想说,如果你觉得你的朋友是拿来给你抱怨的,那么你不配当他的朋友。
请别再在朋友面前说散发负能量了,以前我不自知,现在感到可怕,希望你也和我一样,能够明白,把时间花在自我提升上才是硬道理。
]]>每次在 push 代码的时候 Git 都会提示输入用户名和密码才能 push:
在你的用户目录下输入如下命令
1 | git config --global credential.helper store |
比如我的目录是 /home/wistbean/ ,在终端中输入:
1 | wistbean@wistbean:~$ git config --global credential.helper store |
下一次 push 的时候需要输入一次用户名密码用于记录,以后就再也不需要输入用户名密码了。
]]>996说的是早上 9 点上班,晚上 9 点下班,一周工作 6 天。显然这是违反了劳动法的,不过在很长一段时间,大多互联网行业的人们都觉得这样的加班方式是不成文的规定,也就没有很多的怨声载道。
后来慢慢的有些有名的企业把这种 996 制度直接拿上台面说,把它变成一种强制性的规定。以前如果晚上有点事,先走一步无可厚非吧,但是被强制之后就不一样了,你得请假或者旷工。
有些企业 996 还好,有给相应的补贴,但是有些企业纯粹为了跟风,别人都 996 了,我们如果不 996 说不过去,就算你没事也在公司里待着,装装样子也好。补贴嘛,别想了。
当然了,这些是我看到的一些现象,可能也有很多福利好并且是 965 工作制的公司,只是我还没看到。不过,当有一群程序员在 GitHub 声讨 996 时,当这个反 996 的项目被传播得这么广的时候,说明肯定是存在问题的。
有这么多人反对 996,我个人认为原因有这么几点:
1、 强制性
2、 加班补贴不到位
3、 个人压力
4、 就是看不惯
大多数人都是向往自由的,其实去上班无非就是能让自己往后有更多的自由,我现在是售卖我的时间和能力来跟企业交换我要的资源,如果对等,那没问题,但是你强制着别人说: “ 你就是要出售这么多时间,我能给你的,还是那样。你可以接受就继续干,不接受就走人。” 这样的方式,换做是你,能接受吗?
对于我这种单身狗来说还好,但是对于那些有家庭,身上背着什么什么贷款的人来说,他们是不得不忍着 996,刚好这时候在 GitHub 上出现了这么一个反 996 的项目,偷偷点个 star 不过分吧?
站在老板的角度,当然是希望你 996 ,我花钱买你的时间,当然是希望你付出的越多越好,这就是为什么老板会时不时跟我们大谈梦想,打鸡血。
对于老板来说, 996 都是少的了,到初创公司看一下,很多老板的工作时长可能每天 12 小时以上。你看他都没抱怨,身为员工的你抱怨什么,你以为你很牛逼?
这就是立场不同了,比如我,好长一段时间了,我几乎没有假期的,我基本除了吃饭睡觉洗澡,大多数时间都是在工作,我根本不知道我一天工作了多少个小时,反正只要坐在电脑前就是在工作。但是我反对 996 。因为我拿出的更多工作时间是为我自己工作。不是为了老板工作。
除非待的这家公司你可以看成是你自己的,你可以为之拼而拿到相应的回报,否则强制 996 就是不行。这点态度必须拿出来,这点权益必须争取。这不关乎牛逼不牛逼,也不关乎努力不努力。
再说了,老子努不努力,牛不牛逼用你这个 996 来衡量?
]]>在首页的商品列表中,我们可以将商品 id 绑定到 a 标签中:
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
之前我们使用的前端页面只有一个首页,我又懒得去写一个完整的前端静态页面,所以在 GitHub 上面找了一个仿天猫首页的页面来讲解。
但是那个首页还不是很好,代码有点冗长,而且只有一个页面,没有商品详情页等。
所以我重新在 GitHub 上面 clone 了一个仿天猫的静态页面。 Tmall-pages 除了有首页之外,还有详情页,购物车页面等。
1、首先将我们之前在 portal 下的静态资源删除:
rm -rf css/
rm -rf js/
rm -rf ftl/*.ftl
2、复制我们 clone 下来的静态资源到项目中
1 | ├── css |
为了让图片更加容易访问到,直接把 images 放到 webapp 目录下。
3、 添加商品分类数据
我们使用 Product.ftl 这个页面,将 rest 传来的数据用 Freemark 展示。
1 | <!----banner区--------------------------------------------> |
4、 商品展示
1 | <div class="Products_show"> |
效果如下
digitalocean 是性价比比较高的境外服务器提供商,使用 digitalocean 的好处就是不用备案,而且可以搭建自己的vpn。
相对与vultr和搬瓦工,digitalocean使用的人少一些,因此在这里使用digitalocean会更加稳定一些。
digitalocean支持主流的 Linux 系统,最低 5美元/月 就可以享受到 1000G 的流量,根本用不完,性价比高。
digitalocean 对新用户的优惠力度非常大,直接赠送 100 美元,点击digitalocean官方优惠赠送100美金 进行注册购买。
注册好 digitalocean 之后,点击右上角的 create 按钮,再点击 Droplets 就可以进入选择服务器的页面了。
接着就可以选择操作系统了,一般选择 centos:
如果是自己使用的话,选择最便宜的就好了, 5美元一个月,1000G流量:
在这里可以选择是否定期每个星期帮你的云服务器进行备份,不过要加 1 美元,这个取决于你自己:
我用的是新加坡,感觉速度还可以的:
其他默认选择就可以了,直接拉倒下面点击 create ,进行创建:
稍等片刻就创建完了,可以看到 digitalocean 给你分配了 IP 地址和一些相关信息,点击 access 进入就可以操作你的云服务器了:
digitalocean 性价比高, $5/月,月流量 1TB 根本用不完啊,速度也挺快的。支持 Linux 常见操作系统,现在优惠,新用户注册使用居然送 100 美金,爽歪歪~
最近迁移了一下 Mysql , 在新的环境下使用连接池连接 Mysql 时候出现如下错误:
java-sql-sqlexception-access-denied-for-user-rootlocalhost-using-password
sudo mysql -u root -p
FLUSH PRIVILEGES
mysql> FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON . TO ‘这里写你连接的用户‘@’这里写你的mysql地址’ IDENTIFIED BY ‘这里写你的mysql用户密码’ WITH GRANT OPTION;
一开始搬瓦工的服务器价格很亲民,19.9美元就可以使用一年,之前我一直在使用,但是最近很长一段时间都没有了,上次问了下客服,表示不会再有 19.9 美元的服务器了。
搬瓦工官网:https://bandwagonhost.com/ ,这个地址需要挂代理才能访问
不挂代理可以使用这个链接访问:https://bwh88.com
vultr目前来说性价比还是很高的,可以使用 vultr 来搭建自己的 vpn,vultr还可以支持一建建站等操作,具体可以到vultr官网查看。
1 | public class Res_Product { |
1 |
|
1 |
|
1 | <#list products as product> |
我记得大学的时候,有一节课,具体讲什么忘记了,但是在课后老师要求所有同学要写一个职业规划,好像不写要扣分啥的。当时我的内心真的是 Fuck 他妈的,我连接下来找啥工作都不知道,你让我写职业规划?更可笑的是,很多同学直接去网上抄别人的职业规划。更更可笑的是,他妈的居然还真有人提供职业规划模板。
说实话,就放到现在,我也没有那个能力去给自己写职业规划。而且,就算我要去写,我也不知道我要规划的时间是多长,十年?二十年?还是一辈子?挖槽!把自己给安排的明明白白的确定是好的吗?我就一普通人,把握不住未来的各种瞬息万变,虽然说眼光要放长远,但是给自己制定职业规划这种东西,就是吃饱了撑着没事找事干。想想一个初出茅庐的大学生去规划自己接下来的几十年人生,不觉得很可笑么?
所以,我觉得还是定一个短期的计划来得妥当一些。好处就在于我能预见,我能把控,不会产生过多的焦虑。
那么,怎么去定计划呢?在此之前,我去找了许多制定计划的方案,什么 GTD ,什么番茄工作法都试过,但不知道为啥,到后面就随心所欲了。可能自己还不够成熟吧。
后来我发现,每次计划之前,我都觉得自己特牛逼,总是高估自己,低估了那些任务。比如我计划要去编程做一个小工具的时候,我计划 1 个小时搞定,然后搞完发现,我他妈搞了快 1 天才勉强搞完。
其实这个 “发现” 说起来很简单,但是要去明白 “自己身处在理所当然的无知状态” 是很难的,我也是通过看书才知道我自己这个臭毛病的,当然我也知道很多人也是这样,总是高估自己,低估了自己要完成任务时所要付出的了。
明白了这个道理之后,那么接下来,我的计划就要比我之前预估的任务时间 x 3,也就是,如果我觉得这个任务 1 个小时可以完成,那么实际情况至少要 3 个小时。(有时候可能还不止)
另外,一个大的计划周期制定在一周,还是那个道理,不要高估了自己的能力,制定一个十年半载真的不容易,对我来说,制定一个一年计划都很难了。所以我觉得 “一周” 这个时间还算可以。
明白了这个 “高估了自己的能力” 的道理之后,再来制定详细计划了。怎么做呢?两个字——拆分。
如果把我自己的大脑比作一个单核的 CPU , 那么我计划要做的每件事情就相当于电脑里的每个进程(程序),所以要像 CPU 一样进行切片。
拆分的力量是强大的,比如说你的目标是 1 年内赚它个 1 个亿,想想是不是很可怕?但是如果把 1 年拆分成 12 个月,那么 1 个月赚它个 834 万就可以了。显然也是很可怕的一件事,那就再拆分,把 1 年拆分成 365 天,那么一天只要赚它个 27 万 4 千就可以了。还是有点可怕,那就再拆分,把 1 年拆分成 8760 个小时,那么 1 个小时只要赚到 1 万 2 千 就可以实现了。还是有点可怕,那就再拆分,把 1 年拆分成 525600 分钟,那么只要每 1 分钟赚到 190 块钱就可以了。恩,再拆分成秒的话, 1 年有 31536000 秒,算一下,每一秒我们只要赚到 3 块 1 毛就可以实现年入 1 亿了。
是不是很牛逼?
所以在制定计划也一样,先把每天要做的事情列出来,分出个轻重缓急,之前不知道在哪本书看到的一句话说的好:“分清事情的轻重缓急去做总比你想到什么就做什么好”。也别总想着一蹴而就,那是不可能的事情,把我们要做的事情,拆分成多个小任务。最好是每个小任务 30 分钟就可以完成掉。
每完成一个小任务,休息 5 分钟,然后下一个小任务,再休息 5 分钟…. 这样持续下去。有点类似于番茄工作法。
比如我计划今天我要搭建一个博客网站。因为我之前搭建过,所以呢,我能更加容易预估出所需要完成的时间,省去了找资料的时间,学习的时间。如果是我之前没搭建过,那么不用废话,如果我觉得 1 个小时能学会,那么就计划至少 1 x 3 个小时,其它任务也是如此。
接着拆分,假设搭建一个网站的任务拆分成如下步骤
- 框架搭建
- 优化界面
- 建立标签
- 建立分类
- 添加评论功能
- 写一篇文章测试
- 购买域名
- 购买服务器
- 域名解析
- 网站部署
在这里每一个小任务 30 分钟搞完,然后休息 5 分钟继续。如果有的是 30 分钟内搞完了,可以选择休息也可以继续下一个小任务。当然想法是很美好的,很多时候,我们会发现,我靠,30 分钟搞不完,很正常,再拆分就是了。
计划一旦弄好,马上行动。要不然,计划就不能叫计划了,没行动的计划和那些只讲道理不做事的人有什么区别?
最后还要给自己设置奖励机制和时间记录。人就是这样,没有好处是没有动力做事情的,所以,制定一周的计划都完成了,一定要奖励自己,吃一顿好的,或者沐个足啥的。
另一个,时间记录,当我们每完成一个主要任务的时候,要把记录一下完成的时间,很多年轻人总说自己穷,但换个角度来看,很多年轻人都很富有,而且是每个年轻人拥有的都是一样的,那就是时间,你有听说过,今天我为了什么花费了多少时间么?
所以假设我今天完成了的主要任务就可以这样写:
1 搭建网站: 预估 2 小时 ,实际完成(花费)时间 3 小时 2 分。
2 学习专栏: 预估 2小时, 实际完成(花费)时间 4 小时 5 分。(可能有些概念不懂,我又去上网查等原因)
…
那么这样,下次再做计划的时候,就能更好的预估自己所要做的时间了。
其实这一篇文章,也是我今天计划要做的事情,预计 1 小时,没想到写了 2 小时。
]]>这是发表在我的个人公众号「肯定会」的文章,推荐你关注一下哦!
我们已经在 rest 系统中实现了商品分类的API,那么接下来我们就可以在 portal 系统中请求 rest 中的分类数据,我们可以使用 httpclient 进行不同系统之间的请求,接着将获取到的数据用 freemarker 进行展示。
在 common 模块中依赖相关jar包
1 | <dependencies> |
创建 Httpclient 工具类
1 | import java.io.IOException; |
1 | # REST |
1 | <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> |
1 |
|
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击b站视频教程地址观看。
我们已经创建好了 rest 系统,那么接下来这一小节我们来实现商城首页的分类数据展示。
在 portal 系统中,我们的首页目前是静态的数据,接下来我们就从 rest 系统中取 json 数据,接着将数据展示到首页分类中。
主要思路
- 在 portal 系统中获取 rest 服务中的 json 数据;
- 使用 freemarker 展示数据
1 | { |
可以使用 idea 的 GsonFormart 插件生成相应的实体类
1 | public class Res_Categories { |
1 |
|
之前在开发Android 的时候,有一个组件叫做 “ContentProvider” ,它主要是用来提供数据,在不同的 APP 之间进行数据共享,在这里我不是要解释 ContentProvider 的代码原理,其实我对它的具体实现也早就忘记了。我只是对这个名称的印象颇深。
内容提供者,按字面的意思理解,就是乐于分享内容的人,内容的具体展现方式不同,有人喜欢分享干货教程,有人喜欢分享趣事,有人喜欢分享自己拍摄的生活视频等等。
我认为这些人,都是值得被尊重的。我也想做一个内容提供者,事实上,我已经在做了。这次想说说我为什么想当一个内容提供者。
在此之前,我想对不同的人所对待内容做一个简单的定义,即:内容提供者、内容分享者、内容搬运者以及内容使用者。
内容提供者刚刚说了,就是完全原创,并且乐于分享内容的人。
而内容分享者呢,我认为也算是内容提供者的一种,只不过成本很低,比如你看到了一篇不错的文章,你规范转发给你的朋友,给他们带来价值。
至于内容搬运者呢?是令很多内容提供者厌烦的人,怎么说呢?他们只会搬运别人内容,这些内容并不是他们自己提供的。这些搬运者更多的是为了赚点小钱,也不管什么版权,不管别人辛苦的原创。取个吸引人的标题,把别人的内容搬运到不同的平台,有人点击就行。
内容使用者就不必多说了,我们每一个人,从上学那天起,就是内容使用者。
对我来说,提供内容,其实也是一个学习过程的一部分,我一直觉得,学习是一种过程,而不是一个状态。
不同的人接收到相同的知识会有不同的理解,同一个人在不同的阶段接收到相同的知识也是如此。提供内容能让我有个记录,我把我此刻所思所想,总结一下,提供出来。有些人看了,觉得很是认同,也有些人看了之后产生不一样的想法。我们再交流一下,彼此又学到了一点,这个过程本身就很美妙,不是吗?
之前看过 Fenng 的一篇文章,说的是 “利他” ,他认为如果你想获得更多价值,就应该做一个利他的人。我很认同,利他就是利己,而内容提供,就是一种利他的行为。
最近我也发现,分享会给我带来运气。我想这应该是我之前 “利他” 的原因吧。
在互联网平台上,我很开心的发现越来越多的人在做着利他的事情,他们都在提供有价值的内容。前两天我想开发一个小工具用来下载视频,放在以往,我可能需要从 0 开始,去研究一些请求规则,数据解析等等。但是现在,我在 GitHub 就发现原来有人就开源了一个类似的了,我只需要把他的项目 clone 下来,然后根据我自己的需要,在此之上修改一些代码,省去了自己的很多时间,不到一天,我就把小工具做的有模有样了。
用了原作者的 “轮子” ,我就会心存感谢,如果下次原作者有什么需要帮助的,我如果能帮得上的,当然会提供帮助。
我提供了一些有价值的内容,可以认识到一些朋友,有些是志同道合的,我们一起聊着我们正在做的事情。有些是从我这里得到了帮助,给我加油鼓励,多好啊。
除此之外,当一个内容提供者还能遇见不少机会,比如就有人找我一起创业,跟我说了很多他的想法,有培训机构找我去讲课,有人找我做外包项目,有人找我投稿,有出版社找我出书等。
虽然大多我都婉拒了,但是如果我没有坚持提供内容,我想要得到的机会就会显得很是被动。
虽然做一个内容提供者好像挺多好处的,但都是需要坚持的,如果把它当作赚钱的工具,那是无法做长久的。
我之所以想坚持的当一个内容提供者,除了刚刚所说的,也因为我看到的“大佬们”,大多就是在坚持不断的提供有价值的内容,我向他们学习。另外,也有一点虚荣心作祟,就是为了 “装那些努力得到的逼”。当然,往后的往后,能顺带赚点钱,就更好了。
]]>这是发表在我的个人公众号「肯定会」的文章,推荐你关注一下哦!
在 IDEA 中使用 DataSourceTransactionManager 的属性 dataSource,发现 ref = dataSource 没用引用到,报红色
原因是在没有依赖到 Spring。
打开 Project Structure
选择相应的模块,点击上方的 + 号
选择 Spring
将配置文件依赖进来
点击 apply 确认,问题解决
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击b站视频教程地址观看。
在此之前,我们已经搭建好了 Portal 系统了,那么数据从哪里来呢? 就需要有一个系统专门来提供数据,所以我们需要搭建一个 rest 的服务来提供数据。
REST 是由 Roy Fielding 大佬在 2000 年的时候提出来的:
REST是设计分布式系统的体系结构样式。它不是标准的,而是一组约束,例如无状态、具有客户机/服务器关系和统一的接口。REST与HTTP没有严格的关系,但它通常与HTTP关联。
/manong/rest/products/list
,这样我们一样就能明白这是请求商品数据列表。之前我们已经在 manong 项目中创建了 rest 模块,接下来我们进行一些整合和配置。
1 | <packaging>war</packaging> |
1 |
|
1 | <build> |
转载请注明来源: 学习python的正确姿势
欢迎关注公众号:学习python的正确姿势,微信搜索:fxxkpython
未完待续…
微信搜索id:fxxkpython
名称:学习python的正确姿势
小帅b手把手带你:通往Python高手之路
]]>看到一些朋友在 19 年的第一天开始总结自己的 18 年,看着他们的得与失以及对 19 年的展望。我也跟着心潮澎湃,我也想总结一下,看看自己在去年走过的路。可是迟迟未动,因为有太多的话,一时间不知道从哪说起。后来想想,我以后还是把自己的年终总结,放在春节之际,刚好都放假,刚好过年,刚好给自己增添点 “年味”。挺好的。
之前看过李笑来老师的书,有一句话让我印象挺深的,他说:“如果经过一段时间之后,你竟然不觉得过去的你很傻 x ,那表明你已经彻底变成了无可救药的傻 x ” 。有时候我回过头看看过去的自己,除了觉得自己傻 x 之外,还会觉得有些事情让我尴尬到无地自容,不过还好,别人都忘了。
18 年我在这个公众号分享过挺多文章的,有时候写写教程,有时候看到不错的书会把精华总结一下,有时候也写一些有的没的。在某个晚上自己翻了一下自己公众号写的东西,觉得挺不满意的,有些文章写的太随意了,甚至觉得有些文章写的就是垃圾,一眼就看得出来当下的自己是在迎合,我想如果一味的是为了迎合而写,那么文章是不纯粹的,很少有我自己个人的东西。所以一夜之间,我把所有文章都删了。可以看到开头的时候,我写的是第 1 篇。
关于写作这件事情,我觉得就跟我打代码是一样的,它们都具有原创的特性,是我的兴趣之一,在开始的时候都需要输入,在过程之中会质疑和修改,在完成输出之后,得到反馈又会觉得享受。回过头来看,都会觉得最开始的那些都是垃圾,但是往后余生中又会继续。只是现在觉得不能太过于随意,得再认真一点去对待,少点急功近利,把时间拉长,写个 10 年怎么样?
我很喜欢那些原创的人,他们用自己的学识和思考,创作出一个又一个令人或是振奋,或是幽默,或是感同身受的作品。像周星驰的电影,周杰伦的歌曲,韩寒的书等,为什么我们会喜欢,我想是有一定的道理的。
因为不太安分,去年我做了很多尝试,一直在寻找自己的优势,做了很多加法,看到什么新鲜事物,我都想去试一下,因为一开始我不知道我除了打代码之外,还有什么适合我干的。
我把自己的 blog 换了一个 Material Design 风格,在那里专心写技术相关的内容。
听过一些播客,他们以声音的形式来分享一些行业动态,思考,书籍。我也试着做了一个自己的 podcast ,每周一更,53 期,网易有 900+ 订阅,反馈寥寥。
公众号,最开始是为了尝鲜,发现微信有这个新功能,就注册了一个瞎玩几天就扔一边了。后来看到别人做的风生水起,在公众号居然赚到了钱,于是又开始重视起来,可是自己真的去弄的时候才发现,我想的太天真了,并不是写写东西那么简单。错过了趋势,不懂产品,不懂定位,没人关注,就算我把文章写出个花来,也没人知道。所以我现在这个 “肯定会” 的公众号也就 2k 关注者。
后来我想,如果把一个公众号当做产品,用产品的思维去做个公众号应该能学到不少东西,所以我开启了一个新的公众号,叫做 “学习python的正确姿势” 。把我那无处安放的小幽默,放在这个公众号的 “小帅b” 身上,希望能写出轻松幽默的教程,来教大家从 0 开始怎么玩 python 。因为有了一定的定位,这个号平均每天会新增 50+ 关注,不出意外再过几天就 5k 关注了。以后多学学产品,定个小目标,下次春节总结的时候,看看能不能突破 2w 关注。
我在 b 站和 YouTube 上传了关于 Java 进阶的视频教程,这个教程是面向的是有一定 Java 基础的同学,但其实也是给自己挖了个坑,因为我要制作的是一整个系列的视频教程,并不是我一开始想的那么简单,每一小节我都需要先把具体的功能实现完,然后站在自学的角度思考,怎么样才能通俗易懂?
接着需要录制,剪辑,这个过程挺耗费时间的。再加上我在去年做了很多其它领域的尝试以及本身的工作,所以这个课程更新速度很慢。不过从学习这个课程的朋友们的反馈来看,整体还是不错的,b 站有 1k+ 的朋友一起在学习。在新的一年我肯定会做减法了,而从这个课程中我也找到了自己的一点优势,会加快更新这个课程。
我对这个视频教程的质量要求也挺高的,我希望做出来的视频教程让人看起来是一种享受,看完之后觉得自己学到东西之外,还会觉得很爽,不仅局限于内容本身。还有精神层面的享受。
跟朋友合伙了一个创业项目,虽然失败了,但是我并不觉得这是一件坏事,至少在这段时间里面让我思考了很多,也成长了不少。这本身也是一个学习的过程。很多事情,并不是嘴上说说就完事了,需要自己亲身的去实践,经历后才会理解当时自己犯的错,也才会更加的反思自己,在自己接下来的人生中尽量走好每一步。
去年付费加入了几个不同的圈子,在不同的圈子里面确实开阔了不少思维,他们有不一样的想法,而且我发现跟他们沟通起来特别顺畅。特别是谈什么合作的时候,直接说重点,三言两句都明白了。
我自己也开了一个知识星球,因为除了能让加入的朋友来提问我课程中遇到的问题之外,我还找不到其它有利于他们的方式,所以群上有时候有些朋友说要加入,但是有点犹豫。我都会跟他们说:“学生党别加,犹豫的别加,等你们毫不犹豫的时候,再加入吧” 。但还是有 100+ 位朋友加入,感谢付费的朋友用实际行动来支持我。
以上这几点是去年的主要尝试,一直在试错,其实成长,并不是非得把自己变成另外一个人,而是应该找到自己的优势,然后不断的壮大自己的优势,很开心的是,我在 18 年的时候找到了自己的优势了。
关于阅读,在互联网有太多资源了,现在已经不缺乏知识,当然也充斥着很多的信息,有那么一段时间我发现自己被动的接收太多信息了,这些信息有真有假,是具备时效性的,有些信息还不知不觉的改变着自己的思维,可怕的是自己还不自知。
而知识是被不断的验证,不断积累的。我要学的是知识,而不是信息,往往真正的主动学习是接受自己的无知开始的。
在去年我觉得读过的好书是 斯宾塞・约翰逊 用了 5 年时间写的 《礼物》,以寓言的故事引导年轻人过好自己的生活。另一本是李笑来老师的 《韭菜的自我修养》,韭菜这个词咋一看有点贬义,但是我在书中学到了理财的方法以及一些启发。其它技术书籍就不说了。
也订阅了一些在线的技术专栏,学习那些我以前不知道的内容。现在的阅读形式很多。但是本质是不变的,那就是输入,这一点,接下来也要继续多多的输入。
关于情感的对待,以前的自己在情感中有点傲气,在去年的分手之后思考了很多,发现了自己的不足的地方,人就是这样,在失去的那一刻,才懂得。也感谢对方,及时止损,不会为了沉没成本而做出不明智的选择。不管怎样,我还是想努力做一个更好的自己,升级好自己就是对过去的错一个最好的交代。依然相信爱情,只不过现在暂时不抱太多的期望。恩,很开心经历了一些事情,尽管有些时候在当下是难受的。
从过去这一年来,发现自己还是挺折腾的,虽然不太安分,但还是知道自己在干什么,我知道自己的能力,做不到 Top 1%, 所以我改变策略,我希望找到优势之后,在那么两三个领域中,做到 Top 20%。我想还是可以的。
其实一个好的学习过程,是有输入和输出的,就像 “费曼学习法” 那样,我过去一年一直在这样执行,也确实的感受到,学习和学到了是完全不一样的,只有真正的将自己理解的东西输出,并且让别人懂,我觉得这才是学到了。所以这一年我或多或少还是提高学习能力的。
不管是觉得以前的代码或者文章写的多垃圾,也不太过多的计较过去的开心与难过,好与坏。接下来依然会坚持,书写自己的人生。
在新的一年里,我并没有想好完整的一个规划,但是我会做减法,在自己的优势里面做的更好。
每一个技术人,都或多或少的想写出一个牛逼的开源框架,或者做出一款不错的产品。我也不例外,在接下来的一年里,继续沉淀好自己的技术基础,为未来的做点准备,为那 20% 前进。
坚持输出,输出有一个反作用,就是让自己先输入、先学习,今年想针对性的看一些书,少点浮躁,像今天写文章的状态一样,安静的思考和总结,在朋友圈,公众号输出观点和想法,在 blog 输出技术相关内容。
有一个动力是,有时候听到朋友因为看了我的分享,找到了满意的企业,或是看到朋友发自内心给我的打赏支持,我都觉得很开心,让我觉得我分享的内容是有价值的。
去年做了那么多尝试,居然没有在意多锻炼自己的身体,虽然体重比之前重了些许,但是还是个瘦子,在新的一年必须健身,刚好也看完了一本健身相关的书籍,接下来做好计划跟着练。不想再每天都感到累得要死了。
其实我自己对物质要求并没有很高,随便点到一个好吃的外卖我都能开心的发朋友圈,相比之下,我更在意的是,能有更多的时间做自己想做的事情。但有一个词叫做 “责任” ,所以,进一步学习理财知识,多赚点钱吧。
希望新的一年里,不出什么岔子,家人平安健康,喜欢我的人能幸福。也希望自己能少点失眠,能按着自己的计划行事最好。
薛兆丰老师说过:“年轻人只是贫,但不穷” 。所以告诉自己不要气馁,也不要设限。道路且长,莫问归路。
]]>这是发表在我的个人公众号「肯定会」的文章,推荐你关注一下哦!
vultr vps的优惠力度算是最高的了吧,vultr最常使用的方式就是搭建一个属于自己的梯子,畅游全网,1080p观看Youtube无压力了。
这次赠送 50 美元优惠活动参与条件如下:
点击注册vultr优惠送100美元
教程:vultr购买教程
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击b站视频教程地址观看。
接下来我们要做的就是用户真正要访问的页面了,就像淘宝,京东进入的页面一样,这就是我们的 Portal 系统。
在这里我们主要实现的是
- 搜索
- 分类
- 商品列表
- 商品详情
- 购物车
- 订单
那么我们就先得把静态页面弄好,到时候结合 FreeMarker 对数据进行交互。
]]>访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
接下来我们就要进入我们的这个门户系统了。那么我们需要搭建一个 maven 模块,可以通过 SSM 框架整合一个门户系统。在此之前,我们搭建了 manager 的管理系统,其实大同小异,只不过在这里我们不需要用到 Mybatis,所以我们搭建的 portal 系统可以用 Spring + SpringMVC进行整合。
我们之前在 manager 模块中配置过 FreeMarker 的模板引擎,但是我们没有使用到,所以我们会在 portal 里面去进行使用。
1 | <?xml version="1.0" encoding="UTF-8"?> |
我们在 /main-src 目录下创建 /webapp/WEB-INF ,然后创建我们的 web.xml:
1 | <?xml version="1.0" encoding="UTF-8"?> |
接着我们就可以将 manager 相应的配置文件复制过来。
这里我们把端口设置为 8081 。
1 | <build> |
1 | "/hello") ( |
1 | <h1>hello ${name}</h1> |
访问:http://localhost:8081/hello
ok,完美!
5G即将到来,那么到底什么是 5G 呢?
G,就是 generation ,也就是说移动通信的更新换代,每一代的升级,都给我们的生活带来改变,同时也带来了一些机会,往往,沿着趋势做事情,能够事半功倍,相对来说,更加容易成功,毕竟,大家都知道,在风口,猪都能上天。
我想跟大家简单说一下移动通信的发展。
在 1G 的时候,那个时候可以说是在一个通话时代,那时候连不了网,也没什么人知道互联网是啥,更多的是,谁拿大哥大,谁就是牛逼,比现在的 iPhone XS 牛逼多了。虽然 1G 的时候只是能简单的通话,但是却奠定了一个基础,那就是「模拟蜂窝移动通信」。
蜂窝移动大家应该不陌生吧,在你的 iPhone 手机设置那里,现在的名称依然是「移动蜂窝网络」。
为什么叫做蜂窝呢?其实我们之所以能够上网,是因为我们的手机身处在运营商搭建的基站范围内,这些基站以正六边形为一个范围,一个连接一个,就像蜂窝一样。所以就叫做蜂窝网络了。
到了 2G 的时候,我们就进入了数字通信了,这个时候,我们的信号越来越强了,也让我们的手机有了接入互联网的可能。
可能大家比较熟知的移动通信是从 3G 开始的,在 3G 的时候,我们可以通过上网,发短信,听 mp3 ,但是流量少的可怜,速度也很慢。
直到 4G ,也就是我们现在这个时候,可以看到,在速度的提升下,我们都能直接在手机上流畅的使用各种直播,游戏,电影了,同时也产生了很多流量的生意。还记得我第一次换上 4G 卡上网的时候,那个速度让我差点激动的把手机掉到地上。
那么 5G 要来了,你知道会发生啥么?
5G 的一个核心就是,速度大大提升了,是 4G 的几十倍,很多数据都会变的更精确,延时都会降到最低。以后我们要在网上下载一部 1080p 的毛片,对于 5G 来说就跟复制粘贴一样。
万物互联,人工智能就会得到大大的发展。也许,那个时候我们坐着自动驾驶车,听着美妙的音乐,喝着机器人给你递上的咖啡… 想想那是多么 geek 的场景啊!
通信的更新换代,都会牵扯到许许多多的产业,暂且不说中国华为,美国高通,欧洲法国对标准技术的竞争,看看我们身边的事物,就我们的手机来说,到时是不是会有很多人更换支持 5G 的手机,是不是很多人会购买智能的设备?是不是会有更多人去分享自己的生活视频?等等…
这些都是趋势,你说你要去买小米相关的股票也好, 要去学习人工智能的相关的知识也好,等等,在趋势的方向做事,总不会太错。
]]>Github 的最新 blog : New year, new GitHub: Announcing unlimited free private repos and unified Enterprise offering。主要说了两个事情:
从今天开始,我们可以在 GitHub 无限使用私有仓库,已经不收费了,私有仓库最多可以有 3 个人合作。
Enterprise Cloud 和 Enterprise Server 统一为 GitHub Enterprise,通过 GitHub Connect 这些产品可以安全链接,提供了一个混合选项,这样开发人员就可以在两个环境中无缝工作。
之前微软收购 GitHub 的时候,很多开发者都不看好,特别是国内的朋友们,我也觉得微软会搞事情。
不过从这一段时间来看,GitHub 的每一次更新都是利于开发者。有点香!
对于我来说简直是太好了,以前我在开发项目的时候,对于一些不能公开的项目只能到国内的码云平台托管,或者自己在服务器搭建 Git 服务器,因为之前 GitHub 对私有仓库是会收费的。
所以很多人都在 Gitee ,GitLab,GitHub 等平台来回游走。搞得自己的贡献量零零散散,都不能好好的装逼了。
微软这次给广大的开发者一份牛逼的新年礼物 :New year, new GitHub ,啥也不说了,微软的 GitHub 牛了逼了!
]]>访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
接下来我们就来获取商品数据了,我们需要完成的目标:
- mybatis分页插件的使用
- 获取到的数据列表进行分页展示,DataGrid使用
那么我们会使用到的分页插件是 Mybatis-PageHelper 。在我们的 manong 项目中依赖它,然后进行简单的配置,就可以很方便的使用分页功能了。
1 | <dependency> |
1 | <plugins> |
DataGrid 需要返回的 JSON 数据是这样的:
1 | {"total":28,"rows":[......]} |
所以我们可以用一个对象来封装,最终将数据以上面的这样 JSON 格式来返回:
1 | public class EasyDataGrid { |
1 | ProductExample productExample = new ProductExample(); |
SSM视频教程目录
]]>访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
我们之前已经通过逆向工程获取到了 Product 这个实体类,那么我们在提交表单数据的时候,我们的标签 name 值需要和属性值对应起来。
1 | private Integer id; |
对于一些需要通过 js 获取的值,我们可以使用 hidden 属性的 input 标签来接收数据:
1 | <input type="hidden" name="categoryId" /> |
对于分类 id 的获取:
1 | $("#addProductForm").find("select[name='cid2']").combobox({ |
对于图片路径的获取:
1 | success: function (data) { |
对于商品描述的获取:
1 | UE.getEditor('editor').getContent() |
form 表单提交:
1 | $.post("/product_save",$("#addProductForm").serialize(), function(data){ |
Controller:
1 | "product_save",method = RequestMethod.POST) (value = |
SSM视频教程目录
]]>很多人都听说过暗网,传说中的暗网是黑客的聚集地,有些人会认为如果你没什么技术,然后不小心上了暗网,那么你完蛋了,马上就会有黑客来攻击你,盗取你的钱财、裸照等。
然而,事实是这样么?不是!
也有些人认为暗网里面充斥着色情,暴力,血腥,毒品等等一系列非法黑产。
事实是这样么?不完全是!
正常情况下,我们在上网的过程中,首先是自己的互联网设备能够通网,我们拥有自己的 IP 地址,当我们想要去访问某些网站的时候,这些网站需要有服务器 24 小时托管。说的简单点,我们在上网查询资料的时候,就是从这些服务器里面获取资源,从而展现到我们的客户端上。
Google,百度这些搜索引擎也是这样的,他们会根据关键词去那些服务器爬取相关网站,建立索引库。当我们需要查询某一资源的时候,我们只需要在搜索引擎搜索相应的关键词,搜索引擎会从自己爬取到的索引库里面找到相应的网站,从而显示条目给我直达进入网站。
有很多网站的站长都在做 SEO ,也就是搜索引擎优化,为的就是能够将自己的网站能够被更容易被搜索得到。
可是,有些网站的站长,是不希望他们的网站被搜索引擎搜索得到的,甚至不希望被别人知道具体的服务器地址。也有些用户,他们不希望暴露自己的 IP 地址(尽管有些人挂代理,但是长时间使用同一个也会很容易被发现的),他们不希望被知道自己的访问记录,不希望被发现自己在网络上做的什么勾当。总而言之,他们都希望匿名,安全,不被泄露隐私。
那么这个时候,暗网就正合他们之意。
暗网提供了匿名的网络,在这里,我们不用担心自己的隐私安全问题,因为我们每个人都可以成为每一个人的代理,并且层层加密,这样我们就可以做到真正隐藏自己的真实 IP 地址。
Tor 是一个分布式的匿名网络,当你通过 Tor 进入网络的时候,它首先会去找到那些分布在 Tor 上的节点。
接着会通过随机的路径,一层一层的加密,最后才能访问到目的地。在这种情况下,想要追踪你的路径根本做不到,因为在这里访问再也不是那么简单的「从点到源」直接访问服务器那么简单了。即使你知道其中一个中继节点,也没办法知道这个数据是从哪里来到哪里去。
这个想法类似于使用一个曲折的,难以遵循的路线,以摆脱跟踪你的人-然后定期删除你的脚印。
而且,每隔 10 分钟左右的时间,Tor 又会重新赋予一个新的随机加密网络连接路线。
洋葱网络,这个名字起得太形象了,我们使用 Tor 的时候,就像洋葱一样,一层一层的代理且加密,做到完全的匿名。
所以当下次杨宗纬唱 《洋葱》 的时候,跟他说一句,对不起,我在 Tor 做不到!
如果你愿意一层一层一层的剥开我的心
你会发现 你会讶异
你是我 最压抑
最深处的秘密
…
如果你愿意一层一层一层的剥开我的心
你会鼻酸 你会流泪
只要你能 听到我
看到我的全心全意
点击 下载Tor),使用洋葱匿名浏览器在国内访问不了,可以点击搭建自己的VPN教程来实现自己的代理服务。
搭建完自己的 VPN 之后,下载安装打开 Tor ,可以使用 ss 连接:
洋葱暗网的地址都是以 「.onion」结尾的,只有洋葱浏览器才可以访问,而且地址像是一串乱码,根本无法知道服务器的具体地址,比如大名鼎鼎的丝绸之路:http://reloadedudjtjvxr.onion/ ,由于匿名安全,在这里有很多黑市。说到匿名,可能你也想到了比特币,没错,他们就是结合「暗网+比特币」的方式,在上面猖狂的做着非法交易。
在 Tor 上看过一些卖数据的,有一些股民的数据,学校家长的数据,Facebook账号等等早就被泄露了。
也有一些搞笑的,比如有一个 fuck you 的暗网,进去之后叫我 fuck 自己???
一些血腥的,恋童癖的就不说了,太他妈缺德了。
其实暗网并非都是在做坏事,比如记者传达的一些机密,可以通过暗网而不被窃取。举报一些势力强大的不法分子,为了不被报复,也可以在暗网进行举报。企业内部的一些隐私商业交流,同样也可以使用暗网。
技术本身没有罪,好与坏取决使用它的人。
切记不要在暗网做一些非法的事情。说不定有一些暗网就是人家做的局,之前的暗网 Hansa 就是荷兰警方通过长期的钓鱼,一锅端。
也许这个世界并不是你想的那么绝对。你穿着得体,打扮的体面,也许在有些人眼里,你就是裸着的。你的坚强与善良,在有些人眼里,你就是装。眼见不一定为实。暗网不一定为坏。
]]>abematv 是一家日本的视频平台,拥有诸多精彩视频资源,可是你打开网站之后:https://abema.tv
点击视频无法观看:
挂代理,vpn搭建教程如下:
使用vultr(vps)搭建ss并开启BBR快速上网教程 超简单10分钟搞定
值得注意的是,选择服务器地址的时候需要选择日本,这样通过代理访问才是日本地区的,才有权限访问视频资源!
]]>访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
在 5-3 小节的时候,我们已经实现了对商品分类的获取展示,那么接下来就要将商品图片上传到我们的存储服务器,然后把商品的图片地址存放到我们的数据库里面。
我们已经搭建好了Java文件服务器FastDFS了,而且我们也可以写了上传图片的接口,那么接下来就可以使用 ajaxFileUpload 来上传我们的商品图片。
ajaxFileUpload的源码如下:
1 | // JavaScript Document |
SSM视频教程目录
]]>前不久,陆续有小伙伴告诉我,我的网站访问不了了。
我还纳了闷了,以为是服务器的问题。排查了一遍发现服务器没什么可疑的地方。
用自己的电脑去 ping 我的域名,发现有时候解析到正确的地址,有时候又解析到乱七八糟的地址去了。这时候我以为是 dns 的问题,之前用的 dnspod ,上去看了下,发现自己没动过啊,之前都好好的。
后来想想,域名是在 godaddy ,是不是域名商的问题呢?
找了客服询问了一番,发现没啥问题,我在上面买的别的域名也正常。妈了个蛋!
后来发现,我的网站在国外可以访问。速度也不慢。这个时候我就知道为啥了,我的域名 wistbean.com 应该是被 DNS投毒 了,上 17ce 查了一下,果然,我的域名被解析到各种 Facebook 的 IP 上去了。
所以,我的域名 wistbean.com 在国内算是废了。
没办法,只能 301 重定向了,所以本站的国内域名现在为 wistbean.org 。
也没关系,我依然会在这里分享有用的教程。
最后,好好学习,I Love China !
]]>访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
我们已经在5-2小节中实现了商品添加的界面,那么接下来我们就要对数据进行交互了。
在我们请求 product_add 这个页面的时候,我们应该将商品分类父级的数据放到 session 里面,然后传给页面。所以我们可以写一个 Controller 来实现:
1 | "/product_add") ( |
接着我们的jsp就需要用动态的方式获取数据了:
1 | <% |
虽然我们已经获取到了一级分类了,但是有些分类是有二级类目的,这时候我们需要用到 JavaScript 来写一些方法,对商品分类的获取与展示,商品图片的上传,商品详情页的数据处理等。
那么我们可以创建一个 produat_add.js 文件。然后在我们需要用到的地方引入这个 js 文件,从而能够应用到 js 方法。
当我们点击分类的时候,获取选中的id,然后去请求获取相应的子分类:
1 | $("#addProductForm").find("select[name='cid']").combobox({ |
SSM视频教程目录
]]>访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.或者点击本节b站视频教程地址观看。
EasyUI给我们提供了Form组件,我们使用它的表单提交,可以很方便的来与后端数据进行交互。
新建 product_add.jsp,添加ueditor所需要的js文件:
1 | <script type="text/javascript" charset="utf-8" src="/ueditor/ueditor.config.js"></script> |
在 ueditor.config.js 文件中需要配置一下路径,很多人因为在这里遇到了找不到资源文件的问题:
1 | URL = URL + "/ueditor/"; |
FreeMarker是一个 Java 的模板引擎,可以使用它来动态的绑定数据。比如我们在 JSP 中想要直接显示 Controller 传过来的数据的时候,那么我们就可以使用到 FreeMarker。
比如上图中的 ${name} 就是一个模板,这样的话前端不需要知道这个数据的具体逻辑,后端给就是了,页面的样式和数据之间分离出来,各过各的,挺好。
FreeMarker 还提供了一些指令,比如 if 判断,列表数据,循环等。我们的项目中到时候会用到。
freemarker的maven依赖,最新版本如下:
1 | <dependency> |
支持集成常见的第三方库的依赖:
1 | <dependency> |
1 | <!--freemarker的配置在前,当当请求发现/WEB-INF/ftl/没有的时候,就会去/WEB-INF/jsp/查找--> |
1 |
|
1 | <h1>hello ${name}</h1> |
不知不觉,肯定会电台已经做了 53 期了,平均每周都会更新一期,其实每期时间不长,大多都在 10 分钟左右。
其实我经常听podcast,我觉得这种方式挺好的,听听别人的想法,听听一些自己可能从来不知道的东西,扩展自己的视野。
后来想着要不自己也弄一个玩玩,说点科技上的,说点个人提升的,说点书上的精华。想想自己能做点输出,让别人听了觉得有用,是件挺有意义的事情。
虽然说自己做的这个玩意没有多好,但在做的过程还是能体会到背后的那些付出,原来,有些事情被我想得过于简单。
不管这么样,这一年我还是有在坚持的,要不也不会有这 53 期。
不过听这个肯定会电台的人不多,有那么几个人私信我说,很好。还是有点开心的。
其实,这也是自己在不断的尝试一些“新鲜”事物之一,觉得可以做就试试,试试就好好试试。
最近每周五都更新一期,我觉得星期五是整个星期挺美好的一个数字,不过从这个星期五开始暂时停更一阵子啦。
停下来,看一看,想一想先,也先做点减法。
肯定会电台,54-100期,晚点见。
]]>百度UEditor的介绍是:由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.
百度 UEditor 最新版的下载地址:1.4.3.3 Jsp 版本
下载之后解压可以看到一个demo,里面有js文件和一些所需要的lib:
打开 index.html 文件可以看到这个富文本编辑器还是挺丰富的,可以很方便获取到我们要的 HTML 源码:
那么接下来我们就在我们的 manong 项目中使用这个富文本编辑器吧。
安装json的jar包
1 | mvn install:install-file -Dfile=C:\Users\Administrator\Desktop\utf8-jsp\jsp\lib\json.jar -DgroupId=com.json -DartifactId=json -Dversion=1.1 -Dpackaging=jar |
安装 ueditor 的jar包
1 | mvn install:install-file -Dfile=C:\Users\Administrator\Desktop\utf8-jsp\jsp\lib\ueditor-1.1.2.jar -DgroupId=com.baidu -DartifactId=ueditor -Dversion=1.1.2 -Dpackaging=jar |
遇到上传问题:No mapping found for HTTP request with URI ,导致访问上传的图片和一些静态资源 404 。
解决方式,在SpringMVC配置文件中添加:<mvc:default-servlet-handler/>
default-servlet-handler简介:
它会对进入 DispatcherServlet 的请求进行筛选,如果发现是没有经过映射处理的请求,将该请求交由 WEB 应用服务器默认的Servlet处理。 如果不是静态资源的请求, 才由 DispatcherServlet 继续处理 ,一般 WEB 应用服务器默认的 Servlet 的名称都是 default。
在学校的时候,老师给我们传授知识,解释书本上那些晦涩难懂的概念。但很少有老师告诉我们书本之外的东西。例如:思维,认知,理财,学习方法。
不过这没什么好抱怨的,因为很多东西,都是需要靠自己的,对吗?
今天想跟你探讨的话题是:到底怎样才算是学会知识了呢?
我们在学习某一知识点的时候,一般有两个层面:
1.表面层面学习
2.深度层面学习
举个例子,我们在学习「面向对象」这个知识的时候,我们知道,对象是对问题描述的一种解决方案,我们可以将问题抽取成对象的集合,这样我们可以通过对象,来使用具体的方法。面向对象具有封装,继承,多态等特点。
我们知道了这些,只是表面。
如果你能够清楚的知道封装有什么好处?继承是为了什么?怎么用代码体现出来?对象的生命周期怎么样的?
这叫深度学习。
我们在面试的时候,其实也是在了解,你学习的深度,最直接的方式就是让你上机,让你实现一个关于某知识点的功能。
表面学习,更多的是为了吹牛逼,深度学习,才是利己。
那么现在我们要讨论的就是:怎样才算是深度学习到了知识了呢?
在这里呢,给大家介绍我在使用,觉得有用的学习法,它的名字叫做费曼学习法。主要来说,有这么几个步骤:
- 认真的学习一个新的知识点
- 学完之后,将你学到的知识点用通俗易懂的语言讲给别人听,也可以写出来。
- 发现问题,别人听不懂的地方,自己卡壳的地方,这些都是自己的弱点,都记下来,重新回去学习这些弱点。直到自己能够清晰通俗的讲出来。
- 重复以上三个步骤
举个例子,比如我学习文件服务器FastDFS这个开源项目,那么一开始就认真学习,知道它是什么玩意,它的主要功能,工作原理。
学完之后我就会输出,其实输出的方式有很多种,跟别人讲,写博客都可以。
当我发现,我讲的好像不够易懂,或者卡壳了,那就说明,我对它还没有真正的理解。怎么办呢?只能滚回去继续研究。直到了然于胸。所以有时候有朋友觉得我讲的东西很容易理解,其实背后都是我在「重复以上三个步骤」。
这种学习方法的好处在于我们可以真正的了解自己学到的东西,而不至于停留在「好像懂了,又好像不懂的情况」,也锻炼了自己独立思考能力。当下次学习新的知识的时候,也会更加容易对知识加以应用。
]]>在Java文件服务器 FastDFS 的搭建教程和使用 Nginx 访问 FastDSF 文件服务器中我们已经在 搬瓦工Linux 上安装部署了 fastdfs,并且可以用 Nginx 访问了。
那么接下来就在我们的项目中使用 fastdfs 吧。
fastdfs-client-java的项目地址:https://github.com/happyfish100/fastdfs-client-java
fastdfs-client-java的Git地址:https://github.com/happyfish100/fastdfs-client-java.git
使用 maven 将 fastdfs-client-java 安装到 maven 仓库之后进行依赖。
1 | public class FastDFSClient { |
1 | <!-- 文件上传 --> |
接着就可以使用Cotroller书写文件上传了。
安装一些通用模块:
1 |
|
Java文件服务器 FastDFS 的搭建教程
使用 Nginx 访问 FastDSF 文件服务器
前不久掘金 CEO 发布了一篇叫做 《不如我们从头来过》 的文章,卖了波情怀,主要还是说明了掘金团队要裁员的情况,看的出来,他们挺不容易的,掘金这个技术社区相对来说还是很纯粹的。
整个网站使用起来算是挺舒服的,没有像 CSDN 那样满屏的广告,简单的风格,可惜「掘金小册子」搞不起来。
看完后在朋友圈发了下自己的看法,有朋友留言问我有没有什么好的技术社区和学习的地方推荐一下。
翻看了一下自己收藏和付费加入的一些技术社区以及学习的地方,有几个对我来说很有价值,所以分享一下。
相信不少人都知道 TED 这个演讲平台了,TED 指 Technology, Entertainment, Design 在英语中的缩写,也就是技术、娱乐、设计。但其实 TED 上面不仅仅局限这几个领域,科学、教育、发展、文化、商业、艺术、环保等话题都有涉及到。
TED大会希望传达这样一个的信息,即优秀的思想可以改变人们对这个世界的看法,使人们反思自己的行为。TED大会只是TED社区的一部分,任何人,只要他认同某个TED演讲所传递的观点,都是TED社区的一员,他们都可以为实现某个伟大的理想而共同努力。
TED 地址: https://www.ted.com/
我主要会在上面看一些科技和教育的演讲,当然了,我们国内也有类似的平台,叫做「一席」,这个演讲平台也很不错,也会邀请很多各个领域的牛人来分享他们的见解,我有时候睡前会找一席的演讲音频来听,了解到不少以前不知道的东西。
有一个演讲我看了不下 30 篇了,就是方励的感谢你让我上场,里面说的很多观点我都很认同,推荐你去看看。
有很多名牌大学的教师们都在网上分享他们的课程,很多还是不用钱的,有些课程的质量相当高。
有一个叫做 Coursera 的教育平台,许多名校都和 Coursera 合作,学渣也能学习到名校老师讲的课了,想象是不是很爽。
国内的也有大学公开课的平台,主要是和国内的名校合作,在这里学完如果完成考核还可以申请获得证书。我觉得比较好的有中国大学MOOC,学堂在线。
中国大学MOOC是由网易与高教社携手推出的在线教育平台,承接教育部国家精品开放课程任务,向大众提供中国知名高校的MOOC课程。在这里,每一个有意愿提升自己的人都可以免费获得更优质的高等教育。
学堂在线是由清华大学推出的全球首个中文大规模开放在线课堂平台。以清华大学计算机科学与技术系为主体的开发团队基于OpenEdX平台开发了学堂在线。
BBC一个不错的英语学习平台,里面很多都是外国人在教,可以说是很纯粹的了,不会被带歪。比如说有教怎么发音,还有很多用英语交流的场景,视频教程很精美。
这个应该不用我说了,上面大牛云集,有很多优秀的开源项目值得跪舔,自己也可以在上面托管一些项目,和小伙伴一起合作开发。
GitHub是什么以及怎么用可以看看我之前写的教程:GitHub是什么?如何使用?
LeetCode 收录了很多编程相关的问题,如算法,数据库,很多人都在上面刷题,题目也分了不同的等级,LeetCode 也几乎支持所有主流编程语言,可以刷到你酸爽。
stackoverflow 是一个技术问答社区,我们在编程的时候遇到的问题或者Bug,在这里也许可以看到别人曾经也遇到过,可以在这里找到一些参考,stackoverflow很纯粹,所以下次遇到技术问题别去百度了,在这里搜寻吧。
之前说过了,b站不仅仅是个二次元的视频资源网站,里面的学习干货简直超乎想象。国外的 Youtube 也是干货满满,基本上你想学的领域都有,下次找资源可以在上面搜搜试试。
具体可以看这里:其实,你要的教程资源大多都在这两个地方,而且不用钱
说了一些免费的产品之后,现在有一些付费的产品也是很不错的,比如「得到」、「极客时间」、「知识星球」。
有点付费学习的意识还是挺好的,加入一些付费的社群可以跟着大佬一起学习,还可以直接跟大佬一起交流。
为知识付费,节省一些时间,是一件很划算的事情。
以上。就是我觉得有价值的地方,当然,如果你也觉得有不错的网站,不妨留言一起分享。你分享一点,我分享一点,大家就会开心多一点。
]]>前不久,公众号后台有妹子不高兴了,私信我说,我为什么会觉得我公众号的人都是喜欢看性感女人呢?什么时候发发性感男人啊。
想想也是,毕竟关注这个公众号有 15.6% 是妹纸呢。怎么能没有性感男人呢?
那么接下来就把你想要的帅哥,用 Python 把它们装进自己的电脑。
刚好看到这个地址:http://www.shuaige5.com/tag/xinggannanren/ ,发现里面的性感男人真的很性感。
答应我,先别激动好么?
首先来分析一下我们要爬取的这些图片地址,通过 Chrome 的开发者工具可以看到这些图片的地址在 img 标签中,但是这个地址有点奇怪,在 src 里面还有一个 src 指向图片的地址,我们要的图片地址就是在第二个 src 指向的地址,所以我们的正则应该是这样:
1 | '<div class="inner_wrapper_img inner_wrapper_img1">.*?<img.*?src="/e/ext.*?src=(.*?)&h=240&w=190&zc=1".*?</div>' |
当我们要点击下一页的时候呢,可以发现请求地址携带了一个参数 /index_2.html
,所以我们可以通过这个变量来获取多页的图片数据。
那么分析完之后我们就开始下手吧,我们可以创建一个叫做 shuaige 的图片文件夹,专门来放这些帅哥的
1 | os.mkdir(dirName) |
接着我们可以定义几个变量:
1 | pageNumber = 2 #用于获取不同页数的图片 |
比如我们想要获取第 2 到第 4 张图片,那么我们就可以写一个循环来获取数据:
1 | while pageNumber < 5 : |
ok,我们来运行一下,可以看到在我们的项目目录中创建了一个叫做 shuaige 的文件夹,python 正在下载我们要爬取的图片:
打开文件夹一看,一堆性感男人都有了:
友情提示:小爬怡情,大爬伤身!
完整代码:
1 | import os |
2018英雄联盟总决赛,中国战队 IG 获得了冠军。一时间我身边的朋友们都做出同样的感慨:IG牛逼!
身为 IG 团队 BOSS 的王思聪当然是心情大好,在微博上搞了波冠军之月抽奖活动,在第一波抽奖中抽取 113 人每人一万元。
哎~ 有钱真好!
然而到了开奖当天,抽奖结果让人很是无语。因为这次 113 人的中奖名单里面,只有一个男的中奖了,其它 112 人都是女性。这比例也太夸张了吧。据统计中奖里面的人没有一个是 IG 粉,甚至大多都不知道电竞是个什么玩意。
于是很多人吐槽渣浪。
后来微博的 CEO 解释说男性有很多操作行为像机器人,会被微博降权,所以抽不到。
这就有点冤枉了,男性可能潜水比较多,相对于女性而言,发微博较少,更多的是围观,所以被微博认为垃圾用户,甚至是机器人。
所以下次要抽奖最好把性别改成女的,多发点微博,表现出自己是个很有购买欲望的人,让渣浪觉得你是个有价值的用户,中奖概率会高很多。
其实对于渣浪来说,出此下策也是没办法,试想一下,假如从 1w 人中抽一个锦鲤出来,那么如果有人就搞 1w 个微博号,直接参与抽奖,不就必中了么?不公平哇。
其实微博上的机器人随处可见,有些明星,随便发一条微博,转发就上亿,比点赞还多。真敢刷啊,咋不上天呢?
不仅仅是微博,看看互联网上的那些平台,有多少机器人,多少假数据,恐怕机器人比真实用户还多个一两倍还不止。
真的,对他们来说,中国人早就不够用了!
前不久,吴亦凡的新专辑,上线不到一天,他的粉丝们不知道花了多少钱,搞了多少个VPN,居然把吴亦凡刷到了美区 iTunes 榜单第一。前 10 首歌中有 8 首是他的歌。居然把 Lady Gaga 远远甩在身后。
美国人民先是一阵懵逼,然后都看不下去了, Kris Wu 他妈的是谁?表示不认识。很是令人反感。在推特上被很多人吐槽,中国机器人也让外国人们觉得很可耻。
chines robot,丢脸不?
相信不少人都有被身边做电商的朋友们请求刷单吧,因为数据要做的体面,才能被客户搜索得到商品。现在去淘宝购买东西,真正的好评有多少,伪好评又有多少?现在的好评写的越好,我就觉得越假。
这些刷数据的早就在国内成了产业链,刚开始亚马逊,eBay 这些电商平台的卖家一片和谐,后来中国卖家开始进军境外电商了,开始疯狂刷单,刷数据。那些外国的卖家都特么傻眼了。挖槽,还有这种操作?
亚马逊,eBay不知道因为中国这些卖家改了多少次规则。
你说现在真正有实力的中国音乐人,真正良心的中国卖家,他们怎么办?还上得了榜么?就算上榜了,国外的那些人怎么看?
刚过去不久的双十一,销量突破多少千亿,但是背后刷了多少单,多少退货,会显示给我们看么?不会,那样就不体面了。
一个体面的数据,可以让一个流量的小鲜肉,抠图参演电影,从而获得可观的票房,反正有人帮忙刷数据,然而那些真正有演技派的人总是在想,演员的春天何时到来?
一个体面的数据,可以让一个平台做数据报告的时候沾沾自喜,投资人看了成就感爆棚,竞争者看了嗤之以鼻。
…
人们都更喜欢虚幻的东西,我们更愿意用谎言来装饰现实,你说,一个美丽的公主,看起来那么动人,那么梦幻,但是她把长裙撩起来,不小心看到她脚上那些茂密的脚毛,不太好吧。
有些朋友觉得我的公号有些文章写的不错,为什么阅读量没有很高?
其实我的公众号,时不时就有人在后台私信我,问我要不要刷粉丝,刷阅读量,20块钱就可以刷多少千的阅读量,粉丝就几毛钱一个。
不过我都拒绝了,不好意思,我是想要有一个体面的数据,但不想弄虚作假。
我的一点坚持能够影响到一些读者就不错了,其它交给时间。真的永远是真的,假的一眼就看出来,只是不说而已。keep real。
]]>马上双十一了,你准备好剁手了么?购物车添加满了吗?那就先把购物车清空吧,购物车全选,一键删除。
因为接下来我想跟你讲点骚操作,让你花更少的钱,买更多的东西。当然,土豪就随意了。
双十一京东
宝的优惠规则挺繁琐的,有些商家需要你先收藏关注他们,然后才能领券,还要分享,缴定金等一系列操作,最后买完你发现,好像和打个 8 折没什么区别。这就是他们的套路!
还有一些商家,在双十一前先偷偷摸摸的涨价,然后到双十一的时候搞个极大的优惠来诱惑你。
这里推荐一个比价,追踪历史价格的网站:http://www.manmanbuy.com/
通过这里你就可以商家是否在套路你了,比如我就看到某个商家的 iPhone 7 ,价格频繁涨跌:
看到了吗?11月9号这里先来个猛涨,然后降价,区间都快 1k 了 - -
现在的商家那么多,京东,淘宝,天猫,亚马逊等等,你要买的东西,这些平台肯定有人在卖的,那么价格就会有差异,我们可以通过商品名称或者型号,查询所有商家的价格对比,从而找到最便宜的商家入手。
比如我比价了一下 MacBook Air,在天猫需要 5698 ,而在京东要 6488…
还记得我之前说的通过互联网赚钱的 9 种渠道么,就有说到淘宝客,推广联盟,你可以通过 阿里妈妈 这个平台注册成为一个淘宝客,当然其它平台也有,例如京东联盟,亚马逊的 affiliate 等,然后你就可以从里面推荐一些商品给别人,如果别人购买了你推荐的商品,相当于帮别人卖产品。那么你就可以从中获取一定的佣金。
那么这时候你不妨自己注册一个推广联盟账号,把你和你朋友通过比价得到最低价格的商品,再通过他们的联盟平台里面搜索,获取推广链接,然后你再从这个链接购买,把佣金给赚了,是不是很爽?
有些东西可能需要到双十一晚上12点抢购,这种拼手速的玩意你可以写一个脚本,比如用 Python 定时下单你购物车的东西,一般情况下,海外的商品会便宜很多,贵倒是贵在运费上,如果跟朋友团购海外商品也是不错的选择。其实掌握点小技巧每天都是在过双十一。
每天都在使用微信,在移动互联网到来之时,腾讯内部组建了三支团队,同时开发同样的产品————微信,最后是广州做邮箱出身的团队赢了,杀入了移动互联网这片红海。
微信第一次出现在我们面前的时候,是在 2011 年,那时候更多人是使用 QQ ,对微信没什么好感,直到附近的人
,摇一摇
这些约炮功能的出现,让人们爱不释手,如果说这是资本原罪,那么朋友圈
这个功能的出现,着实满足了用户内心深处的窥探欲望,再到公众号的出现,微信已经牛的一批了。
我的微信好友中,有些朋友是熟悉的,有些朋友是不太熟悉的,比如看了我的文章或 blog 添加的我,不过没关系,在茫茫人海中相遇便是缘。那么我在想,把我的微信好友的数据用 Python 爬取下来,分析一下,应该会很有趣。
微信有个网页版的登录,那么可以从这里入手,有个牛逼的itchat模块,两行代码,就能让我们登录并且获取好友信息了:
1 | # 微信登录 |
当我扫码登录完之后呢,就可以获取到我的好友数据了:
在返回的数据中,有一个叫做 Sex 的字段,就是性别,简单的分析可以知道 0未知 1男 2女
,将所有好友中的性别数据提取出来,接着使用 matplotlib 画个饼图:
1 | sexs = list(map(lambda x:x['Sex'],friends[1:])) |
得出结果:
挖槽,小哥哥那么多,我的妹纸们呢?女神呢?
不过想想,我的微信好友大多是程序员/破涕为笑,也就平复下心情了,妹纸快加我微信啊,让我的饼图好看一些 - -
微信有个个性签名
的东西,每个人会把自己的座右铭,或者喜欢的话语写上,试着来分析一下我的好友中用到最多的词是什么,把语句进行结巴分词,然后搞一张云词出来,应该不错。
在获取到好友的数据中,有个 signature
的字段,就是好友的个签了,有些朋友会加上一些表情什么的,先把它们过滤掉,然后再使用 SnowNLP 分析,通过结巴分词分析完就可以用 wordcloud 生成云图了:
1 | def analyseSignature(friends): |
生成结果:
可以看得出来,我的朋友们还是挺正能量,努力,坚持,生活,人生是出现的比较多的词。多跟正能量的人在一起,互相传递能量,挺好。
SnowNLP 可以获取 sentiments,我理解为情绪值,从0到1,值越高说明越正能量,可以通过这个值,画一个图,看看我微信好友们的情感是怎么样的:
1 | count_good = len(list(filter(lambda x: x > 0.66, emotions))) |
结果:
可以看到,负能量的人还是少数的,大多都正能量满满,我喜欢。
在返回的微信好友数据中,有一个 Province 字段,用来说明用户所处的省份,那么用这个字段,就可以统计出,我的微信好友在哪里,把这些数据统计出来,然后显示在中国地图上,应该会很直观,这里我使用到了 pyecharts 模块来进行地图可视化:
1 |
|
结果如下:
哇塞!我的好友快要遍布整个中国了,就差新疆,青海,宁夏,天津和宝岛台湾了,以后我是不是就不用学习数理化也可以走遍中国都不怕了哈哈哈!
ok~ 我主要从微信好友的性别,态度,情感和位置进行了分析,除了觉得我的微信好友中女生比较少之外,其它都挺不错的,继续努力,希望以后我的朋友们越来越牛逼!
ps:如果你也想分析下你的微信好友,想要获取源码的话可以在公众号后台发送「微信」获取。
前两天收到一份邮件,七牛云发来的,说是要回收我的测试域名,之前也不知道有测试域名这一说,可能怕有人干坏事吧。总之也就是说,我之前上传在七牛云上的博客图片可能都要挂掉了。想想自己博客的文章图片都 404 就悲催。
有两个解决方法:
1.在七牛云上提交自己的域名,不过需要备案
2.把自己上传在七牛云上的图片爬取下来,转移阵地
对于第一种方式是最简单的,换自己的域名就可以了,但是得备案,最烦就是备案了,一堆恶心的认证操作,而且总感觉背后有人在盯着你 - -
所以果断选择第二种解决方式,使用 Python 把图片爬取下来,转移阵地。
通过这个存储的链接中 https://portal.qiniu.com/bucket/blog/resource 抓包可以看到,这个URL https://portal.qiniu.com/api/kodo/bucket/files?bucket=blog&delimiter=&limit=50&marker= 会返回存储数据,也就是图片地址和名称,正是我想爬取的东东。
一次请求可以获取到 50 条数据,那么想要获取全部怎么办呢?
简单分析一下,每次返回的 Json 字段中有 marker=eyJjIjowLCJrIjoiMi5wbmcifQ==
,当点击加载更多
的时候,这个marker字段的值会作为下一次请求的 marker 参数值(携带在URL上),直到请求到最后 marker 为 “” ,也就是说当 marker 值为 “” 的时候,就是请求到最后的数据了。没有更多了。
大概了解了之后,就废话不多说了,开抓…
定义属性 header 和 urls,假装自己是浏览器和有cookie信息。
1 | header = { |
因为第一次请求不需要 marker ,所以我们可以给 marker 定义一个默认值,每次请求就更新这个marker,当发现 marker 为空的时候就不再请求了。
请求到的数据只需要图片名称和图片地址就行了,可以用到 json 模块来解析 json 数据,然后将图片下载到blog文件夹:
1 |
|
这是请求七牛云数据的方法,用到了 requests 模块:
1 | def request_qiniu(url,header): |
运行代码开始爬取图片:
可以看到,创建了文件夹,并且把图片都下载下来了:
ok,搞定!
可以利用它来做一些静态资源的访问服务器,例如我们系统用到的图片,可以用Nginx服务器来专门访问我们的图片系统。
例如,有一个电商的网站,当有商品在系统中上架时,可以将上架的商品图片存放到我们的图片服务器,当我们需要这个商品的详情的时候,就可以通过Nginx去访问相应的图片。nginx比apache占用的cpu资源少,在高并发的情况下能保持低资源低消耗高性能。
可以在同一台服务器上运行多个网站,而且呢,这些不同网站是不会互相干扰的,在区分不同的网站我们可以通过不同的IP
,不同的端口
和不同的域名
三种方式区分,但是一般使用的最多的就是使用域名来区分。例如通过www.a.com 来访问a网站,通过www.b.com 来访问b网站,并且a.com和b.com是基于同一个ip地址的。
虚拟主机的配置可以在nginx的conf文件中进行配置,在配置文件中每个server节点就代表一个虚拟主机。例如我想要配置www.a.com 来访问a网站,通过 www.b.com 来访问b网站就可以这样子:
server { listen 80; server_name www.a.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root a/html; //指向a.com的网站 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; server_name www.b.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root b/html; //指向b.com的网站 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
配置好文件我们保存然后将Nginx reload一下之后,我们这时候访问 www.a.com 时Nginx就会去请求a网站给我们,同样访问 www.b.com 就会去请求b的网站,他们之间互不影响,且又绑定在同一个ip上。这种对于一些多个小的网站,绑定在同一个ip上是很好的实现方式。
反向代理就是当你的网站因为并发量太大,部署在了多个服务器上,那么当用户去访问你的网站的时候,不知道去访问哪个服务器,这时候Nginx就是来帮忙进行反向代理请求的,也就是用户访问Nginx,然后Nginx帮用户去请求某一个Nginx认为该访问的服务器。
负载均衡反向代理的使用也是通过Nginx的文件进行配置的:
在conf中通过upstream来配置要代理的服务器:
upstream tomcatserver1{ server 192.168.88.61; server 192.168.88.62; }
其中还可以定义这些服务器的负载权重,是否参与负载等,可以在ip地址后面添加定义:
down 表示单前的server暂时不参与负载
weight 默认为1,weight越大,负载的权重就越大
backup 其它所有的非backup机器down或者忙的时候,就会请求backup机器。所以这台机器压力会是最轻的。
max_fails 允许请求失败的次数默认为1.当超过最大次时,返回proxy_next_upstream 模块定义的错误
fail_timeout: max_fails次失败后,暂停的时间。
比如 server 192.168.88.61 weight=2; 就代表192.168.88.61这个服务器会被访问的权重更多。
在server中配置域名和端口号,然后用proxy_pass去访问我们刚刚定义的upstream:
server { listen 80; server_name wistbean.server1.com; location / { proxy_pass http://tomcatserver1; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }}
yum install -y openssl openssl-devel
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y zlib zlib-devel
多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip
yum install -y pcre pcre-devel
nginx的http模块使用pcre来解析正则表达式
yum install gcc-c++
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境
http://nginx.org/en/download.html ,例如下载1.8.1版本可以
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz
1 | cd nginx-1.8.1 |
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --add-module=/usr/local/src/fastdfs-nginx-module/src/ \ --with-http_ssl_module
将以上复制到Linux执行一遍。然后需要到**/var/temp/**中创建nginx目录。
mkdir nginx
makemake install
进入nginx的sbin目录:
cd /usr/local/nginx/sbin./nginx
开始启动了…
./nginx -s stop
./nginx -s reload
你是不是常常听到这样的话:
你想实现财富自由么?你想活出自己,遵从自己内心去做自己喜欢的事情么?你想拥有一切你想要的东西么?
那就去做梦吧!
但今天,我想说,不用去做梦,也许也可以做到,你信么?今天跟你谈谈斜杆青年。
斜杆青年,说的是拥有多重职业和身份的多元生活人群。
斜杆,就是 / ,如果有人在做文字版的自我介绍,诸如:「职位:作者/开发者/摄影师」 ,那么就说明他是一个斜杆人士。他们在自己喜欢的领域,开启自己的斜杆人生。
很久以来,人们都觉得你的经验价值在于你是否长期的,单一的在你熟悉的领域做一件事,这样才能成为专家。话说的没错,但是如果能够「一专多能」,是不是更好呢?毕竟人就活一次,可以多发掘自己身上更多的可能性嘛。
有很多人想要当一个斜杆青年,但是又觉得好像违背了什么,害怕些什么,感觉自己内心想要的和现实不一致。
但其实自己的生命意义并不是要按照别人的规定来,生命的意义本身就没有绝对的标准,没有好坏,没有对错。能让自己的生命更加的完整,为什么不做呢?
看过一句很触动我的话:人可以不成功,但是不能不听从自己的内心。
如果放在以前,斜杆青年确实不太实际,但是现在网络科技突飞猛进的发展着,就没有什么不可能的事,斜杆已经是全新的价值观,是一个新时代的产物了。
斜杆青年有两个显著的特点:
- 多重职业
- 多重收入
一个程序员除了敲代码外,他也可以帮人摄影,他也可以写作。一个医生除了帮人看病外,他也可以讲课,科普知识。他们不给自己设限,不断学习,锻炼自个儿,成为斜杆,拥有更多的收入。这本身就是一件很酷的事。
看起来好像不错啊,但是你愿意打破现状,勇敢的走出第一步,给自己加上一条斜杆么?
斜杆青年在追求尽早的实现财富自由,但是重点不在财富上,而是「自由」两字,能够有更多自己的时间分配自由,有拒绝别人的自由,做自己想做的事情。
在斜杆这条路上,需要很强的自制力,不断的学习,自我知识积累,有多元的兴趣和专长,还要不停的试错,不停的实践。在斜杆的人群里,成功的对立面不是失败,而是学习。
对于我自己而言,我自己有着开放的心态,我觉得以后将会越来越少人朝九晚五按部就班的工作,远程办公,数字游民的生活方式会越来越流行,我不会给自己的人生设限,前两天主持人李咏和大侠金庸相继逝世,都在惋惜和心痛,但不得不承认,再牛逼的人,也有一天会走到终点,所以我觉得人就活一次,人生长度有限,但是生活的维度可以多重。
假如你在自己的领域中还额外会别的技能,这不就加分了吗?我经常会鼓励身边的朋友在业余的时间学习点自己感兴趣的东西,说不定以后这技能会给自己带来惊喜呢。
比如说你会技术,但是你又会写作,还会产品,还长得好看等,那么你会发现,你接下来要走的路比其他「单一」的人会宽的多。
像我现在是一名技术人,但是也在写作,做视频,做podcast,做产品等,这都是我,我会花更多的时间去学习,去执行,一步一步的去完善我的斜杆人生。
因为我想成长到配得上「自由」的生活,毕竟,人只有在为自己努力的时候,才会拥有最强大的动力。
当然,活法有很多种,这只是其中的一种生活方式,做到骨灰级的专家和多元发展,都没有绝对的标准,也没有好坏之分,不同的人,想法不同罢了。
]]>想看好书?想知道哪些书比较多人推荐,最好的方式就是看数据,接下来用 Python 爬取当当网五星图书榜 TOP500 的书籍,或许能给我们参考参考!
- 爬取当当网前500本受欢迎的书籍
- 解析书籍名称,作者,排名,推荐程度和五星评分次数数据。
- 将数据存写入到本地文件
在当当网五星图书榜这个网址中,我们可以看到这里列出来了五星图书榜:
通过源码可以看到,我们想要的信息被包裹在<li>
标签中:
可以看到我们要的这些数据都在这:
当我们点击下一页的时候,url 地址会发生改变(最后的数字会加1):
第一页的 url 是:http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1
第二页的 url 是:http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2
…
我们等会可以通过这个变量来实现多页加载数据。
我们使用 requests 来请求当当网的地址,定义一个get_one_page
,将会返回 HTML 源代码。
1 | def get_one_page(url): |
打印出来就是这样,部分截图如下:
源代码那么多数据,但是对我们来说只需要籍名称,作者,排名,推荐程度和五星评分次数数据,所以我们要用正则表达式来过滤一下,使用 re 模块,定义匹配规则:
1 | <li>.*?list_num.*?>(.*?)</div>.*?pic.*?src="(.*?)".*?/></a>.*?name"><a.*?title="(.*?)">.*?tuijian">(.*?)</span>.*?publisher_info.*?title="(.*?)".*?biaosheng.*?<span>(.*?)</span>.*?</li> |
定义 parse_one_page
,返回每次匹配到的数据,解析成字典形式:
1 | def parse_one_page(html): |
我们已经拿到了每次请求的数据,并且解析匹配好了,那么将每次得到的数据写入book.txt
文件中去:
1 | def write_content_to_file(content): |
我们要获取 TOP500 ,当当网每页给出 20 条数据,我们需要 25 页的数据,一开始我们在分析网页的时候知道 URL 会选择页数改变最后的参数,所以我们可以用循环来请求所有的数据:
1 |
|
可以看到我们将五百条数据抓取下来了,并且在项目中多了一个book.txt
文件,打开看看有没将数据写入:
ok,以上我们就把当当网最受欢迎的 500 本书爬取下来了!
5秒钟的时间很短,5秒钟可以运行一段时间复杂度不是很高的代码,5秒钟也可以看一个段子,5秒钟可以发一条朋友圈。掉在地上的食物,在 5 秒之内捡起来依然可以吃。有人下了一部一个多小时的片,在开头 5s 的 FBI Warning 就完事了。
不过今天,要说的不是在 5 秒钟之内可以完成什么事,谁做的事多。而是要来谈谈这能够改变生活的 5 秒法则。
不知道你有没有遇到这种情况,就是你在地铁上或者在电梯里,遇到了一个让你眼前一亮的人,你很想跟他说句话,甚至想加个微信,但是犹豫了半天,到站了,人家下车,你还没开口。
你在公司开会的时候,你有一个非常好的想法,你犹豫着要不要发言,你知道这是好事,但是到散会了你还是没有说出来。
你想着我要多看点书,提升自己,多学习,但是好像都只是想想,很少付诸行动。
你想减肥,想健身…
类似这样的事情还有很多,我们都知道,成长的机会就在于我们要走出舒适圈,去挑战和学习,但是我们都不去做。这是为什么呢?
是因为:
- 知道做什么是永远不够的。
- 知道为什么需要这样做是永远不够的。
并不是一句简单的一句 「就是干」 就完事了,要是这么简单的话,我们可以拥有在这个世界上所有我们想要拥有的东西。
我们在做一件事情之前,我们的「思想」和「感觉」都会进行斗争,在我们知道应该要去做什么和我们想做什么之间,往往我们会选择后者。
也就是我们「思想」vs「感觉」
中,「感觉」不需要费太多力气就赢了。
所以我们在行动之前,必须要有一个非常基础的事情发生,让它来辅助我们的思想来攻克自己的感觉。
5秒法则是梅尔﹒罗宾斯 (Mel Robbins)提出来的。也是她在生活中最糟糕的时刻发现的这一法则。
那个时候她的人生和工作都遇到了非常大的瓶颈,她的丈夫的餐馆生意也因为金融危机失败了,家里几乎破产。
遇到了人生的低谷总是让人不安,她的起床变成了一件非常困难的事情,每天早上闹钟响起的时候,她都知道得起床了,可是就是一次又一次的打瞌睡,起不来。
她也知道需要去找一份工作来增加家庭的收入,要对自己的丈夫好一点,不要因为这样的危机影响了她们之间的关系等等,但是,她就是做不到啊,听了很多道理,却过不好她的一生!
有一天早上,闹钟依旧响起了,她在心中给自己这样一个信念,倒数 5 秒后就起床,于是她在心中开始倒数起来: 5-4-3-2-1,起床!
她真的起床了,她突然发现这 5 秒钟给她带来了改变,于是开始在她的生活中运用 5 秒钟法则,她发现自己的生活得到了很大的改善,每当她知道需要做什么的时候,就会在心中默默的倒数 5 秒钟,然后行动!
5-4-3-2-1. action!!!
可能有朋友会有疑问,就这么简单? 倒数 5 秒钟真的能够改变?
我们知道要做什么事情真的是远远不够的,我们需要有某种力量带我们进入行动的状态,而不是坐等动力的到来,动力又不是你娘亲!
说来就来?
5秒法则的定义是这样的:
如果你有一个冲动去做一个目标,你必须在 5 秒内移动你的身体去做,要不然的话你的大脑就会抹杀这个想法。
当我们真的迈出那一步的时候,开始行动的时候,我们的大脑就会重建习惯,然后抹去以前已有的习惯。
不管你想健身,学英语,创业,提升自己,无论行动看起来是多么的微不足道,没关系,你已经知道应该做什么事情了,给自己 5 秒钟时间,现在就行动起来。 RIGHT NOW!!
在写着篇文章之前,我知道看完书要总结,要记录,要分享,但是我的感觉告诉我,晚点再写吧,要不躺床上,玩手机先。我知道我的思想又跟我的感觉在battle了,我闭上眼睛,倒数 5 个数, 5-4-3-2-1 ,将自己的身体移动到电脑前,打开IDEA,写了起来…这不,行动起来之后真是开心。
请允许我再说一遍:如果你有一个冲动去做一个目标,你必须在 5 秒内移动你的身体去做,要不然的话你的大脑就会抹杀这个想法。
事实上,你花了时间完了这篇文章,你就已经在花时间投资自己了,这就是你和别人不一样的地方。
]]>参考文献 : 《5 SECOND RULE》 ,梅尔·罗宾斯(Mel Robbins)
开源项目地址:fastdfs
如果说把互联网比喻成蜘蛛网,那么爬虫就是在这张网上的蜘蛛,它可以在上面爬来爬去。在互联网中,爬虫就是机器人,你应该对百度和 Google 很熟悉吧,为什么我们可以很快的从它们的搜索引擎中获取到资料呢?
原因就是它们都有自己的爬虫,在整个互联网上,24小时不间断的爬取那些愿意让它们爬取的网站内容,爬虫将这些内容的索引保存下来,放到百度自己的数据库里面,所以用户搜索的时候,就能很快的搜到你要的网站。
永远对这个世界充满好奇心,也许会让我们更愿意学习,我觉得最好的学习动力来源于好奇,好奇产生兴趣,兴趣促进学习,学习使人快乐。
那么 python 爬虫应该学习什么知识点呢?
除了好奇心之外,有个学习方向能够少走点弯路,就像在实习的时候,能够遇到一个好老大,给你稍微指一下方向,比你自己瞎jb琢磨的结果肯定结果相差很大。毕竟人家认知比你高上一截。
要用 Python 来写爬虫,当然是需要 Python 的基本语法了。Python的基本语法不难,之前我就写了一个小教程,讲的是 Python3 的一些基本使用,可以看看这里:python3入门基础有趣的教程
爬虫要去抓取网页上的内容,一些请求参数和返回数据信息,需要去分析和抓取,熟悉一下抓包工具的使用还是很有必要的,这不,我也写了一个关于 Fiddler 的使用:Fiddler抓包工具完全使用教程,还顺便装了个逼!
Python 有一些内置的库,专门对一些网页数据的请求和解析使用的,比如urllib,http。
抓包获取到的数据,有很多数据是你不想要的,我们只需要拿到我们想要的数据就可以了,那么这个时候呢,正则表达式就派上用场了,常用的有:re,Xpath,BeautifulSoup。
有些网站被爬取怕了,做了一些爬虫的限制,要学点反爬机制才行,header,robot,时间间隔,ip代理,UA限制,Cookie限制等。
爬取到的数据要存储下来吧,那么就要会数据库的操作,比如mysql。还要会数据去重操作。
提高爬取数据的效率,就需要使用多线程,分布式。
站在巨人的肩膀上尿尿,那么就需要知道框架怎么使用,比如Scrapy,PySpider,简直牛逼。
对于每个人来说可能都有自己的想法,有些人想要自己的工资涨点,无可厚非,有些人就是感兴趣,想玩玩,有些人单纯为了泡妞,有些人喜欢走出自己舒适圈,多学点。
但是有一点肯定的是,技多不压身,牛逼的人总是在学习,傻逼的人总是在抬杠和叫人别学。
如果你具备了 Python 的基础知识了,那就可以根据以上的知识点进行 Python 爬虫的学习。最主要是多动手,多练,熟能生巧是亘古不变的道理。
Python之禅说过这样的话:
爬虫涉及的技术包括但不限于熟练一门编程语言(这里以 Python 为例) HTML 知识、HTTP 协议的基本知识、正则表达式、数据库知识,常用抓包工具的使用、爬虫框架的使用、涉及到大规模爬虫,还需要了解分布式的概念、消息队列、常用的数据结构和算法、缓存,甚至还包括机器学习的应用,大规模的系统背后都是靠很多技术来支撑的。数据分析、挖掘、甚至是机器学习都离不开数据,而数据很多时候需要通过爬虫来获取,因此,作为一门专业爬虫工程师都是有很大的前途的。
说的真好,共勉!
作为 Python 爬虫的入门教程,我想有必要来个爬虫程序压压惊,爬取性感美女的图片,然后保存到自己的电脑里面。爽歪歪~
先看下效果吧,这是我把爬取的图片自动存储到的文件夹里边:
爬虫三步骤:抓取,分析,存储。
首先我们要有个目标对吧,我们想要抓取美女照片,就去找找看哪里的网站妹纸多,那咱们就从哪里下手呗。
我发现这网站 http://www.meizitu.com 的妹纸图不错啊,那还等什么,抓取呗。
在 python 中有个叫做 requests 模块,直接 pip install 就可以了,然后访问这个网址获取相应的源码:
1 | response = requests.get(url) |
比如我想获取性感美女的源码,那么我的 url 就是 http://www.meizitu.com/a/sexy_1.html 通过get请求我们就可以获取返回的响应体了,我们通过response.text就可以或源码。部分源码截图如下:
抓取完了之后,我们对我们感兴趣的内容要进行分析了,这时候就涉及到「正则表达式」,根据我们定义的一些规则,来获取我们想要的内容。
我们现在当然是对返回源码中的美女图片感兴趣啦,从返回的源码中就可以看到,美女的图片都是包裹在 img 标签中的:
那么我们就可以用 re 模块来匹配获取我们想要的图片链接了:
1 | p = r'<img src="([^"]+\.jpg)"' |
获取到的部分图片链接截图:
既然获取到图片链接了,那么接下来就可以存储了,这里暂时存储到自己本地电脑上吧:
1 | with open(filename,'wb') as f: |
ok,这样就完成了,是不是很简单?当然爬虫说简单也简单,说复杂也复杂,关键是要看自己想做什么事情,如果你从这个例子中发现自己对 python 又多了些许兴趣,那不妨多关注我,我往后给你写一些 python爬虫 所需要的知识点,例如其它的爬虫模块如Scrapy ,一些表单的请求参数,反爬虫,cookie,多进程抓取等等。
专门为 Python 开了个公众号:学习python的正确姿势 ,在里面发送 「meizi」获取抓美女的源代码吧。
不说了,我再去抓取多一点美女的图片了。
在《终身成长》一书中,作者卡罗尔·德韦克提到了「成长型思维」这一概念。她发现了思维模式的力量,有两种不同的思维模式:
固定型思维
成长型思维
固定型思维的人觉得人的才智是天生的,是我们后天没有办法改变的。更愿意相信有些东西是靠天赋的。他们觉得成功的来源是事情的结果。
而成长型思维的人觉得不管什么技能,无论什么领域,只要通过努力就可以获得,他们比较乐于接受挑战,积极的拓展自己的能力。他们觉得成功的来源是尽自己最大的努力做事情,学习,和提高自己。
固定型思维的模式认为智力是固定不变的,会产生一种让自己表现得聪明的欲望,因此他们:
遇到挑战时 –> 避免,逃避
遇到阻碍时 –> 自我保护或轻易放弃
认为努力 –> 不会有结果的或者会带来更坏的结果 - -
被批评时 –> 忽视
他人成功 –> 感到他人的成功对自己造成了威胁
结果他们很早就停滞不前,无法获取自己本来有潜力取得的成功。
成长型思维的模式认为智力是可以提高的,会产生一种学习的欲望,因此他们:
遇到挑战时 –> 迎接挑战
遇到阻碍时 –> 坚持不懈
认为努力 –> 熟能生巧
被批评时 –> 从批评中学习
他人成功 –> 从他人的成功中学到新知识,获得灵感
结果他们取得很高的成就。
其实我们都同时拥有这两种思维,只是我们在不同的时期使用了不同的思维模式。
为什么有些程序员做了很久还是一个普通的程序员,而有一些程序员慢慢的变成了管理者?佼佼者?我想他们应该是有更高的思维程度,他们愿意提升自己的思维,更多的选择用成长型思维来提升自己,从而获得更多不同的视角。
使用成长型思维的人往往能够坚持,坚信能力是可以通过自己的努力获得,从而改变自己。
而使用固定型思维的人拒绝改变,他们更愿意使用自己熟悉的东西,拒绝挑战新事物,认为有些东西就是靠天赋的,自己不是那块料。
前两天微信之父张小龙获得了高尔夫欧巡赛的冠军,一个把产品做到极致的人,也把高尔夫打到了极致。说张小龙是成长型思维的人一点也不为过。
所以,我们需要成长型思维,别让固定型思维毁了自己。
有个可喜的消息就是我们的成长型思维是可以通过锻炼得到的,我们的大脑和肌肉一样有着很强的可塑性。我们高中时期生物课就有讲到,大脑中的神经元之间,负责传递信号的突触会根据环境和学习不断的改变。当我们获取新知识,就会产生新的突触,当我们复习已有的知识,突触就会连接的更加巩固。
我们对事情的本身应该更多的关注与过程,而不是只关注结果。往往我们能从过程中获取经验。比如说小明考试考了 100 分,那么此时作为家长最好的夸奖方式是夸奖他的过程,而不是说:
哇~你好棒,考了 100 分,今晚给你加鸡腿!
而应该关注于过程,可以这么说:
哇,你真棒,想必你的学习方法很棒,平常学习过程中应该很认真仔细,得到这样的结果,是你应得的。
关注于过程,我们的成长型思维会让我们思考在过程中遇到的问题,怎么去解决,在过程中获取到的经验,下次怎么去应用等等。
尝试做一些有挑战的事情,跳出自己的舒适圈,就拿编程来说,可能我们一开始学习的是某门编程语言,有些人会使用这门语言了,就一直使用它,如果我们能跳出自己的舒适区,去学习更深层次的东西,比如算法,又或者去学习另一门语言。也许在这一过程中我们会发现更多的视角,看到问题的本质。
那些原本我们认为做不到的事情,当我们下定决心去做的时候,就是跳出舒适圈,从而我们把焦点放在过程,想方设法让我们去做到,不断完善自己的成长型思维。不要掉入「就这样了」,「无能为力」,「我就不是这块料」等固定型思维的陷阱中去。
终身成长,终身学习。
]]>在 PyCharm 中,打开已有的项目有 3 种方式。
- 欢迎界面中选择
open
- 菜单栏中选择 File->open
- 打开远程 Git 的项目
open
来打开你电脑中已经创建过的项目:选择已有的项目
当你第一次打开PyCharm的时候,你可以点击 Create New Project
来创建项目,也可以通过菜单栏File->new Project
创建
当你打开或者创建完一个项目之后,你就可以看到你的界面张这个样子:
我们逐一来了解一下这些窗口都代表啥意思吧。
Project view :项目视图窗口,在这里列出了你的项目文件。
Editor:这里就是敲代码的地方啦。上面有个 Tab 标签,主要是让你清楚的知道你在哪个文件里面敲代码。
Navigation bar :这里是导航栏,你可以点击左键快速定位到文件相应的位置,点击右键对其进行操作,比如运行,debug操作等。
Left gutter:代码左边的东东,你可以在这里打断点,显示代码行号,隐藏显示代码块等操作。
Right gutter:代码右边的东东,可以看到又不同的颜色块,它们分别表示代码的提示,例如错误,警告等信息。点击它可以快速定位到代码指定地方。
Tool windows:在底下的工具窗口,你可以在这里打开终端,项目管理,代码搜索等。
The status bar:显示你文件项目的信息,比如文件编码,当前的行数等。
在左下角有一个按钮,你可以点击它会展示出一些窗口选项,你可以在这里快速的选择要打开的窗口:
当你在敲代码的时候,PyCharm可能会知道你接下来你先要操作什么,会给你提供一些建议,你可以直接选择它们来补全你的代码。会节省你很多时间。
有时候你代码写错了或者有什么需要进行额外的操作,你可以使用快捷键 Alt+Enter
来选择你要的操作:
你可以通过快捷键Alt+Insert
来快速创建一些方法:
还可以使用快捷键Ctrl+Alt+T
来对已有的代码进行操作,比如添加if语句,异常等。
PyCharm有个非常强大的功能之一就是搜索,假如你的项目很大,或者你接手别人的项目,想要快速找到你需要的代码,那么PyCharm的搜索功能可以帮到你。
你可以在当前文件中搜索相关内容,可以使用快捷键Ctrl+F
,想在整个项目搜索相关内容可以使用Ctrl+Shift+F
。
可以使用快捷键Alt+F7
,PyCharm会将被使用到的地方列出来。
可以使用快捷键Ctrl+E
将会调出最近文件的窗口,可以快速选择你要切换的文件。
有些快捷键忘记了怎么办?可以使用Ctrl+Shift+A
,然后搜索快捷键的名称,就可以知道使用什么快捷键了。
双击 shift 键就可以查找所有地方的文件了,非常好用!
大家都知道当下两个大趋势就是人工智能(AI)和区块链,有些人觉得人工智能听起来有点危言耸听,感觉离自己的生活还很远。不以为然。
我觉得不然,科技日新月异的改变着,凡事都要有点敬畏之心。
想想现在为什么那么多产商在研究生成智能音箱,例如国外 Google 的Google Home,亚马逊的Echo,国内的小米小爱音箱等,如果说浏览器是PC端的互联网的入口,APP,小程序是移动物联网的入口,那么智能音箱很可能就是人工智能物联网的入口。
百科对人工智能的定义是:人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
对于人来说,有两个能力比较重要,就是「劳动能力」和「认知能力」,对于劳动能力而言,现在已经有很多机器可以取代那些重复又简单的工作了。
而对于认知能力,更多的是人与人之间的沟通,理解情绪,还有学习。这也是 AI 正在发展的方向。
我想接下来,AI可能会对人类产生的影响有这么几点:
- 改变人类的工作方式
- 将有很多人失业,在经济市场中处于多余的尴尬境地
- AI 将超越人类的认知能力,夺走人们决策能力,主控权,比如帮我们在人生中做决定,跟谁结婚,在哪工作等等。
现在很多人,需要资料的时候,都会通过百度或者 Google 搜索获取,也就是,人们的获取信息能力已经全然交给搜索引擎了,往往搜索出来靠前的几条结果,决定了你需要的信息结果。
现在的BAT等互联网巨头,提供了很多的免费服务,娱乐,资讯等等,我们觉得很爽,疯狂的使用,心甘情愿的分享自己的喜好,而这一切的行为都被记录起来,成为他们的数据。
有了这些数据,可以给你进行画像,通过数据分析,就可以知道应该推什么广告给你。
但给你推广告并不是他们真正的目的,或者说不是他们接下来想要做的事情,他们记录了我们的所有上网行为,成为了他们的数据,这些数据对于他们来说,就是价值。而我们将变成了他们的产品。
当 AI 越来越牛逼的时候,他们就可以为我们做出人生选择,甚至操纵我们的情绪。
可能你会觉得,那岂不是很棒?以后就让 AI 帮我做决定,有什么事情交给 AI 不就得了。但是这样就失去自我了呀。
是有可能以后机器帮你学习,甚至帮你编程,但是凡事都有利与弊。
我们应该学习生活中比较通用的技能,比如独立思考,与他人沟通,合作,提升自己的认知水平,锻炼自己的创造能力。
每当有新事物来临的时候,我们应该学会随机应变,保持心理的平衡,认识自我。
AI 能够帮助我们,也会害了我们,所以我们应该不断的学习,不断的重塑自己,使得将来的我们与AI相辅相成,过上更加幸福的生活,而不是,因为AI,而没了自我。
最近在朋友圈看到一些朋友在装逼,我觉得装逼没毛病啊,我也喜欢装逼,生活这么苦逼,有些逼确实是需要装的。
但是,不是所有的逼都能拿来装的。要装就装那些通过努力得到的逼。
来说几种错误的装逼方式:
之前跟一个认识不久的A君一起吃饭,吹吹牛逼。
聊到女人的时候,他说他一朋友很厉害,一脚踏五六条船,玩的可6了。聊到钱的时候,他说他一朋友超有钱,天天开跑车去玩,有时候还会叫上他。聊到技术的时候,他说他一朋友技术超牛逼,之前把它们学校的系统黑了都没人知道。
TMD,我发现他 10 句话有 9 句话是「我的朋友怎么样怎么样」。
我真的感觉我不配当他朋友啊,没办法成为他口中的「我的朋友」。从那顿饭之后我就疏远他了,不是我有多清高,是我真心觉得,我不属于他的朋友圈。
我当然知道他的有些朋友是他捏造出来的,但是这逼装的有点过甚至有点假了。我不喜欢!
我偶尔也会拿我朋友说事,但咱们起码说的是事实而且有点价值。
每个人都有虚荣心,这是天性,只是有些人虚荣心不强,看起来低调一些,而有些人虚荣心超强,强到可以往自己脸上一顿揍,肿的像头猪,说自己是个胖子。
最近一些 GitHub 刷 star 的新闻真是让人大跌眼镜,可能有些人不知道,现在有些公司招聘的时候会看一下这个人的 GitHub 上有没有写过什么项目,如果有好一点的项目是一个加分项。有些培训公司为了帮助学员找到工作,居然帮忙刷 star 。
还有些人仅仅就是为了装逼,真的就去花钱刷赞和commit数,可能他自己连 GitHub 怎么使用都不会,但是看到他页面有几百个人给他 star ,哇~ 好牛逼!
应该每个人的微信朋友圈都有那么些人在打卡,打卡的方式确实好,比如每天背十几个单词,打一下卡,每天读点书,打一下卡,每天跑下步,打一下卡。
然而,我很少看到有人打卡超过 30 天的。前五六天打卡很勤,然后接下来就消失了。
坚持一件事情谈何容易?
坚持这件事,一开始那么几天很是兴奋,动力满满,所以是很容易的,这时候装的逼,能保证后面还能坚持下去么?如果不能保证,前面的装逼不就是打脸么?
没把握坚持下去,那么为什么要装逼?
对于没把握能够坚持下去的事情,我一般不会在朋友圈装逼打卡。
所以,还是要装一些高级一点的,一些要通过(认真)努力得到的逼。
比如有些人认真的看了一本书,花了时间做了笔记,并把他的一些想法分享给大家。 这是装逼么?是!
比如有些人努力的研究了技术,花了时间做了自己的网站,并把他的网站分享给大家。 这是装逼么?是!
比如有些人认真的看了电影,花了时间写了影评,并把他的一些感受分享给大家。 这是装逼么?是!
比如有些人努力的学习摄影,花了时间拍了一组美照,并把他的一些拍摄心得分享给大家。 这是装逼么?是!
比如有些人努力的学习健身知识,花了时间练出了肌肉,并把他的一些自拍分享给大家。 这是装逼么?是!
比如….
这些都是装逼,然而,是通过努力得来的逼,是无形的逼,也就是:无形的装逼,最为致命!
学到了么?
互联网很牛逼,现在几乎所有你想要的资源都能在互联网上找到,可是为什么有些人就是找不到他们想要的呢?而有些人却能轻而易举的获得?
我想这两者之间的区别在于:
1.搜索能力
2.钱的问题
3.信息差
互联网的资源那么多,百度和 Google 给了我们搜索互联网资源的入口,也就是搜索引擎,懂点搜索技巧能让你更容易找到你想要的资源。
对于搜索技巧我之前找到你要的资源,Google高级搜索技巧中说过了,这里就不再多说了。
对于第二点,钱的问题,有钱人想要找资源很简答啊,就是花钱,花钱买时间买资源是他们最喜欢干的事情了。当然也不一定是有钱人才喜欢干这事,相对聪明一点的人也会这么干。
那么来说说信息差吧,什么是信息差呢?
举个最简单的例子,闲鱼上卖的那些二手教程,为什么会有那么多人买?就是因为卖教程的人知道这些资源去哪里获取,而那些买教程的人天真的以为或者“懒惰”的认为只要在这个卖家这里才能获取到资源。
这就是信息差,信息差产生了价值。其实你回头看,那么多生意,不就是在做信息差,赚取差价么?
以学习编程为例吧,有些人想要学习编程,会怎么做呢?可能他会想到去培训机构学习。也有些人想自学,于是到类似慕课网这些视频教程网站付费学习。
但其实也有免费的视频教程学习的地方。而且质量还很不错,接下来就说两个,可能你不知道的获取资源教程的信息差。
可能有些人觉得奇怪,b站不就是一个二次元的网站么?让我上面去学习 cosplay 么?
其实不然,b站上面的学习资源简直超乎你的想象:
比如学习英语:
学习Python:
学习PS:
太多了,就不一一举例了。
油管,其实b站有点像国外的油管,但是之前b站整顿了一下下架了很多视频。油管可以说是最全的视频资源平台。
国内很多需要会员的才能看的视频都能在油管找到。教程资源就更不用说了:
比如英语教程:
比如计算机教程:
比如java ssm教程:
这些都是信息不对称,也是对信息的一些敏感的。在自己承受范围能用钱买信息买时间当然是不错,但是有能掌握一些别人不知道的信息的能力也很可贵。
最近看了李笑来老师的新书《韭菜的自我修养》。
前不久李笑来的录音被疯传,我听了,那时候我觉得吧,虽然说的都是大实话,但是里边夹杂了一些脏话,还有一些言论触及到了“韭菜们”脆弱又敏感的心,所以后来就有我们看到的很多骂李笑来的人,说他割韭菜,吃相难看等。
我对他了解不多,只是看过他的一些文章和书,所以这里不想评价李笑来老师,而且,也没资格。
还是来聊聊这本书吧,这本书呢,说的都是大实话,其实书名叫做韭菜的自我修养并不是告诉你怎么成为更好的韭菜。而是告诉我们说,怎么去摆脱韭菜这个宿命。怎么去做交易,如何把控好风险等。
有些人可能会说,我现在又没钱,不需要投资,等自己有钱了再说。这就有点韭菜思维了,越是没钱的时候,越是学习的时候,研究价值再去买卖,是聪明,一进场就买卖再去研究价值,就是愚蠢。
韭菜这个词在 2018 年特么火,特别是在 P2P 频繁暴雷的时候,大多数人对韭菜的理解就是在做交易的时候赔了钱或者被骗了钱的人。比如那些借钱给 P2P 平台,最后平台跑路了,那么投进去的钱也跟着没了,这时候这些钱没了的人就被认为是韭菜。
我一朋友,之前发现某 P2P 平台收益率挺高,一开始投了点钱,赚了不少,尝到了甜头之后就去申请好多张信用卡,把钱套现了然后都投在了这个 P2P 里面去,后来这个平台爆了,老板跑路了。他整个人都蒙圈了,直接欠下一屁股债。只能说他这根韭菜被割的连渣都不剩。
书中一开始对韭菜的定义是:“在交易市场里边没有赚到钱,甚至赔了钱的势单力薄的散户”,他们一般是缺乏基本的阅读能力,比如购买所有的产品都不会去看说明书的人,他们拒绝学习,拿来主义,伸手党,他们一进场不管三七二十一就买买买,说白了就是有点傻逼。
在市场中交易的时候都有这个诡异的现象,就是你一买,他妈的就跌了,你一卖,他妈的就蹭蹭的涨。
这是因为我们是普通人,属于大部分的人,当连你都在讨论某股票的时候,说明行情已经到头了,牛市要结束了。
这时候最好的做法就是别动,啥都不买,等到了熊市,你发现大家都在骂娘的时候,你再买。
但是韭菜不这么做,买了再说。
有一种最傻逼或者说最惨的投资就是一进场就花掉了自己的钱,不仅如此,还花掉了借来的钱,企图借钱投资,还加上杠杆。
被套牢了慌的一逼,然而对于一些聪明的人来说,他们会怎么做?
- 还有钱就慢慢补仓
- 钱不够就在场外拼命赚钱
- 不断的学习
很多人会把长期和短期来对投资和投机作为判断依据,一般认为短期的就是投机,长期的就是投资。可是投机也有长期的,投资也有短期的。比如成功的短期投资,成功的长期投机。
所以投资和投机的判断依据应该是两个字————学习。
投资者更加善于学习,他们会在交易前认真的研究,深入的学习,交易后总结归纳,深入思考,完善下次交易的策略。
而投机者呢?他们拒绝学习,最好有人告诉他怎么买就行,伸手党。这其实就是韭菜,是傻逼。
那些牛逼的交易者,他们都是学习的高手。我很赞同书中的一句话:「思考带来决策,决策带来行动,行动改变命运」。
韭菜们认为交易就是一场零和游戏,也就是说他们认为只要一方的赚钱了,必然意味着另一方的赔了同样的钱,各方的收益和损失相加总和永远为0。
这是一种错误的观念,在牛市的时候,大部分人都赚钱了,赔钱的只有少部分,他们各方的收益和损失相加总和不可能为0。
所以,交易是一种非零和游戏。正因为非零和,买家和卖家之间的思考不一致,才会产生交易。
韭菜被割就离场了,并不是因为他们没有耐心,而是因为他们没有实力,也就是没有现金流,没有场外赚钱的能力。所以没有办法去控制仓位。而有实力的人能够慢慢补仓,不着急,所以看起来很有耐心。
获得经验最好的方法就是自己身体力行的去实践,但是对于风险的经验,绝壁不是你自己去实践,而是观察别人冒险,去分析,总结,学习。
要学会计算风险,应该是先胜而后战,打有把握的战,没有 50% 以上的胜率咱们不干。
在投资中有一个叫做「回报风险比」的概念,也就是 回报风险比 = 回报/风险。 显然,回报风险比越高,就越有赚钱的把握。
那么应该如何提高回报风险比呢? 当然是提高分子,降低分母。
对于分子来说,也就是回报,最好的做法就是买入就不动分子了,不管涨跌,穿越多次牛市。
对于分母来说,也就是风险,风险主要涉及到「止损的设定」和「交易的频次」。
对于止损的设定不是随便乱设置的,应该看交易标的日常波动,结合多种因素设置止损。
交易的频次就要降低,不要狂买狂卖,每次交易都有手续费的。这也是风险的因素之一。
看到一个搞笑的,说的是韭菜在跟女朋友做爱都一直看着手机盯着盘。
大多数韭菜都没有了生活,他们一旦进入交易就整天盯着K线图啥的,而聪明的人是把时间用于认真生活,学习成长,这样他们也更容易做到降低交易频率,从而降低了风险,提高了回报风险比。
他们谈的更多的是趋势,而这种趋势只是眼前的上升和下降,但这不是趋势,这只是表象。
周期的构成是一个上升的趋势加上一个下降的趋势,而真正的趋势,是要多个周期之后才能展现出来的。
韭菜没有这概念,所以没办法降低交易频率。快入快出,痿了吧?
我记得我之前有一个中午在美团上点了外卖,那时候等了很久,外卖还没到。肚子饿得慌,只能催小哥快点。小哥居然没回。
那时候我点了一份粥和一份肠粉。想着这两样做起来也不用多久啊,而且距离我的地方也不远,怎么那么久?
再等了一会小哥才给我打电话说到楼下了,叫我下去取,我那时候是有点不爽的,打算到楼下屌他一顿。
等我到了楼下,我看到小哥的表情很奇怪,有一种好像考试不及格怕被家长知道的样子。他说:”不好意思啊,我刚骑车的时候摔倒了,把你的餐给撒了。”
我看到那个餐,真是惨不忍睹,筷子都插到餐盒里面去了。小哥的手和脚都擦伤了,贴了几块创可贴,估计是刚买的。
小哥看到我楞了一下急忙说真的对不起,对不起,一边说一边从自己口袋掏出 20 块钱,说是要弥补我。
本来一开始我是有点生气的,但是不知怎么的看到他这样我一点也气不起来。说了句:”没事,钱不用给我了。你也不是故意的。”
小哥差点哭了,执意要给我这 20 块钱。
说真的,我当时完全可以屌他:”你他妈送这么久,还把我的餐弄成这样,吧啦吧啦…”,然后顺手把 20 块钱拿了,顺便在 APP 上给个差评。
但是我没这么做,是因为我突然想到,如果对方是我,我处于这种情况,我一定已经非常自责了,会想很多,肯定会被对方批评,如果被投诉了,那工作就不保了啊。
也就是我当时这么换位一想,说出了那句你也不是故意的。最后我还接过小哥手中的餐,跟他说了声下次路上注意点。
小哥连声感谢,眼圈泛红,一直目送到我走进楼门。
回到家,我反而觉得心情特好,感觉自己做对了一件事情。也明白了,少去批评别人。
批评别人的事情少做,因为人非圣人,每个人都会犯错,因为术业有专攻,每个人都是从小白开始做起。
批评,除了让对方心里难受之外,对方可能还会跟你更多的争论,甚至产生矛盾。倘若我当时批评了小哥,我想他肯定一整天都不在工作状态,心情会很不好,说不定又在路上摔多一次。
批评要少做,相反的,鼓励与赞赏可以多做。
不知道别人怎么样,反正我自己被人夸一下真的会开心,特别是我很努力的把事情做好之后,被团队的朋友说一句彬哥牛逼,虽然我嘴上笑笑说没什么啦,但是内心真的在偷乐。
教你一个骂人骂到对方爽爽的方法,独家秘笈,屡试不爽哈,你一边骂他,他还脸上笑嘻嘻,心里依然笑嘻嘻。
比如你骂他:”我x你妈啊,你也太牛逼了吧”。
或者你骂他:”你他妈的,你怎么做到的,真是太厉害了”。
又或者骂他:”你他妈的,长得也太好看了吧”。
反正就是你骂了人家,要记得在后面夸他一句。而且不要太虚伪的那种,那么这时候他往往会忽略你前面骂他的那一句话。
或许这就是人性吧。
所以呀,当身边的朋友真的做出点小成绩出来,真心的鼓励和赞赏对方,真的能让对方心情好,做事效率更高的。
之前不知道为什么自己照镜子的时候老是对着镜子说:”你他妈长得帅有什么用?”,我想现在我已经知道答案了。
可以根据你自己的喜好,把 Pycharm 定制成你自己喜欢的样子,接下来说说怎么去定制你的 Pycharm 编辑器。
根据你的喜好,你可以把 IDE 中的错误信息,面板,代码等颜色进行定制。
使用快捷键 Ctrl+Alt+S
打开 PyCharm 的设置面板,在Editor | Color Scheme | General
选择你喜欢的颜色主题,我这里选择的就是 Darcula,喜欢这种黑色的极客范。
想要修改 Pycharm 中默认的字体,可以使用快捷键 Ctrl+Alt+S
打开设置面板,然后进入 Appearance & Behavior | Appearance.
,选择 Override default fonts by (not recommended)
,接着你就可以更改字体和大小了,我个人认为默认的就挺好看了。
处于垂直方向的窗口可以使用 Ctrl+Shift+上
或者 Ctrl+Shift+下
调整窗口的大小。
处于水平方向的窗口可以使用 Ctrl+Shift+左
或者 Ctrl+Shift+右
调整窗口的大小。
使用快捷键 Ctrl+Alt+S
打开 PyCharm 的设置面板,进入 Editor | General
,把Change font size (Zoom) with Ctrl+Mouse Wheel
给选上,然后
可以到你的打代码的面板进行骚操作了。 按住 Ctrl 键,然后滚动你的鼠标滑轮,可以看到字体可以根据你的需要变大变小了。
Pycharm 的爽点之一就是可以使用各种快捷键,让你的快的飞起。使用快捷键 Ctrl+Alt+S
打开 PyCharm 的设置面板,进入 Keymap
。
在这里你可以设置快捷方式,如果你之前使用过其他的编辑器,完全可以选择它们,Pycharm可以延用这些编辑器的快捷键使用。
另外,如果你想对个别的快捷键设置,只需要 右键–>Add keyboard shortcut
进行设置就可以了。
往后有时间介绍一些常用的快捷键吧,让你的编辑器飞起来。
进入设置面板,然后进入Editor | Code Style | Python
,可以设置你的代码风格,比如 tab 有几个空格,其实我觉得默认就挺好了。
ok,以上就是PyCharm常用的定制方式。
PowerDesigner 破解版工具分享在知识星球,仅提供给会员使用。
PyCharm 给 Python开发人员提供了很多的基本工具,能够让我们在上面很爽的开发我们的 Python 代码。 Python 出自 jetbrains,如果你开发过 Android 或者 JAVA, 那么你应对 Android Studio
和 Intellij IDEA
不陌生,它们都是基于jetbrains的编辑器。不得不说,各种快捷键和插件真的是牛的一批。
PyCharm 有三个版本,它们分别是:
Community 和 Educational 版本是开源的,可以免费使用,不过呢,能用的功能相对来说就比较少了,Professional 版本提供了一整套优秀的工具。看你自己喜欢,我自己下载的是 Professional 版本。
点击PyCharm下载,根据你自己的操作系统选择下载相应的文件。
安装完成之后,如果你是第一次使用 PyCharm 的话,那么直接选择「 Do not import settings 」就可以了:
接着 PyCharm 会让你选择主题,有 Default 主题还有 Darcula 的,我这里选择 Darcula ,感觉极客一点。不过现在随便选也没关系,因为等下进入可以自己设置。
PyCharm的牛逼之处之一就是拥有丰富的插件,正是有了这些插件才让我们在开发的时候爽歪歪,比如有 MarkDown 插件,Git插件,Vim插件,太多了,如果你现在不太清楚有什么插件用的话,没关系,往后我写篇专门介绍插件的推荐及使用。
当你安装完成之后, Pycharm 会有一个窗口是这样的,直接点击 「Create New Project」来新建一个项目, open 是打开已有的项目,我们一开始木有,所以先创建吧:
如果你用的是 Professional 版本的PyCharm,是需要收费的,不过它有30天免费的试用,激活的方式有三种:
如果你是学生党或者老师的话,那么你可以使用你的学生证免费授权申请方式获得专业版本。
是不是很良心,不仅如此,官方还给初创公司50%折扣优惠,如果你所在的是创业公司,资金预算不是很多的话,不妨去申请优惠:针对创业公司的优惠计划
假如你既不是学生也不是老师,也不在初创公司,钱暂时不是很多的话,可以在公众号「学习python的正确姿势」发送 pycharm 获取激活码。
以前我在跟产品经理讨论的时候,常常发现我们聊的不在同一个点上。我想的更多的是这个功能能不能实现?怎么实现?需要多少时间?怎么写代码好点?而产品经理想的更多的是用户的需求,用户喜欢怎么样的操作,怎么样才能让用户更方便的使用等。
可以看得出来,我和产品经理的思维方式是不同的,那会我只是局限于这个功能本身所需要的技术,而产品经理考虑的更多的是用户本身的需求。
我也经常发现有许多程序员和产品经理互怼,其实他们都希望这个产品更好,但是思维方式不同,考虑的地方不一样,所以经常说着说着就吵起来,甚至动手。我想如果程序员能够有点产品思维,那么应该会有更多的同理心,这样沟通起来应该会更加高效。
所以后来我就去了解学习产品方面的知识,在这过程中我发现,其实产品涉及到的东西很多。并不是仅仅局限于交互,用户的需求。
以前在学编程的时候,有一个叫做「面向对象」的概念,那会人们都说「万物皆对象」,说的是每个事物本身就是对象,它有自己的属性,有自己的功能,可以提供服务。后来我发现,其实对象就是产品,也就是说「万物皆产品」。
最近我就在想,如果是我自己做一款产品,我会怎么做呢?是想到做什么就做什么?还是由着自己的喜好来?
其实都不对,首先应该要做的是面向用户,是面向大部分的用户还是面向小部分用户,如果你去看早期的互联网产品大多都是面向大部分用户的,到了后来许多产品就主攻部分用户。我想应该是刚开始的时候红利期,所以面向大部分用户是个大机会,而到了后来
市场需求基本满了,这时候更多人愿意做的是 「1cm宽,100m深」的事情了。也就是所谓的垂直化。
做一款产品确定方向只是开始,接着还需要了解调查目标用户的需求,挖掘用户的需求点通常都是通过用户的人性,比如刚需的衣食住行,人性的一些弱点(贪婪,虚荣,攀比,装逼,好色,懒惰等等),看下现在的拼多多,饿了么,滴滴打车,1024论坛等都无不体现出来。
一般来说,发现用户的需求有痛点,痒点,爽点。
痛点说的是用户的刚需,就是用户本身有需求,而且这种需求是极度渴望被满足的。比如你在沙漠里面没水喝,这时候给你一瓶矿泉水,那么矿泉水就是产品,解决了你的痛点。
而痒点说的使用户有这需求,但是不一定要被满足,比如说你肚子饿了,你是选择吃方便面还是吃一顿海底捞?我想你应该内心肯定选的是海底捞,而这里的海底捞就是你更深层次的需求,但是,不是你的刚需,这就是你的痒点。
再说说爽点,这是用户更高一层的需求了,精神上的愉悦需求,吃饱喝足,干点啥?刷抖音?玩游戏?这些产品就是满足了你的爽点,顾名思义,就是让你用起来感到爽。
挖掘了到了需求然后呢?
需要紧跟趋势找到自家产品的解决方案,紧跟趋势是关键,可以看到从PC到移动,有多少产品死在了PC时代,又爆发出多少移动端的产品。假如有两个人有着共同的idea,也明确了需求,一个人去做PC网站,一个人去做小程序,你说,哪个会更好?
答案显而易见了吧。
当然了,产品涉及的还有很多,比如怎么去做差异化的竞争,怎么利用现有的资源去创造价值,怎么写文案,怎么推广,怎么营销,怎么打造品牌,怎么做数据分析,怎么拓展业务等等都是产品。
所以我认为不要把思维局限于本身的专业领域,学点产品思维是对自己很有帮助的,如果在生活中能够以产品的思维去看待事物,或许能提高我们的思维认知能力。
]]>EasyUI for jQuery 的资源文件下载地址:Download EasyUI Package
EasyUI 的官方文档:Documentation
GitHub就有点像微博,我们可以在上面看一些牛逼的人物写着开源的牛逼代码,觉得喜欢的话就给他们点赞,关注他们,甚至可以直接把他们的源代码拉下来,看着他们的代码,忘了那个她!
GitHub的首页有这样介绍:A better way to work together,也就是说我们除了去关注牛逼的人物还可以在上面一起合作写点东西出来,给我们提供一种更好的合作方式。
GitHub简单来说就是基于 Git 的版本托管服务系统,是全球最大的社交编程及代码托管网站,因为里面大多都是男的在玩,所以说是全球最大的同性搞基社区,哈哈哈!
其实GitHub除了可以让我们代码托管和多人在上面一起协作完成项目之外呢,我们还可以在上面建立自己的博客网站,官方称为GitHub Pages,你可以在GitHub上面创建一个仓库,以github.io为后缀,可以托管你自己的博客网站,直接通过你的仓库名就能在线的访问你的网站了,而且完全免费,我自己搭了个网站托管在上面好久啦,感觉棒棒哒!地址在这:http://www.wistbean.com (以前不知道听谁说,嫁人就要嫁给有自己网站的人,所以我就建了一个,嘿嘿嘿!)
如果你有什么优秀的开源项目在上面被人点赞(star)或者 Folllow,那就很 666 的了,因为在 Github 上面被人点赞要比你在朋友圈被人点赞要难的多的多。如果在上面托管你自己的比较有影响力的开源项目,在面试的时候提供给对方看,也是一个很不错的加分项!
我们通常说在GitHub上面新建一个项目,这个项目就会在Respository里,Respository也就是仓库的意思,可以通过git使我们本地的项目与远程仓库保持同步,这样妈妈就不用担心我们的代码消失不见了!
随着我们的代码提交的越来越多,当有人发现你的开源项目不错,就把你的代码给拉(clone)到他们本地,他们运行后发现有 bug 或者觉得你的代码有问题,那么他就会给你提Issue,我们可以发现他们的Issue,然后我们解决完bug之后可以将其 close 掉,表示我们已经修复了这个bug!
我们去github看别人的开源项目的时候,发现很是不错,那我们就可以给这个项目 star 一下,也就是点赞,同时也是收藏的意思,在我们自己的star列表可以看到我们star过的项目。
如果你对别人的项目感兴趣,或者对他感兴趣,你可以去fork他的项目,fork 之后你就会发现,你自己的仓库里面竟然有一个和他一模一样的项目,更加爽的是,你竟然可以在他原有代码的基础上进行修改或者添加功能!
你给他添加完功能之后你发现,哇靠,我简直就是天才啊,这时候你是不是想告诉他,你这样的功能有多牛逼,那么这时候你就可以给他 Pull Request ,这时候他就看到你的代码,如果他觉得不错,接收了你的 Pull Request 之后,他就可以合并起来,这样他的项目就有你的一部分了!
Watch 就是观察,当你 Watch 了某个项目,就相当于你关注了它,那么这个项目有什么动态,你都可以实时的获取更新。
如果你想分享部分代码片段,可以使用 Gist,专门来分享代码片段的!
这个项目被 star 了10w+,有我一份力量哈哈,这个项目之所以这么多star,是因为它含有许多免费的编程书籍,并且支持许多语言的版本!
中文版地址在这:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md#%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86
这个项目含有许多android,java,设计模式,算法等面试相关的知识与经验,受益匪浅!
地址:https://github.com/francistao/LearningNotes
这个项目是专门为程序员提供的简历模板,包括PHP程序员简历模板、iOS程序员简历模板、Android程序员简历模板、Web前端程序员简历模板、Java程序员简历模板、C/C++程序员简历模板、
NodeJS程序员简历模板、架构师简历模板以及通用程序员简历模板 !
地址:https://github.com/geekcompany/ResumeSample
当然了还有许多牛逼的(比如google,Apache等开源项目)项目在上面等着你去发现!
GitHub上有个shop,里面有许多含有github logo的杯子呀,衣服呀,电脑贴纸呀,真的很酷炫和可爱!
我录了一个GitHub的视频教程,专门讲 Git 和 GitHub 的使用的,你可以在这里观看:
当你老大扔给你这样的图,或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不(一)知(脸)所(懵)措(逼):
(图片来至wikipedia)
(图片来至微信内网页支付时序图)
(图片来至wikipedia)
如果你看了都不会一脸懵逼,那么可以出门左转啦,这篇文章就是来说明这些图的意思,让你在工作交流中,或者在看一些文档,或者看我的一些关于设计模式的文章,甚至架构建模中,都能轻松理解,毫无压力!
刚刚我们看到的第一张图片就是用例图,用例图有以下几个东东:
用例使用椭圆来表示,椭圆里边写上用例的名称:
参与者用一个小人儿,在小人儿下面写上参与者名称,例如学生:
关联用一条线儿表示:
把用例围起来,系统边界就用个矩形啦:
举个例子:
我们可以看到这个
系统叫做 「购物系统」 ;
有注册账号、登录系统、生成订单的用例(这里只列举几个用例,其它用例省略);
参与者有顾客和管理员;
顾客关联到了注册账号和登录系统的用例;
管理员关联到了登录系统和生成订单的用例!
时序图就是我们刚刚看到的第二个图,时序图有以下几个东东:
对象在矩形里边,左边是对象名称,右边是对象类型,下方还有一条线:
用虚线代表的是对象的生命线:
活动条是一个竖着的矩形,当接收到消息的时候,这个对象就会有活动条:
消息用一根箭头,箭头上面写上消息信息,例如一个登录方法 login(userName,passWord):
控制流有三种,普通就是按顺序的一个流程,还有分支就相当于if else:
矩形里边有一条虚线,左上角用ALT表示,当C为true的时候,就执行虚线上方的内容,当C为false的时候就执行虚线下方的内容。
循环控制流:
左上角有LOOP表示循环,当C为true的时候,就循环执行方框里边的内容!
可以看到,每个对象都有它们的生命线(虚线);
一开始用户给类型为GUI(界面)的Login对象发送一个登录信息 「 login(userName,passWord)」 ;
Login这个对象接收到了就会产生活动条,这时候Login这个界面会给类型为Controller的loginController发送登录信息「 login(userName,passWord)」 ;
此时loginController接收到信息产生活动条,这时候loginController去找类型为DB的UserDao,给它发送了一个获取用户密码的信息 「getUserPassword(userName)」;
UserDao接收到信息后产生活动条,返回用户的密码;
此时loginController接收到信息(用户的密码 userPassword),loginController此刻将信息发送给自己,通过verify去校验密码并且用result接收结果;
校验就产生了分支控制流,当resul为true的时候loginController会发送success给Login,当result为false的时候,loginController会发送failure给Login;
最后Login最后给用户发送messag信息。
好了,当你看到这里的时候,你就会发现,以后关于这类的时序图对你来说已经不在话下了。例如本文一开始的第二张图。
类图有以下几个东东:
类名、属性、方法在一个矩形中,分为上中下:
可见性:
数据类型表示形式:
名字 : 类型
例如:
userName 和 passWord 这两个属性是protected修饰的,数据类型都是String;
login() 和 register() 这两个方法是public修饰的,数据类型都是boolean;
关联关系,用实线表示,例如A关联B:
依赖关系,用虚线表示,例如A依赖B:
继承关系,用一个△ + 一条实线表示,例如A继承B:
依赖关系,用过一个△ + 一条虚线表示,例如A实现B:
组合关系,用一个 ♦ + 一条实线表示,例如A组合B:
聚合关系,用一个 ◇ + 一条实线表示,例如A组合B:
聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体。如电脑和鼠标。
组合:表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在。组合关系的“部分”,是不能在整体之间进行共享的。
可以看到,有User类,Customer类,Address类,Role类,Payment类,aliPay类,wechatPay类。
其中Customer 继承 User,User类的userName 和 passWord 这两个属性是protected修饰的,数据类型都是String;
login() 和 register() 这两个方法是public修饰的,数据类型都是boolean;
Address和Role聚合User;
Customer依赖Payment;
aliPay 和 wechatPay 实现了 Payment!
以上,就是关于UML的用例图,时序图,类图!当然可以自己手动画几个试试,感觉挺不错哦,相信你在工作交流中,或者在看一些文档,或者看我的一些关于设计模式的文章,甚至架构建模中,都能轻松理解,毫无压力!
在多年前,我跟朋友借阅了一本书,名字叫《礼物》。
刚开始我是被书名和封面吸引,看了内容之后,我觉得很棒。最近又看了这本书,书不厚,一两小时就能看完,但是作者却花了 5 年时间写了这本书,里面讲了一个关于年轻人和老人的故事。
这个故事是一份礼物,这份礼物每个人都可以获取,而且对于每个人来说,都是独一无二的,如果你找到了这份礼物,你就能更加的幸福,成功,牛逼。
接下来,我就把这个礼物分享给你,也许看完之后,你也可以找到自己的礼物。
年轻人在小的时候就认识了老人,老人跟他讲了一个关于礼物的故事,老人告诉他这个礼物是他一生中最珍贵的,需要自己去寻找。如果找到了这个礼物,那么他就会获得很多财富,也会很幸福,很成功,很牛逼。
年轻人很想得到这份礼物,于是各地的去寻找,用尽了所有方法,看书,上网搜索等等。可是找了很久也找不到。慢慢的,年轻人失去了耐心,就不再去鸟这个礼物了。
后来年轻人开始工作了,不过工作很不顺。虽然他每天都很努力的工作,完成了分内的事情,但是最后还是没有得到晋升,他非常气愤,每天下班回家都感觉到非常的疲倦,不开心。不仅如此,他和他的女票也分手了,失恋的他更是无法振作起来。他的那段日子用现在的话来说就是日了狗了。
年轻人想到了之前老人跟他说的礼物的故事,于是决定找老人谈谈,老人告诉他:“其实这个礼物你本来就知道了的,只是现在没有意识到而已。多想想你感到有效率的时刻,感到快乐的时刻。” 老人建议他把当前的事务先放一放,别太着急找礼物,说不定放轻松一点,答案就出来了。
年轻人听了老人的劝,独自一人去山间的小屋住了一段时间,放慢了自己的生活节奏,有一天晚上,他发现了这个礼物。
他在黑暗的房间点起了火,突然看到眼前的壁炉,他发现这简直就是艺术品,壁炉是由许多的石头砌成的,可以看得出来当初那个砌壁炉的师傅非常用心,每块石头都是精心打磨,精挑细选而成。
年轻人突然发现了什么,这不就是老人跟他说的么,「要得到这个礼物,就多想想自己曾经感到有效率的时刻,感到快乐的时刻。」砌壁炉的师傅在砌壁炉的时候肯定是心无旁骛的,他想象师傅在工作时专注的样子。突然明白了,这个礼物就是专注于此刻正在发生的事情。年轻人不去想过去的烦心事,也不担忧将来的问题,他此刻关注的是眼前的事物,他突然发现,自己不自觉的开心起来,之前从来没有注意到,只把握此刻正在发生的事情原来就是礼物。
难道这个礼物就这么简单?年轻人虽然有点疑惑,但是他现在已经不去想那么多了,只是着手于眼前正在发生的事情,他发现了之前许多没有认真去注意的东西。他也发现,只关注于此刻,自己会变的比以前开心很多。
回来之后,年轻人迫不及待的告诉老人自己发现了这个礼物,老人在跟年轻人谈话的时候,精神全都集中与年轻人谈话上,认真倾听,认真解答。年轻人有个困惑,如果当前处于很坏的情况下,能够把握此刻么?
老人告诉他如果在这种情况下你能专注于此刻,那么你就会发现有些困难和折磨是可以得到改变的,比如说你之前上班不如意,你是经常走神还是完全专注于工作中重要的事情上?你跟你女票相处的时候,你有没有完全投入其中,觉得你女票非常重要?
年轻人明白了,专注于此刻正在发生的事情,发现其中好的方面,并在其中建立信心和勇气,将注意力专注于此刻重要的事情上。年轻人开始重视自己,专注于眼前的事情,慢慢的他的工作效率越来越高,身边的同事和领导都发现了他的变化,年轻人越来越被得到重视。
我想这种专注于此刻就是沉浸于当前正在发生的事情上,比如我们在啪啪啪得正嗨时候,哪有时间去想自己以前过错和未来的烦忧,在看小视频的时候,那一刻我们的注意力完全集中在女主角和剧情中(虽然有些剧情很少),玩游戏,看小说也是如此,那一刻都沉浸其中。
但是如果把这样的专注放到学习中,工作中,就没那么容易了,因为这些事情并不会让我们上瘾,遇到一些未知的领域常常会让人知难而退,忘了专注于此刻。这个时候往往需要想办法,让自己对其“上瘾”。
我有时候晚上写文章或写代码,写着写着一抬头,挖槽,天居然亮了。我想我那时候就是在专注于当前正在发生的事情,每每把事情做完就会觉得特别开心。
所以现在常常会提醒自己,单线程做事,专注于此刻,做好当下的事情。
年轻人越来越觉得幸福,每天都享受当下的时刻,过了一段时间之后,年轻人跟一个人负责一个项目,不过他的搭档不给力,他没有劝说搭档用心工作,而是自己承担了所有职责,慢慢的,年轻人感到力不从心,项目落后了,上级感到失望,觉得之前对他的晋升是个错误的选择。
年轻人知道需要专注于此刻,但是现在总感觉很沮丧,老是想着这个项目和不努力的搭档。他很想知道,如果老人遇到这种情况,会怎么处理?于是他又去找老人谈谈。
老人给了年轻人答案:“每个人都会犯错,而有些人能够更好的把握此刻是因为他们会从过去学习,而不是忽略过去。我们不能改变过去,也不能活在过去,但是我们可以从过去中学习,今天就采用不同的做法,而不是重蹈覆辙,用心的体会过去,吸取其中的经验与教训,这样能让我们更好的把握此刻的乐趣。”
年轻人有点疑惑:“那什么时候该专注于此刻?什么时候向过去学习呢?”
“只要你此刻感到不快乐,想更多的享受此刻,就可以向过去学习。”向过去学习的话可以问自己 3 个问题:
年轻人开始重视向过去学习了,他审视了过去,开始对自己的合作伙伴坦诚的说出自己的想法,希望对方能够和他一起努力完成这个项目,合作伙伴慢慢的被他的真诚所感动,于是开始用心起来,他们的项目完成的特别好,最后年轻人又得到了领导的重视和晋升。年轻人和他的女票感情也越来越好。
现在想想我和这年轻人差不多,也是很少向过去学习,经常把过去给忽略了,没有从过去学习,有时候会在同样的地方掉几次坑,有时候我发现项目出现的 bug,之前就出现过,但是那时候我仅仅是把它解决就完事了,没有从中去做总结吸取经验,下次遇到同样的问题,又得重新审查一遍。
所以我觉得当我们能够从过去吸取经验,然后更好的专注于此刻,才能把过去的包袱丢掉。
年轻人和以前发生了许多变化,职位也比以前高了不少,但是他又遇到新的问题了,他发现他现在要做的事情越来越多。没办法做到每件事都尽善尽美,他发现自己花费太多时间在次要的事情上了,而对于重要的事情总是做不完的感觉,慢慢的年轻人对眼前的工作失去掌控,又被上级一顿怀疑,年轻人垂头丧气,只能再去找他的老朋友。
年轻人从老人那里得知自己还没有领悟到礼物的第三个重要因素,就是将来。
年轻人觉得如果老是想着自己的将来,想着自己什么时候能买上房,什么时候能买上车子,那就不能专注于此刻了,还会让自己更加迷茫。老人表示非常赞同,如果我们老是活在对将来的空想中,就会迷茫,但是我们可以着手创造未来,老人跟年轻人说:“如果你对将来的想法是消极的,那么你今天的行动就是消极的,而你明天创造出来的结果就是糟糕的。”
老人让年轻人想象自己的美好的将来,仔细的想着每个细节,越清晰越好,然后指定一个计划,这个计划可以让自己更清楚接下来怎么走,今天就按计划做一些事情,让它成真,这样的话我们对此刻的担忧就会减少,对未来的方向也会更明确。只要自己想将来比此刻更好,就可以着手创造未来。
年轻人回去之后,开始想象美好的将来,并制定每天的计划,对事情的轻重缓急安排进日程,年轻人不再像以前那样迷茫了,也越来越得到了认可。
以前我在做项目的时候,有时候项目比较多的功能,一开始看到是很懵逼的,一想到要搞完这个项目就头大,后来自己用了 todolist 的工具,每天给自己制定一些计划,今天完成什么功能,写什么文档。然后没做完一件事就划掉相关的事项,每划掉一次就感觉又离目标进了一点,不再像一开始那么懵逼了。我想这和老人说的着手创建未来有一点想通之处。
有时候我睡前也会常常想自己的未来,想很多乱七八糟的事情,除了让我更迷茫之外,没有一点好处。
不可避免的事情还是发生了,老人去世了。
年轻人已步入中年,他回到和老人一起谈话的地方,一个人思索着和老人的点点滴滴,明白了老人生前做的每件事情都是有明确的目标,年轻人此刻又明白了:把握现在,向过去学习和着手创建未来并不是全部。
只有当自己的生活和工作有了明确的目标,对过去,现在,将来重要的事情做出回应的时候,一切才有意义。
年轻人完全明白了这个礼物的含义。也领取了属于他自己独一无二的礼物。
故事讲完了,这个礼物是:当你想过的更夸了更高效的时候,把握此刻。当你想让现在比过去更好的时候,向过去学习。当你想让将来比现在更好的时候,着手创建未来。当你想发掘让你工作和生活更有意义的时候,明确自己的目标。
我把这个礼物分享给你。希望你也可以获取属于你自己独一无二的礼物。
你愿意把这份礼物分享给你的朋友吗?
Java SSM视频实战教程,从0到1,打造一个电商的分布式高并发项目。
项目是我精心制作的视频教程,身为过来人,很理解在自学过程中遇到的困惑,你在这个 SSM视频教程 中能够很容易看懂,是因为我在背后花了很多时间,站在你的角度上考虑的。希望能帮助后来的Java开发者进阶,
助你一臂之力。
持续更新中
给大家说下我在读书那会,农村孩子嘛,再加上自己性格要强,不到万不得已,不会跟家人要钱,
所以打过暑假工,做过兼职,那会做过快餐店的服务生,还做过厂工,那会说是体验生活,社会实践,其实还不是为了点钱(一不小心又说大实话了)。
我真的不相信有人去打暑假工或者兼职啥的单纯是为了社会实践。
在做快餐店服务员的时候,我那会除了厨师该干的事没干过之外,其它的诸如洗碗盘,擦桌子,端盘,给顾客加菜,帮忙打包,导购,拖地,擦玻璃等等都干了个遍。
还记得有一次用蹩脚的英文给国外的友人介绍菜品,没想到我的小学生英语水平他们居然听懂了,现在的那句「chinese tofu」还回荡在耳边。
那时候的我仅仅是为了点钱,买点自己喜欢的东西。不过那会也有点体会,发了条朋友圈:
「站久了就会觉得坐着好舒服,饿久了就会发现吃着好享受,困久了就会知道睡着很美好。。很多未满足后的满足,便是幸福!」
有时候幸福真的挺简单的,只是自己没有意识到而已,比如我坐在客厅的沙发上看着电视里播放的广告,喝着两杯大红袍,那一刻我突然意识到,这种「不争」的感觉好幸福啊。
我在做真·厂工的时候,我直接住到工厂提供的宿舍去了,那段时间睡眠质量特好,吃饭特香,因为每天都累得半死,每天在那里焊电路板,装螺丝,在流水线做包装。每天的生活就是:
吃饭-干活-打卡-吃饭-干活-打卡-睡觉。
有一天我突然感到可怕,主要是看到了那些工人,他们真的习惯了,每天都那样苟且,他们每天像个机器人重复的做着同样的事情,他们知道如果今天不干,就没有钱,甚至可能被炒,即使活得没了自己,他们也觉得这就是生活,日复一日地出售自己廉价的时间。他们的认知就这样了,眼界就这么低了。
所以我真的回去之后拿起了书本,学起了技术,很怕跟他们一样。
不过当时有一个没想到的体验,就是那会跟我同一个宿舍的是一个社会人,他之前是开酒吧的,他说他的酒吧有几张桌子是给警察留的,有几张桌子是给黑社会的人留着的,真正赚钱的也是其它的几张桌子上的普通客户。有一回他跟别人打架被人用钢管捅了肚子,现在他肚子还有几个洞,有时候看的我想用手指去戳他的肚子。
后来我跟他成为挺好的朋友,虽然他离婚了,但是他很想念自己的女儿,常常会拿手机上的照片给我看。和其它员工不同,他是个见过世面的人,也是个有文化的人,晚上没出去喝酒的话会在宿舍看书,时不时回来还会买饮料给我喝,人很 nice。以后有时间再说下那会我跟他的相处经历,挺有意思的。
虽然我们很久没联系了,但我从他身上学到一点是:不管怎样,也别停止学习。
现在回头看看,这些真实经历已经是许多年前的事情了,每当想起还是会给我带来一些思绪。
当然我也感谢那样的经历,鞭策着我要多做难且正确的事情,要在某件事上做到比大部分普通人厉害那么一点点。
随着这些年的成长,我发现我变了许多,比如我以前花钱总是大手大脚的,和朋友出去吃饭,几百上千的我都会抢着买单,无他,就是为了装逼,为了让他们知道我这人值得处。
但现在的我比较少去那种纯粹为了图一乐的饭局了。我做的一些项目获得的报酬也不再像以前那样总是去沐足按摩啥的了,我会拿出一些费用去买一些电子书籍,专栏,社群等。
这样的好处在于我能从中得到正向的影响。
举个例子,我现在就能更多的使用投资思维去消费,比如一本书,可能是作者活了很多年总结的经验,而我可以使用极低的成本就可以买到,如果我能从中借鉴一些应用到自己的身上,那回报率是很高的。
又比如我之前在公众号看到一个关于男性延时的课,只有短短的 10 节课,卖 500 块钱,我看到不少人买了,我也就去买了一份,其实他所讲的内容对我用处不大,一来他讲的有些我之前就知道,比如在你要射之前,你可以做下深呼吸,等没那么兴奋了再继续,然后又快兴奋了,再停下…, 二来是后面讲到需要伴侣经常配合,把我一个单身狗直接给看懵圈了。但我买这个课程主要是想去分析他的商业模式,他的课程是怎么做的,文案怎么写的,客户从哪里来的等等这些我都了解了一波。反而从这个角度让我学到了不少。也许某个时候我要做课程啥的,就可以做参考一下他的模式,那么这钱花的就是值的。
类似这样的思维,我之前是从来没有过的,我很庆幸能活在这个可以触手可及的信息时代,在我的关注列表,已购列表中,看着一位位大佬分享他们的见解,影响着我前行。
]]>我是大学的时候才开始接触编程的,不过我上的是一所三流的大学,高三的时候,因为我们班是重点班,所以有一些复读生也来我们班学习,高三开始不久我就和一个高四的学姐谈恋爱了,还是我的初恋,所以我高考就GG了…
偏题了,回来说说编程的事情吧,虽然说大学是个三流的学校,不过老师都是博士硕士级别的工程师,对于当时的我会觉得他们好像很厉害的样子,不过现在觉得有时候标签这种东西并不能说明什么吧。
那时候老师说「移动应用开发」会火,到时毕业一定可以找到工作,所以我就想着主攻「移动应用开发」,也就是 Android ,因为 Android 的应用层是用 java 写的,所以一开始学的是「java基础」。
虽然说去上课,但是真正听老师讲课的人寥寥无几,我也不例外,电脑前演示着老师讲课的PPT,但是视线一直停留在自己手机里的美女上。
不过有一次老师讲到一个「使用for循环打印星星的例子」,我觉得好好玩,这时候我才发现java并非那么无聊,我可以通过代码写出打印多少颗星星,打印成正三角形的形状,倒三角形的形状,正方形形状等等。第一次有了一种「有想法可以被java实现的感觉」,从那天起开始对编程产生了兴趣。
那一天虽然知道了「for循环」怎么写(跟着老师的例子照猫画虎),但是对于java环境变量怎么配置,二进制是什么,什么是Byte,Long都不懂,那时候可以说对于 java 只知道怎么拼写而已。
因为有些知识点之前没认真听,也发觉老师讲的很无聊,后来我决定自学,自我驱动的学习和被动的学习是两个完全不同的概念,我到现在依然认为:真正牛逼的人,都是自学能力极强的人!
我开始上网查询学习「java基础知识」的资料,无意间发现了某培训机构(是哪个机构就不说了,免得说我打广告)有免费的讲课视频资料,看了一下目录发现很全面,于是我下载下来试着看一下,没想到被讲师的幽默讲课方式深深吸引,感觉他不做相声演员都可惜了,于是边笑着看他的视频,边跟着他敲代码,自己也做一些笔记。那段时间有时候逃课其实是在宿舍里看他的视频哈哈!
那个视频课时分为三十来天,不过我是除了跟着他敲代码外,我还会自己做一些笔记,所以我大概花了两个多月才把视频学完的,也就这几个月的时间我从如何打印Hello World,到常量,变量,注释,运算,逻辑语句,再到面向对象(可能比较笨,当时想了好几天才明白这一概念),数组,函数,继承,内部类,多态,GUI等,再到集合,多线程,IO流,反射等等有一个全面的了解了。
感觉自己把 java 比较基础的知识学的差不多了,就想着能不能做点好玩的东西出来,记得有一个情人节,那时候我还是有女朋友的人,想给女朋友做一个程序,作为礼物送给她,有那么一个夜晚,我突然想到能不能用 java 做一款小游戏,游戏的主角就是她呢?
想想还是有点激动的,后来我模仿了「坦克游戏」,不过玩家的坦克是我女票的头像,而很多敌方坦克就是我的头像,然后子弹被我改成❤️(爱心子弹,害羞)。
用了几天的时间把它做出来觉得好有成就感,最后我把这个游戏打成jar包送给我女票当作礼物,然后看她玩的时候一直在互相发射爱心,不过敌方的“我”又多,射出的爱心子弹又快,每次玩不久她就“挂”了,老是叫我去修改一下游戏速度,让她赢哈哈。不过现在的她已经不属于我了,哎,想想还是有点小伤感呢,我是不是又跑题了 - -
因为我一开始就知道我学 java基础 是为了去开发 Android 应用,那时候觉得能在手机上把玩自己开发的 APP 是一种牛逼的存在。所以我又去找了一些「Android入门教程」的视频来学习,因为自己有了一定的 java基础知识 ,所以对「Android入门教程」视频学起来倒不觉得很难,反而是想着快点学完然后做个有意思的APP出来,所以那时候对Activity,Service的生命周期、一些诸如TextView,EditView基础的组件、诸如LinearLayout的容器组件、广播、Intent、内容提供者消费者、Sqlite等基础内容都学的比较认真。
慢慢的我开始写了一些demo,但是发现很不满意,原因是我感觉自己写的东西很简单,几个界面跳来跳去,几个增删改查,好像就没什么了,感觉自己没有什么项目经验,而且停留在很基础的层面。
于是我上网去搜索一些Android相关的资料,发现了CSDN上的「郭霖」大佬,发现他写的博客通俗易懂,那时候他每篇博客我都看,慢慢的我又认识到了「老罗」,他写的东西很深,有时候我看不懂 - -,发现了「阮一峰」的博客,再到后来我又发现在知乎上的 「stormzhang」, 我这才发现当时自己有多low,这些大佬们经验满满,我从他们身上学到了自定义View,性能优化,网络编程,第三方框架等等比较进阶的东西,不过更加让我学习到的是他们的执行力,他们的认知,他们对信息的敏感。
举个例子:记得 Android Studio 刚出来那会,我只是觉得 Android Studio 应该和 Eclipse 差不多吧,不就是个编辑器,而且Android Studio 刚出来的时候我下载体验了一下卡的要死,我二话不说就把它给卸载了,什么垃圾玩意。不过后来我发现大佬们都在用 Android Studio ,而且一直在建议更换为Android Studio,我记得之前大佬们还专门写了Android Studio的教程。受他们的影响,我把Android Studio下载回来,随着Android Studio的迭代,我才发现这编辑器简直了,这快捷键,这体验,简直完爆 Eclipse。现在还看到有些人还用Eclipse开发,没用过Android Studio或者InteliJ IDEA,说实话,我面试到这样的人一般会直接pass掉,并不是说Eclipse不好,而是认为,如果不拥抱新的事物,总是固步自封,那么很快会被淘汰!
也是那个时候,我发现了原来还有一个叫做「GitHub」的东西,简直打开了新天地,上面有许多大牛分享代码,聚集了全世界的程序员,吓得我赶紧去学习了Git的操作命令,clone了几个觉得适合我当时学习的Android项目源码!
后来和朋友参加软件杯比赛,能写出比较像样的APP了,看着APP从想法到实现,确实能带来很多成就感,也许对别人来说并不完美,但是自己亲手写出来的,自己debug出来的APP,就是有不一样的感觉,觉得像自己的孩子一样哈哈!
在大学期间,自己用PS画UI,使用第三方的接口,琢磨着做了几个小众的APP,后来将这些APP都装在自己的手机上,面试的时候一边演示一边跟面试官吹吹牛逼,倒也拿了几个实习offer。
后来自己选了初创公司,刚开始就让我接手一个比较大的项目,功能挺多的,商品上下架,第三方支付,商家入驻,到后来甚至还做了附近的人,聊天约炮交友,抽奖等功能,我和另一个小伙伴负责这个项目的Android端,虽然期间遇到了许多问题,如代码混淆打包闪退,不同手机兼容适配,支付配置不正确等等,也曾怀疑自己是不是能行过,但还是一一解决了,前前后后花了快一年时间也在应用市场上架了好几版,不过用户寥寥,可能你应该想到了,产品还没运营,就夭折了。现在回头想想,产品思维确实重要。
接着也做了几款别的APP,表现也是平平 - -
可能因为表现的还行,后来老大说有个公众号的小项目,后端让我来搞怎么样,当时自己也发现原生APP的开发趋势下降了,H5 越来越火,然后跟老大说给我三天熟悉一下 java 后端的,他说没问题,没想到这一决定让我开始转向后端开发了…
其实这三天主要研究了下 JSP , Servlet ,还看了点 struts2 框架,然后也算按计划时间倒腾出来了那个小项目,也是因为这个小项目我对后端开发产生了些许兴趣,我觉得写逻辑接口提供给前端调用好像比较牛逼。
那段时间开始研究 SSH2 框架,使用它做了一个电商项目,接着发现很少人用 SSH2 了,然后研究了 SpringMVC 框架,JDBCTemplate,进一步学习 Mysql的索引、视图,使用 PowerDesigner 设计数据库,Nginx,Linux操作系统环境搭建,操作命令,网络协议等等。
不过之前做的很少涉及到高并发,后来比较流行SSM框架了,也使用过它来做一些分布式的项目,慢慢的了解到了连接池、消息队列、定时、缓存、搜索引擎、渲染模板引擎等等。
由于SSM配置繁琐,现在Spring Boot/Spring Cloud这样的高效框架也越来越多人开始使用了。
越往后越发现基础的东西很重要,比如多线程的同步异步,各种集合的实现原理,面向对象,反射技术等!
当然我非常不推崇那些对刚入门想学的同学推荐一堆诸如:各种设计模式,JVM调优,负载均衡,各种数据结构和算法,链表、排序树,分布式存储,对象池,连接池,网络三次握手过程等等。
人家还没开始学,就给吓跑了 - -
所以我建议「java自学入门」先从基础开始,再进阶到会使用各种框架,再慢慢了解其原理,加以项目辅助练习,最后再回来补充自己的弱项例如操作系统,数据结构,算法,网络!
列个大纲吧:
初级入门知识点:
进阶知识点:
完善知识点:
我相信一个人去关注这一问题,或者看到这里,都是有一颗学习的心,不过很多人被所谓的过来人扔一堆「晦涩难懂的技术名词」吓到,我是非常讨厌这样的人的,自以为很牛逼,摧毁初学者的信心, 凸!
建议入门的童鞋可以先看视频教程,因为有老师在演示会比较好理解,记得总结,总结很重要!还有一点就是不要加入所谓的java开发讨论群,java学习群,因为十个有九个是在里面瞎逼逼,开车的!还有一点就是尽量使用Google。
希望以上的内容能给你带来帮助。
我一直很庆幸能活在这个互联网的时代,给我们带来太多的便利,就像你现在看到的这篇文章,我把文字码出来,转化为 bit 信息,通过互联网秒传到你眼前。
互联网不仅给我们提供诸多的生活便利,还能让我们从中赚到钱。
谈到钱,有些人会觉得很俗,好像钱不应该拿上台面说似的,觉得丢人。
我倒不觉得,首先我承认我爱钱,我觉得钱可以给我带来物质上的基本需求满足,如果连最基本的物质都没有,谈什么理想。
君子爱财,取之有道就行了,所以在不犯法不违反道德的前提下,所有通过自己努力赚到的钱,我都不觉得丢人。
真正丢人的是那种表面一套,背地里一套的人。
接下来就来给大家分享一下通过互联网赚钱的 9 种方式,相信如果你动动脑筋,付出点时间精力,每个月赚点零花钱,买个范冰冰版的充气娃娃啥的不成问题。
现在是新媒体的发展迅猛,像微信说的:「再小的个体,也有自己的品牌」。所以现在很多新媒体公司都需要文案,如果你有一定的写作能力的话,不妨去找些 大v 投稿,看你的文章质量,一般 1000 字有两三百块钱。读书那会我就有投过稿,写了篇技术文,赚了 150 块钱,当时开心的不要不要的。
后来还有人找我入驻他们的平台,写写区块链的文章,给我虚拟币。但是我拒绝了 - -
以前,互联网还没普及的时候,人们大多都是通过电视去获取信息,那会电视明星就是现在所说的大V,但是现在互联网普及了,那些通过直播的,做视频的顺势而为,成为了草根明星,他们也赚了好多钱。但是不是说只有 大V 才能在网络上赚钱,今日头条有个叫头条号的平台,你可以在上面写文章,上传视频,头条号会帮你投放广告,如果多人看你的视频或者文章,那么你就可以获取广告费。
教大家一个套路,之前我试了一下,去 YouTuebe 找了一个热门视频,把视频抓取下来然后发到头条号上,结果有 330k+ 的播放量,通过头条号的广告获得了 50 多元,不过我后来就没玩这个了,主要因为没时间去找视频啥的,如果你是个学生党可以去操作一下,每天赚点零花钱还是不错的。
Youtuebe 也是同样的道理,如果你有什么 idea 制作成视频,上传到 Youtuebe ,也会有广告分成的,前提是你有一定的播放量。
不知道大家知不知道国外有个叫做 PayPal 的东西,这个产品一开始获取用户的方式就是砸钱,新用户注册可以获取 $10 , 推荐一个用户可以再获取 $10 , 现在很多互联网产品一开始也是采用这种方式,比如之前很多的 P2P 产品,如今大多都暴雷,跑路了,可是一开始很多羊毛党都在这些平台薅羊毛,有些专业的羊毛党搞了很多手机号,从而薅了一笔。像之前的饿了么,美团,滴滴打车那些优惠券啥的,有人就通过获取这些优惠券拿去帮人优惠点餐,从而赚取差价,月入几w。 很多人看不起,但是人家就是把钱给赚了。
像现在知识付费时代,有很多平台有活动,通过你分享的链接让你的朋友付费加入学习,你就能从中获取一定的佣金,这也算是薅羊毛的方式。
照片也可以卖钱,如果你拍照技术不错的话,除了晒朋友圈之外,不妨把照片上传到类似 stockphoto 的平台,别人看到不错的照片,又很想要的话,只愿意付费购买的。这个我没玩过,因为我比较喜欢自拍。我怕卖出的价格太高。
你可以通过 阿里妈妈 这个平台注册成为一个淘宝客,当然其它平台也有,例如京东联盟,亚马逊的 affiliate 等,然后你就可以从里面推荐一些商品给别人,如果别人购买了你推荐的商品,相当于帮别人卖产品。那么你就可以从中获取一定的佣金,不同的商品佣金比例不同。我一朋友在上次双十一通过淘宝客赚了台mac电脑。
如果你是设计师,或者程序员接单应该不陌生吧,因为我是程序员出身,所以身边的朋友有时候有需求会找我做,一般给个项目估价和时间评估,然后达成合作就开干了。除了跟朋友合作之外,网上还有一些平台可以接单,不过国内的就算了,坑人的比较多,动不动就让你付费弄个会员啥的,在这里给大家推荐三个国外的平台,在这里赚的可是美金哦。一个是fiverr一个是 upwork,一个是Freelancer,这三个平台是目前比较多人用,而且知名度也比较高的,很多人在上面发布需求,你可以在上面写好自己的profile,然后去找适合自己的项目。最好懂点英语,想想我以前一边拿着翻译软件一边跟老外聊需求就搞笑。
程序员都有一个梦想,就是「Write the code. Change the world」。如果能找到用户的痛点,并且实时的推出一款应用(这也是我之后想干的事),让用户用的爽,人家很愿意付费购买的。还有一种收入方式就是在自己的产品中投放广告,比如Google AdSense。
这种理财投资方式属于被动收入了,也就是躺着赚钱,但是前提需要你有钱而且风险也很高,对于理财这方面我在学习中,投的钱不多,等过阵子有经验了再跟大家分享吧。
现在中国人有一个让国外的人惊了个呆的就是,中国人越来越喜欢和认可为知识买单,本质就在于「知识本身不值钱,但知识的表达方式、能让人懂的表达方式,非常值钱」,我的知识星球也算是知识付费的一种,如果你想做知识付费的话,你前期有付出的比你想象的要多的多,如果你还没那个执行力和责任心的话,劝你打消这个念头吧。
ok,以上,那些开淘宝店啥的就不说了,现在来说已经饱和了,不建议搞,倒不如多花点时间提升下自己。
最后希望关注我的朋友能获取到有价值的信息之外,也希望大家发大财哈哈哈。
哦对了,还有一件事,问下大家,我的手机屏幕坏了,请问哪里可以修啊??
####### 记录用户凭证
####### 记录用户上网行为
我觉得现在身处于互联网时代,有自己的个人网站其实就和互联网上的一张名片差不多了,在这里可以不断的记录自己的生活,总结自己的知识,人生思考什么的,以后介绍自己直接把网站扔给对方。一来是可以装下逼,二来是可以让对方更好的了解自己。
再者就是相对的自由了,现在市面上有很多 Blog 系统,你只要注册一下,就可以直接在他们的平台生成一个你自己的blog,虽然很方便,但是你要付出的代价就是:忍受他们平台在你的 Blog 嵌入一堆广告。受他们的限制与监管,人家不爽就随随便便删了你的文章,没得商量。
比如这样:
爽吗?反正我是不爽。
所以自己搞一个完全属于自己的网站,相对来说,没那么苦逼。为什么说相对? 因为我们也要看大佬的眼色啊。
但是总比被各种平台恶心好吧。也别幻想什么区块链博客系统,对于目前来说,不现实。
这两天我重新整理了一下自己的 Blog ,因为我之前用的是 Octopress 框架,有些年头了,一些主题和插件并不是很多。
后来对比了几个框架,发现 Hexo 不错,和 Octopress 差不多,也是可以用 Markdown 写文章,然后生成静态网站,Hexo 主题丰富一些。
Hexo 是基于 nodejs 的,搭建起来很简单。那么接下来就说说如何从 0 开始使用 Hexo 搭建个人博客吧。
因为 hexo 是基于 node 框架的,所以呢,我们首先需要下载安装node,下载地址:nodejs
安装完之后,我们打开命令窗口,输入 node -v
,如果返回下图所示,那么就说明你安装 node 成功了。
安装成功后,我们在命令行窗口运行如下命令来安装hexo:
npm install hexo-cli -g
初始化博客目录:
hexo init wistbean.org (这里的wistbean换成你自己的英文名)
初始化完成后,我们就进入我们的目录:
cd wistbean.org
安装
npm install
clean一下,然后生成静态页面
hexo cleanhexo g
g 就是
generate
,生成的意思
把你的网站运行起来
hexo s
s 就是
server
,在服务器运行的意思
localhost:4000
。 自此,你的个人网站就这么速度的搭建起来了!进入你的网站目录,打开 _config 文件,这个文件是用来配置你的网站信息的。
这里列出我的简单配置,具体可以看这个Hexo配置文档
title: wistbean subtitle: 肯定会 description: wistbean的个人博客,主要涉及到编程(Java,Python,Linux等),个人提升学习,视频教程,《肯定会软件技术》电台节目 keywords: wistbean,肯定会,java,python,电台,教程 author: wistbean language: zh
刚搭建完的网站,是不是觉得有点丑,不符合你的漂亮的脸庞? 反正我是这么觉得的,那么就选一个主题来装饰一下吧,在这里可以选择你要的主题:知乎答主们推荐的hexo主题大全
选择好了你的主题之后,就可以下载主题资源了,比如我这里选择一个 NEXT 主题来演示一下,在你的目录中输入以下命令:
git clone https://github.com/iissnan/hexo-theme-next themes/next
这里主要就是将主题下载到我们的themes目录下。
如果你还不熟悉 Git 的使用的话,可以看看我之前的 Git 视频教程:代码托管Git的使用
主题下载完之后,在你根目录下的 _config.yml 文件中,修改 theme 为你的主题名字:
theme: next
hexo g hexo s
你已经把你的网站打扮的漂亮大方简洁惹人爱了,那么接下来就要好好去写内容了,内容才是重要的。
在你的 blog 目录下使用如下命令:
hexo new article (这里的article写上你的文章的名称)
输入这样的命令之后你的 source/_posts 下就会生成一个 article.md 文件,在这个文件下就可以写上你的博客内容了。用 Markdown 的语法去写。
直接点的方式就是直接在source/_posts
新建一个 Markdown 文件,其实和命令形式是一个道理,只不过命令形式用了命令来创建。推荐使用命令的方式,毕竟 Geek 一点。
在你的博客中打标签能让你的文章方便检索。
hexo打开标签功能:
hexo new page tags
这时候你的 source/ 下生成 tags/index.md 文件,我们将其打开,然后把它改成:
type: "tags" comments: false
这时候你要为你的文章打上标签就可以在文章的头部写上:
tags: - Tag1 - Tag2 - Tag3
比如我现在的这篇文章打的标签就是这样的:
tags: - 个人网站 - 教程 - hexo - blog - 搬瓦工 - Git - Nginx
分类,归档,是你博客的特性之一。把文章分门别类,方便查看。
打开hexo分类功能:
hexo new page categories
同样的,你的 source 目录下生成 categories/index.md 文件,我们将其打开,把它改成:
type: "categories" comments: false
这时候你就可以给你的文章归类存档了,使用方式就是在你的文章的头部加上:
categories: - 分类1 - 分类2
比如我现在的这篇文章的分类就是这样的:
categories: - 个人网站 - 教程
注意:标签和分类要确定你的配置文件 _config.yml 是否有打开了 tag_dir: tags 和 category_dir: categories。另外,Markdown 的语法是写作最优雅最简洁最简单的,如果之前没用过的建议去学一下Markdown 语法说明,一般一个钟左右就能掌握。因为它和 HTML 那样简单。
当别人看了你的文章,有问题想跟你探讨,没评论怎么行?评论也是你的 Blog 交互的重要方式之一。
现在很多 hexo 主题都内置了第三方评论的系统。比较常用的有:
自己去看一下,喜欢哪个用哪个,自己的 Blog 就是要自由。
选好你的评论系统之后,进入平台注册后,平台会给你一个 APPID 和 appkey。拿到这些信息到你的主题下的配置文件下设置。
以 next 主题和畅言评论为例:进入你的themes/next
,打开_config.yml,定位到 changyan ,把 enable 改为 true。
changyan: enable: true appid: 这里写上你的畅言在appid appkey: 这里写上你的畅言在appkey
设置好之后,重新clean生成一下就有评论啦:
hexo clean hexo g hexo s
打开你的预览连接看看你的文章下方,已经有评论功能啦。如下图就是我博客的评论功能:
已经搞定了个人blog,接下来当然是要部署到网上让人家访问了,如果不想花钱,可以使用GitHub Pages
,使用它就可以部署自己的网站啦。
对于 GitHub 不知道怎么用的童鞋,可以看一下我的这个视频教程:GitHub完全使用指南
接着创建一个 xxx.github.io 的 public 仓库,这里的xxx写你的名字,比如我写的是 wistbean.org,那么到时我就可以通过 wistbean.org
来访问我的网站了。
创建完成之后,那么你就有自己的 Git 地址了。
在你的博客目录下输入如下命令,这样你在本地写的文章才能 push 到 GitHub 上面去。
npm install hexo-deployer-git --save
打开你的配置文件,然后输入你的 git 地址:
deploy: type: git repo: https://github.com/xxx/xxxx.github.io.git
直接输入命令 : hexo d
d 就是 deploy , 部署上去的意思。
push上去之后,你就可以直接在浏览器输入你的 xxx.github.io
就可以访问啦!
有了自己的网站,当然是要自己的网址,这样才帅嘛,当然有自己的服务器就更帅了。
关于域名的购买我比较推荐去dynadot,这是国外的域名商,可以使用支付宝购买,不需要备案,使用起来不错的。我的域名 www.wistbean.com
就是在这里买的。
买完你的域名之后,接下来几个步骤轻松搞定:
在你的博客的 sources 目录下新建一个 CNAME 文件,这个文件里面就写你的域名就可以了,比如我就写: www.wistbean.com。 接着将文件push到你的GitHub上,可以使用 hexo d
命令。
1. 主机记录: @ 记录类型:A 记录值:192.30.252.154 或者 192.30.252.153 2. 主机记录: www 记录类型: CNAME 记录值: xxx.github.io (这里就是你的github仓库名称)
在你的 GitHub 设置域名,在你的 GitHub 博客项目中点击 Settings,在 GitHub Pages 下的 Custom domain 写上你的域名,然后 save。
至此,你已经搭建好了自己的博客,托管你的网站到 GitHub 了,也绑定了你自己的域名了,那么这时候你的网站就可以被全世界的人看到了。
but!!!
因为 GitHub 不让百度爬取索引,也就是说,如果你的朋友想通过百度来搜索你的博客或者你写的文章,是搜索不到的。所以得搞一台自己的服务器,把自己的博客部署到自己的服务器上。
虽然你现在已经可以使用你的域名访问你的网站,但是呢,有自己的服务器托管自己的网站还是爽一点的,GitHub屏蔽了百度的爬虫,也就是说别人通过百度搜索不到你的网站,这你能忍?
有自己的服务器的话就可以被更多搜索引擎收录,还有呢就是有自己的服务器还可以干些其它的事情。
这里的服务器当然推荐要买国外的,这样的话你的域名就不需要备案,不需要被监管,而且还可以搭建 VPN ,一举三得,酸爽。
我使用的云服务器推荐:推荐|我用了十几台云服务器VPS后,告诉你哪家云服务产商性价比高,性能稳定
买了服务器之后,那么你就可以用 Nginx 来当做你网站的 web 服务器,搭建也很简单,关于 Nginx 搭建和配置就不多说了,如果之前没玩过可以看这里:Nginx使用教程
在你的域名商,使用 DNS 解析,添加一条 A 记录就可以了,记录值就是你这台服务器的 IP 地址,一般启用后 30 分钟左右就可以访问啦。
以上你就完全拥有属于自己的个人网站啦。
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.或者点击本节b站视频教程地址观看。
manager 模块的聚合:
Spring –> Service
Spring MVC –> 表现层
Mybatis –> Dao
1 | <bean id="transactionManager" |
1 |
|
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.或者点击本节b站视频教程地址观看。
使用 InteliJ IDEA 创建分布式多模块 Maven 项目
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.或者点击本节b站视频教程地址观看。
使用 Intelij IDEA 创建 Maven 工程并配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.或者点击本节b站视频教程地址观看。
了解码农商城所需要的一些模块
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
项目管理
提供了一套完整的构建生命周期的框架
整合工具
自动的完成一些工程的基础构建配置
1 | <mirror> |
1 | <localRepository>E:/mavenrepository</localRepository> |
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
全球最大的社交编程网站!
生成秘钥:ssh-keygen -t rsa验证是否授权成功: ssh -T git@github.com1
2
Hi testWistbean! You've successfully authenticated,
but GitHub does not provide shell access.
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
代码的版本控制管理系统
访问不了Youtube?
1.点击搭建自己的ss并开启bbr快速上网教程轻松访问1080p高清Youtube视频。
2.点击本节b站视频教程地址观看。
缺点:
优点:
缺点:
点击本节b站视频教程地址观看。
1.我使用的云服务器是搬瓦工官网,
因为性价比高,一年也就十几刀,速度快。
使用以下的搬瓦工出的最新优惠:
搬瓦工配置 | 搬瓦工费用 | 优惠链接 |
---|---|---|
*SPECIAL 40G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 40 GB RAID-10 RAM内存: 2048 MB CPU处理器: 1x Intel Xeon Transfer流量: 2000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $27.99/季 | 点击进入 |
*SPECIAL 20G KVM PROMO V3 - LOS ANGELES - CN2 * SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 1x Intel Xeon Transfer流量: 1000 GB/月 连接速度: 1 Gigabit 洛杉矶机房,CN2路线,使用中国的直线路线,速度加快 | $29.99 /半年 | 点击进入 |
80G KVM – PROMO SSD硬盘: 80 GB RAID-10 RAM内存: 4 GB CPU处理器: 4x Intel Xeon Transfer流量: 3 TB/mo 连接速度: 1 Gigabit Multiple locations | $19.99/月 | 点击进入 |
20G KVM – PROMO SSD硬盘: 20 GB RAID-10 RAM内存: 1024 MB CPU处理器: 2x Intel Xeon Transfer流量: 1 TB/mo 连接速度: 1 Gigabit Multiple locations | $49.99/年 | 点击进入 |
40G KVM – PROMO SSD硬盘: 40 GB RAID-10 RAM内存: 2 GB CPU处理器: 3x Intel Xeon Transfer流量: 2 TB/mo 连接速度: 1 Gigabit Multiple locations | $99.99/年 | 点击进入 |
160G KVM – PROMO SSD硬盘: 160 GB RAID-10 RAM内存: 8 GB CPU处理器: 5x Intel Xeon Transfer流量: 4 TB/mo 连接速度: 1 Gigabit Multiple locations | $39.99/月 | 点击进入 |
3200G KVM – PROMO SSD硬盘: 320 GB RAID-10 RAM内存: 16 GB CPU处理器: 6x Intel Xeon Transfer流量: 5 TB/mo 连接速度: 1 Gigabit Multiple locations | $79.99/月 | 点击进入 |
2.远程连接工具我一直用的是 SecureCRT , 当然你也可以使用其它的 SSH 工具。
有了搬瓦工服务器的IP地址和端口
我们就可以连接了:
账号是root,密码可以在这里获取:
在这里感谢hwdsl2提供的脚本,我们在连接到服务器后使用如下命令:
安装 wget :
yum install wget
使用脚本:
wget https://git.io/vpnsetup-centos -O vpnsetup.sh && sudo sh vpnsetup.sh
稍等一会安装成功会提供一个 VPN 需要的信息:
Server IP: xxx.xx.xx.xxIPsec PSK: xxxxUsername: xxxxPassword: xxxx
这时候就搭建成功了,快吧?
单击开始菜单,选择控制面板。进入 网络和Internet 部分。单击 网络与共享中心。单击 设置新的连接或网络。选择 连接到工作区,然后单击 下一步。单击 使用我的Internet连接 (VPN)。在 Internet地址 字段中输入你的 VPN 服务器 IP。在 目标名称 字段中输入任意内容。选中 现在不连接;仅进行设置以便稍后连接 复选框。单击 下一步。在 用户名 字段中输入你的 VPN 用户名。在 密码 字段中输入你的 VPN 密码。选中 记住此密码 复选框。单击 创建,然后单击 关闭 按钮。返回 网络与共享中心。单击左侧的 更改适配器设置。右键单击新创建的 VPN 连接,并选择 属性。单击 选项 选项卡,取消选中 包括Windows登录域 复选框。单击 安全 选项卡,从 VPN 类型 下拉菜单中选择 "使用 IPsec 的第 2 层隧道协议 (L2TP/IPSec)"。单击 允许使用这些协议。确保选中 "质询握手身份验证协议 (CHAP)" 复选框。单击 高级设置 按钮。单击 使用预共享密钥作身份验证 并在 密钥 字段中输入你的 VPN IPsec PSK。单击 确定 关闭 高级设置。单击 确定 保存 VPN 连接的详细信息。
新建一个TXT文件,输入以下内容:
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters]"ProhibitIpSec"=dword:00000000[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002
另存为.reg格式的文件,然后双击。
将以下服务全部设置为自动启用,要不然会连接不成功:
IPsec Policy AgentRouting and Remote AccessRemote Access Auto Connection ManagerRemote Access Connection ManagerSecure Socket Tunneling Protocol Service
重启电脑后,点击右下角的网络连接,双击VPN连接,即可成功连接:
进入设置 -> 通用 -> VPN。单击 添加VPN配置...。单击 类型 。选择 L2TP 并返回。在 描述 字段中输入任意内容。在 服务器 字段中输入你的 VPN 服务器 IP。在 帐户 字段中输入你的 VPN 用户名。在 密码 字段中输入你的 VPN 密码。在 密钥 字段中输入你的 VPN IPsec PSK。启用 发送所有流量 选项。单击右上角的 存储。启用 VPN 连接。
其它客户端连接方式请参考:配置 IPsec/L2TP VPN 客户端
####### 记录用户凭证
####### 记录用户上网行为
我发现有些朋友在使用 Google 的时候直接在搜索引擎输入关键词然后回车,这很方便,不过 Google 这个强大的搜索引擎有许多搜索技巧可以帮助我们精准的找到我们想要的资料。
给你一个同样的工具,有些人能搜索到想要的东西,有的人怎么搜索也搜索不到,就是因为他们不知道这其中的奥秘。
在我的知识星球里有球友问我有些资料是怎么样挖掘的?
我跟他说了下,一方面是环境原因,因为我经常分享一下文章啥的,就认识了些能人,有群,谈谈技术,分享些资料,这很正常的事。其实加入我的知识星球也是这个道理。另一方面就是获取信息的能力了,而 Google 的搜索技巧就是我获取想要知识的来源之一。
接下来就说说我常用的 Google 搜索技巧,希望也能帮助到你,不要花了点钱搭建了自己的vpn,却浪费的 Google 这么好的资源。
举个例子,如果你直接搜索 「苍老师作品」,那么你搜索到的内容不是完全匹配到的:
那么如果我们想要完全匹配搜索的话,使用双引号:「”苍老师作品”」,这时候得到的结果就是完全匹配的:
如果你想要搜索某些信息,但是你不能完整的记住想要搜索的关键内容,比如歌词,或者电影台词等,那么就可以通过模糊匹配的方式,使用「*」来代替你忘记的内容:
如果你想在google中搜索的结果不要某些网站或者关键词出现,那么你可以用「-」来剔除,比如这里不要让豆瓣出现:
可以通过 「site:」来指定我们想在特定的网站里面搜索相关的内容:
所以这时候你知道为什么别人能很容易找到你找不到的大片了吧?
我发现很多网民对个人信息隐私都不太关心,如果你通过特定的文件类型搜索加一些关键词,很容易发现有些信息早就被人泄露了,文件的特定搜索用「filetype:」+ 文件的类型,比如我在这里搜索「身份证相关excel文件」,往下翻你就会发现很多姓名和身份证暴露无遗了。
当然filetype的用处不是让你搜索这些,你可以搜索一些 pdf 资源,有时候我就是通过这个搜索到一些不错的电子书。
Google的以图搜图也是很牛逼的,你可以去体验一下。
还有其它的比如 inurl 、 intile命令我就用的比较少。因为以上五个搜索技巧已经足够我搜索到我想要的内容了。
其实说实话,现在不管是培训出身还是院校出身,现在开始去互联网公司上班,相对来说起步有一点晚了,工作也没有以往那么好找了。
不过你应该可以看到一个普遍的现象,就是现在大多的程序员在编程的时候,所借助的资源大部分来源于百度,CSDN博客,还有一些其它的论坛。 不是说这些不好,只是大部分质量参差不齐,有些博客抄来抄去,你很难去费很多时间精力去筛选,去辨别。
那么这个时候应该怎么办呢?最好的方式就是走比别人相对难一点点的路,怎么说呢?就比如别人在百度的时候,你已经花了点钱自己搭了个vpn上google搜索第一手资料,别人在看国内的博客的时候,你已经一边翻译一边看着官方文档,虽然很多英语都不懂,但是如果坚持一点一点坑下去的话,其实差距慢慢就拉开了。当别人还在把遇到的报错截图发给别人问怎么办的时候,你已经学会试着看看源代码别人是怎么写的。你会去github上pull跟自己最近水平相当的项目进行学习了等。
这以上举的例子要说明的就是:虽然起步比别人晚,但是不代表结果就是人家先到终点,别人在一小步一小步的走甚至停留在原地的时候,我们可以让自己的步伐跨的大一点,也就是提高自己的起点,当然刚开始很难,但是能够转变这种思维,一直坚持下去的话,到时候回头看的时候,才发现,原来你已经走了这么远了,而别人,还在原地。
我们都知道,选择比努力重要,如果你一不小心选择错了方向,那么很可能就南辕北辙了,这是非常不值当的,如果能在对的方向努力下去,那么有一天才能收获你的果实。举个不恰当的例子:你去追一个女孩子,人家对你一点兴趣都没有,你一个劲的给对方自以为的感动,人家只会觉得很烦,离你越远越好。
所以选择是很重要的,你需要要有辨别能力,需要对信息有足够的敏感度,比如现在新手,想要开始学编程,从事互联网的事业,那么选择什么方向呢? 是Android,还是iOS,还是java,还是 python? 如果这时候你没有一个好的选择,真的不同的努力结果差别会很大。
就拿 Android 和 python 来说,现在 Android 开发已经没有那么火了,为什么?市场已经很饱和了,而且现在Android对中高级的人才需要比较多,而如果你现在开始学Android,学个一两年,到时候可能你已经算是Android中级开发者了,可是人家不需要了。
而现在的人工智能,数据分析,区块链等都是趋势,这时候 python 借势火了一把,很多公司都需要 python 的人才了, 所以从现在来说,一个学习 Android,一个学习 python,一年后,谁更容易找到工作,谁更被需要? 答案肯定显而易见了。
选择是很重要,但是要学会选择很难,因为你需要信息的敏感认知,而这些信息不是说你看书就能找到了,你需要有自己的圈子,有一个环境,有一个耳渲目染的地方,而这些,除了靠自己的人品之外,还需要自己多提升自己,打入更大的圈子,去学习,去交流。
]]>英语:Object-oriented programming,缩写:OOP;
我们开发的程序是给用户使用的,而我们的程序是使用对象来完成产生的。对象可以看成是对问题的描述的一种解决方案,它与问题空间之间一一映射。也就是将问题抽取成为对象集合。
在java中以class关键字来定义类的对象,类包含了元素和功能,是一种引用类型,和Int、Float等类型是一样的道理,只不过Int、Float等这些基本类型是java内置了的,所以我们可以拿来即用,而我们自定义的对象需要我们进行实例化后使用。
我们可以将对象看作服务提供者,比如手机这个对象,我们可以用它来聊天,打开闪光灯,砸核桃等。
当每个对象都有各自独特的服务的时候,我们在使用的时候就很方便高效了,我们知道要实现什么功能,就拿什么对象来使用,如果我们对多个对象的各个方面都“组合”的很好的话,那么对代码来说是高内聚的,我们都约定俗成开发程序高内聚是我们追求你之一。
假设在合作开发的时候,有人负责创建类来提供服务,有人收集使用类来快速实现程序开发,我们把第一种人暂且叫类(服务)创建者,第二种人叫做使用服务(类)者。
那么在这种情况下,创建者对自己的类只需要暴露必需的功能给使用者就可以了,使用者无需关心创建者是怎么样实现类的细节,拿来用就好了。这样创建者会对比较“脆弱”的代码进行封装,使用者无法触及,防止使用者随意修改,减少了bug的产生,还有就是创建者对封装的这些代码修改不会对使用者造成影响,比如类创建者在一开始创建类的时候某功能写的简单了,后来为了提高性能,那么修改这部分代码,实际上对使用者是毫无影响的。
java用private关键字来限定只有类创建者和类内部方法可以使用,其它人都无法使用。
如果是使用public修饰的话就相当于完全暴露了,任何人都可以使用。
还有protected是让继承的子类可以使用,但是不能使用父类被private修饰的属性。
默认不指定修饰的时候,同一包下的其它成员都可以访问。
所以封装是有必要的,在这种分离的情况下,提高了安全性。
一个对象含有另一个对象,这就是组合。 比如手机这个对象含有相机对象,我们创建了相机对象,可以内置于手机对象中,这样做的好处是使用对象间灵活高效的。
代码提现:
1 | public class Phone { |
当你发现对象之间存在诸多相似性的时候,并不需要每个都创建独立的对象,可以找出他们的相同点作为基类(父类),进而在衍生出差异的类(子类),这样子父类就包含子类所有共享的行为特性了,子类就以不同的实现方式存在。
关于继承可以在Java 继承是什么龟查看。
狗可以称为动物,猫可以称为动物。多态在于你可以不在意具体对象类型而使用它们共同的属性:
代码提现:
1 | public class Animal { |
1 | 输出: |
在这里可以看到dog和cat向上转型为Animal。向上转型是安全的,向下转型却是危险的,例如将Animal转为它的子类,因为此刻Animal既不知道是Dog还是Cat,所以向下转型还需要专门指定对象,即强制转换。
更多关于多态可以参考:Java 多态可以吃吗?
因为java是在运行时才能确定对象的多少,所以有了动态存储对象的集合,集合提供了不同的接口和行为,它们之间效率不同,应用场景不同:Java 细数各种常见的集合
对象的生成会占用内存资源的,所以需要销毁来释放内存资源,对象是在堆的内存池中动态创建的,java有一个专门的垃圾回收器,它知道对象在什么时候可以销毁,会自动的销毁从而释放资源且不会影响程序的正常运行。
通过:01 创建CentOS虚拟机 我们已经创建好了虚拟机,也下载好了CentOS7的镜像文件。那么接下来就开始在我们的虚拟机安装配置CentOS系统。
01 首先打开我们的虚拟机,选择我们创建好的虚拟机,然后点击设置–存储–添加虚拟光驱:
02 点击选择磁盘:
03 选择我们下载好的CentOS镜像文件:
04 选择完之后,点击ok,再点击Virtual Box的启动按钮,就会引导读取我们选择的iso镜像文件:
05 运行后我们就可以看到安装引导:
06 我们选择 Install CentOS Linux7,然后按回车,骚等一会就会出现如下界面,我们选择English,当然你也可以选择中文,但是这里我选择English,毕竟学Linux还是要懂点英文的:
07 选择完之后我们看到CentOS系统安装总览,分别有「LOCALIZATION(本地化安装)」、「SOFTWARE(软件安装)」、「SYSTEM(系统安装)」:
注意了,在虚拟机使用和我们自己的电脑之间,按住右边的Ctrl键可以对鼠标的事件进行切换,比如你在虚拟机中使用中,想用鼠标使用自己的电脑时,那么就按右边的Ctrl键来获取鼠标事件。
08.1 点击DATE&TIME来设置系统时间,这里Region(地区)我们选择Asia(亚洲),城市选择shanghai,然后点击左上角的Done:
08.2 接下来我们点击LANGUAGE SUPPORT(语言支持),我们可以根据自己的需求选择需要的语言安装包,这里我选择英语和中文,选择完点击左上角的Done:
09 INSTALLATION SOURCE 这个选项默认即可,接下来我们选择 SOFTWARE SELECTION, 这里面可以供我们选择软件包,因为我们把Linux作为服务器使用,所以在这里我们选择Server with GUI,因为这个环境包含了基础的服务设施和GUI界面,然后在右边可以根据需要选择软件环境:
10.1 选择 「INSTALLATION DESTINATION」 进行分区操作,在这里说明一下Linux的分区必须有 根分区(用“/”标识) 和 交换分区(用swap标识),swap分区类似于Windows的虚拟内存概念。虽然Linux的必需分区为根分区和交换分区,但是我们在分区的时候可以根据我们的需要进行分区,不仅仅划分根分区和交换区:
在分区前还再说明一下Linux的分区命名规则:
一般有这样的命名:
/dev/hdb2 、 /dev/sda1
好了,我们了解好了分区后就点击「INSTALLATION DESTINATION」 ,可以看到我们之前创建好的100G的sda盘,我们在下面选择「I will configure partitioning」 来自定义分区:
点击完Done之后会让我们选择分区方案,在这里我们选择 Standard partition(标准分区):
接下来开始分区,首先对根分区进行划分,点击下方的 + , Mount Point选择根分区(“/”),Desired Capacity(容量)输入20G:
然后我们点击 Add mount point,可以看到我们建立了sda1这个根分区:
接下来我们划分交换分区,点击下方的 + ,然后选择warp,这里输入4096M:
然后以同样的方式划分:
这里我给boot划分500M,usr划分20G,var划分30G,还有剩余的空间我们可以划分为“/mydata”,这里录入mydata,下面的Desired Capacity不需要填,会自动就剩余的空间划分给mydata:
至此,我们就把划分好分区了:
点击完Done后我们点击Accept Cahnge:
10.2 接下来我们对网络进行配置,KDUMP默认启用即可, 点击「NETWORK & HOST NAME」,可以看到我们左侧有一块网卡,Ethernet是以太网,enpOs3是网卡的标识,右侧可以看到详细MAC信息和连接速率等信息,左下角可以输入主机名:
然后点击右上角的开关按钮来激活我们的网卡。点击Done。
完成了以上的设置后,我们就点击右下角的 Begin Installation 按钮,开始安装到我们的磁盘啦。
在安装的过程中,我们开始对root账号进行密码设置:
设置完密码点击done,当然你也可以继续创建账户,然后就是等待安装啦:
经过一段时间的等待,我们的CentOS终于安装完成了:
接下来我们点击右下角的Reboot按钮进行重启,重启后我们选择CentOS Linux:
接下来我们需要同意协议,点击LICENSE,然后勾选accept:
点击Done之后,如果你在安装的过程中没有创建账户,那么在这个时候可以点击USE CREATION来对用户进行创建:
创建完之后点击右下角的FINISH CONFIGURETION。
那么接下来的篇章会告诉你怎么基本使用CentOS,对系统目录进行了解,对CentOS有一个整体的认识。
]]>这是 Linux 学习的第一篇,对于刚开始学习 Linux 的我们没必要直接马上将 Linux 装到我们电脑上,我们可以先在虚拟机中使用,等熟练到一定程度的时候,再将 Linux 安装到我们的电脑上也不迟。那么我们就先将 CentOS 虚拟机创建起来吧。
在看本篇文章之前你需要下载:
tips:CentOS7有4G大小,VirtualBox有117MB大小。CentOS7镜像文件将会在下一篇文章用到。
现在市面上比较流行的虚拟就有VMware,VirtualBox。由于VMware是收费的,而VirtualBox是开源免费的,就凭这一点,我们就选择使用VirtualBox了哈,当然除了开源免费外,它还要诸多优点的,比如它跨平台:可以运行在 Windows, Mac OS X 和 Linux/UNIX平台上,可以虚拟出我们常见系统等等,所以完全够我们使用。
我们已将将 CentOS 的虚拟机创建好了,那么下一章就开始对基于我们现在的虚拟机来安装 CentOS 系统和配置。所以你赶紧把 CentOS7 镜像文件下载好吧?坐等下一章我们一起安装!
]]>从这篇文章起,就意味着开始着手学习使用Linux系统了,虽然经常听到Linux操作系统,但是或许正在着手去操作使用的人还是少数的,甚至连什么是Linux都不知道的人也大有所在。那么这篇 「Linux学习启动篇」 将从0开始,首先了解Linux是干嘛的?能在Linux上做些什么事情?接下来再和我一起深入学习!
Linux是一种自由和开放源代码的类UNIX操作系统。
Linux是自由开放源代码的,这个系统的内核是由「Linus Torvalds(中文名:林纳斯·托瓦兹)」在1991年10月5日发布的,其实Linux本来指的是Linux内核本身,但是通常都用了「Linux内核」来称呼,而Linux就代表了 Linux内核 + 用户空间的应用程序 构成的完整操作系统。
Linux如此受欢迎的其中一个原因就是它开源,这意味着任何个人或者机构都可以很自由的使用Linux里面所有的源代码,你可以对它进行修改生成新的版本然后再发布出来成为你的东西。但是前提是遵循「GUN GPL协议」。
GUN GPL(GUN General Public License),通用公共许可协议,这是由理查德·斯托曼发起的,许多自由软件和开放源码都采用了这个协议条款,任何个人或者机构使用基于GPL进行衍生发布时必须采用GPL协议许可,而且需要公开源代码。
服务器领域: Linux已经在服务器领域占了大半壁江山,随着开源软件的日益强大,Linux服务器操作系统已经越来越多人使用。应该很少人会用windows server了吧。
移动设备嵌入领域: Linux的低成本、强大的定制功能以及良好的移植性能,在智能手机、平板电脑等移动设备方面,Android手机就是Google开发的基于Linux平台的开源手机操作系统。现在市场上Android手机仍然是占了最大的移动操作系统份额。阿里云的YunOS系统也是基于Linux的,越来越多的系统都使用了Linux。
桌面领域:现在大多数在Windows平台上广泛使用的自由软件都有相应的Linux版本,现在Linux桌面系统的发展也是越来越多了,像国内的红旗Linux,深度Linux,还有你可能经常听到的Ubuntu系统,都是基于Linux的桌面操作系统。
Linux的发行版实在太多了,这里列举几个常见的发行版本。
Debian GNU/Linux 7.0:
Gentoo Linux 12.0:
以上列举的这几个都是有桌面版的,但是我们学习Linux主要还是对命令行进行学习,对于学习和使用的系统我们选择不是以上这几个,而是centOS系统,那么为什么选择centOS?
早前 Red Hat公司 就发行了「Red Hat Linux」的个人版本,到了Red Hat 9.0版本后,Red Hat公司就不再发行桌面版的发行套件了,Red Hat Linux 也就停止了开发,而开始全力集中转向服务器版本上,也就是Red Hat Enterprise Linux(企业版本)。
后来 Red Hat Linux 的桌面版本与来自开源社区的Fedora进行合并,Red Hat Linux 桌面版就称为了 Fedroa Core。
所以目前Red Hat有:免费的Fedroa Core版本,也有收费的Red Hat Enterprise Linux版本。Red Hat Enterprise Linux都会在Fedroa Core版本的基础上进行升级,大约发布6个Fedroa Core版本就会发布一个Red Hat Enterprise Linux版本。
因为之前我们讲过了,Red Hat的企业版本虽然收费的,但是它依照开源协议必须公开源代码,那么这个是时候CentOS就出现了,它的全名是(Community Enterprise Operating Systeam 社区企业操作系统),CentOS和Red Hat企业版本的不同之处在于centOS没有包含封闭源码的软件,所以centOS可以自由使用,而且可以长期的享受它的免费升级和服务。
所以选择CentOS版本进行学习是很有必要的:目前网络上80%的Linux资源都是基于centOS的发行版的,可以供我们更多的资源查找和学习帮助。CentOS版本在许多开源镜像网站可以轻松获取。centOS也具有经典性和代表性,绝大多数物联网公司的后台服务器都使用的是centOS发行版本。
所以综上:选择CentOS版本是比较好的。接下来就和我一起学习Linux吧,就从安装虚拟机开始,如何?
]]>1 | int cal(int n){ |
这一段求和代码中,第 2、3 行分别要执行一个 unit_time 的时间。 第 5、6 行分别需要执行 n 个unit_time 的时间。
整段代码所需要执行的时间T(n) = 2*unit_time + 2n*unit_time = (2+2n)*unit_time
1 | int cal2(int n) { |
这段代码中,第 3、4、5 分别要执行一个 unit_time 的时间。第 7、8 行分别要执行 n 个 unit_time 的时间。第 9、10 行分别要执行 n2 个unit_time 的时间。
所以这段代码所需要执行的时间为T(n) = (3+2n+2n^2)*unit_time
由此可见,代码执行时间与数据规模大小有关,从以下这两个公式中可以得出大 O 时间表示法。
T(n) = (2+2n)*unit_time
T(n) = (3+2n+2n2)*unit_time
T(n) = O(ƒ(n)) : 大 O 时间表示法,表示数据规模增长的越高,执行时间越久。因为公式中的常量和系数并不会影响它们之间的关系,所以可以忽略,以上两个公式就可以简写为:
T(n) = O(n)
T(n) = O(n2)
明白了「大 O 时间表示法」之后,来试着分析一下代码的时间复杂度,由于 T(n) = O(ƒ(n)) 中,对常量,系数可以忽略不计,那么在上面两段代码中,只需要去分析代码中循环次数最多的代码就可以了,比如在一段代码中,只需要分析:
1 | for (; i <= n ; ++i) { |
可以得出第一段代码中的时间复杂度为 O(n)。
在第二段代码中,只需要分析:
1 | for (; i <= n ; ++i) { |
可以得出第二段代码中的时间复杂度为 O(n2)
那么在一段代码中,有多段循环的代码,怎么分析呢?比如以下这样的代码:
1 | int cal3(int n) { |
这段代码主要是得出sum_1+sum_2+sum_3。通过分析可以得到第一小段代码执行 100 次,是常量,所以时间复杂度是 O(n)。第二小段代码时间复杂度是 O(n)。第三小段代码的时间复杂度是 O(n2)。
那么这个时候就可以取复杂度最大的,也就是说这整段代码的时间复杂度为 O(n2)。
加法法则:当 T1(n) = O(f(n)),T2(n) = O(g(n)) , 则 T(n) = O(max(f(n),g(n)))
还有一种嵌套代码的情况,比如这样的:
1 | private static int cal4(int n) { |
在第 6 行代码中,去调用了一个时间复杂度为 O(n) 的的函数,而第 5、6 行的时间复杂度本身就是 O(n),所以这整段代码的时间复杂度就是 T(n) = O(n) * O(n) = O(n2)。
所以,在嵌套代码中,时间复杂度就是嵌套代码内外复杂度的乘积。
复杂度由低到高如下:
对于 O(logn) 复杂度:
1 | i = 1; |
在这里循环执行了 i=i*2,列出来就是:2x=n,也就是log2n=x;底数2可以忽略不计,所以复杂度为O(logn)
]]>String,被 final 修饰了,因为它是不可变的,在拼接字符串的时候会产生新的对象。
StringBuffer,为了解决字符串在拼接过程中产生额外的中间对象,就有了 StringBuffer,提供了 append 和 add 方法来进行字符串的操作,减少了额外的开销,但是它是线程安全
的,会影响一些性能。
StringBuilder,和 StringBuffer 差不多,不过它是非线程安全
的,所以呢,在做字符串操作的时候,优先选择 StringBuilder。
在编程中的语言中,有些语言是动态类型的,有些语言是静态类型的。
动态:运行时检查
静态:编译时检查
有些语言是强类型,有些语言是弱类型。
强类型:强制显示引用,例如:int i = 0;
若类型:不需要强制显示引用,例如:var i = 0;
Java是静态的强类型语言,但是有了反射机制之后,Java也具备了动态语言的能力。
在运行的时候,反射机制可以获取:
对象
类的定义
属性,方法
调用方法
构造对象
甚至可以修改类的定义。
在 JDK 中提供了反射的动态代理,还有诸如 ASM,cglib,javassist。
]]>强引用,是最常见的引用方式,垃圾收集器看到一个对象被强引用了,就不会对它非分之想。只有超过了引用的作用域或者强引用被赋值为 NULL,这时候就可以被垃圾收集。
软引用,相对弱化的强引用,垃圾收集器也不太会对其进行回收,只有 JVM 觉得自己内存不够了的时候,才会去视图回收软引用的对象。软引用通常用来实现缓存。
弱引用,仅仅提供了一种访问弱引用状态的途径,一般用来实现缓存。
虚引用,也叫幻想引用,提供了一种对象确保被 finalize 之后,做某些事情的机制。
final可以用来修饰类,方法,变量。当类被 final 修饰之后便不可以被继承,方法被 final 修饰之后就不可以被重写,而变量被 final 修饰之后就不可以被改变。
finally是用来执行最重要或者说一定要被执行到的语句,在异常捕获(try...catch...finally
)的时候最为常用,比如关闭IO流,关闭数据连接,关闭锁等。
finalize是超类 Object 的一个方法,当垃圾收集器回收垃圾的时候会被调用,保证对象被垃圾收集器收集钱做特定的资源回收,确定不再有对对象的引用。子类重写这个方法可以处理系统资源或者执行其他的处理。
如果硬要说final,finally,finalize之间有什么关系的话,那就是有个鸡儿的关系 - -
]]>从 Java API 可以看到,Exception 和 Error 都继承于 Throwable ,Throwable提供了 throw(抛出) 和 catch(捕获)
Exception 是在程序正常运行的时候可以预料到的,可以事先对其捕获,进行相应的处理。
Error 一般不需要捕获,因为它是在正常情况下,不太可能发生的。
Exception 有两种情况
Java是面对对象编程语言,具有以下显著的两大特性。
JRE:java运行环境,包含了:
JDK:Java开发环境,是JRE的超集,有更多的工具,如:编译器,诊断工具等。
编译时:
源代码 -> javac编译 -> 字节码
运行时:
字节码 -> JVM -> 机器码
通常情况下, JVM 提供了 JIT (Just In Time) 动态编译器,JIT 可以在运行的时候将代码编译成机器码,属于编译执行,而不是解释执行!
]]>话说之前对代码的编写大多都是直接使用jdk里面的对象,有时候也对一些对象直接封装之后就使用了,很少去了解源码中具体细节是怎么实现的,这样显然不符合我这么帅的人的做事风格,所以我现在就来对源码进行学习学习,可能篇幅略长,不过会慢慢记录下我学习的过程和总结一下,希望对自己有帮助的同时,也能够帮助到和我一样,希望更进一步去理解java的小伙伴们!!
废话不多说了,先打开我的 InteliJ IDEA , 创建一个学习源码的项目,就叫做「learnJavaSourceCode」吧。
打开String.java之后可以发现了String实现了java.io.Serializable, Comparable
在 String 类中有4个成员变量:
1 | 1. private final char value[]; |
有一个内部类CaseInsensitiveComparator,还有其它就是构造函数和方法了!
也就是在一开始的一大段注释:
我对它总结一下就是以下几点:
在java中所有的字符字面值(例如:”abc”)都是 String 的一个实例;
Strings是常量,它们的值在被创建之后就不可以改变了,字符缓冲支持改变,因为 String 的对象是不可变的,所以它们可以被共享;
String包含了一些方法,例如字符的大小写转换等(有点废话 - -);
java语言提供了支持字符间的连接操作和将对象转化为字符串的操作,字符间的连接是通过 “+” 来操作的,它们之所以可以连接是因为通过 StringBuffrer 或者 StringBuilder 的 append 方法实现的,而将对象转化成字符串是通过 Object 方法中的 toString 方法。
携带 null 这个参数给String的构造函数或者方法,String会抛出NullPointerException,这不是见惯不惯了吗:)
String 表示一个 UTF-16 格式的字符串。其中的 增补字符 由 代理项对 表示,索引值是指 char 代码单元,因此增补字符在 String 中占用两个位置。
很好理解,我们经常就是这样做的,java这么规定,我们也就这么写了:
1 | String s = "abc"; //这里的 "abc" 就是一个对象 |
Strings是常量,它们的值在被创建之后就不可以改变了,字符缓冲支持改变,因为 String 的对象是不可变的,所以它们可以被共享:
那是不是这样:
1 | public static void main (String[] args){ |
奇怪,不是说不能被改变了吗?为毛可以是def?
其实不然,我们一开始是创建的 “abc” , 我们从1中 「在java中所有的字符字面值(例如:”abc”)都是 String 的一个实例」 可以知道,其实”abc”就是一个String的实例,我们的String s 只不过是指向这个”abc”的String对象了,而我们的 s = “def” 则是将s指向”def”这个对象!
心情好,画个图吧:
首先我们写了这样一句 String s = “abc”; 那么是这样的:
s 这个引用会去常量池里面找有没有”abc”,发现卧槽,没有,那么就创建一个:
这时候 s 就可以指向 “abc” 了!
接着我们把 s = “def” , 同样的道理,它会去常量池找有没有 “def”, 有就指向它,没有就在常量池创建一个:
所以我们现在应该知道 「String的对象是不可变的,所以它们可以被共享」 这句话是什么意思了吧 - -
Java语言提供了支持字符间的连接操作和将对象转化为字符串的操作,字符间的连接是通过 “+” 来操作的,它们之所以可以连接是因为通过 StringBuffrer 或者 StringBuilder 的 append 方法实现的,而将对象转化成字符串是通过 Object 方法中的 toString 方法。
写段代码:
1 | String s1 = "I "; |
运行后理所当然是 I Love You :)
接着使用jad反编译下上面这段代码会发现:
1 | String s1 = "I "; |
可以看到它真的用StringBuilder对象用append方法把我们的s1 + s2 + s3 拼接起来了,然后用toString方法得到 I Love You … 害羞 - -
首先来个问题思考:
1 | String msg1 = "I Love You !" ; |
上面的 msg1 和 msg2 是一样的吗? (我们不一样~~)
我们已经知道msg1是从常量池去取的,而我们new String() 这时候应该在堆内存产生一个String对象,而通过源码可以看到这个String对象方法是将我们传入的这个 “I Love You !” 对象的value和hash进行复制:
1 | public String(String original) { |
画个图那就是这个样子的:
我们创建个char[],然后传给String构造函数:
1 | char[] c = new char[3]; |
通过debug后可以发现:
原来它通过 Arrays.copyOf 把我们的char直接复制给value了!
其实我们应该也猜到了,String里面的value就是char数组!
String提供了好几个含有byte[]参数的构造函数,那么我们对byte[]和String间的转化就容易许多了。
可能你之前应该遇到过乱码问题,你应该是这么解决的:
1 | try { |
其实String里面是含有一个char[]来存放这些字符,而这些字符是以Unicode码来存储的,字节是通过网络传输信息的单位,所以我们在传入byte[]转化为String的时候,是需要对其进行编码的:
1 | static char[] decode(String charsetName, byte[] ba, int off, int len) |
1 | String msg = "I love you !"; |
可以看到这个方法是根据索引返回Char值!
进去源码看看:
1 | public char charAt(int index) { |
可以看到当我们传进去的索引值是小于0 或者 大于 这个字符串的长度,就会抛出异常。否则就返回value数组中对应的值!
通过 debug 可以看到其实我们刚刚定义的 String msg = “I love you !” 中的值被放到了 value 这个数组中了!
而我们 char c = msg.charAt(3) 传入的这个3 就是这个数组对应的下标3,所以呢,输出就是o啦!
equals我们通常用于比较是否相同,那么你知道下面这段代码分别输出的是什么吗?
1 | String s = "I Love You !"; |
他们分别输出的:
可能有些人会奇怪会什么 s == s2 是false? 他们不是都是是 “”I Love You !” 吗?
这时候我们就要来看看 == 和 equals 的区别了!
其实 == 比较的是他们的地址值(hashcode),我们知道String是不可变的,我们可以知道s 和 s1 指向的都是 “I Love You !”;所以他们的hashcode是一样的。所以返回true;而s 和 s2 他们指向的地址是不一样的所以是false;
可能此刻有人会疑惑那么为什么s.equals(s2)返回的是true了。这时候我们应该可以猜到equals应该判断的不是两个对象间的hashcode吧,我们看下源码:
1 | public boolean equals(Object anObject) { |
很明显我们可以发现,equals判断的不是hashcode,而是判断它们的值是否相同,所以s.equals(s2)返回的是true!
有时候我们可能会判断字符串是否以指定的后缀结束。例如我们有获取的图片路径,判断他是不是以.jpg结尾的:
1 | String s = "canglaoshi.jpg"; |
debug一下就明白了它是怎么判断的:
它会去调用 startsWith 方法。
最后就是以pc为次数进行遍历ta[]从下标为to开始,pa[] 从下标为0开始逐一判断,如果相同就返回true!
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
那么问题来了,下面这一段输出的是什么呢?
1
2
3String s = "I Love You !";
s.replace("Love", "Fxxk");
System.out.println(s);
如果你说是 I Fxxk You !, 那就真的是欠fxxk了~ 别忘了,String 是不可变的。所以呢,
s 还是 I Love You, 而String s1 = s.replace(“Love”, “Fxxk”); 这样的s1 才是
“I Fxxk You !”
返回此字符串的哈希码。
哈希码是怎么算出来的?
1 | System.out.println("I Love You !".hashCode()); //-1710377367 |
我们知道我们的 “I Love You !” 被放到了char数组中。
hashcode的算法是这样的:
1 | 31 * 0 + val[0] |
它的代码实现是:
1 | public int hashCode() { |
可以看到它的算法,其中char值就是字符对应的ACII编码:
返回一个新的字符串,它是此字符串的一个子字符串。
可以理解为截取字符串,它的实现就是用数组的copyOfRange将指定数组的指定范围复制到一个新数组:
1 | this.value = Arrays.copyOfRange(value, offset, offset+count); |
继承,就像大象和小象有一些共同的属性,一只大象生了一只小象,而小象拥有了大象的功能属性,然后小象还可以自己学习很多东西,扩展了自己的功能和属性!
1 | //父类 |
控制台显示结果:
son.name:little elephant ,son.age:15hahahhahahah
从代码中可以看出:当Elephant_Son extends Elephant_Father的时候,son自己本身并没有setName()、getName()等功能,可是它继承了它的爸爸后就可以用它爸爸身上的东西了。
**由此可见继承简化了代码,son在继承了father的基本功能后,在自己的类中还可以实现自己扩展出来的东西,这也简单的回答了第一个问题(java为什么要用继承!)
**
可是,当father拥有了一个吃的方法,而son也有吃的方法,可是他们像吃的东西不同,比如father想吃饭,而son想吃方便面!那么当son继承了father后怎么办呢?难道也要跟着吃饭吗?no!!
代码体现:
1 | //父类 |
输出结果:
father:我要吃饭!!! father:我要吃饭!!!
son继承了father后,son.eat()是吃饭啊,可是想吃方便面啊!!怎么办? 这时候son想了个方法,把继承父亲吃的这个方法给重写掉!多么聪明的son呀,说来就来:
1 | //父类 |
输出结果:
son:爸爸要吃饭我又不吃,我改了,我要吃方便面!father:我要吃饭!!!
**由此可见,在继承中有一个东西叫做重写(覆盖),爸爸有的东西不一定是我要的,那么我就改掉!!!
**
父亲呢!有时候有些东西是不想给孩子看到(你懂的),有些父亲甚至不想有孩子,想“断子绝孙”,这个时候父亲就想到了把一些东西占为己有,私有(private)掉, 而想“断子绝孙”的父亲就把自己成为最终态(final)!
比如,father有一个思考事情的方法,但是他不想让继承他的son知道!就用private私有:
1 | class Elephant_Father { |
这个时候,son是继承不到father的think方法的!
再比如想要断子绝孙的父亲:
final class Elephant_Father {}
这个时候,它就没有son了,也就是说,son继承不了他,因为他final了!
又:当父亲有static来修饰方法的时候,子类是不能重写的!比如:
1 | //父类 |
输出:
吃面 吃饭
咋一看好像真的重写了呢!! 可是有没有看到子类的eat方法上面没有@Override字样儿! 其实并不是重写而是子类自己写的一个静态方法,static修饰的方法和一般的方法不同,它是静态绑定的,所属类的!所以是不会有重写的!
所以可以对以上的描述拿来简单回答第二个问题(继承需要注意什么)。
但还有一个细节就是java是不能多继承的,
什么意思?
就是son extends father,mother,…,这样是不行的,
但是java可以传递性的继承,什么意思呢?
就是 son extends father, grandson extends son ….;
最后浅谈一下:
除了刚才讲过的简化了代码,提高了代码的复用性,而且还提高了代码的维护性;
再者,使得类与类之间产生了关系,产生了关系的作用在前面的例子可
以看到,还有它的另一作用是多态的前提!
提高了耦合性,一定程度上打破了封装!