fmujie 发布的文章

远程的使用Jupyter 真香系列


现在假设你有一台Linux服务器,默认你有Python基础(手动滑稽),恰巧嘞你在Windows上边在练习coding python的时候饱受默认环境摧残,之后你了解到了Anaconda(python环境真香系列)...

Linux服务器安装Anaconda同样会让你顺畅许多(舒服~)

下载安装脚本
wget https://repo.anaconda.com/archive/Anaconda3<版本号>-Linux-x86_64.sh
运行安装向导
bash Anaconda3<版本号>-Linux-x86_64.sh
确认安装成功
conda --version

Linux服务器配置Juypter,Then远程使用Jupyter:

直接在输入命令ipython进入ipython环境

键入

from notebook.auth import passwd
passwd()

输入你记得住的一个密码,之后会产生一个密钥,形如:形如: ’sha1:xxxxxxxxxx’

先复制下来保存好

先生成配置文件
jupyter notebook --generate-config
然后修改配置文件的一些内容

文件很长,不用去找,直接在第一行粘贴上去就行

vim ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip = '*' # 允许访问此服务器的 IP,星号表示任意 IP
c.NotebookApp.password = u'sha1:xxx:xxx' # 之前生成的密码 hash 字串
c.NotebookApp.open_browser = False # 运行时不打开本机浏览器
c.NotebookApp.port = 12684 # 使用的端口,随意设置
c.NotebookApp.enable_mathjax = True # 启用 MathJax
目前能启动服务了
Jupyter notebook

在浏览器里输入你的IP地址后边别忘了加上端口号,就可以成功访问Jupyter了(你得输入你先前设置的密码,不是那个hash),但是你发现在你关闭xshell(鄙人使用xshell连接的Linux服务器),你正在访问的Jupyter就访问不了了,要是能访问的话,我在其他没有python环境的电脑上同样也能coding python,那样该多好~

现在我们让他后台运行

启动的时候这样启动

nohup jupyter notebook --allow-root > jupyter.log 2>&1 &
  • &让命令后台运行, 并把标准输出写入jupyter.log中
  • nohup表示no hang up, 就是不挂起, 于是这个命令执行后即使终端退出, 也不会停止运行
关闭进程

在执行上一步操作后使用命令查看当前任务的进程

ps -a

当你不想使用Jupyter的时候,杀掉这个进程(-n是你上一步查看到的进程pid)

kill -n pid
enjoying it~~~

记-创建Ubuntu虚拟机+Python开发环境配置


前言

因为之前我的小米笔记本装的第二个Ubuntu系统的无线wifi驱动器老是打不开(试过网上的N+种方法,我放弃了。。。),只能用USB数据分享或者蓝牙数据分享,非常难受。算了先不用那个了吧,弄个虚拟机试试。

VirtualBox下载安装

下载官网

一路next就行,不用额外添加别的,安装成功后界面如图,可能因为版本不同而略微有差别(不包含myUb)

vb界面.png

基于VirtualBox安装Ubuntu

这里放上网上的一个很好的教程,镜像你可以自行选择推荐最新版本,到Ubuntu官网下载镜像,我分配的磁盘空间为64G

安装完之后

你会发现你的Ubuntu界面是如此精巧~问题解决方案

开启虚拟机进去之后你键盘左边的Ctrl键与右边的Ctrl键是有区别的,virtualbox虚拟机窗口模式显示设置,切换可用右边的Ctrl+字母键盘C (一定要是右边的Ctrl+C)

关于本地与虚拟机之间剪贴板共用问题与文件拖拽问题,这两个功能若是可行的话会给我们带来不少的便利,红色方框内都可双向

拖拽.png

Ubuntu安装PyCharm + Anaconda + Chrome + Git +科学上网

PyCharm在系统自带的"软件商店"上能搜到

Anaconda在官网下载

Chrome官网下载

Git使用命令行安装

# apt-get install git

Git基本配置

PyCharm内的代码注释是用的左边的Ctrl键+/ 因为右边的Ctrl在虚拟机环境下是热键,着实有些不习惯

