全栈框架——MEAN

MEAN: MongoDB - Express - AngularJs - Node.js MongoDB 是一个面向文档的、 NoSQL 类型的数据库。MongoDB 颠覆了传统的基于表的数据存储方式,而采取了类似 JSON 的文档结构来存储数据,因而它在存储数据时可以更加灵活。 Express 是一个 Node.js 框架,可以创建灵活的 Web 服务,比如单页面应用程序、多页面应用程序和混合型 App。 AngularJS 是一个开源的 JavaScript 框架,由 Google 和开源社区共同维护,它用来创建单页面应用程序。它的目标是使用 model-view-controller 模式来规范 Web 应用程序,让开发和测试富交互的单页面应用程序变得更加轻松。 Node.js 是一个运行在服务器端的 JavaScript 运行环境,它的底层是基于 Chrome 的 JavaScript 运行环境——V8 引擎。Node.js 可以作为服务器端语言,用来创建快速、可扩展的应用程序。Node.js 也可以在本机运行,做一些本地操作,比如加速本地开发流程,或者实现一键发布。 MEAN 可以说是传统的 LAMP 方案的有力竞争者。因为从服务器端到页面端都采用同样的语言(JavaScript)和同样的架构模式(MVC),所以一个擅长 JavaScript 的工程师可以兼顾前后端的开发,并且前端代码和后台代码是可以复用的。

October 25, 2017 · 1 min · Zi Wang

(转载) IaaS, PaaS, Saas

如果你是一个网站站长,想要建立一个网站。不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序。 现在你追随潮流,采用流行的云计算,如果你采用 IaaS 服务,那么意味着你就不用自己买服务器了,随便在哪家购买虚拟机,但是还是需要自己装服务器软件 而如果你采用 PaaS 的服务,那么意味着你既不需要买服务器,也不需要自己装服务器软件,只需要自己开发网站程序 如果你再进一步,购买某些在线论坛或者在线网店的服务,这意味着你也不用自己开发网站程序,只需要使用它们开发好的程序,而且他们会负责程序的升级、维护、增加服务器等,而你只需要专心运营即可,此即为 SaaS 。 作者:John Wang 链接:https://www.zhihu.com/question/20387284/answer/28514161 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

October 25, 2017 · 1 min · Zi Wang

scp 命令简明介绍

安全复制(英语:Secure copy,缩写SCP)是指在本地主机与远程主机或者两台远程主机之间基于Secure Shell(SSH)协议安全地传输电脑文件。“SCP”通常指安全复制协议或者程序本身。安全复制 - 维基百科,自由的百科全书 其使用方法类似于 cp 命令。 复制文件或目录命令: 复制文件: 将本地文件拷贝到远程 scp 文件名 --用户名@计算机IP或者计算机名称:远程路径 从远程将文件拷回本地 scp --用户名@计算机IP或者计算机名称:文件名 本地路径 复制目录: 将本地目录拷贝到远程 scp -r 目录名 用户名@计算机IP或者计算机名称:远程路径 从远程将目录拷回本地 scp -r 用户名@计算机IP或者计算机名称:目录名 本地路径 注意,如果远程主机使用非默认端口22,可以在命令中指定。例如,从远程主机复制一个文件到本地。 scp -P 2222 user@host:directory/SourceFile TargetFile

October 11, 2017 · 1 min · Zi Wang

「cmd」与「网卡」—— netsh 命令

1. 通过命令提示符(cmd)命令连接 Wi-Fi 1.1 连接曾经连接过的 Wi-Fi :: 查看配置的列表(::表示注释) netsh wlan show profile :: 连接 netsh wlan connect ssid=你的SSID名字(简单可以理解为Wi-Fi名) name=你的配置名字 1.2 连接从未连接过的 Wi-Fi :: 先增加一项 Wi-Fi 配置,注意要在配置文件所在目录执行 netsh wlan add profile filename="你的配置.xml" :: 查看配置的列表,检查是否添加成功 netsh wlan show profile :: 连接 netsh wlan connect ssid=你的SSID名字 name=你的配置名字 示例配置文件 <?xml version="1.0"?> <WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"> <name>你的配置名字(与SSID名字相同即可)</name> <SSIDConfig> <SSID> <name>你的SSID名字</name> </SSID> </SSIDConfig> <connectionType>ESS</connectionType> <connectionMode>auto</connectionMode> <MSM> <security> <authEncryption> <authentication>WPA2PSK</authentication> <encryption>AES</encryption> <useOneX>false</useOneX> </authEncryption> <sharedKey> <keyType>passPhrase</keyType> <protected>false</protected> <keyMaterial>你的WiFi密码</keyMaterial> </sharedKey> </security> </MSM> <MacRandomization xmlns="http://www....

September 4, 2017 · 1 min · Zi Wang

代码与数据

