bt365体育投注.主頁欢迎您!!

    <acronym id="zvmrr"></acronym>
    <td id="zvmrr"></td>
  • <tr id="zvmrr"><label id="zvmrr"></label></tr>
  • <acronym id="zvmrr"></acronym>
  • 苏生不惑

    苏生不惑 查看完整档案

    北京编辑  |  填写毕业院校新浪  |  PHP工程师 编辑 github.com/sushengbuhuo 编辑
    编辑

    同名公众号:苏生不惑

    个人动态

    苏生不惑 发布了文章 · 2020-10-01

    如何让你的搜索更高效

    苏生不惑第178 篇原创文章,将本公众号设为星标,第一时间看最新文章。

    这周四就是国庆节长假了,大家的心情可能都是这样的。
    image.png

    关于搜索之前分享过 那些你可能不知道的搜索奇技淫巧2020 最全百度网盘搜索,找电影资源不再愁2020 最全电子书搜索网站,找电子书不再愁 ,今天分享的是如何让你的搜索更高效。

    先吐槽下,国内的互联网越来越不互联了,比如手机端看全文必须下载APP,有些产品(比如闲鱼)甚至没有网页端,robot.txt禁止搜索引擎抓取,把一个个APP的内容封闭起来,于是我们手机上安装的APP越来越多。
    image.png
    image.png

    能用网页版我是不会安装APP的,电脑键盘打字多爽,大屏幕多爽,这里还是要点赞下b站和知乎,搜索引擎可以很方便的找到内容,不下载APP也完全可以使用他们的产品。

    去广告

    在百度搜索拼多多,第一个结果是个广告,居然不是拼多多官网,毕竟人家是给了钱的。
    image.png

    相比之下谷歌搜索就好多了,第一个就是官网,所以我一直推荐大家使用谷歌搜索和谷歌浏览器 ,谷歌还有很多产品 那些在国内还能使用的谷歌产品
    image.png

    不过大多数人还是用百度居多,这里推荐一个 Chrome 扩展 广告终结者 ,它可以清除网页上的浮动广告,购物广告,恶意弹窗,跟踪代码,让你浏览网页更快更清爽, 而且支持绝大多数浏览器。
    image.png
    Chrome扩展地址https://chrome.google.com/web... ,安装Chrome扩展方法见之前文章上不了谷歌如何安装 Chrome 扩展?

    安装扩展后再次百度搜索没有垃圾广告了,第一个就是官网,搜索效率明显提高了。
    image.png

    除了去除网页广告,它还有个实用功能就是去除视频广告,比如腾讯,优酷,爱奇艺这样的影视网站, 45秒的开头广告 。
    image.png

    安装好这个扩展后再次打开爱奇艺可以看到广告一晃而过就开始播放视频,看我录制了的GIF。
    iqiyi_ad.gif

    搜索引擎快捷跳转

    这是个油猴脚本https://greasyfork.org/zh-CN/... ,可以
    方便的在各个搜索引擎之间跳转,增加可视化设置菜单,能更友好的自定义设置,修复百度搜索样式丢失的问题。

    关于油猴脚本之前介绍过很多次了,公众号后台回复 油猴 获取,安装详情见文章实用油猴脚本推荐,让你的谷歌浏览器更强大

    搜索框下方列出了网页,翻译,知识,图片,视频,音乐,社交,购物等搜索网站快捷方式,可以直接进入这些网站搜索对应关键词。
    image.png
    对百度搜索同样有效。
    image.png

    网址还可以自定义。
    image.png

    搜索黑名单

    有时候不想在搜索结果看到某些网站,可以安装搜索过滤扩展 uBlacklist https://chrome.google.com/web... ,方便你搜索的时候不看某些垃圾网站的搜索结果。

    image.png
    对于某些专门采集数据的垃圾网站,推荐安装扩展终结内容农场 https://chrome.google.com/web... ,在搜索结果会有标识
    image.png
    打开后会有提示。
    image.png

    右键搜

    一个优秀的右键菜单 Chrome 扩展程序(公众号后台回复 谷歌 获取) https://github.com/xuender/cm... ,右键菜单增加了跳转扩展程序,书签管理,插件,创建短网址,生成二维码等功能。
    image.png
    菜单可以自定义。
    image.png

    搜索技巧

    《》来搜索书籍或者电影,比如 《明朝那些事儿》,如果搜电子书在书名关键词后加上文件格式,如 pdf/epub/mobi/azw3/txt等 比如 明朝那些事儿 filetype:pdf 或者 明朝那些事儿 inurl:pdf,搜出的结果都是PDF文件。
    image.png

    site 站点搜索,比如在b站搜索 周杰伦 site:bilibili.com 周杰伦,百度搜索工具里可以直接输入站点搜索,类似的语法还有查询天气 weather: 北京,查询股票stocks: 微博,查询地图map: 北京,查询电影movie: 夺冠,查询新闻源source: 国庆放假安排 。
    image.png

    数字间隔搜索,比如2000年到2010年的奥斯卡 奥斯卡 2000...2010
    image.png
    模糊搜索,比如想找一首歌,只记得歌词里的几个字,搜索 *爱你很久很轻易的找到周杰伦的《晴天》。
    image.png

    搜索允许目录浏览的网站,比如 index of 电影可以搜到很多人的私人网盘。
    image.png
    这个告诫我们千万别把自己的私人网盘放公网,万一放了某些不可描述的东西。
    image.png

    更多谷歌浏览器的实用技巧见之前文章 那些你可能不知道的谷歌浏览器实用技巧

    免费知识星球,每天更新

    公众号 苏生不惑

    扫描二维码关注或搜索微信susheng_buhuo

    查看原文

    赞 1 收藏 0 评论 0

    苏生不惑 发布了文章 · 2020-09-25

    Python 生成你的朋友圈九宫格图片

    关于微信之前写过以下文章,有兴趣可以点击查看:

    如何导出你的微信语音

    c 盘空间又满了?微信清理神器帮你释放空间

    微信撤回的消息也能看到!

    如何备份可能被删的公众号文章和网页

    如何在电脑上登陆多个微信

    如何发一条空白的朋友圈

    那些你可能不知道的微信奇技淫巧

    一键生成你的微信社交数据报告

    你可能在朋友圈看过九宫格图片(把一张图片按照比例分成九份),就像这样的:
    image.png
    还有微博九宫格图 https://weibo.com/2717930601/...
    image.png

    这种九宫格图片怎么发的呢?下面用Python搞定它,Python是门很简单实用的语言,即使不做开发工作也可以学习下,比如之前的下载抖音 一键批量下载抖音无水印视频 ,下载公众号文章一键下载公众号所有文章,导出文件支持PDF,HTML,Markdown,Excel,chm等格式 都是用的Python,之后我会写一篇如何使用Python来抓取数据,代码非常简单,只要你认识英文字母就会用。

    PIL处理图片

    先用pip安装切割图片的库 PIL pip install Pillow , 然后编辑代码:

    from PIL import Image,ImageSequence,ImageFilter
    pic = input("请输入图片文件名:")
    im = Image.open(pic)
    width = im.size[0]//3
    height = im.size[1]//3
    x = 0
    y = 0
    filename = 1#保存的文件名
    for i in range(3):
        for j in range(3):
            crop = im.crop((x, y, x+width, y+height))
            crop.save(str(filename) + '.jpg')
            x += width
            filename += 1
        x = 0
        y += height

    直接命令行执行 python pic.py ,输入图片文件名即可在本地生成9张小图。
    image.png

    还可以将代码打包为exe可执行文件,这样不用安装Python就可以运行了。

    pyinstaller 打包exe

    打包用的工具是pyinstaller,先pip install pyinstaller安装它,然后pyinstaller -F pic.py ,不过我运行的时候出错了。
    image.png

    
        for real_module_name, six_module_name in real_to_six_module_name.items():
    AttributeError: 'str' object has no attribute 'items'

    谷歌了下需要升级库。

    λ pip install -U setuptools
    Collecting setuptools
      Downloading https://files.pythonhosted.org/packages/6d/ed/52e05469314a266f68d9f251a8c1ab7a21a03327b1724056e3eea654bfd1/setuptools-50.0.3-py3-none-any.whl (784kB)
    Installing collected packages: setuptools
      Found existing installation: setuptools 41.2.0
        Uninstalling setuptools-41.2.0:
          Successfully uninstalled setuptools-41.2.0
    Successfully installed setuptools-50.0.3
    
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    # 更新pip版本
    python -m pip install -U pip
    λ pip uninstall enum34
    Uninstalling enum34-1.1.6:
      Would remove:
        d:\python\lib\site-packages\enum34-1.1.6.dist-info\*
        d:\python\lib\site-packages\enum\*
    Proceed (y/n)? y
      Successfully uninstalled enum34-1.1.6
    """    
    
    

    再次执行pyinstaller -F pic.py 终于成功了,不过生成的exe文件有点大(20多MB,公众号后台回复 朋友圈 获取exe文件),双击exe文件输入文件名就可以运行了。 https://www.lanzoux.com/iWtJN...

    60106 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
    60112 INFO: Bootloader d:\python\lib\site-packages\PyInstaller\bootloader\Windows-32bit\run.exe
    60114 INFO: checking EXE
    60115 INFO: Building EXE because EXE-00.toc is non existent
    60115 INFO: Building EXE from EXE-00.toc
    60115 INFO: Appending archive to EXE d:\download\dist\pic.exe
    60279 INFO: Building EXE from EXE-00.toc completed successfully.

    image.png

    PIL除了切割图片还可以对照片去色。

    img = Image.open("jay.jpg")
    img2 = img.convert("L")
    img2.save("jay2.jpg")

    去色效果图:
    mm2.jpg

    对照片旋转90度。

    img3 = img.rotate(90)
    img3.save("jay_rotate.jpg")

    旋转效果图:
    img_rotate.jpg

    对照片翻转。

    img4 = img.transpose(Image.FLIP_LEFT_RIGHT)
    img4.save("jay_transpose.jpg")

    翻转效果图,周杰伦七里香几个字翻过来了:
    img_transpose.jpg

    除了使用Python 也有在线工具和微信小程序可以生成九宫格图片 https://www.dute.org/image-clip ,上传图片下载即可。
    image.png

    免费知识星球,每天更新

    公众号 苏生不惑

    扫描二维码关注或搜索微信susheng_buhuo

    查看原文

    赞 3 收藏 2 评论 1

    苏生不惑 发布了文章 · 2020-09-25

    Python 一键批量下载抖音无水印视频

    关于下载视频之前写过 如何轻松下载腾讯/微博/优酷/爱奇艺/b站等全网视频? 那些你可能不知道的视频下载奇技淫巧

    抖音视频也可以直接通过idm来下载,先在抖音复制视频链接。

    image.png
    用谷歌浏览器打开视频链接后点击视频右上角的idm(公众号后台回复 idm获取软件 )就能下载了 。
    image.png

    不过这样下载的视频带有抖音的标志,如果想去除这个水印,下面分享个简单的方法。
    image.png

    打开浏览器控制台使用手机模式访问会跳转到 https://www.iesdouyin.com/sha...
    image.png

    可以看到请求接口 https://www.iesdouyin.com/web... ,返回值play_addr里就有播放地址url_list https://aweme.snssdk.com/awem...
    这个地址是有水印的,将地址里的playwm改为play就是无水印播放地址了。

    下载后播放对比下,左侧的抖音水印没了。
    image.png
    无水印视频还少了3秒 ,因为视频结尾的一小段 来抖音,发现更多创作者 也没了。
    image.png

    当然这样下载无水印视频有点麻烦,一般小白还不会,Python 可以帮你一键下载。

     
    
    url = input("请输入你要去水印的抖音短视频链接:")
     
    response = requests.get('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='+str(vid))
    result = response.json()
    #print(result)
    item = result.get("item_list")[0]
    author = item.get("author").get("nickname")
    mp4 = item.get("video").get("play_addr").get("url_list")[0]
    
    with open(desc+".mp4", 'wb') as f, open(desc+".mp3", 'wb') as f2:
        f.write(video.content)
        f.close()
        f2.write(audio.content)
        f2.close()
        print("===>音频和视频下载完成")
    

    直接执行脚本 python douyin.py ,很快下载好了。
    image.png

    视频对应的mp3音频也下载了。
    image.png

    除了Python已经有很多不错的软件可以很方便的下载无水印抖音视频了,下面分享几个好用的。

    这个软件(公众号后台回复 抖音 获取软件) 支持抖音,皮皮虾,快手,火山,微视等平台视频的批量下载,还支持采集视频。
    image.png

    image.png
    输入抖音视频链接地址 https://v.douyin.com/JkaChFt/ ,点击解析可以看到视频标题和下载链接。
    image.png
    还可以输入抖音作者主页地址 https://v.douyin.com/JkaaoTH/ ,解析可以获取作者视频列表。
    image.png
    然后右键下载,很快下载完了。
    image.png
    播放看看,左上方的抖音水印没了。
    image.png

    另外一个软件 抖音信息解读 ,可以搜索列出作者600多个视频(包含作者头像,视频标题,视频地址,点赞数,评论数,分享数,音乐地址,无水印链接等),在右侧可以选择视频下载。
    image.png
    image.png

    免费知识星球,每天更新

    公众号 苏生不惑

    扫描二维码关注或搜索微信susheng_buhuo

    查看原文

    赞 10 收藏 9 评论 2

    苏生不惑 发布了文章 · 2020-09-25

    王菲k歌又上微博热搜,Python分析下微博网友评论

    最近王菲状态话题上了微博热搜 https://weibo.com/1266269835/...https://weibo.com/6598655984/...
    image.png

    image.png
    还和马云合唱了 如果云知道https://weibo.com/1956700750/...
    image.png

    5年不更新的微博下评论开始求开演唱会 https://weibo.com/1629810574/...

    image.png

    微博评论.png

    于是用Python抓取了下这条微博下的评论(前几十页评论),微博有4个域名: 网页版weibo.com ,手机端 m.weibo.com,移动端weibo.cn ,h5端 m.weibo.cn ,这里用网页版为例,打开控制台可以抓取到评论接口
    https://weibo.com/aj/v6/comme...

    image.png

    同样的移动端 https://weibo.cn/search/?tf=5... 搜王菲可以找到这条微博https://weibo.cn/comment/C8Fq... ,评论也在一块。
    image.png

    还有h5端 https://m.weibo.cn/detail/382... 抓取到接口https://m.weibo.cn/comments/h...

    有了接口地址,数据就很好抓取了,这里写入文件。

    image.png
    然后用wordcloud对微博评论生成词云图,主要关键词是好听,菲姐,演唱会,真的很期待王菲再开演唱会。
    image.png
    也可以通过网站 http://cloud.niucodata.com/ 生成,上传文字即可。
    image.png

    另外我用Chrome扩展备份了王菲1500多条微博,详情见之前文章用Chrome扩展一键备份微博
    image.png
    如果需要备份文件在公众号后台回复 微博 获取
    image.png

    天后已经很久不出专辑了,自从去年发了一首单曲《我和我的祖国》快过去一年了,不过即使20年前的歌今天依然在传唱 王菲51岁:爱她,不只是因为她的歌,比如《红豆》
    https://music.163.com/#/song?...,可惜目前在网易云音乐需要VIP才能听,如果不想花钱看看之前文章一键解锁网易云音乐变灰歌曲
    image.png
    这里抓取前200页的评论生成词云图,我也很喜欢这首歌。 评论接口地址http://music.163.com/api/v1/r...
    image.png

    公众号 苏生不惑

    扫描二维码关注或搜索微信susheng_buhuo

    查看原文

    赞 2 收藏 2 评论 0

    苏生不惑 发布了文章 · 2020-08-26

    2020七夕又来了,教你给女朋友做个动态二维码

    苏生不惑第166 篇原创文章,将本公众号设为星标,第一时间看最新文章。

    又到了一年一度的七夕了,之前写过听说 520 你还没对象,来这里看看 ,是不还在想送什么礼物,今天分享一个有意思的动态二维码,可以用来哄女朋友开心。

    二维码

    二维码也称为二维条码,是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。

    以上来自维基百科解释 https://zh.wikipedia.org/zh-c... ,自从有了微信,二维码已经随处可见了。

    使用 Chrome 扩展可以轻易的生成二维码 https://chrome.google.com/web...
    image.png

    今天介绍的是基于 Python 的二维码工具 myqr 。

    myqr

    myqr 可生成普通二维码、带图片的艺术二维码(黑白与彩色)、动态二维码(黑白与彩色) https://github.com/sylnsfar/q... ,直接使用 pip install myqr 安装它。

    这里以一个表白网页 myqr http://sushengbuhuo.gitee.io/... 生成二维码。

     λ myqr http://sushengbuhuo.gitee.io/love/
    line 16: mode: byte
    Succeed!
    Check out your 5-H QR-code: d:\download\qrcode.png

    生成二维码效果:
    qrcode.png

    接着用GIF生成一个动态二维码。
    心.gif

    λ myqr http://sushengbuhuo.gitee.io/love/ -p lovelove.gif
    It may take a while, please wait for minutes...
    line 16: mode: byte
    Succeed!
    Check out your 5-H QR-code: d:\download\lovelove_qrcode.gif

    生成二维码效果:
    lovelove_qrcode.gif
    myqr http://sushengbuhuo.gitee.io/love/ -p lovelove.gif -c 彩色效果
    lovelove_qrcode.gif
    再清晰点。
    lovelove_qrcode.gif
    用微信扫码后显示效果,可以自己长按识别二维码:
    npy.gif
    可惜动图在微信里没法识别。
    image.png

    还有个模板 https://a.scene.ehqxiu.cn/s/X...
    xinxin.gif
    微信扫描后效果:
    image.png

    如果你没有Python环境,这里提供了一个exe程序(公众号内回复 女朋友 获取),使用方法很简单,在exe文件同级目录创建一个文件info.txt ,在里面输入对应的参数,之后双击myqr.exe运行即可。

    info.txt 文件格式如下:

    words=http://sushengbuhuo.gitee.io/love/
    v=11
    p=lovelove.gif
    l=Q
    c
    con=1.5
    bri=1.3

    你只需要改p后面参数 lovelove.gif(GIF文件名,就是上面那个给你小心心的GIF图,你也可以自己找一个)。

    第一次使用会自动下载一些库文件,因为程序依赖 imageio
    image.png
    如果下载很久不动,你可以从这里自己下载到本地
    https://github.com/imageio/im...,然后把这个文件放到 freeimage 目录
    C:UsersxxxAppDataLocalimageiofreeimage (xxx为自己电脑用户名), 如果没有freeimage文件夹需要手动创建 。

    imageio 目录还有ffmpeg目录,里面有个文件 ffmpeg-win32-v3.2.4.exe ,也可以从这里下载 https://github.com/imageio/im... ,运行myqr.exe后在本地生成动态GIF图 lovelove_qrcode.gif。
    image.png

    zhuyin_qrcode.gif

    这里给我的公众号二维码也生成个GIF图,公众号的二维码可以通过微信号生成 https://open.weixin.qq.com/qr... ,解码后的地址为 http://weixin.qq.com/r/WDvM1M... ,生成效果:

    lovelove_qrcode.gif

    下面分享段Python代码,输出?心形love

    代码输出爱

    命令行执行
    print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))
    image.png

    
                    veLoveLov           veLoveLov
                eLoveLoveLoveLove   eLoveLoveLoveLove
              veLoveLoveLoveLoveLoveLoveLoveLoveLoveLov
             veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL
            veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov
            eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove
            LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL
            oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLo
            veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov
            eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove
             oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove
              eLoveLoveLoveLoveLoveLoveLoveLoveLoveLove
              LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL
                eLoveLoveLoveLoveLoveLoveLoveLoveLove
                 oveLoveLoveLoveLoveLoveLoveLoveLove
                  eLoveLoveLoveLoveLoveLoveLoveLove
                    veLoveLoveLoveLoveLoveLoveLov
                      oveLoveLoveLoveLoveLoveLo
                        LoveLoveLoveLoveLoveL
                           LoveLoveLoveLov
                              LoveLoveL
                                 Lov
                                  v

    还可以自定义

    import time
    words = input('Please input the words you want to say!:')
    for item in words.split():
        print('\n'.join([''.join([(item[(x-y) % len(item)] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(12, -12, -1)]))
        time.sleep(1.5)

    [plt.show() for _, __, ___, plt in [(plt.plot(x, y1, color='r'), plt.plot(x, y2, color='r'), np, plt) for x, y1, y2, np, plt in [(x, 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2), 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2), np, plt) for x, np, plt in [(np.linspace(-8, 8, 1024), np, plt) for np, plt in [(__import__('numpy'), __import__('pylab'))]]]]]
    image.png

    没有安装Python,在浏览器控制台也是可以的。

    console.log([...Array(30).keys()].map(u=>u-15).reverse().map(y=>[...Array(60).keys()].map(u=>u-30).map(x=>((x*0.04)**2+(y*0.1)**2-1)**3-(x*0.04)**2*(y*0.1)**3<=0?'babyiloveu'.split('').slice([(x-y)%10])[0]:' ').join('')).join('\n'))
    image.png

    公众号 苏生不惑

    扫描二维码关注或搜索微信susheng_buhuo

    查看原文

    赞 2 收藏 2 评论 0

    苏生不惑 发布了文章 · 2020-07-28

    那些有意思的谷歌/百度搜索彩蛋

    我平常使用最多的网站就是谷歌了,所谓万事不决找谷歌,关于谷歌之前也写过

    那些你可能不知道的搜索奇技淫巧

    那些在国内还能使用的谷歌产品

    除了常用的搜索,谷歌和百度其实还有很多关键词彩蛋, 下面整理部分有意思的关键词搜索彩蛋,摸鱼的时候可以玩玩。

    维基百科上还整理了一份 Google玩笑和复活节彩蛋列表https://zh.wikipedia.org/wiki...
    image.png

    动画效果

    搜索 z or r twice 页面会360°旋转搜索结果

    image.png

    对应百度搜索 翻转效果
    image.png

    其他类似的词还有 askew(倾斜效果)
    image.png

    百度也有很多这样的关键词,比如 摇一摇, 翻转, 黑洞 ,表白,这个之前写过听说你想 520 表白

    image.png
    设置一个密码(比如20196699),然后让对方搜索 解蜜20196699
    image.png

    朗读英文

    搜索pronounce love ,搜索结果提供美式和英式两种发音,还可以调整语速。

    image.png

    宇宙的终极答案

    搜索 Answer to life, the universe and everything结果是42

    image.png
    为什么是42呢?有人说这几个字符正好42个,不过这其实是英国作家道格拉斯·亚当斯所写的系列科幻小说《银河系漫游指南》里的一个数。https://zh.wikipedia.org/wiki...

    灭霸

    搜索 灭霸 页面右侧有一个嵌有宝石的手套
    image.png

    点击这个手套,就会有一个打响指的小动画 ,然后页面会消失部分搜索结果。

    image.png

    计算器

    比如搜索 pi
    image.png
    image.png

    搜索 1.2+(sqrt(1-(sqrt(x^2+y^2))^2 + 1 – x^2-y^2) * (sin (10000 * (x*3+y/5+7 ))+1/4)会得到一个复活节蛋的图案。
    image.png

    吃豆人涂鸦游戏

    搜索 pacman 玩吃豆人涂鸦游戏
    image.png
    当然你也可以直接进入 https://www.google.com/doodle...
    image.png

    纸牌接龙

    相信你肯定玩过Windows下的纸牌接龙游戏,现在你可以在谷歌搜索 solitaire直接在线玩。
    image.png
    image.png

    Google in 1998

    搜索 Google in 1998 进入1998年的谷歌页面 https://elgoog.im/google1998/
    再在这里搜索谷歌,完成套娃操作。
    image.png

    超级马里奥兄弟

    搜索 Super Mario Bros 右侧会出现超级马里奥游戏里的道具问号箱,点击会有金币掉下来的声音。
    image.png

    贪吃蛇

    搜索 play snake 开始玩贪吃蛇吧。
    image.png
    image.png

    指尖陀螺

    搜索 spinner 会出现指尖陀螺游戏。
    image.png

    老友记

    搜索《老友记》的角色莫妮卡·盖勒,右侧会有个冒泡的小水桶。
    image.png

    Chrome 小恐龙游戏

    当 Chrome 浏览器没有连上网络,就会出现这个小恐龙,按空格就可以开始游戏了。

    image.png

    当然不用断网输入chrome://dino/也可以玩,有人还将它移植出来一个网站 https://ishare20.net/game/chr...
    如果想作弊玩让它一直跑可以打开控制台执行以下代码

    var dino=Runner.prototype
    dino.gameOver=()=>{}
    Runner.instance_.setSpeed(233)

    image.png

    还有哪些你知道有意思的彩蛋,欢迎留言。

    查看原文

    赞 3 收藏 2 评论 0

    苏生不惑 发布了文章 · 2020-07-28

    那些你用得上的镜像网站

    国外的某些网站经常打不开或很慢,于是就有了做代理的镜像网站,推荐几个常用的镜像网站,你可能用得上。

    谷歌

    Google镜像就是一个代理访问谷歌的网站,比如 http://ac.scmor.com/ http://scholar.hedasudi.com/ ,自从用谷歌以后搜索效率快多了,建议你看看我之前的总结那些你可能不知道的搜索奇技淫巧,不过镜像只能使用不能登录谷歌账号。
    image.png
    image.png

    谷歌学术

    https://gfsoso.99lb.net/ https://cc.gufenxueshu.com/scholar/ https://www.gycc.com/?q=5g 搜索5g的结果
    image.png
    对比谷歌学术的结果https://scholar.google.com.hk...
    image.png

    维基百科

    维基百科的中文版万维百科,不过数据没有官方全 https://www.wanweibaike.com/https://zh.wikipedia-mirror.o...:%E9%A6%96%E9%A1%B5
    image.png
    维基百科还提供数据下载 https://dumps.wikimedia.org/z...
    image.png

    GitHub

    GitHub有时候clone很慢,如果你有代理ip可以 alias gg='http_proxy=127.0.0.1:1087 https_proxy=127.0.0.1:1087',然后 gg git clone xxx

    GitHub镜像网站有 https://github.com.cnpmjs.org/https://git.azurewebsites.net/
    image.png

    谷歌商店

    https://pictureknow.com/#/ext...https://www.gugeapps.net/
    http://www.cnplugins.com/tophttps://www.crx4chrome.com/
    https://www.chromefor.com/ 关于Chrome扩展之前写过那些实用的 Chrome 扩展神器,安装Chrome扩展可以使用镜像商店下载crx文件然后手动安装,不过有些扩展可能没有及时同步。
    image.png
    image.png

    油管

    最近李子柒很火,看看她在油管的视频吧,不过这个网站不支持中文搜索。
    image.png
    image.png
    image.png

    SCI-Hub

    做科研的人用得着 http://tool.yovisun.com/scihub/
    image.png
    另外推荐一个Sci-Hub一键全文下载的Chrome扩展 ,地址 https://chrome.google.com/web...

    npm

    http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
    npm config set registry "https://registry.npm.taobao.org"

    image.png

    golang

    golang.org 打不开,你可以用https://golang.google.cn/dl/...://gomirrors.org/ 。

    命令行代理有 https://goproxy.io/https://goproxy.cn/ 命令行执行export GOPROXY=https://goproxy.io
    image.png

    composer

    php.net 中文镜像 http://php.p2hp.com/
    阿里云 Composer 全量镜像 https://developer.aliyun.com/...
    image.png

    可以通过prestissimo composer global require hirak/prestissimo 来管理composer镜像。

    pypi

    清华大学开源软件镜像站 https://mirror.tuna.tsinghua....
    使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package安装Python包
    image.png

    查看原文

    赞 22 收藏 14 评论 3

    苏生不惑 发布了文章 · 2020-07-28

    跟随时光机回到过去看看 2005 年的百度/腾讯/淘宝/谷歌

    周杰伦有2首歌《时光机》和《回到过去》,人是不可能回到过去了,但人总爱怀旧,想看看过去的网站怎么办呢?其实过去的网站在互联网上都有记录,今天就跟随杰伦一起回到过去的互联网。哦,不,是时光机,这个时光机就是网站 https://archive.org/web/,以下是维基百科https://zh.wikipedia.org/wiki... 上的介绍:

    网站时光机由互联网档案馆的创始人Brewster Kahle和Bruce Gilliat于2001年推出,以解决网站在维护或关闭时无法查看内容的问题,此外还能查看网页的历史存档版本,创始人Kahle和Gilliat希望以此能为整个互联网提供“普遍获取所有知识”的途径。

    image.png
    还有另外一个时光机网站http://archive.md/ http://archive.is/ http://web.archive.bibalex.or...
    image.png

    时光机把这些互联网网站的历史快照通通都存下来了, 按照时间存档.,许多年后回过来看, 就像在看老照片一样, 很有意思,下面就来看看过去那些网站的模样。

    腾讯

    输入qq.com 可以看到从1998年到2019年的qq历史首页.
    image.png
    我们看下2005年的1月8号的腾讯首页(可以自己选择某个快照的时间),地址 https://web.archive.org/web/2...://www.qq.com/
    image.png
    2005年彩铃还很流行,现在的00后应该都不知道彩铃是个什么玩意吧。
    image.png

    谷歌

    2005年的谷歌,地址 https://web.archive.org/web/2...://www.google.com/
    image.png
    对比下2019年的谷歌
    image.png

    百度

    2005 年的百度,地址 https://web.archive.org/web/2...://www.baidu.com/
    image.png
    对比下2019年的百度,输入框简洁了。
    image.png

    淘宝

    2005年的淘宝,马云在2004年就很牛了,地址 https://web.archive.org/web/2...://www.taobao.com/new.php
    image.png

    对比下2019年的淘宝,眼花缭乱的。
    image.png

    微博

    微博09年才出来,那会域名还是http://t.sina.com.cn/ ,这里看看2011年的微博,地址 https://web.archive.org/web/2...://t.sina.com.cn/

    image.png

    b站

    2011年的b站域名还是https://www.bilibili.tv/,地址https://web.archive.org/web/2...://www.bilibili.tv/
    image.png
    2019年的b站
    image.png

    优酷

    2008年的优酷,那年正好是北京奥运会,地址https://web.archive.org/web/2...://www.youku.com./
    image.png

    豆瓣

    2008年的豆瓣,可以看到星爷最后一部主演的电影《长江七号》 ,地址https://web.archive.org/web/2...://douban.com/
    image.png

    知乎

    2013年的知乎,地址https://web.archive.org/web/2...://www.zhihu.com/login?next=%2Fexplore
    image.png

    image.png

    2019年的知乎
    image.png

    搜索引擎快照

    除了上面的时光机,搜索引擎都有快照功能, 记录了当时被收录时的样子,如果某个页面打不开了,可以在搜索引擎里找找,有人还做了个快照集合网站 https://2tool.top/
    image.png

    备份

    上面这些是大网站,http://archive.org 会定期去收录,如果是小站或者某个网页可以自己收录下,比如我的这篇文章如何发一条空白的朋友圈
    https://web.archive.org/save 这里输入你要备份的地址。

    image.png

    生成的链接 https://web.archive.org/web/2...://mp.weixin.qq.com/s/Xz1m-mqtCcBF_4hmGCpkUQ,可以永久保存我的文章了。
    image.png

    查看原文

    赞 0 收藏 0 评论 0

    苏生不惑 赞了文章 · 2019-12-01

    SFKP ? 计算机百科丨IPv4 地址,到底没没没?

    clipboard.png

    这两天有一种穿越了的感觉。

    犹记得上大学的时候,教计算机原理的老师就告诉我们“IPv4 地址一共有 42.9 亿个,随着互联网的发展现在已经耗尽了。”

    这两天怎么又出现了「IPv4 正式用尽」的新闻?还是由负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心(RIPE NCC)宣布的。

    图片描述

    通知的意思是最后的 IPv4 地址空间储备池在 11 月 25 日 UTC + 1 15:35 完全耗尽,所有 43 亿个 IPv4 地址已分配完毕。这意味着没有更多的 IPv4 地址可以分配给 ISP 和其他大型网络基础设施提供商。事实上,该过程自 80 年代以来就已预见到,顶级地址实际上已经在 2012 年耗尽。

    从理论上讲,IPv4 地址耗尽应该意味着不能将任何新的 IPv4 设备添加到 Internet,不过为什么我们现在还有 IP 地址可以用?IPv4 到底没没没?没了我们怎么办?耽不耽误我在网上冲浪?

    这期的 「SFKP ? 计算机百科」,我们就来「SFKP ? IP 地址」。

    啥是 IP?

    clipboard.png

    名词解析:IP(互联网协议)

    互联网协议(英语:Internet Protocol,缩写:IP)是用于分组交换数据网络的一种协议。IP 是在 TCP/IP 协议族中网络层的主要协议,任务仅仅是根据源主机和目的主机的地址来传送数据。

    1958 年,美国高级研究计划局(Advanced Research Projects Agency,简称ARPA)成立,这是一个专门研发军用高科技的行政机构,直接向美国国防部高层负责。

    1969 年,ARPA 创建了一个只有 4 台计算机的网络 —— 阿帕网 ARPANET,是世界上第一个运营的数据包交换网络,也是我们今天互联网的前身。

    1983 年,ARPANET 中和军事有关的部分被剥离并单独成立了 MILNET,最终成为了美国国防数据网络(DDN)的一部分;而非军用部分则逐渐演化发展成为今天的互联网(Internet)。

    其实互联网的历史远不是这三个时间节点能讲得完的,但这确实是互联网诞生过程的一个脉络。

    在互联网发明出来之后,就涉及到了机器的联网问题。网络上有那么多的计算机,如何找到想要访问的那一台呢?科学家们给出了解决方案,给每个计算机分配一个类似于身份证号码的地址就可以了,这就是「IP 地址」的由来。

    为什么给机器分配一个 IP 地址,它就能和其它 IP 地址网络通信了,这很神奇,是计算机学界多年发展出来的研究成果,但概念上就这么简单...

    说完了 IP 地址的背景和由来,再来唠一些枯燥无味的技术向的嗑。

    IP 地址一般由 32 位二进制数组成,为便于使用,常以 XXX.XXX.XXX.XXX 形式表现,每组 XXX 代表小于或等于 255 的 10 进制数,该表示方法称为点分十进制。例如我们最常见的IP 地址:192.168.1.1。

    地址一般被划分为 A、B、C、D、E 五大类,其中 E 类属于特殊保留地址。

    clipboard.png

    因为 IP 地址的唯一性,IPv4 技术可使用的 IP 地址最多可有 4,294,967,296 个(即 2 的 32 次方)。看起来很多,但由于早期编码和分配上的问题,使很多区域的编码实际上被空出或不能使用。

    加上互联网的普及,大部分家庭都至少有一部电脑,连同公司的电脑,以及连接网络的各种设备都消耗大量 IPv4 地址资源。

    就像开头新闻中提到的,IPv4 的顶级地址 2012 年就被分配完了,到 11 月 25 日 42 亿个地址也被正式耗尽。既然地址早就用完了,那运营商整天打电话找我们开卡办宽带是在忽悠人呢么?

    图片描述

    并不是。

    这儿就要提到另一项技术了,叫 NAT ( 地址转换) 。虽然公网 IP 发不出来了,但这个公网 IP 底下可以发私有的 IP 地址。

    具体的操作就相当于把一块钱掰成八瓣,这样至少每个人手里就都有钱了...实际情况也是这样,我们已经拼着用了好多年了...

    不过老这么凑合着也不是事儿啊,还是要想办法解决的。

    所以,就有了 IPv6。

    IPv4 和 IPv6

    图片描述

    有人问了,说完 IPv4 为什么直接就到了 IPv6?IPv5 你咋不说了?

    因为 IPv5 是一个测试性标准,在实验中就夭折了,所以和 v1、v2、v3 一样,我们略去不表。直到 IPv6 ,才有了实质性的巨大提升和更为丰富的应用场景。

    IPv4 升级到 IPv6,很多人常见的误解是,4 个数字的 IP 升级到了 6 个数字的 IP。但这个理解是错的。

    IPv6 里的 6 说的是「互联网协议第六版」,不是 6 个数字。其实 IPv6 的一个地址,是 128 个比特,相当于 16 个 0-255 的数字组合。

    图片描述

    和 IPv4 相比,IPv6 有三个最大的不同:

    1.地址空间更大。就像上面说的,IPv4 中规定 IP 地址长度为 32,而 IPv6 中 IP 地址的长度为 128。这可不是简单的倍数关系。网上有个夸张的说法,IPv6 的地址空间,能让全世界的每一粒沙子都会有相对应的一个 IP 地址。

    2.路由表更小。上面的图就是 IPv4 和 IPv6 的路由表对比。肉眼可见的是右边比左边要简洁很多,实际效果就是大幅减小了路由器中路由表的长度,提高了路由器转发数据包的速度效率和准确性。

    3.安全性更高。在使用 IPv6 网络中,用户可以对网络层的数据进行加密并对 IP 报文进行校验,这极大地增强了网络安全。并且 IPv6 能够提供更好的 Qos 支持,能够在保证网络高效运行的同时,确保重要业务量不受延迟或丢弃。

    既然这么好,赶紧把 IPv4 换成 IPv6 就完事儿了啊,为啥不换呢?

    其实 IPv6 早在数年前就已经推行开来了。但这不是发个通知就能实现的事情。涉及到很多技术、市场和政策层面的影响。

    目前的推进办法是,把已经支持 IPv4 的机器,更新升级到可以支持 IPv6,慢慢增加 IPv6 地址的数量。

    比如我们自己的电脑就是这样的。拿 windows 举例,网络选项里的 TCP/IP,除了 IPv4 外,现在还多支持了 IPv6.

    还有就是技术这块儿,IPv4 这个协议,从根儿上就是有很大局限性的。

    在根服务器方面,全世界 IPv4 的根服务器只有13台,1 个主根服务器在美国,其余还有 12 个辅根服务器,9 个在美国,2 个在欧洲,还有 1 个在日本。

    而 IPv6 的根服务器架构,是在 IPv4 原有的 13 台基础上,新增加了 25 台。因为这件事是中国主导的,所以在中国就部署了 4 台服务器,一台主根三台辅根。这也打破了中国过去没有根服务器的困境(虽然可能并没有什么差别)。

    现在建成的 IPv6 根服务器体系,实际上是一个「测试验证」,从工程规模以及应用频率上,还不能和 IPv4 相比。

    虽然 IPv4 的根服务器只有 13 台,但是下面的各级 DNS 服务器非常多。并且 IPv4 的体系已经很成熟了,发展出了很多优化应用的办法,而 IPv6 不管是从数量还是技术上,目前都还需要不断的进化才行。

    图片描述

    另一个可能延迟了 IPv6 发展的原因,就是有人在“从中作梗”。

    虽然我们普通群众拿不到 IP 地址,但很多运营商、网络提供商手里其实还是有一些存货的。物以稀为贵,闹饥荒的时候,麸糠也会变成好东西。

    不过就现在来看,如果能尽快普及 IPv6 的应用,不管对个人还是整个社会来说,还是有很大好处的。所以 2019 年 4 月份,工信部就发布了关于开展 2019 年 IPv6 网络就绪专项行动的通知,并设定了相关的目标。

    2019 年末主要目标为获得 IPv6 地址的 LTE 终端比例达到 90%,获得 IPv6 地址的固定宽带终端比例达到 40%;LTE 网络 IPv6 活跃连接数达到 8 亿;完成全部 13 个互联网骨干直联点 IPv6 改造。

    截至 2019 年 5 月底,我国已分配 IPv6 地址用户数达 12.07 亿,其中 LTE 网络分配 IPv6 地址用户数为 10.45 亿,固定宽带接入网络分配 IPv6 地址的用户数为 1.62 亿。IPv6地址储备量已跃居全球第一位。

    但技术是一把双刃剑。

    使用 IPv6 的好处很明显:每个设备都可以有个独立且唯一的 IP 地址。但另一个角度来说,就是我们每个人的信息都非常准确的定位在互联网上。那么隐私保护方面就更难搞了。

    一些和 IP 相关的计算机小技巧

    1. 如何查询自己的 IP 地址

    最简单的方法就是打开搜索引擎 —— 搜索「ip地址查询」,就能查到自己此刻的 IP 地址。

    觉得这个办法 low,不符合自己 Geek 的身份,那也可以用电脑直接查询 IP 地址。搜索电脑应用——命令提示符,或者直接在左下角搜索栏输入—— CMD,打开命令提示符。随后输入 —— ipconfig,按住 Enter 键,就能查询本机的 IP 地址了。

    2. 如何修改自己的 IP 地址

    首先,先去查一下自己的 IP 是多少。然后断开网络,手机打开飞行模式。过几秒之后再关闭飞行模式,去查询自己的 IP 地址,你就会发现和之前的地址不一样了~

    PS:这种方法利用的是IP的动静态区分。使用动态IP是为了解决IP地址不够用的问题。随着网络普及,网民使用电脑的台数激增,IP地址就不够用了,动态IP技术应运而生。同一时刻不会所有人都在上网,将未联网的IP拿去给需要的人用,同理网民上网时会被分配无人使用的IP。

    3. 如何隐藏自己的 IP 地址

    隐藏 IP 这种说法其实很不实际,网络运营商总会知道你 IP。因为不管发送什么数据,我们的网络数据包里都是包含我们的 IP 的,但通过一些网络代理,可以实现“张冠李戴”,从而隐藏自己地址的。

    具体的技术细节不做分享,有的时候用一些网络代理确实可以保护我们的重要信息,但一定不要用技术来做坏事。

    就像黑客攻击时,即便是抓肉鸡做代理、找网络代理,哪怕很多人用多层跳板在国内外的服务器上反复横跳,在网警的眼里想查到原始 IP 还是很容易的。只要犯了法,只要他想。

    最后奉劝各位一句:

    不要去尝试挑战警察叔叔掌握的技术和法律的边界,不要扭曲所谓的「Geek 精神」从而误入迷途。

    扫码加好友,聊聊那些不能说的 IP 技巧

    clipboard.png

    查看原文

    赞 18 收藏 5 评论 1

    苏生不惑 赞了文章 · 2019-11-24

    面向对象的设计过程

    前言

    我一直认为分享的目的不是炫技。

    • 一是,自我学习的总结。
    • 二是,降低他人的学习成本。
    • 三是,别人对自己学习结果的审核。

    同时,本次分享有下面四个要素:

    观点本次分享的观点是一个软件工程中的思维方法,不限于编程语言
    探讨我可能理解错的,或者大家没理解的,欢迎大家积极评论,尽可能多互动,目的增加理解
    理解真的希望大家能理解
    运用最重要的,如果你觉着有帮助,一定要去在实际业务中实战

    背景

    工作中,几乎大家经常抱怨别人写的代码:

    • 没法改
    • 耦合高
    • 无法扩展
    今天就来探讨如何克服上面的问题~

    场景

    首先问个问题:

    平常工作中来了一个业务需求,我们是如何开始写代码的?

    我推测大多数人可能:

    • 1、梳理业务
    • 2、设计数据库、接口、缓存
    • 3、评审
    • 4、于是就开始了 怎么怎么样...如果怎么怎么样...怎么怎么样...愉快的码代码的过程
    此处有人觉着有啥问题么?
    备注:说出来问题的,本次分享就可以略过了~

    一个简单的业务场景

    比如产品提了个需求:
    描述“我一个同事”一天的生活,简单来看看他一天干些啥:
    
    1.0 饿了吃饭
    1.1 到点吃饭
    
    2.0 渴了喝水
    2.1 到点喝水
    
    3.0 困了睡觉
    3.1 到点睡觉
    3.2 有可能一个人睡觉,也有可能... 是吧?复杂

    刚开始,一个业务逻辑从头写到尾
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c864c8ab271?w=670&h=698&f=png&s=81774

    一个业务逻辑(拆成多个函数)从头写到尾:
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8655660dca?w=862&h=1382&f=png&s=145481

    一个业务逻辑(引入类)从头写到尾:
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c865ab15489?w=858&h=842&f=png&s=100933

    一个业务逻辑(拆成多个类方法)从头写到尾,也许、可能、貌似、猜测大多数人停留到了这个阶段。
    问题:某一天多了社交的能力,咋办?
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8650866cd5?w=1054&h=1562&f=png&s=232631

    一个业务逻辑(拆成多类)从头写到尾:
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c865ff77738?w=914&h=1922&f=png&s=256693

    一个业务逻辑(拆成类、抽象类、接口)从头写到尾:
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8656622ead?w=1302&h=2606&f=png&s=427919

    思考??:上面的代码就没啥问题了吗?

    上面就是面向对象设计的代码结果。

    所以,如何设计出完全面向对象的代码?

    代码建模

    什么是代码建模?

    把业务抽象成事物(类class、抽象类abstact class)和行为(接口interface)的过程。

    实栗??分析

    又来看一个实际的业务场景:

    最近“我一个同事”开始创业了,刚创立了一家电商公司,B2C,自营书籍《3分钟学会交际》。最近开始写提交订单的代码。
    
    ??注意场景 1.刚创业 2.简单的单体应用 3.此处不探讨架构

    一般来说,我们根据业务需求一顿分析,开始定义接口API、设计数据库、缓存、技术评审等就开始码代码了。

    接口参数:
    uid
    address_id
    coupon_id
    .etc
    
    业务逻辑:
    参数校验->
    地址校验->
    其他校验->
    写订单表->
    写订单商品信息表->
    写日志->
    扣减商品库存->
    清理购物车->
    扣减各种促销优惠活动的库存->
    使用优惠券->
    其他营销逻辑等等->
    发送消息->
    等等...

    就开始写代码了怎么怎么样...如果怎么怎么样...怎么怎么样...一蹴而就、思路清晰、逻辑清楚、很快搞定完代码,很优秀是不是,值得鼓励。

    但是,上面的结果就是大概所有人都见过的连续上千行的代码等等。上面的流程没啥问题啊,那正确的做法是什么了?就是接着要说的代码建模

    我们根据上面的场景,开始建模。

    业务分析少不了

    同样,首先,我们看看提交订单这个业务场景要做的事情:

    换个角度看业务其实很简单:根据用户相关信息生成一个订单。
    1. 梳理得到业务逻辑
    参数校验->
    地址校验->
    其他校验->
    写订单表->
    写订单商品信息表->
    写日志->
    扣减商品库存->
    清理购物车->
    扣减各种促销优惠活动的库存->
    使用优惠券->
    其他营销逻辑等等->
    发送消息->
    等等...
    1. 梳理业务逻辑依赖信息
    用户信息
    商品信息
    地址信息
    优惠券信息
    等等...

    再次回归概念

    什么是代码建模?把业务抽象成事物(类class、抽象类abstact class)和行为(接口interface)的过程。

    获取事物

    比如我们把订单生成的过程可以想象成机器人,一个生成订单的订单生成机器人,或者订单生成机器啥的,这样我们就得到了代码建模过程中的一个事物。

    从而我们就可以把这个事物转化成一个类(或结构体),或者抽象类。

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c86cacb4152?w=1208&h=407&f=jpeg&s=63758

    获取行为

    这些操作就是上面机器人要做的事情。

    事物有了:订单生成机器人
    行为呢?毫无疑问就是上面各种业务逻辑。把具体的行为抽象成一个订单创建行为接口:

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c86f90e2839?w=934&h=170&f=jpeg&s=32819

    得到UML

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8700e8b8c0?w=1577&h=886&f=png&s=82942>

    设计代码

    1. 定义一个类

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c87038a0fc1?w=1186&h=1670&f=png&s=279028

    1. 定义一个订单创建行为的接口

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8700f7443e?w=1166&h=518&f=png&s=82926

    1. 定义具体的不同订单创建行为类
    参数校验->
    地址校验->
    其他校验->
    写订单表->
    写订单商品信息表->
    写日志->
    扣减商品库存->
    清理购物车->
    扣减各种促销优惠活动的库存->
    使用优惠券->
    其他营销逻辑等等->
    发送消息->
    等等...

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c870943c870?w=1302&h=2138&f=png&s=394128

    1. 创建订单

    这里的代码该怎么写,这样?
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c871f2fd3fd?w=1034&h=1130&f=png&s=200044

    还可以继续优化吗?
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8730ebc469?w=1454&h=1022&f=png&s=188592

    使用闭包。
    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8730f93eca?w=1454&h=1058&f=png&s=191695

    PHP版完整代码

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8754ee6abb?w=1346&h=5702&f=png&s=1056295

    Go版完整代码

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c8750dfe08c?w=2048&h=4874&f=png&s=1117461

    上面的代码有什么好处?

    假如“我一个同事”又要新开发一个新的应用,新的应用创建订单的时候又有新的逻辑,比如没有优惠逻辑、新增了增加用户积分的逻辑等等,复用上面的代码,是不是就很简单了。

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c874d66fc62?w=1082&h=734&f=png&s=123089

    所以现在,什么是面向对象?

    概念

    面向对象的设计原则

    • 对接口编程而不是对实现编程
    • 优先使用对象组合而不是继承
    • 抽象用于不同的事物,而接口用于事物的行为

    针对上面的概念,我们再回头开我们上面的代码

    对接口编程而不是对实现编程
    结果:RobotOrderCreate依赖了BehaviorOrderCreateInterface抽象接口
    优先使用对象组合而不是继承
    结果:完全没有使用继承,多个行为不同场景组合使用
    抽象用于不同的事物,而接口用于事物的行为
    结果:
    1. 抽象了一个创建订单的机器人 RobotOrderCreate
    2. 机器人又有不同的创建行为
    3. 机器人的创建行为最终依赖于BehaviorOrderCreateInterface接口

    是不是完美契合,所以这就是“面向对象的设计过程”。

    结论

    代码建模过程就是“面向对象的设计过程”的具体实现方式.

    预习

    设计模式

    最后,设计模式又是什么?

    同样,我们下结合上面的场景和概念预习下设计模式。

    设计模式的设计原则
    开闭原则(Open Close Principle):对扩展开放,对修改封闭

    看看上面的最终的代码是不是完美契合。

    https://user-gold-cdn.xitu.io/2019/11/7/16e45c87616dc861?w=1504&h=914&f=png&s=188519

    依赖倒转原则:对接口编程,依赖于抽象而不依赖于具体
    结果:创建订单的逻辑从依赖具体的业务转变为依赖于抽象接口BehaviorOrderCreateInterface
    接口隔离原则:使用多个接口,而不是对一个接口编程,去依赖降低耦合
    结果:上面的场景,我们只简单定义了订单创建的接BehaviorOrderCreateInterface。由于订单创建过程可能出现异常回滚,我们就需要再定义一个订单创建回滚的接口
    BehaviorOrderCreateRollBackInterface.
    迪米特法则,又称最少知道原则:减少内部依赖,尽可能的独立
    结果:还是上面那段代码,我们把RobotOrderCreate机器人依赖的行为通过外部注入的方式使用。
    合成复用原则:多个独立的实体合成聚合,而不是使用继承
    结果:RobotOrderCreate依赖了多个实际的订单创建行为类。
    里氏代换:超类(父类)出现的地方,派生类(子类)都可以出现
    结果:不好意思,我们完全没用继承。(备注:继承容易造成父类膨胀。)

    下回预告

    上面预习了设计模式的概念,下次我们进行《设计模式业务实战》。

    查看原文

    赞 33 收藏 21 评论 3

    认证与成就

    • 获得 2652 次点赞
    • 获得 228 枚徽章 获得 20 枚金徽章, 获得 78 枚银徽章, 获得 130 枚铜徽章

    擅长技能
    编辑

    开源项目 & 著作
    编辑

    (??? )
    暂时没有

    注册于 2013-06-17
    个人主页被 27.8k 人浏览

    bt365体育投注