lua中匪夷所思的table长度


s = { 1, 2, 3, 4, 5, 6 }
print(#s)     -- output: 6
s[4] = nil
print(#s)     -- output: 6
s[7] = nil
print(#s)     -- output: 3
s[4] = 4
print(#s)     -- output: 6
s[4] = nil
print(#s)     -- output: 3

print()

s = { "1", "2", "3", "4", "5", "6" }
print(#s)     -- output: 6
s["4"] = nil
print(#s)     -- output: 6
s["7"] = nil
print(#s)     -- output: 6
s["4"] = "4"
print(#s)     -- output: 6
s["4"] = nil
print(#s)     -- output: 6

Lua 5.3.4

输出就是这么匪夷所思,所以, 不要在Lua的table中使用nil值,如果一个元素要删除,直接remove

There are comments.

  • ansible快速部署加速方案


    ansible是基于Python的 自动化部署 方案,但是目前只是通过命令行

    ansible -i hosts all -a 'uptime'
    # or
    ansible-playbook -i hosts playbook.yml -e 'args' -t deploy
    
    实现自动化部署.

    长此以往,虽然可以实现所谓的自动化,但产品业务线多且杂的情况下,项目很难维护,更不用说以文件为存储的表现形式很差,针对目前使用ansible的经验以及使用中的困难,可以针对性的提出一些解决方案

    加速

    问题

    自动化部署其中最大的障碍就是 网络 的原因

    其中需要通过网络上传一些模板文件,有的甚至还需要上传一些压缩包,虽然说几MB的东西很快就能上传成功,但如果把这上传文件所需要的2秒乘以上百,上千台主机呢,更不用说ansible的表现形式就是一个任务一个任务的往下执行,假如在上传模板这一步卡住 …

  • ansible-playbook中tasks单进程


    之前有一个需求,ansible-playbook中需要某一步单步执行,也就是说在有多台服务器时,某个任务只能一台服务器执行完后,另一台服务器才能执行,否者对应集群的服务会出问题

    这是一个很简单的需求,ansible中也有对应的实现, --fork 1 或者 使用 serial

    但是如果有人忘记加 --fork 1 了呢,而且该任务是在子任务中,使用 include 加载, serial 关键字无法在某一特定任务中使用,只能与 hosts 同级

    所幸,在这里 https://www.bountysource.com/issues/26342862-support-for-serial-on-an-individual-task 找到了解决办法,使用 delegate_to

    - name: service restart
      # serial: 1 would be the proper solution here, but …
  • redis集群搭建


    Table of Contents

    参考资料

    Redis 集群是一个提供在多个Redis间节点间共享数据的程序集

    准备

    集群开始需要运行redis集群实例,而且要让集群正常运作至少需要三个主节点,这里创建六个节点,三个为主节点,三个为从节点,端口号分别为9001,9002,9003,9004,9005,9006

    并创建六个以端口号为名字的目录, 在每个目录中运行一个Redis实例

    mkdir -p redis/9001
    cd redis
    mkdir 9002
    mkdir 9003
    mkdir 9004
    mkdir 9005
    mkdir 9006
    

    然后将对应的配置redis.conf放入相应的目录中(记得修改端口号)

    最小配置选项:

    port 9001 …

  • 手机与Linux桌面文件共享


    手机: 某米 电脑: archlinux 环境: 同一wifi下

    手机共享文件到电脑

    最近才发现手机可以开启ftp服务对文件进行共享,直接进入文件管理器开启就行,电脑上使用

    ftp target
    
    进行连接

    注: get 下载 put 上传

    电脑共享文件到手机

    这里采用python搭建一个简单的web服务(python3)供手机下载文件

    # 首先 cd 到要共享的目录
    python -m http.server --bind 0.0.0.0
    

    查看本机IP

    ifconfig
    # 或者
    ip addr
    

    重要: 请确保关闭防火墙,否则手机无法连接

    sudo systemctl …

  • Linux总结(草稿)


    Linux发展历史

    Linux是由BSD发展而来,BSD又起源于UNIX。UNIX由贝尔实验室开发, 后来开放给各大学教学使用,其中伯克利大学通过对UNIX源码的研究以及不断的改进与扩展, 推出BSD,并于BSD 4.3版本加入网络模块,极大推进UNIX的发展。但后面由于版权等原因, UNIX与BSD之间发生冲突与法律纠纷,直到1998年,在此期间,芬兰大学生Linus Torvalds 于1991年发布首个Linux版本,linux也趁UNIX与BSD纠纷之际,得到非常快速的发展

    Linux的最小组成

    Linux最小由内核kernel,文件层次结构FHS,系统启动器bootloader组成,其中内存调度, 进程调度等由内核管理,内核可单独运行,但需要与其它组成相配合。

    语言:一般有头文件与库文件,头文件为实现,库文件为声明

    Linux的安装与启动

    当linux启动时,首先启动内核,内核调用init来完成引导进程,init启动时,它会在/etc/inittab内查找默认的运行级别, 然后运行/etc/rc …

  • celery动态添加任务


    celery是一个基于Python的分布式调度系统,文档在这 ,最近有个需求,想要动态的添加任务而不用重启celery服务,找了一圈没找到什么好办法(也有可能是文档没看仔细),所以只能自己实现囉

    为celery动态添加任务,首先我想到的是传递一个函数进去,让某个特定任务去执行这个传递过去的函数,就像这样

    @app.task
    def execute(func, *args, **kwargs):
        return func(*args, **kwargs)
    

    很可惜,会出现这样的错误

    kombu.exceptions.EncodeError: Object of type 'function' is not JSON serializable
    

    换一种序列化方式

    @app.task(serializer='pickle')
    def execute(func, *args, **kwargs):
        return func(*args, **kwargs …

  • 我的Linux历程


    Linux

    是一种计算机操作系统内核,以C语言和汇编语言写成,匹配POSIX标准,以GNU通用公共许可证(GPL2)发布,最早是由林纳斯·托瓦兹开发的类UNIX系统

    Linux与UNIX的区别: UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上。UNIX是商业软件,而Linux自由免费。

    Linux发行版

    简单的来说将Linux内核与一些系统软件,应用软件进行整合,有的发行版还包括图形界面(x11,wayland),目前所说的Linux大多代表Linux发行版

    Linux历程

    曾经在某论坛看到linux这个名词,立马装上虚拟机然后安装了我的第一个Linux版本--centos,并且装上了gnome桌面环境,随后开始了Linux折腾之旅, 大概是这样的 centos --> kali --> ubuntu --> fedora --> ubuntu kylin --> mint --> debian --> fedora --> archlinux ......,Linux发行版大概分为3系, debain系,包括ubuntu …

  • 关于网易云音乐个性推荐无法显示的问题


    最近在使用网易云音乐时首页的个性推荐总是无法显示,一直在正在为你生成个性化推荐,网上也没找到什么办法,偶然间使用

    ┌─[jianglin][~]
    └──╼ rm -rf .cache/netease-cloud-music/
    ┌─[jianglin][~]
    └──╼ rm -rf .config/netease-cloud-music/
    

    重新打开登陆后个性推荐就出现了,特此记录