• 请扫码加入,然后按群公告说明测试。

    mmqrcode1598174089452.png

  • Server 酱重写实战课进度说明

    感谢大家的支持,本周众筹已经达标。

    从下周开始,我们将开始进入课程的准备工作。由于本次是两个课程,工作量比较大,所以原来 8 月制作、9 月上线的时间表不做变更。方糖币将在月底众筹结束后统一发放。

    课程制作的进度和花絮我将实时发布在微博,大家可以通过 #Server酱实战课# 话题查看。

    再次感谢大家。

  • 冷熊简历样式:


    body
    {
        height: 100%;
        max-height: 100%;
        font-family: "Hiragino Sans GB","Microsoft YaHei","微软雅黑","SourceHanSans",Georgia,tahoma,arial,simsun,"宋体";
        font-size: 3.4rem;
        line-height: 1.8em;
        color: #3A4145;
        zoom:0.8;
    }
    
    html, body
    {
        height: 100%;
    }
    
    .site-head
    {
        position: relative;
        display: table;
        width: 100%;
        height: 300px;
        margin-bottom: 5rem;
        text-align: center;
        color: #fff;
        background: #303538 no-repeat center center;
        background-size: cover;
    }
    
    .site-head h1
    {
        font-size: 40px; 
        line-height: 44px;
    }
    
    .site-head .subtitle
    {
        font-size: 28px;
    }
    
    .vertical
    {
        display: table-cell;
        vertical-align: middle;
    }
    
    .content
    {
        max-width:768px;
        margin-left: auto;
        margin-right: auto;
        padding:20px;
    }
    
    
    .yue {
      font: 400 18px/1.62  "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", sans-serif;
      color: #444443;
    }
    
    .windows .yue {
      font-size: 18px;
      font-family:  "SimSun", sans-serif;
    }
    
    .yue ::-moz-selection {
      background-color: rgba(0,0,0,0.2);
    }
    
    .yue ::selection {
      background-color: rgba(0,0,0,0.2);
    }
    
    .yue h1,
    .yue h2,
    .yue h3,
    .yue h4,
    .yue h5,
    .yue h6 {
      font-family:  "Xin Gothic", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", "SimSun", sans-serif;
      color: #222223;
      font-weight: lighter;
    }
    
    .yue h1 {
      /*font-size: 1.8em;*/
      font-size: 1.8em;
      margin: 0.67em 0;
    }
    
    .yue > h1 {
      margin-top: 0;
      font-size: 1.8em;
    }
    
    .yue h2 {
      font-size: 1.6em;
      margin: 0.83em 0;
    }
    
    .yue h3 {
      font-size: 1.2em;
      margin: 1em 0;
    }
    
    .yue h4,
    .yue h5,
    .yue h6 {
      font-size: 1.0em;
      margin: 1.6em 0 1em 0;
    }
    
    .yue h6 {
      font-weight: 500;
    }
    
    .yue p {
      margin-top: 0;
      margin-bottom: 1.46em;
    }
    
    .yue a {
      color: #111;
      word-wrap: break-word;
      text-decoration-color: rgba(0, 0, 0, 0.4);
    }
    
    .yue a:hover {
      color: #555;
      text-decoration-color: rgba(0, 0, 0, 0.6);
    }
    
    .yue strong,
    .yue b {
      font-weight: 700;
      color: #222223;
    }
    
    .yue em,
    .yue i {
      font-style: italic;
      color: #222223;
    }
    
    .yue img {
      max-width: 100%;
      height: auto;
      margin: 0.2em 0;
    }
    
    .yue a img {
      /* Remove border on IE */
      border: none;
    }
    
    .yue figure {
      position: relative;
      clear: both;
      outline: 0;
      margin: 10px 0 30px;
      padding: 0;
      min-height: 100px;
    }
    
    .yue figure img {
      display: block;
      max-width: 100%;
      margin: auto auto 4px;
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
    }
    
    .yue figure figcaption {
      position: relative;
      width: 100%;
      text-align: center;
      left: 0;
      margin-top: 10px;
      font-weight: 400;
      font-size: 14px;
      color: #666665;
    }
    
    .yue figure figcaption a {
      text-decoration: none;
      color: #666665;
    }
    
    .yue hr {
      display: block;
      width: 14%;
      margin: 40px auto 34px;
      border: 0 none;
      border-top: 3px solid #dededc;
    }
    
    .yue blockquote {
      margin: 0 0 1.64em 0;
      border-left: 3px solid #dadada;
      padding-left: 12px;
      color: #666664;
    }
    
    .yue blockquote a {
      color: #666664;
    }
    
    .yue ul,
    .yue ol {
      margin: 0 0 24px 6px;
      padding-left: 16px;
    }
    
    .yue ul {
      list-style-type: square;
    }
    
    .yue ol {
      list-style-type: decimal;
    }
    
    .yue li {
      margin-bottom: 0.2em;
    }
    
    .yue li ul,
    .yue li ol {
      margin-top: 0;
      margin-bottom: 0;
      margin-left: 14px;
    }
    
    .yue li ul {
      list-style-type: disc;
    }
    
    .yue li ul ul {
      list-style-type: circle;
    }
    
    .yue li p {
      margin: 0.4em 0 0.6em;
    }
    
    .yue .unstyled {
      list-style-type: none;
      margin: 0;
      padding: 0;
    }
    
    .yue code,
    .yue tt {
      color: #808080;
      font-size: 0.96em;
      background-color: #f9f9f7;
      padding: 1px 2px;
      border: 1px solid #dadada;
      border-radius: 3px;
      font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
    }
    
    .yue pre {
      margin: 1.64em 0;
      padding: 7px;
      border: none;
      border-left: 3px solid #dadada;
      padding-left: 10px;
      overflow: auto;
      line-height: 1.5;
      font-size: 0.96em;
      font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
      color: #4c4c4c;
      background-color: #f9f9f7;
    }
    
    .yue pre code,
    .yue pre tt {
      color: #4c4c4c;
      border: none;
      background: none;
      padding: 0;
    }
    
    /*.yue table {
      width: 100%;
      border-collapse: collapse;
      border-spacing: 0;
      margin-bottom: 1.5em;
      font-size: 0.96em;
    }
    
    .yue th,
    .yue td {
      text-align: left;
      padding: 4px 8px 4px 10px;
      border: 1px solid #dadada;
    }
    
    .yue td {
      vertical-align: top;
    }
    
    .yue tr:nth-child(even) {
      background-color: #efefee;
    }*/
    
    .yue table {
        margin: 2px 0 14px;
        color: #555;
        width: auto;
        border-collapse: collapse;
        box-sizing: border-box;
    }
    
    .yue table th, 
    .yue table td {
        height: 32px;
        padding: 5px 14px 5px 12px;
    }
    
    .yue table td {
        border: 1px solid #f2f2f2;
    }
    
    .yue table th {
        border: 1px solid #72777b;
        border-top: 0;
        border-bottom: 0;
        background-color: #7b8184;
        font-weight: 300;
        color: #fff;
        padding-top: 6px;
    }
    
    
    
    .yue iframe {
      display: block;
      max-width: 100%;
      margin-bottom: 30px;
    }
    
    .yue figure iframe {
      margin: auto;
    }
    
    .yue table pre {
      margin: 0;
      padding: 0;
      border: none;
      background: none;
      margin: 0;
    }
    @media (min-width: 1100px) {
      .yue blockquote {
        margin-left: -24px;
        padding-left: 20px;
        border-width: 4px;
      }
      .yue blockquote blockquote {
        margin-left: 0;
      }
      .yue figure img {
        margin: 0 0 4px;
      }
      .yue figure figcaption:before {
        width: 25%;
        margin-left: 75%;
        border-top: 1px solid #dededc;
        display: block;
        content: "";
        margin-bottom: 10px;
      }
      .yue figure figcaption {
        position: absolute;
        left: -172px;
        width: 150px;
        top: 0;
        text-align: right;
        margin-top: 0;
      }
    }
    .exp
    {
            font-size: 12px;
            color:#ccc;
    }
    .exp a
    {
            color:#ccc;
    }
    
  •     case ':save':
            file_put_contents('saestor://todo/ttd-easy-save.json', v('todos'));
            file_put_contents('saestor://todo/ttd-easy-'.date('Y-m-d-H-i').'.json', v('todos'));
            $ret['js'] = "alert('Saved 🤠 ')";
            break;
    
        case ':load':
            if ($new_todos = file_get_contents('saestor://todo/ttd-easy-save.json')) {
                $ret['js'] = "this.props.store.todo_load_base64('".base64_encode($new_todos)."')";
            } else {
                $ret['js'] = "alert('No todo list found 🙃 ')";
            }
            break;
    
  • 追加了Node简版API。

    没领课的快领课,没加群的快加群。你们都花钱了为啥不领啊,嘤嘤嘤 🤣 之前出错的有新的领取码看后边


    变现课姐妹篇《程序员如何优雅地挣零花钱》2.0 版上线,点此阅读 http://r.ftqq.com/howto-make-more-money/ch00.html


    请大家尽快领取课程,之前推送的链接有误,新的领取方式为菜单「服务入口」→ 「Next订单」(后文有图文教程)。稍后更新信息将通过网易云课堂私信通知发送啦。

    软件变现微信交流群开通啦,欢迎加入:

    Image




    领取码的查看方法:

    在「方糖」服务号( fangtangchupin )中点击菜单「服务入口」→ 「Next订单」,查看订单记录。里边有提取码。复制以后,点开 网易云课堂 上的课程,点击购买,输入它,价格就会变成0。然后购买就好了。

    Image



    这次是因为一个潜藏比较深的Bug,只有在多人群发时才会暴露出来 😂  给大家添麻烦了,非常抱歉。如果还有不能领取的请加我微信 easyatwx 反馈。参加预售的同学都有购买记录,一定会保证大家领到课的。



    兑换码需要在4月27日前兑换完成,兑换完成后,课程本身是永久可看的。

  • 福利单词Pro版本周进度汇报

    1. iOS版已经上架苹果商店,昨天修复了按键卡顿的bug,欢迎下载求五星 → http://t.cn/A6ZhvGdn 
    2. 课程前两章已上架网易云课堂中,有效期调整为永久,很快就会为大家微信推送免费领取的兑换码。
    3. 课程的教学部分采用AI语音+字幕,讨论部分(稍后会上)为真人语音。AI语音虽然有稍许不自然,但发音标准,配合字幕可以做到精确传达。也可以大幅降低制作时间,并方便维持课程更新,从而让我们可以以低价销售课程。此在预售页面已注明,感谢大家的理解和支持。
  • 福利单词Pro版本周进度汇报

    1. Android版、iOS版、Mac版、Windows版都已开发完成。( 点此可下载PCVIP版 ,请勿传播哈)
    2. 自定义词库功能和自定义词库工具已经开发完成,并上线。( 点此查看词库工具
    3. 下周开始课程制作,这次实战内容比较丰富,还做了大量的周边工具,所以需要时间。故课程连载开始时间依然预计为4月初。

    下边的评论框要在电脑上用微博登录后才能用,所以反馈可以发这里 https://support.qq.com/products/134125

  • 福利单词Pro版本周进度汇报

    1. 完成了微信登入部分的开发。
    2. 完成了微信支付部分的开发。
    3. 开始开发付费功能,比如点击跳转与收藏。

    演示视频 → http://t.cn/A6zMbNum

    接下来就将继续开发付费功能、添加从免费到付费的引导、添加各个环节转化率的数据统计。

    Image


    祝大家周末快乐。

  • 福利单词pro版开始测试

    今天福利单词的pro版开始测试了,网址为 https://fox.ftqq.com 。

    Image

    当前测试版包含的功能如下:

    1. 支持四级和计算机常用词两个词库,点击左上角可以选择词库
    2. 开发了浮动键盘,不再有输入法切换的问题,右上角设置里边可以开启全键盘
    3. 按遗忘曲线开发的算法,分8轮动态重复帮你记忆。
    4. 会根据输入的情况动态调整待背单词顺序。
    5. 支持按键音,实时提示对错,右上角设置中可以打开。
    6. 支持实体键盘和快捷键:tab切换释义;右箭头跳过;backspace删除前一个字母。

    本周进行第一轮Bug修复和功能优化后,接下来我们将开始开发用户登录、付费等功能,打通收入渠道,为接下来的增长工作做准备。

    产品反馈和讨论请点这里 。

  • 《福利单词软件变现进阶课》本周进度

    测试了一下边做课程边做项目的进度,发现互相影响。所以改为了先完整的把项目做上线(全程录像),然后再回过头来做课程。预计的时间不变,四月初开始课程连载。

    本周主要工作在产品部分。包括

    商业模式画布的设计

    Image

    用户画像

    Image


    功能分期

    Image

    Logo和原型的设计

    Image


    增长用链接统计系统Linkey的设计和开发

    Image


    以及背单词界面的布局和实现。

    Image

    以上资料和源码将在项目正式上线后统一提供给大家。

    下周将继续移动网页版的开发,大家周末快乐 🎈

  • 在 VPS 上安装 Syncthing 备份电脑数据

    一 服务器端配置

    1.下载对应的版本 https://syncthing.net/downloads/

    wget https://github.com/syncthing/syncthing/releases/download/v1.3.4/syncthing-linux-amd64-v1.3.4.tar.gz

    2.解压并移动到bin目录

    tar xzvf syncthing-linux* && rm -rf syncthing-linux*.tar.gz
    cd syncthing-linux* && cp syncthing /usr/local/bin
    

    3.启动一次 syncthing 创建配置文件

    syncthing

    4.修改配置

    sed -i 's/127.0.0.1/0.0.0.0/g' '/root/.config/syncthing/config.xml'

    5.后台启动

    nohup syncthing 
    


    访问 VPS 的8384端口,按提示进入settings中设置管理面板密码。

    服务器端配置到此完成。



    二 电脑端配置

    1.下载安装电脑客户端 https://syncthing.net/downloads/

    2.在 VPS 界面中点击右上角的「操作」选择「显示ID」,复制ID。

    3.在电脑端的界面中右下角「添加远程设备」,填入ID。

    4.点开添加的远程设备,「选项」、「共享」将指定文件夹共享给设备。

    5.等一会儿,VPS 界面会提示有设备连接,是否通过。通过即可。

    6.再等一下会提示是否接受共享目录,选是即可。

    7.在左边的「文件夹」、「选项」、「版本控制」中可以开启版本控制,建议选择选择简单版本管理,会保存5次修改历史。



    参考:https://www.moerats.com/archives/642/

  • 《福利单词软件变现进阶课》进度调整说明

    本来原计划 3月众筹、4月制作、5月上线连载。因为大家非常给力,在3月前众筹已经达标了,我们将整个进度表提前一个月,改为 3月制作、4月上线连载。

    因为制作时间和课程质量正相关,所以还请大家耐心等待。

    不过在整个制作过程中,我会通过微博实时更新进度。大家可以在微博关注「福利单词」这个话题( http://t.cn/A6hsEFhz )。

    稍后的进度更新、课程上线领取通知也会在这里大家。感谢大家的支持。

  • LearnPlayer 内测说明

    LearnPlayer 直接从 WebTorrent 在遵守其授权协议的前提下修改而来。本来是自用,后来觉得用的人多资源会比较好找。

    软件下载

    https://share.weiyun.com/5xnbpKS

    支持 Mac 和 Windows 64位。如果看不到,可能还在上传。


    使用说明

    • 未下载的文件,可以直接拖入种子、粘贴磁力链接,边下边放。
    • 本地的视频,拖入并创建种子后播放。
    • 点击「 Open LearnPlayer Video List Site 」,会打开推荐页。现在是空的,等大家推荐


    Screen Shot 2020-01-28 at 11.32.56.png

    字幕和取词

    1. 进入播放界面后,点击右下方「CC」图标添加字幕。
    2. 点击右下方靠左第一个书型图标打开取词字幕。鼠标滑动可以点击打开翻译(需联网)。注意关掉cc里的字幕,取词字幕也会跟着消失。
    3. 没有外挂字幕时点书型图标,可以对那些下方有压制字幕的熟肉进行遮挡


    Screen Shot 2020-01-28 at 11.36.22.png

    影视资源推荐

    1. 人人影视  视频下载  字幕下载

    交流群

    Image

     

  • 方糖外语学习交流群,微信扫码加入。

    Screen Shot 2020-01-28 at 11.01.43.png

  • api请求转发 

    const httpProxy = require('http-proxy');
    const proxy = httpProxy.createProxyServer({
        target:'http://api.old.com'
    });
    
    
    proxy.on('proxyReq', function(proxyReq, req, res, options) {
        proxyReq.setHeader('Host', 'api.old.com');
      });
    
    proxy.listen(8000);
    
  • 各城市疫情数据。来源依然是丁香园。

    <?php
    
    function get_nCoV_Area()
    {
        $reg = '/<script id="getAreaStat">.+?window.getAreaStat\s=\s(\[.+?])}catch\(e\){}<\/script>/im';
        if( preg_match( $reg , $content = file_get_contents( 'https://3g.dxy.cn/newh5/view/pneumonia' ) , $out ) )
        {
            return @json_decode( $out[1] , 1); 
        }
        else
        {
            echo "识别错误 数据为→ ".$content;
            return false;
        }
        return false;
    }
    
  • nCoV相关数据抓取函数。数据来自  https://3g.dxy.cn/newh5/view/pneumonia

    <?php
    
    function get_nCoV_news()
    {
        $reg = '/<script id="getTimelineService">.+?window.getTimelineService\s=\s({.+?)}catch\(e\){}<\/script>/im';
        if( preg_match( $reg , file_get_contents( 'https://3g.dxy.cn/newh5/view/pneumonia' ) , $out ) )
        {
            return @json_decode( $out[1] , 1); 
        }
        return false;
    }
    
    function get_nCoV_province()
    {
        $reg = '/<script id="getListByCountryTypeService1">.+?window.getListByCountryTypeService1\s=\s(\[.+?])}catch\(e\){}<\/script>/im';
        if( preg_match( $reg , file_get_contents( 'https://3g.dxy.cn/newh5/view/pneumonia' ) , $out ) )
        {
            return @json_decode( $out[1] , 1); 
        }
        return false;
    }
    
    ?>
  • Blueprint.js 中的 Button 通过 ref 操作的 dom 的时候,需要操作它的 buttonRef 属性,不然是不生效的……

    this.btnRef.current.buttonRef.disabled = true;
    const { data } = await this.props.store.checkOrder( order_id );
    this.btnRef.current.buttonRef.disabled = false;


  • 微博把GitHub的链接给屏蔽了 233 其实我觉得我这卡片流还挺好用的啊

微博一键登入