0%

OpenCL

OpenCL (Open Computing Language,开放计算语言) 是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于[C99])和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分区和数据分区的并行计算机制。OpenCL类似于另外两个开放的工业标准OpenGL(跨平台图形API)和OpenAL(跨平台音效API),这两个标准分别用于三维图形和计算机音频方面。OpenCL扩充了GPU图形生成之外的能力。OpenCL由非盈利性技术组织Khronos Group掌管。

OpenCV

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库(主要操作对象是图像)。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。

Linux scp命令

linux scp命令主要用于远程复制传输文件。

官方定义为:

scp — secure copy (remote file copy program)

是安全拷贝的缩写,主要是因为scp使用了ssh的安全机制。

scp应该是接触Linux的第一个用于在2台以上的服务器上做数据传输的不二命选,当然,ftp除外了。

语法

语法看着挺复杂:

1
$ scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2

其实简化下来就是:

1
$ scp [options] file_source file_target 

差不多有20个参数,不过常用的有如下几个:

  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -r: 递归复制整个目录。
  • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。

无参数传输

默认情况下,传输一个文件不需要任何参数:

1
2
3
$ scp src_file user@192.168.100.123:~/dest_file
user@192.168.100.123's password:
src_file 100% 44 20.0KB/s 00:00

命令执行后,会提示输入远程机器的密码,后面会显示传输成功的文件。

目录传输

而传输一个目录不加任何参数的话,会报错如下:

1
2
3
$ scp src_dir user@192.168.100.123:~/dest_dir
user@192.168.100.123's password:
src_dir: not a regular file

提示要传输的不是常规的文件,需要加上参数-r递归传输如下:

1
2
3
4
5
6
7
$ scp src_dir user@192.168.100.123:~/dest_dir
user@192.168.100.123's password:
a 100% 75 35.1KB/s 00:00
b 100% 48KB 14.7MB/s 00:00
c 100% 581 326.4KB/s 00:00
d 100% 48KB 15.3MB/s 00:00
e 100% 278MB 130.7MB/s 00:02

显示详细进度

对于小文件而言,没有问题,但是如果文件比较大,比如有几个GB,那么此时-v参数就会比较有帮助:

1
2
3
4
5
$ scp a user@192.168.100.123:~/b
user@192.168.100.123's password:
a 0% 0 0.0KMB/s --:-- ETA
a 30% 110MB 130.7MB/s 00:02
a 100% 278MB 130.7MB/s 00:02

会实时更新传输的进度。

保持初始状态

加上-p参数就会保留文件的修改时间,访问时间和访问权限:

1
$ scp -p a user@192.168.100.123:~/b

这个对于有些对时间很有控制欲的人很有帮助。

所以最常用的用法是(文件和文件夹均适用):

1
$ scp -rvp filename/directory user@192.168.100.123:~/

Linux scp命令

linux scp命令主要用于远程复制传输文件。

官方定义为:

scp — secure copy (remote file copy program)

是安全拷贝的缩写,主要是因为scp使用了ssh的安全机制。

scp应该是接触Linux的第一个用于在2台以上的服务器上做数据传输的不二命选,当然,ftp除外了。

语法

语法看着挺复杂:

1
$ scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2

其实简化下来就是:

1
$ scp [options] file_source file_target 

差不多有20个参数,不过常用的有如下几个:

  • -p:保留原文件的修改时间,访问时间和访问权限。
  • -r: 递归复制整个目录。
  • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。

无参数传输

默认情况下,传输一个文件不需要任何参数:

1
2
3
$ scp src_file user@192.168.100.123:~/dest_file
user@192.168.100.123's password:
src_file 100% 44 20.0KB/s 00:00

命令执行后,会提示输入远程机器的密码,后面会显示传输成功的文件。

目录传输

而传输一个目录不加任何参数的话,会报错如下:

1
2
3
$ scp src_dir user@192.168.100.123:~/dest_dir
user@192.168.100.123's password:
src_dir: not a regular file

提示要传输的不是常规的文件,需要加上参数-r递归传输如下:

