neno
环境 https://www.mycompiler.io/new/deno下面是nodejs环境下 typescript 环境搭建过程
1 | npm install -g typescript |
-g
表示全局安装
node新版本会有一个warning,可以忽略
npm WARN config global --global, --local are deprecated. Use --location=global instead" occurs because the --global option was deprecated in an older version of npm
粗略地说,一旦 TypeScript 的编译器检查完您的代码,它就会擦除类型以生成生成的 “compiled” 代码。这意味着一旦你的代码被编译,生成的普通 JS 代码就没有类型信息。
Roughly speaking, once TypeScript’s compiler is done with checking your code, it erases the types to produce the resulting “compiled” code. This means that once your code is compiled, the resulting plain JS code has no type information.
这也意味着 TypeScript 永远不会根据它推断的类型更改程序的行为。最重要的是,虽然您可能会在编译期间看到类型错误,但类型系统本身与程序运行时的工作方式无关。
This also means that TypeScript never changes the behavior of your program based on the types it inferred. The bottom line is that while you might see type errors during compilation, the type system itself has no bearing on how your program works when it runs.
最后,TypeScript 不提供任何额外的运行时库。您的程序将使用与 JavaScript 程序相同的标准库(或外部库),因此无需学习额外的 TypeScript 特定框架。
Finally, TypeScript doesn’t provide any additional runtime libraries. Your programs will use the same standard library (or external libraries) as JavaScript programs, so there’s no additional TypeScript-specific framework to learn.
1 | const a:number = 1+2; |
执行编译1
tsc 1.ts
执行编译后,会生成一个 1.js 文件1
2const a = 1 + 2;
console.log(a);
运行结果1
>>3
TypeScript 编译器将 TypeScript 代码转换为 JavaScript 代码。 它使用类型信息来执行以下操作:
jira版本:atlassian-jira-6.3.6-standalone
1 | !/bin/sh |
1 | 0.将jira.sh复制至/etc/init.d/目录下 |
有时候linux服务器关机还要手动启动禅道服务,很麻烦,就添加一行命令或一个脚步或设置开机自行启动
/etc/rc.local 中添加 /opt/zbox/zbox start
CentOS7设置自定义开机启动,添加自定义系统服务
建立service文件
1 | vim /lib/systemd/system/zentao.service |
内容如下:
1 | [Unit] |
赋予权限
1 | 以754的权限保存在目录 |
查看服务状态
1 | systemctl stutus zentao |
设置开机启动
1 | systemctl enable zentao.service |
1 | DATABASES = { |
1 | pip install PyMySQL |
__init__.py
添加如下代码1 | import pymysql |
1 | python manage.py inspectdb > models.py |
如果指向一张表生成对应models中的model类1
python manage.py inspectdb table_name > models.py
auto_now=True
这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的
auto_now_add
这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。
1 | from django.db import models |
备注:
前台页面从数据库取值,需要格式化字符串,添加<td>\{\{ infor.updatetime|date:"Y-m-d H:i:s" \}\}</td>
类似的过滤器。
通常外键约束需要添加on_delete属性
CASECADE
:级联(常用)1 | app2 = models.ForeignKey(App1, on_delete=models.CASCADE) |
2.PROTECT
: 受保护
即只要这条数据引用了外键的那条数据,那么就不能删除外键的那条数据1
app2 = models.ForeignKey(App1, on_delete=models.PROTECT)
3.SET_NULL
: 设置为空
如果外键的那条数据被删除了,那么在本条数据上就将这个字段设置为空1
app2 = models.ForeignKey(App1, on_delete=models.SET_NULL, blank=True, null=True)
4.SET_DEFAULT
:设置默认值
如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。
如果设置这个选项,前提是要指定这个字段一个默认值1
2# app/models.py
app2 = models.ForeignKey(App1, default='test_default', on_delete=models.SET_DEFAULT)
5.SET()
: 设定函数处理
如果外键的那条数据被删除了。那么将会获取SET函数中的值(value)来作为这个外键的值。SET函数可以接收一个可以调用的对象(比如函数或者方法)。
如果是可以调用的对象,那么会将这个对象调用后的结果作为返回值return返回回去。可以不用指定默认值
6.DO_NOTHING
: 不处理(不推荐)
原数据不会有任何操作,也就是说 App1 的某条数据被删除,App2 中的引用还在,其实就是外表的外键还在。 但其实这是一种不推荐的做法,因为如果访问到App2 中的这条数据,用到了 app1 这个字段,就会报错,因为有一条数据被删除了,那么外键表内就有一条数据的外键和主表的外键对应不上,找不到,就报错了。
1 | # app/models.py |
1 | 01 清空django_migrations所有记录 |
1 | 位置参数: |
1 | 位置参数: |
schema
相关概念没办法,在码云发表,被屏蔽了,只能转这里了
解释数据库、表空间、数据文件、表、数据的最好办法就是想象一个装满东西的柜子。
从物理方面来讲:数据库是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据。
从对象方面来讲:数据库是柜子,柜中的抽屉是Schema,抽屉中直接就是各种纸,这些纸就是表,写在纸上的信息就是数据。
如果从作为数据库实例和表之间的一层这个概念上面讲,Schema和表空间是一个层次的概念,他们都有一个很重要的特性,就是对表的独占性。Schema是表的逻辑集合,是所有应用访问表必须指定的对象(虽然一般大家都省略了,但是实际上一定是db.schema.table这种访问模式),同一张表不可能既属于这个Schema,又属于另一个Schema。表空间是表的物理集合,是所有磁盘读写必须访问的文件(大家一般也不用太管,主要是Oracle管,个性化的需求DBA管),同一张表也不可能既放在这个表空间,又放在那个表空间。
用户就是用户,用户就是打开抽屉,拿出纸来用的人。一般情况下,用户和Schema这种抽屉打交道会多一点,因为每个用户都有一个Oracle给他量身打造的Schema,而在实际的使用过程中,都是通过Schema来访问表,进行增删改查的操作。当然,在主人允许的情况下,客人也是可以打开自己的抽屉查文件的。而DBA,就是那个有万能钥匙的人。
表空间这个抽屉上面同样也贴了用户的名字,每个人可以设置自己的默认抽屉来放东西,如果不设置的话,Oracle也会给你一个公用的抽屉放东西。表空间这种抽屉是物理上的抽屉,是实际存在的,这个抽屉没有了,文件也就没有了。Schema这个抽屉呢,好像是跟着用户天生而来,天生而去的,是个神秘的抽屉。
ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
方案(Schema)为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。 一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。
]]>pip install docx2pdf
1 | from docx2pdf import convert |
1 | from pdf2docx import Converter |
channel is not opened
打开虚拟机连接FinalShell出现久联不上的问题,显示显示连接上,不一会就断掉,报错为channel is not opened.
1 | vi /etc/ssh/sshd_config |
#UseDNS yes
去掉#,更改为UseDNS no
,完成后ESC退出编辑模式,使用 :wq 回车保存并退出1 | systemctl restart sshd.service |
对一个人的思念可以到什么程度?可能只有真正失去的人才能懂吧。一晃父亲离开我们已经2年了…….
前段时间无意中看到迟尚斌因病逝世的消息,突然想起了父亲生前也是球迷。
回想起小时候,爸爸每周六都要看cctv5转播的意大利联赛,我也耳濡目染喜欢上了足球。
“足球是圆的,没到最后一刻,一切皆有可能。”马拉多纳、齐达内、博格坎普、伊基塔那些在球场上闪耀的球星,我只要听到他们的名字内心都莫名的激动。
然而父亲并没有让我踢足球,我记得又一次我自己拿了个破足球在球场上踢,爸爸默默走过来说:你也喜欢足球?我点了点头。知道为啥不让你踢足球吗?我摇了摇头。因为你太瘦了,足球对抗性太强,怕你受伤。我似懂非懂的点了点头。
我和父亲的话题也渐渐多了起来,从五大联赛到欧洲杯、世界杯到甲A联赛,基本上有关足球的东西都是茶余饭后的谈资。我熬夜看球,父亲慢慢熬不了夜,只能让我把白天录播的时间给他记下来,他白天没事的时候看。每次看到漂亮的进球总想和父亲分享,一转身,父亲已经睡着了。
父亲中年的时候担任分厂足球队的教练,我偷摸在场边看着父亲,整个人在球场上的感觉都不一样了。心里别提多自豪了。听妈妈说,你爸年轻的时候,不光是足球,篮球、排球都很厉害,刚开始还能踢前锋,伴随着年龄增长,就改踢中场,到最后只能踢后卫了。我没想到爸爸还有这么风光的经历。我眼中的父亲,话很少,很严厉,工作起来很认真。
说点高兴的事,爸爸告诉你个事儿,今年女足挺进了世界杯,贾秀全也是大连人。我想您在天上应该也会很开心的。
一天,媳妇调侃闺女说,你以后找对象会找你爸这样的吗?闺女说,不会啊,因为爸爸只有一个啊。我听到了,心里莫名感动。现在能理解为人父母那份不需要回报的心了。
挚爱亲朋的离开,与其悲伤,我们只能选择坚强。做好一个父亲,尽可能地呵护家人,我会照顾好自己,父亲不用再为我担心。
夜已深,父亲,我又想您了。
]]>Python maketrans() 方法用于给 translate()方法创建字符映射转换表。
可以只接受一个参数,此时这个参数是个字典类型(暂不研究这种情况)。
对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串,表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。
在Python3中可以有第三个参数,表示要删除的字符,也是字符串。
一般 maketrans() 方法需要配合 translate() 方法一起使用。
注:Python3.4 以后已经不需要从外部 string 模块中来调用 maketrans() 方法了,取而代之的是内建函数: bytearray.maketrans()、bytes.maketrans()、str.maketrans()。
1 | str.maketrans(intab,outtab[,delchars]) |
1 | import string |
返回一个字符映射转换表供 translate()方法调用。
借用 python挑战 第一关
提示信息显示:
1 | K-->M |
每个字母向后移动两位就是加密之前的单词了,于是就有下面的方法。
1 |
|
翻译过来: i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that’s why this text is so long. using string.maketrans() is recommended. now apply on the url
通过转换得到下一关的地址
]]>默认的npm下载地址:http://www.npmjs.org/
淘宝npm镜像的地址:https://npm.taobao.org/
临时使用淘宝源:
$ npm --registry https://registry.npm.taobao.org install node-red-contrib-composer@latest
$ npm config set registry https://registry.npm.taobao.org
$ npm config set registry http://www.npmjs.org
$ npm info underscore
]]>又一波疫情,本来就景气的大连又一次雪上加霜。只要有希望,一切都会好的。
循环是我们常用的控制语句,在
javascript
中每次循环结束后其 i 值会指向最后一次的结果,这样循环注册事件时使用到 i 值便会出错
点击图片切换背景的javascript
脚本
1 | <ul> |
直接报错:
1 | Uncaught TypeError: Cannot read property 'src' of undefined |
打印变量i
,永远都是指向最大索引值4
1 | 4 |
下面是解决方案
1 | //第一种解决方案: this关键字 |
node刚升级到14.4,结果发现使用hexo d
命令部署到gitee
上发现如下错误
1
2 > typeError [ERR_INVALID_ARG_TYPE]: The "mode" argument must be integer. Received an instance of Object
>
查阅相关资料发现是node版本太高导致,最终将node降级到12.14.0后,重新部署就成功了。
当然你也可以使用nvm来切换node版本。
]]>2020年还有不到五天就要过去了,时光如梭,这一年一眨眼就过去了。
大连又一次迎来了第三次新冠疫情,大街上冷冷清清。商场里也没有往日的喧闹。这个城市又一次变得安静了下来。
2020年,大家说得最多的一个字就是”难”。大家好不容易挺过来,来势汹汹的疫情打乱了节奏。很多人心情跌落谷底。
昨天回到家,媳妇说孩子网课表现很优秀,一边跟着老师听讲,一边和老师互动,还知道静音,非常投入,孩子这是长大了。我心里却不是滋味,和去年疫情相比,网课一天不上,天天就是看平板电脑形成了强烈的反差。孩子不是长大了,是社会让她不得不遵守规则。
学生问我,你白天上课,晚上还上晚课,收入一定很高,我笑了笑说,还可以吧,他接着又问,你肯定是学校股东,要不谁能这么拼命。我回答,成年人的世界里哪有什么不容易。师生相视一笑。大家都明白,个中滋味自己体会吧。
疫情让我们明白一些道理,什么都没有活着和生存更重要。只要活着,就有希望。
2020让我们体会到生命的伟大,致敬那些工作在一线的医护工作者们,他们是最美的逆行者。
致敬那些为了后勤保障,辛勤工作的各行各业的人们,他们社会能正常运转。
为人父,为人母,体会到了父母的艰辛。
就像奥特曼经常说的一样,相信光,会守护世界。每个人心中都有奥特曼。我也会守护我的家人,守护我身边的一切。
希望在新的一年,一切都会变好。
祝愿大家都身体健康,因为有光,就有希望。
未来可期,再见2020!
]]>django
项目依赖第三方库pip freeze
导出针对大部分使用virtualenv
或venv
,pipenv
虚拟环境的项目而言,导出第三方依赖很容易,运行下面的命令即可
pip freeze > requirements.txt
pipreqs
库pip install pipreqs
进入项目根目录,使用下面的指令
1 | pipreqs ./ |
1 | D:\code\django_blog\mysite>pipreqs ./ |
encoding=utf-8
1 | pipreqs ./ --encoding=utf-8 |
django-mdeditor
python pip install django-mdeditor
1 | INSTALLED_APPS = [ |
mysite/urls.py
1 | from django.contrib import admin |
models.py
中内容类型导入MDTextField
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20from django.db import models
from mdeditor.fields import MDTextField
# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length= 150)
# body = models.TextField()
body = MDTextField()
create_time = models.DateTimeField()
def __str__(self):
return f"<BlogPost {self.title}>"
class Meta:
verbose_name ="文章"
verbose_name_plural = verbose_name
1 |
|
1 | <link rel="stylesheet" href="https://cdn.bootcss.com/github-markdown-css/3.0.1/github-markdown.css"> |
1 | {{ blog.title }} |
python manage.py runserver 127.0.0.1:8000
从零开始搭建一个typescript项目中使用了lite-server 模块,备忘一下
bs-config.json
文件1 | { |
1 | "scripts": { |
1 | npm start |
1 | //移动到元素element对象的“顶端”与当前窗口的“顶部”对齐 |
很久没有更新博客了,一来是需要自己整理下思路,二来是自己也要学习,不想因为这样降低博客的质量。
坚持了70多天中断了,感觉有点可惜,但是想来也对自己有个交代。
停下也是为了更好的往下走。
一年前的今天,我父亲还健在。
清明时节雨纷纷的季节,一年前的事情仍旧历历在目。
阴历三月初一是父亲的生日,寻思给父亲过个生日,3月底才出的院。父亲明显感觉比以前气色差了很多。
老人有讲究,不到80大寿,不宜大操大办。因此我给父亲订了蛋糕,俺娘准备了父亲喜欢吃的蚬子长寿面,就一家人简简单单过了一个生日。
父亲的那天胃口格外的好,吃了两大碗面条。我和母亲对视了一眼,心里感觉好了一点。
席间和闺女还做起了游戏,闺女想骑大马,但是考虑到父亲身体还很虚弱,就让媳妇领到一边去玩。
去厨房刷碗,母亲小声告诉我。你爸好几天都难受的睡不着觉了。我心里咯噔一下,只能提醒母亲注意,随时给我打电话。
聊起了很多小时候的事。
印象中爸爸年轻时候喜欢各种运动,足篮排乒乓没有不会的,会吹笛子,会画画,照片看是个俊美的男子。
后来遇到了母亲,有了我和姐姐,足球也踢不动了,担任了厂队的领队,那段风风火火的日子,我经常去球场看球。
想起下雨天,我在水坑打闹,弄得一身白衣服变成了灰色,父亲回家用毛巾狠狠抽了我。
其实抽完,父亲就觉得后悔,谁都有调皮的时候。
回到大连,房子正在装修,我接到一个女同学电话。我父亲问起来,大学有没有要好的女同学,有合适的可以处处看。我那时候还是懵懂的年纪,只知道傻乎乎的笑。
年龄越来越大了,父亲表面没说什么,其实心里着实着急。
我也装傻充愣,在以找对象名义,又玩了好几年。
终于婚了,父亲拉着我媳妇的手,就说一句话,好好过啊,有啥需要就找我们。我偷偷看到,老爷子眼角有了泪花。
婚房房子装修的日子,爸妈全程建工,登梯子爬高,为了一个门帘从金三角老两口硬是走了回来。我姐夫调侃说,看出来了,这是儿啊。
老爷子私下问我,啥时候准备要孩子啊。我说不着急,反问俺爸: 您着急了。俺爸说,能不着急吗,我和你妈都多大年纪了,趁腿脚好,还能帮你带带。
孩子啼哭的那一刻,我突然意识到这个小生命的诞生,让我从一个黄花少年,也当了爹。
媳妇怀孕期间一直反应很大,从开始怀孕一直吐到产床。父亲一直担心,孩子会有影响。
当护士把孩子报过来的时候,老爷子乐的合不拢嘴,一个劲的念叨,挺好挺好。
因为母亲过来带孩子,忽视了父亲的身体,老爷子自己不想给我们添麻烦,终于2016年的冬天,老爷子突然因病入院。
进手术室前,父亲就说了一句话,我还想活着看孙女上小学呢!期间母亲一直在哭,我们只能祈祷手术能成功。
事后,主治医生说,这个手术风险很高,正常人基本上下不了手术台,更何况我父亲有20年的糖尿病,并发症一来,谁也没招。正常40分钟的手术做了2个半小时,老爷子硬是挺了过来。
不到一个月的时间,又因为大面积静脉渗血导致心肌炎,又一次去了手术室……..
我急急忙忙跑去医院,看到俺爸浑身插着十几个管子的时候,我控制不住自己,眼泪止不住流。
老爷子慢慢恢复了过来,看着他那神采奕奕的眼睛慢慢失去了光,我意识到,这场病对于俺爸意味着什么。
2017年十月一,我记得很清楚,我开车领着俺爸去看了东港的喷泉。老爷子走路都费劲了,不到200米的路,歇了十几趟。我搀扶着父亲,手上就剩下骨头了。我扭过头,强忍着泪水。那是父亲最后一次出远门。
2018年春节,家人都聚在一起,那时父亲的头发已经全白了。
19年,刚过完春节,父亲觉得心脏不舒服,就去住院了。凌晨2点,我给父亲送去医院住院。没来得及告诉俺姐。等到住院手续办理完。我才给俺姐打电话,谁知道俺姐也来同一个医院住院了。老爷子一听到俺姐也住院了,眼泪就流下来了,那时候还没有床位,就一个劲念叨,我要等着俺老闺女来。俺姐来了,父亲就抱着俺姐哭了起来。
晚上需要有人陪护,怕我睡不好,故意说我打呼噜影响他睡眠,就让我回家睡。
医生也把我们家属叫到一起,详细说明了父亲现在的病情,距离上次手术过去了三年,现在最重要的不是糖尿病,也不是静脉栓塞,而是心脏。老爷子现在的身体已经不能再做手术了。建议回家静养。我们听了感觉心里很难受。不停追问医生还有没有更好的办法。医生虽然没明着说没有,其实也间接说明病情已经很严重了。
父亲是一个很聪明的人,从医生的只言片语里也清楚自己时日无多。
3月底了,有一天我去医院陪护,父亲拉着我的手说,去走廊溜达溜达。他背靠在护士站的台子前,和我说了一段意味深长的话,他说,我知道我现在心脏是大问题,一旦出问题,3分钟人就没了,我的银行卡都在你妈那,房子你和你姐一人一半,房产证都在你妈那,有事找你妈。我以为父亲是开玩笑,说道,咋的,你这是交代后事啊。父亲突然严肃了起来,说,对,就是交代下。我心里一沉。
4月7号,我正好陪孩子去上英语课,突然接到了母亲的电话,快来,你爸不行了。
当我打车冲过去的时候,父亲已经永远离开了我们。120又急救了将近20分钟,脉搏一直都是一条直线。领队说,老爷子心脏病突发,走了,没遭罪,子女看看是否还需要送医院,否则就在死亡确认书上签字吧。听到这个的时候,我整个大脑都一片空白了。
姐夫赶紧联系了殡葬的人,过了不到十分钟,办事的人说,来孝子来给老爷子净身。我用毛巾给父亲擦脸,感受到父亲的温度。我到现在都不相信,父亲永远的离开了我们。就像睡着了一样。
我实在写不下去了……..
想想对父亲的承诺,说出了院,还能带着父亲去趟澡堂子,这辈子再也不可能实现了。
归来还是少年吗?体会到为人父,为人夫的责任,你就不会再是孩子了。
如今一周年了,我只想对我父亲说,儿子想你了,你还能回来不?
]]>