Chrome插件安装,以前的谷歌打包好扩展程序后是一个压缩包,之后改成crx了,看这,因为之前设置了文件可拖拽,将crx拖拽到虚拟机就行,然后把后缀改成.zip的格式,打开谷歌浏览器,往里面一拖就行。之前不知道,老是报错。。。(自行科学上网)
哎~要完美的做一件事途中会遇到很多坑,一个教程根本不够填坑的,现在也就是增加点经验吧。


ES6 learning(入门)第三记


循环对象

可迭代的对象

迭代的方法

let list = [10, 20, 30];
let str = '你好哦';
let map = new Map();
map.set('JS', 'JavaScript');
map.set('P', 'PHP');
map.set('PY', 'Python');

for(let val of list) {
    console.log(val);
}

for(let val of str) {
    console.log(val);
}

for(let [key, value] of map) {
    console.log(key, value);
}

循环对象1.png

let item = map.value();
let temp;
while(temp = item.next()) {
    if(temp.done){
        break;
    }else {
        console.log(temp);
    }
}

循环对象2.png

可迭代的对象

制作一个可迭代的对象

Symbol.iterator

class Player {
    constructor(list) {
        this.list = list;
    }
    [Symbol.iterator]() {
        let current = 0;
        let that = this;
        return {
            next() {
                return current < that.list.length ? {value: that.list[current++], done: false} : { done: true };
            }
        }
    }
}
let player = new Player(['fm', 'fj', 'cu']);
for (let temp of player) {
    console.log(temp);
}

可迭代的对象.png

简单迭代生成器

function* {} 迭代生成器

yield:迭代返回

function* generator() {
    yield 'f';
    yield 'm';
    yield 'j';
    yield 'i';
    yield 'e';
}

for(let val of generator()) {
    console.log(val);
}

简单迭代1.png

function* countdown(begin) {
    while(begin > 0) {
        yield begin--;
    }
}

for(let temp of countdown(5)) {
    console.log(temp);
}

简单迭代2.png

简单迭代类

建立一个简单的迭代类

class MyList {
    constructor(list) {
        this.list = list;
        this[Symbol.iterator] = function* () {
            let current = 0;
            let that = this;
            while (current < that.list.length) {
                yield that.list[current++];
            }
        }
    }
}

let mylist = new MyList([10, 20, 30]);
for (let val of mylist) {
    console.log(val);
}

简单迭代类.png

模块化设计

建立一个模块

调用模块功能

  • Player.mjs
class Player {
    constructor(name) {
        this.name = name;
    }
    sayHello() {
        console.log(`Hello ${this.name}`)
    }
}

export default Player;
  • main.mjs
import Player from './Player.mjs';

let curry = new Player('curry');
curry.sayHello();

类模块设计.png
ES6入门系列说明:本系列仅仅作为ES6入门教学视频的归纳总结与记录,在此感谢小马视频ORYouTube地址


初识Git第四章


返回过去1

  • git reset --hard HEAD 回到数据库中最新的版本
  • git reset --hard HEAD~
  • git reset --hard HEAD~n

回到过去1.png

回到过去2.png

回到过去3.png

回到过去4.png

回到过去5.png

回到过去 2

  • git reflog [-n num]
  • git reset --hard [commit_id]
返回过去之后,通过git reflog命令找到现在的位置(commit_id),再从过去返回回来

回到过去21.png

返回过去22.png

使用分支

Git分支功能对于项目开发中的团队合作有着非常重要的作用,同时对于生产环境的更新管理也起着不可替代的作用,是Git最重要的功能。
在项目开始前,应该首先对Git分支的管理有一个明确的规划,明确每个分支的功能和担当者,这样才会保证项目正常推进,不至于陷入混乱。
  • git branch [name]
  • git checkout branch_name

使用分支1.png

使用分支2.png

使用分支3.png

合并分支

  • git merge 合并分支
  • git branch -d [name] 删掉分支

合并分支1.png

合并分支2.png


召唤看板娘