1
2
3
4
5
6
7
$ scp src_dir user@192.168.100.123:~/dest_dir
user@192.168.100.123's password:
a 100% 75 35.1KB/s 00:00
b 100% 48KB 14.7MB/s 00:00
c 100% 581 326.4KB/s 00:00
d 100% 48KB 15.3MB/s 00:00
e 100% 278MB 130.7MB/s 00:02

显示详细进度

对于小文件而言,没有问题,但是如果文件比较大,比如有几个GB,那么此时-v参数就会比较有帮助:

1
2
3
4
5
$ scp a user@192.168.100.123:~/b
user@192.168.100.123's password:
a 0% 0 0.0KMB/s --:-- ETA
a 30% 110MB 130.7MB/s 00:02
a 100% 278MB 130.7MB/s 00:02

会实时更新传输的进度。

保持初始状态

加上-p参数就会保留文件的修改时间,访问时间和访问权限:

1
$ scp -p a user@192.168.100.123:~/b

这个对于有些对时间很有控制欲的人很有帮助。

所以最常用的用法是(文件和文件夹均适用):

1
$ scp -rvp filename/directory user@192.168.100.123:~/

指定端口进行远程拷贝

基于安全考虑,可能需要指定端口进行传输,比如12345

1
$ scp -P 12345 source_file username@ipaddr:/the/path/of/dest_file

参数说明:

  • -1: 强制scp命令使用协议ssh1
  • -2: 强制scp命令使用协议ssh2
  • -4: 强制scp命令只使用IPv4寻址
  • -6: 强制scp命令只使用IPv6寻址
  • -B: 使用批处理模式(传输过程中不询问传输口令或短语)
  • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
  • -q: 不显示传输进度条。
  • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
  • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
  • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
  • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
  • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
  • -P port:注意是大写的P, port是指定数据传输用到的端口号
  • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

实例

1、从本地复制到远程

命令格式:

1
2
3
4
5
6
7
scp local_file remote_username@remote_ip:remote_folder 
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
  • 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
  • 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

应用实例:

1
2
3
4
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music
scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3

复制目录命令格式:

1
2
3
scp -r local_folder remote_username@remote_ip:remote_folder 
或者
scp -r local_folder remote_ip:remote_folder
  • 第1个指定了用户名,命令执行后需要再输入密码;
  • 第2个没有指定用户名,命令执行后需要输入用户名和密码;

应用实例:

1
2
scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ 
scp -r /home/space/music/ www.runoob.com:/home/root/others/

上面命令将本地 music 目录复制到远程 others 目录下。

2、从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下实例

应用实例:

1
2
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
scp -r www.runoob.com:/home/root/others/ /home/space/music/

说明

1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:

1
2
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator

2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。 scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。

当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。

常用参数:

-1 使用ssh协议版本1-2
-2 使用ssh协议版本2
-4 使用ipv4
-6 使用ipv6
-B 以批处理模式运行
-C 使用压缩
-F 指定ssh配置文件
-l 指定宽带限制
-o 指定使用的ssh选项
-P 指定远程主机的端口号
-p 保留文件的最后修改时间,最后访问时间和权限模式
-q 不显示复制进度

参考实例

从远程复制文件到本地目录:

1
[root@linuxcool ~]# scp root@192.168.10.10:/opt/soft/rhel-server-7.3-x86_64.tar.gz /opt/soft/

从远程复制目录到本地:

1
[root@linuxcool ~]# scp -r root@10.10.10.10:/opt/soft/mysql /opt/soft/

上传本地文件到远程机器指定目录:

1
[root@linuxcool ~]# scp /opt/soft/rhel-server-7.3-x86_64.tar.gz root@192.168.10.10:/opt/soft/scptest

上传本地目录到远程机器指定目录:

1
[root@linuxcool ~]# scp -r /opt/soft/mysql root@192.168.10.10:/opt/soft/scptest

保留文件的最后修改时间,最后访问时间和权限模式:

1
[root@linuxcool ~]# scp -p /root/install.log root@192.168.10.10:/tmp  

创建第一个Django应用

检查django是否安装及版本

1
$ python -m django --version

创建项目

1
$ django-admin startproject mysite

创建目录如下所示:

1
2
3
4
5
6
7
8
➜  django git:(master) ✗ tree mysite
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

运行服务器

1
$ python manage.py runserver

