分类: 全部文章

  • 过了这么久才遇到github资源域名被污染的情况

    上周打开github突然发现样式无法加载,打开vpn才行,后来搜索才知道这个情况已经存在好多年了,不是封禁IP,而是DNS污染,这种情况适用自行定义hosts的方法。

    即,在hosts文件中定义如下关系。

    151.101.24.133 assets-cdn.github.com

  • 使用iview的upload组件上传阿里oss的参数设置

    下面是组件设置:

    <Upload action="http://public.files.dpexpo.cn"
    ref="upload"
    :show-upload-list="false"
    accept=".pdf"
    :format="['pdf']"
    :on-success="uploadSuccess"
    :data="uploadParams"
    :max-size="102400"
    :before-upload="handleBeforeUpload">
    <Buttontype="ghost"
    icon="ios-cloud-upload-outline">Upload pdf</Button>
    </Upload>
    以下是相关的js方法:

    handleBeforeUpload(file) {
    letthat=this;
    return new Promise(function(resolve, reject) {
    that.getUploadParams().then(function() {
    that.$Notice.warning({
    title:'文件准备上传',
    desc:'文件 '+file.name+' 准备上传。',
    duration:3
    });
    resolve();
    });
    });
    },
    getUploadParams() {
    varthat=this;
    return new Promise(function(resolve, reject) {
    that.$http// 在此方法中调用后台数据
    .get('/ossParams', {
    params: {
    dir:
    'slide/conference/'+
    that.$route.query.conference_id+
    '/'
    }
    })
    .then(function(response) {
    console.log(response);
    that.uploadParams=JSON.parse(response.data.data);
    console.log(that.uploadParams);
    resolve();
    })
    .catch(function(error) {
    console.log(error);
    });
    });
    },
    uploadSuccess(evnet, file) {
    console.log(file);
    this.$Notice.success({
    title:'文件上传成功',
    desc:'文件 '+file.name+' 上传成功。',
    duration:3
    });
    this.formValidate.slide_url=
    'http://public.files.dpexpo.cn/slide/conference/'+
    this.$route.query.conference_id+
    '/'+
    file.name;
    },

    以下是发放参数的api方法(laravel):

    public function ossParams(Request $request)
    {
    $id = 'LTA(your id)V1E';
    $key = '4M5nIHs(your key)IelsW';
    $host = 'http://public.files.dpexpo.cn';
    $now = time();
    $expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问
    $end = $now + $expire;
    $expiration = $this->gmt_iso8601($end);
    $dir = $request->dir ? $request->dir : 'user-dir/';
    //最大文件大小.用户可以自己设置
    $condition = array(0 => 'content-length-range', 1 => 0, 2 => 1048576000);
    $conditions[] = $condition;
    //表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
    $start = array(0 => 'starts-with', 1 => '$key', 2 => $dir);
    $conditions[] = $start;
    $arr = array('expiration' => $expiration, 'conditions' => $conditions);
    //echo json_encode($arr);
    //return;
    $policy = json_encode($arr);
    $base64_policy = base64_encode($policy);
    $string_to_sign = $base64_policy;
    $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
    $response = array();
    //$response['host'] = $host;
    $response['key'] = $dir.'${filename}';
    $response['policy'] = $base64_policy;
    $response['OSSAccessKeyId'] = $id;
    $response['Signature'] = $signature;
    $response['expire'] = $end;
    //这个参数是设置用户上传指定的前缀
    //$response['dir'] = $dir;
    $token = json_encode($response);
    return$this->response->array(['data' => $token]);
    }

  • 汽车涉水应急气囊解决方案

    使用场景:城市突发积水、野外涉水等

    装备:

    (1)快速充气气泵,建议每分钟100L以上,最好能到200L,按车自重一吨到两吨粗略计算,充气需要十分钟,最好为充气泵单独准备应急电源。

    (2)橡胶气囊两个,直径0.6m以上,长度4.5m,中间可以用橡胶布连接在一起,也可以用绑带连接,布置在汽车两侧。

    使用:

    首先应将车窗打开或两厢车打开后备厢门,避免气囊充气后车门无法打开,造成无法逃生。

    以最快的时间布置并充气。

    以上方案仅为理论方案,未经测试,不对该方案造成的任何后果负责。

    成本:

    快速充气泵估计需要500元以上,普通充气泵每分钟50L,充气需要20分钟,时间有点长。

    气囊估计在500元以内,目前暂时没有现成的产品。

  • Visual Studio Code中使用Docker中的Xdebug

    开发环境说明

    IDE:Visual Studio Code

    DNMP:https://github.com/yeszao/dnmp

    项目:laravel

    开启xdebug

    修改dnmp/php/php72/Dockerfile,添加以下两行(插在带\的任一一行后面即可,查看dockerfile编写规范):

    && pecl install xdebug \
    && docker-php-ext-enable xdebug \
    修改dnmp/config/php.ini,在文件末尾添加以下内容:
    [xdebug]
    zend_extension=xdebug.so
    xdebug.remote_port=9000
    xdebug.remote_enable=1
    xdebug.remote_host=192.168.0.102
    xdebug.remote_autostart=1
    xdebug.remote_log="/var/log/dnmp/xdebug.log"

    其中192.168.0.102就是你的电脑的IP,也就是docker宿主机的IP,docker的端口都挂到宿主机IP上。xdebug默认是localhost,不改就访问不到了。也不要打开

    xdebug.remote_connect_back=1,这会使得remote_host配置失效。
    在vscode中安装PHP Debug插件,在调试选项卡中打开齿轮配置,即当前项目的.vscode/launch.json,对照以下内容配置:
    
    {
    // 使用 IntelliSense 了解相关属性。
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "Listen for XDebug",
    "type": "php",
    "request": "launch",
    "port": 9000,
    "pathMappings":{
    "/var/www/html": "${workspaceRoot}"
    }
    },
    {
    "name": "Launch currently open script",
    "type": "php",
    "request": "launch",
    "program": "${file}",
    "cwd": "${fileDirname}",
    "port": 9000
    }
    ]
    }
    其中,/var/www/html是你在dnmp/www中的site的位置,如果有子目录则填到子目录级别,这里的pathMappings是最新的写法。
    在dnmp目录启动:docker-compose up
    在vscode按F5启动调试,记得打上断点,祝你成功。
    如果已经生成过容器,则需要删除容器,删除镜像。重新生成dnmp-php命令如下:
    docker rm dnmp-php
    docker rmi dnmp_php
    docker-compose up
  • 又来了shimuFun的兴趣

    为了女儿的暑假安排,也出于一直以来的兴趣,特别关注了一下木工手作。可是,最大的问题是如何在城市里拥有一个可以无扰玩木工的场地。

    目前还没有有效的方案,尽管纯手工,排除电动工具是一个途径,但是那不是我的兴趣的,我又不是为了练手艺。我的目标是把实木与电子结合一下,或者是实木物联网。

    尽管大陆也能零星看到一些木工坊的创业新闻,但至少目前还没有普及到像跳舞画画那样,满大街都是,家长们也愿意花钱去带孩子学。如果你有什么好办法请留言。

  • Error starting userland proxy: mkdir /port/tcp:0.0.0.0:3306:tcp:172.19.0.3:3306: input/output error

    在windows10/win10上使用dnmp:https://www.awaimai.com/2120.html

    首先需要安装docker环境:https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

    装完以后在dnmp目录执行docker-compose up,启动失败,报错如标题,需要修改win10的快速启动设置,然后重启。修改方法见:https://www.tenforums.com/tutorials/4189-turn-off-fast-startup-windows-10-a.html

  • 服务器从godaddy迁到了阿里云美西

    目前响应速度还不错,1vCPU+1G内存。

  • node版本太高

    npm ERR! Exit status 1
    npm ERR!
    npm ERR! Failed at the dpexpo@1.0.0 dev script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

    出现的原因:node的版本太高,当我从node8升级到node10以后出现问题。

  • ECS之Ubuntu上使用docker部署Jenkins持续集成支持dnmp

    第一步,创建容器:

    docker run -u root -p 8080:8080 -p 50000:50000 -v /root/docker:/var/jenkins_home –name j02 -idt jenkins

    解释:

    1. 注意这里以root用户启动,如果使用默认用户jenkins则不需要加-u,但是可能会造成与dnmp之间的文件读写权限有麻烦。
    2. 与宿主机的共享目录设置为/root/docker,这个随便,其实放哪里都行,放这里为了登录进去以后方便找。
    3. –name叫j02这个随便,是生成的docker的镜像名,开始那个叫j01,后来改root权限启动我改成了j02,无所谓。
    4. 端口绑定的是8080
    执行命令docker logs -f j02查看容器的控制台日志,看到如下信息表示jenkins服务启动成功:
    Dec 31, 2017 6:29:24 AM jenkins.install.SetupWizard init
    INFO:
    *************************************************************
    *************************************************************
    *************************************************************
    Jenkins initial setup is required. An admin user has been created and a password generated.
    Please use the following password to proceed to installation:
    f0f2e35d549f49b486b0ca2bdf3756d6
    This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
    *************************************************************
    *************************************************************
    *************************************************************
    Dec 31, 2017 6:29:29 AM hudson.model.UpdateSite updateData
    INFO: Obtained the latest update center data file for UpdateSource default
    Dec 31, 2017 6:29:30 AM hudson.model.DownloadService$Downloadable load
    INFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
    Dec 31, 2017 6:29:30 AM hudson.model.UpdateSite updateData
    INFO: Obtained the latest update center data file for UpdateSource default
    Dec 31, 2017 6:29:30 AM hudson.WebAppMain$3 run
    INFO: Jenkins is fully up and running
    –> setting agent port for jnlp
    –> setting agent port for jnlp… done
    Dec 31, 2017 6:29:33 AM hudson.model.DownloadService$Downloadable load
    INFO: Obtained the updated data file for hudson.tools.JDKInstaller
    Dec 31, 2017 6:29:33 AM hudson.model.AsyncPeriodicWork$1 run
    INFO: Finished Download metadata. 11,856 ms
    1
    2
    3
    打开浏览器查看IP:8080就见到jenkins的页面了,但需要输入上面那个日志中的initialAdminPassword才能开始。从上面日志复制,或者cat /root/docker/secrets/initialAdminPassword
    点击左边按建议配置安装。
    设置用户名密码。
    参考文章:https://blog.csdn.net/boling_cavalry/article/details/78942408(它是为java弄的,如果只是php和node项目,不需要maven插件)
    进入容器:
    docker exec -it j02 /bin/bash
    因为我们用的是root权限,而jenkins默认是jenkins用户,所以进来第一步创建ssh秘钥之前需要改一下.ssh目录的链接,使用:
    ln -s /var/jenkins_home/.ssh /root/.ssh
    执行以下命令产生SSH证书:
    ssh-keygen -t rsa -C “abcdef@gmail.com”
    会出现几个询问,直接按回车键继续。
    执行以下命令配置全局用户信息的账号:
    git config –global user.name”abcdef”
    1
    执行以下命令配置全局用户信息的邮箱:
    git config –global user.email abcdef@gmail.com
    1
    公钥被存储到以下位置,打开复制所有内容,然后登录git,添加到SSH keys中:
    /var/jenkins_home/.ssh/id_rsa.pub,也就是宿主机的/root/docker/.ssh/id_rsa.pub。
    执行exit,退出容器,以下命令查看。
    cat /root/docker/.ssh/id_rsa
    将其贴到github账户的setting中。
    打开jenkins页面,新建项目,构建一个自由风格的项目。
    源码管理选择git,输入源的地址:git@github.com:bianjibang/dp-api.git
    Credentials那里点add,添加provider,选择ssh username with private key,然后private key来自第三个选项From the Jenkins master ~/.ssh。
    就添加成功了。
    回到项目设置页面在Credentials那里点刷新就看到新增的授权了,选择的时候可能需要点两次才能选上。
    构建触发器那里选GitHub hook trigger for GITScm polling,即当github收到posh的时候自动拉取。
    构建那里选择execute shell,可以放入想要在完成时执行的后续命令。比如
    cp -r $WORKSPACE/* $JENKINS_HOME/dnmp/www/dp/api
    点击立即构建,可以看到新增的build history,点击某个history, 进入Console Output可以看到执行日志,通过其内容可以修正命令。
    接下来,在宿主机/root/docker下面
    git clone git@github.com:yeszao/dnmp.git(建议首先fork到自己账户下,clone自己的,这样以后修改配置比较方便)
  • 期待产品原型、UI设计与开发统一版本管理工具

    目前产品原型到UI设计,再到开发测试上线,是分离的,目前尚未发现有一统天下的工具和平台。

    我倒是非常渴望有这么一个工具,尤其对于小团队而言。具体的需求就是将产品原型、UI设计、开发测试三者的版本管理集中在一起,每个阶段的某个版本有若干状态,如设计中/已推送/已交付/已验收。墨刀实现了产品经理与UI设计之间的协同,如果再能与开发协同一下则更棒。

    对一个项目而言,有这么几个部分,页面树、工作流、页面。页面是基本元素,页面数上可以标注该页面存在的生命周期,如从v1到v4,或者从v3到v5,并且设定发布的url,可以包括测试版地址和发布版地址,工具根据url自动快照,获取当前版本,并通过图像识别对比差异,只保留变更的版本,存入版本库。而产品原型和UI设计的版本分别由产品经理和UI设计师标注和提交。查看时,可以查看最新版,也可以专门查看某一版本的执行情况。