半年之前,第一次接触到这种将函数作为参数传递的做法,当时实在觉得难以理解。 PHP 的变量真的是啥都能装,不管函数还是类,这个真的是灵活到飘逸🙈。另外,“魔术方法”哈哈哈哈哈哈哈🌞好酷哦... pic.twitter.com/nxGwbBKAEl — Zi WANG (@hiwangzi) March 28, 2017 直到最近再次接触到 Python,查询了一些资料,才开始对其有了一些初步的认识。 我们暂停一下,看看计算机中比较诡异的地方,也就是代码(code)和数据(data)的统一。这是一个槛,如果不跨过这槛,很多概念就不清楚。我们常常说计算机程序分成 code 和 data 两部分。很多人会理解成,code 是会运行的,是动态的,data 是给 code 使用,是静态的,这是两种完全不同的东西。 回调函数(callback)是什么? - 回答作者: 黄兢成 https://zhihu.com/question/19801131/answer/17156023 最开始我的认知也就如上面这个问题的答主描述的一般,但如果转变一下思维,将 code 与 data 统一视为视为信息,对于 PHP 中可以将函数作为参数传递的做法,也就可以理解了。 其实 code 只是对行为的一种描述,比如有个机器人可以开灯,关灯,扫地。如果跟机器人约定好,0 表示开灯,1 表示关灯,2 表示扫地。 我发出指令串,0 1 2,就可以控制机器人开灯,关灯,扫地。再约定用二进制表示,两位一个指令,就有一个数字串,000111,这个时候 000111 这串数字就描述了机器人的一系列动作,这个就是从一方面理解是 code,它可以控制机器人的行为。 但另一方面,它可以传递,可以记录,可以修改,也就是数据。只要大家都协商好,code 就可以编码成 data, 将 data 解释运行的时候,也变成了 code。 关于 code 与 data,上面的答主如是说: 有些语言不区分,它的 function(表示code)跟 int, double 的地位是一样的。这种语言称函数是第一类值。 有些语言是不能存储函数,不能动态创建函数,不能动态销毁函数。只能存储一个指向函数的指针,这种语言称函数是第二类值。 在 Python 中,将一切都视为对象,传递的即是函数的指针。这种做法即属于上述描述中的第二类。 最后,发自内心的说,这个回答的内容真得值得一读。 我要走的路还有很长,路漫漫其修远兮……

September 3, 2017 · 1 min · Zi Wang

Debian/Linux 下无线网卡驱动的安装

在 Debian 下为 BCM43228 无线网卡安装驱动

August 29, 2017 · 2 min · Zi Wang

Linux 安装软件的几种方式

源代码编译安装 源代码包的安装一般为下载软件源代码,然后编译安装。常见的 C 程序软件的安装步骤是 configure, make, make install 三部曲(./configure && make && make install)。 一句话来解释整个过程: 根据源码包中 Makefile.in 文件的指示,configure 脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件(还有其它本文无需关心的文件),然后 make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件移动(即安装)到指定的地方(仍然按照 Makefile 文件的指示)。 借助软件包管理器安装 例如借助 yum、apt-get 等管理软件进行安装。 在 Ubuntu 系统上,软件包的格式是 deb,相比于「源代码编译安装」,deb 包这类的二进制包是依赖硬件和软件平台的。 顺便提一点,apt-get只是dpkg的一个前端而已,dpkg 是Debian软件包管理器的基础。而上层的工具,像是 APT,用于从远程获取软件包以及处理复杂的软件包关系。 二进制格式安装 编译好的文件,类似于 Windows 下的 exe,后缀一般为 bin,如 jdk 就有 bin 后缀(虽然 Linux 下没有后缀的概念,但为了好区分,一般文件名都加后缀)。安装就是先给它可执行权限,然后执行,例如: chmod 777 xxx.bin ./xxx.bin 总结 源代码编译安装最为灵活自由 借助包管理器最为方便 二进制格式安装方式一般被一些闭源的驱动和预编译的安装包所采用 参考 源代码包 - deepin Wiki 深入理解软件包的配置、编译与安装 在 Linux 下安装软件的方法有哪些?各有什么优劣?

August 22, 2017 · 1 min · Zi Wang

数据库表间多对多关系(附带额外字段)的实体类(POJO 或 POCO)表示

介绍 在之前的 Entity Framework 快速上手介绍 之中,两个实体之间只是简单的一对一关系,而在实际的应用场景中,还会出现多对多关系,同时还有可能会出现多对多关系还附带有其他字段的情况。 下面以几个例子,对表间多对多关系的类表示加以更加详细地描述。虽然两个场景举例是使用的 C# 及 Entity Framework(Model First) 框架自动生成数据库、实体类。但这种设计方法,并不只是在使用 ORM 框架时需要,事实上,它是 POCO 及简单 Java 类(POJO)的设计原则之一。 场景实例 场景一 在考虑多对多关系还附带有字段的情况之前,让我们先看一下,多对多关系但不附带额外字段的情况下,实体类代码的表示。 此处使用 Entity Framework(Model First),快速将 model diagram 转为数据库中的表及实体类。 假设的场景是学生选课,一名学生可以选多门课,一门课也可以被多个学生选择。E-R 图如下所示: 对应自动生成的数据库如下: StudentSet CourseSet CourseRegistrationSet 其中 Course_Id 与 Students_Id(注:此处词尾(s)负数的原因参见上面 E-R 图中右边的 Properties 中 End1 Navigation Property 的设置)分别以另外两张数据表的 Id 主键作为外键。 同时 Course_Id 与 Students_Id 两者联合做 CourseRegistrationSet 表的主键。 对应自动生成实体类的代码如下: Student.cs namespace Model { using System; using System.Collections.Generic; public partial class Student { [System....

May 26, 2017 · 3 min · Zi Wang