如果出现下面的问题,可以通过migrate来解决。

1
2
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
1
mysite git:(master) ✗ python manage.py migrate

修改端口

默认情况下为8000端口,可以通过加上port口来更改,比如更改为8080,命令如下

1
$ python manage.py runserver 8080

在修改代码后,不需要重启runserver,因为会重载代码,除非新增了文件。

创建APP应用

1
➜  mysite git:(master) ✗ python manage.py startapp polls

创建了一个polls目录,列表如下:

1
2
3
4
5
6
7
8
9
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py

编写第一个视图

编辑文件polls/views.py,内容如下:

1
2
3
4
5
from django.http import HttpResponse


def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

为了使用这个视图,我们需要在polls文件夹新建一个urls.py文件,用来映射该视图。

其中polls/urls.py的内容如下所示:

1
2
3
4
5
6
7
from django.urls import path

from . import views

urlpatterns = [
path('', views.index, name='index'),
]

接下来需要在mysite/urls.py中指定polls.urls文件,内容如下:

1
2
3
4
5
6
7
from django.urls import include, path
from django.contrib import admin

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]

Python Django 教程2

本教程将将创建数据库,模型并介绍自动生成的管理员站点。

创建数据库

数据库默认设置在mysite/settings.py文件中的DATABASES中,其中为ENGINE和NAME字段,可以自行更改。

使用

1
$ python manage.py migrate

来生成settings.py文件中需要的数据库表。

创建模型

修改文件polls/models.py文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
from django.db import models


class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')


class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)

激活模型

为了可以访问到该模型,需要在INSTLLED_APP参数设置中,添加polls,文件mysite/settings.py内容如下所示:

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

其中polls.aps.PollsConfig位于polls/apps.py文件中

然后使用下述命令来让Django包含polls应用。

1
$ python manage.py makemigrations polls

使用

1
$ python manage.py migrate

来生成settings.py文件中需要的数据库表。

创建模型的三个步骤

  1. Change your models (in models.py).
  2. Run python manage.py makemigrations to create migrations for those changes
  3. Run python manage.py migrate to apply those changes to the database.

玩转API接口

1
$ python manage.py shell

增加易读接口返回

1
2
3
4
5
6
7
8
9
10
11
from django.db import models

class Question(models.Model):
# ...
def __str__(self):
return self.question_text

class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text

Django 管理 Admin

创建管理员账号

1
$ python manage.py createsuperuser

启动服务器

1
$ python manage.py runserver

Now, open a Web browser and go to “/admin/” on your local domain – e.g., http://127.0.0.1:8000/admin/

让poll在admin中可编辑,编辑polls/admin.py文件内容如下:

1
2
3
4
5
from django.contrib import admin

from .models import Question

admin.site.register(Question)

Python Django 教程3

本教程将聚焦于创建公共接口-视图。

Writing more views

更新views页面polls/views.py

1
2
3
4
5
6
7
8
9
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)

def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)

Write views that actually do something

A shortcut: render()

Raising a 404 error

A shortcut: get_object_or_404()

Use the template system

Removing hardcoded URLs in templates

Namespacing URL names

Python Django 教程4

本教程将主要关注简单的表单处理以及如何对代码进行优化。

编写一个简单的表单

使用通用视图:代码还是少点好

改良 URLconf

改良视图

Python Django 教程5

本教程将主要为Django应用创建自动化测试。

Python Django 教程6

本教程将主要为Django应用添加一张样式表和一张图片。

样式表

创建下列代码:

polls/static/polls/style.css

1
2
3
li a {
color: green;
}

下一步,在polls/templates/polls/index.html的顶端添加如下内容 :

1
2
3
4
polls/templates/polls/index.html
{% load staticfiles %}

<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />

添加背景图片

我们将创建一个子目录来存放图片。 在polls/static/polls/目录中创建一个 images 子目录。在这个目录中,放入一张图片background.gif。换句话,将你的图片放在 polls/static/polls/images/background.gif。

然后,向你的样式表添加(polls/static/polls/style.css):

1
2
3
body {
background: white url("images/background.gif") no-repeat right bottom;
}

重新加载http://localhost:8000/polls/,你应该在屏幕的右下方看到载入的背景图片。