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

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设计师标注和提交。查看时,可以查看最新版,也可以专门查看某一版本的执行情况。

移动办公的发展是民宿的未来吗?

在北京一次餐会上,某民营书业老板的司机问餐后去哪,老板说大兴吧。大家聊起他的多处房产,他笑称是居无定所,四海为家。这种财务自由型的财富型人士并不多得,但具有一定的专长,适合移动办公的人士却是不少。

前阵子转过一篇来自海外的介绍移动办公模式的文章,称他所在的团队,有一半人员是分散在美国各州的,大家一年才可能见一次面,但丝毫不影响项目进展,反而通过全国甚至全球范围内的团队招募,可以将非常专门的技术人才聚合在一起。

那么,尽管目前看不到中国有这样的丝毫基础,我还是希望目前火热的民宿业,需要充分考虑移动办公会带来的消费能力,而在规划设计之初就需要把他们的需求考虑进去,比如要有一定的共享办公区域,稳定而快速的互联网接入,适当的共享办公设备等。

对于具有相对优越的自然环境,但缺乏交通便利性或旅游规模较小,也或者淡季比较长且明显,都可以用这种方式来充分利用资源,扩大服务群体。

当然,这也是我比较期望的一种生活,比如清明前后去信阳的茶山上喝上第一锅的毛尖,冬季躲进天山之北的木垒小镇。

融媒体出版物《全民经典朗读》诞生记

《全民经典朗读》已经出版有一阵子了,现在回顾一下,作为融媒体出版阵容中一个典型案例分享。

首先,作为一个出版物,其内容价值是首要的,该书作为一个文学经典普及读物,选文是很慎重的,朗读者阵容也是空前绝后。这决定了,这本书不是一本普通的书。具体情况请查阅书上的介绍。

融媒体产品的定位是依据需求而来的,技术方案选择时也许还考虑过点读笔的方式,但一方面点读笔的音效非常差,同时又不支持视频,那么很显然就确定下来使用二维码这个方式。加上微信已经非常普及,微信的开发也相对成熟,那么通过微信结合H5的方式,可以同时解决内容授权和用户体验两个方面的核心需求。暂时没有启动app是因为app太重了,用户接受度更低,在没有用户基础的时候不宜过度投入,不仅给出版社造成负担,用户使用体验也并不好。

内容授权采用的是很常见的方式,使用非序列化的随机码,一书一码,盛通印厂有方正的喷码机,在成本上可以接受,几万册的起印量让这种方式的使用毫无障碍。这个授权码直接喷在后勒口上,附上了使用说明,但后来证明这不是一个很好的选择,很多读者拿到书之后很不容易发现藏在这里的授权码,尽管在扫文章码时给出了提示,相比英语教材等将码(带涂层)直接贴在封底或包装上,还是太隐蔽了。授权的绑定通过手机号,每个授权码可以绑定三个手机号,事实上,这个数量是可以配置的。同时,考虑微信环境下,用户使用微信授权后可以快捷登录,在非微信环境下,用户需要用短信验证码登录。

当用户扫码打开某一篇文章,实际上,他们已经进入了一个完整的H5的应用,全书的内容可以很方便的浏览,在设计上,考虑到以后的在线销售,做了文章级别的激活设置。

接下来,真正作为融媒体核心体验的部分就是音视频内容的播放,我们根据使用场景做了一个区分,一种是听书,模仿喜马拉雅等FM的体验,可以连续整篇播放下来,一种是朗读(学习),这里更加强调视文对照、语音跟读,适合练习者有针对性的模仿训练。

技术实现上,后台采用laravel,前端采用vue,从近一年来的发展来看,技术路线选择还是很理想的,laravel已经和vue结合了,vue也出现了支持小程序开发的框架。这为项目的进一步升级留下了很好的基础。以前,我们很怕项目推倒重来,现在看来,从技术上,不断地更新迭代是不可避免的,但目前技术的迭代是众创式的,很多的技术成果是开源的,产品本身的迭代是不断吸收这些优秀的成果。

对于众多融媒体方案,我的判断是,出版社应该着力建立自己稳定的优质的内容资源编辑加工能力和管理能力,在此之上,主导融媒体产品的策划,技术实现上,传统的较大规模的数字出版技术提供商未必是理想的选择,基于github这种开放式开发架构的创新型小团队是更好地选择,出版社需要考虑如何与这样的团队建立广泛的联系,部分的参股建立紧密联系,在合作团队中也应用不断迭代的理念,哪些团队更新得好就更紧密的合作下去。对于那些擅长拿大项目的数字出版公司,在完成了出版社基础资源和技术平台建设之后,也需要考虑自身的转型问题了,否则,很有可能就会被出版社产品化发展所抛弃。

从博客到微信公众号的倒退

wordpress用了很多年,最早开博客是在中国教育网,攒了很多课件。那时候最火的还是各种论坛,但论坛很乱,自己又很难混成版主,也自己开了很多自建论坛,聚不到人气。后来转到博客中国,这也是很多同代人的路,再后来,公共博客平台就不行了,原因不说,开始用godaddy自建服务器搭wordpress。

早期的时候百度对wordpress这种独立博客站点的收录还可以,后来堕落到不行,以至于我逢人就修改他的浏览器默认设置为必应。在微信公众号火起来之前,各家门户网站的博客我都开过,但都是当备份,决不在上面写原创,后来事实证明这个选择是对的。但微信公众号这个莫名奇妙的产品只有到我偶尔当了专门做这个平台的大数据的公司才有所了解,其实内心里一直很难想象,人们是如何被逼入一个墙角,才会选择这样的一个平台来发布自己的观点。

从另一种角度看,微信公众号的兴起是和舆论管制的收紧同步的,百度可以不收录一个独立博客,但这个独立博客依然存在,当一五一十挂到之后,要么不写,要么选择微信,而在微信上,帖子可以被删而毫无痕迹,大概也只能在前供职公司那样的数据库能够找到内部存档。