置顶
Welcome
Electron - 01 Tutorial
Electron
简介
Electron 是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架,它将 Chromium 和 Node.js 嵌入到了二进制文件中,使得一次coding便能实现支持 Windows、macOS 和 Linux 的跨平台应用。
Electron 是一个网页应用的原生包装层,在 Node.js 环境中。
作为一个教程,目标是指导使用Electron开发一个桌面应用,并使用Electron Forge 打包分发给终端用户使用。如果希望使用单命令样板开始项目,建议使用 Electron Forge 的 create-elctron-app 命令。
一些准备
工欲善其事必先利其器,下面列出了一些所需的工具:
代码编辑器:VS Code, Vim …
命令行工具:Windows PowerShell, macOS Terminal …
Git and Github
Node.js and npm
第一个应用程序
在使用 Windows 系统时,需要避免使用 WSL ,否则在尝试运行程序的时候可能会遇到问题。
初始化 npm 项目
Elec ...
Unit2 - Building App UI
Unit 2: Building App UI
Continue learning the fundamentals of Kotlin, and start building more interactive apps.
Kotlin fundamentals
Write conditionals
In Kotlin, when you deal with multiple branches, you can use the when statement instead of the if/else statement because it improves readability, which refers to how easy it is for human readers, typically developers, to read the code. It’s very important to consider readability when you write your code because it’s likely that other developers ne ...
Unit1 - Your First Android App
Unit 1:Your First Android App
Course goals
Understand the fundamentals of Kotlin and Jetpack Compose
Build a series of basic Android apps
Use Android app architecture, Jetpack libraries and work with data according to Modern Android Development practices
Prerequisites
Basic computer skills
Basic math skills
A computer that can run Android Studio
(Optional) Android device
Unit 1: Your first Android app
Introduction to Kotlin
Print Message
fun main() { println("Use the val keyword ...
pyside6_01_environment
Environment
Getting Started on Windows
The Qt library has to be built with the same version of MSVC as Python and PySide, this can be selected when using the online installer.
Requirements
MSVC2022 or (MSVC2019) for Python 3 on Windows.
OpenSSL (optional for SSL support, Qt must have been configured using the same SSL library).
sphinx package for the documentation (optional).
Python 3.8.0 was missing some API required for PySide/Shiboken so it’s not possible to use it for a Windows build.
csapp_11_network_programming
网络编程
主要内容:
理解基本的客户端-服务器编程模型
编写使用因特网提供的服务的客户端-服务器程序
开发功能齐全的Web服务器
CS模型
CS模型,即:Client-Server模型。一个应用是由 一个服务器进程 和 一个/多个客户端进程 组成的。服务器管理资源,通过操作这种资源来为客户端提供服务,例如:
一个FTP服务器管理一组磁盘文件,为客户端进行存储和检索。
CS模型中的基本操作是 事务(transaction) ,其由以下四步组成:
当一个客户端需要服务时,它向服务器发送一个请求。
服务器收到请求后进行解析,并以适当的方式对资源进行操作。
服务器给客户端发送一个响应,并等待下一个请求。
客户端收到响应并斤进行处理。
网络
Client进程 和 Server进程 通常运行在不同的主机上。对于主机而言,网络只是又一种 I/O设备,是数据源和数据接收方。
一个插到 I/O总线扩展槽 的适配器(网卡)提供了网络的物理接口。从网络上接收到的数据 从 适配器 经过 I/O 和 内存总线 复制到内存(通常称为 下载),通常是通过 DMA(Direct Memory Acces ...
Linux_kernel_development_06_kernel_data_structures
内核数据结构
这一章其实可以放前面一点,因为许多调度算法都会涉及到这些数据结构。
在 Linux 中最常用的几个数据结构:
链表
队列
映射
二叉树
链表
关于链表的简介可以去参考 另一篇文章 ,这里不再过多赘述。
单链表的一般结构:
struct list_element{ void *data; /* 数据域 */ sturct list_element *next; /* 指向下一个链表元素的指针 */};
双链表的一般结构:
struct list_element{ void *data; /* 数据域 */ struct list_element *prev; /* 指向上一个链表元素的指针 */ struct list_element *next; /* 指向下一个链表元素的指针 */};
链表遍历
这是一种线性移动,通过先访问某个元素域,再通过该域的指针域进行索引。
Linux 内核中的实现
内核实现链表的方式比较独特,它不是将数据结构塞入链表,而是将链表节点塞入数据结构。
如何理解上面的话呢 ...
Linux_kernel_development_05_system_calls
系统调用
内核提供了用户进程与内核进行交互的接口,这些接口让应用程序受限地访问硬件设备,提供了创建新进程并与已有进程进行通信的机制。
与内核通信
系统调用在用户空间进程和硬件设备之间添加了一个中间层,主要作用为:
为用户空间提供了一种硬件的抽象接口,例如:对文件系统中文件的读写,等等
保证了系统的稳定和安全,内核可以基于权限、用户类型和其他规则对需要进行的访问进行裁决
提供了多任务和虚拟内存的系统稳定性
API、POSIX和C库
一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用。
POSIX是可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),它是Unix的标准。例如,glibc就是 Linux 下使用的开源标准C库,是由 GNU 发布的 libc 库,它提供了丰富的API接口,这些API都是遵循POSIX标准的。
应用程序通过调用库函数来实现特定功能,这些库函数中的一些函数则会使用系统调用的服务。
系统调用
// TODO
Linux_kernel_development_04_process_scheduling
进程调度
进程调度程序是确保进程能有效工作的一个内核子系统,它负责决定:
哪个进程可以投入运行;
进程何时运行;
进程可以运行的时长;
可以将它看作在可运行态进程之间分配有限的处理器时间资源的内核子系统,这是多任务操作系统的基础。对进程的合理调度使得系统资源最大限度地发挥作用,多进程才会有并发执行的效果。
只要有可以执行的进程,那么就总会有进程在执行。但只要系统中可运行的进程数目比处理器个数多,就注定在某一时刻一部分进程不能执行。可以说,调度程序的基本工作就是:在一组处于可运行状态的进程中选择一个来执行。
多任务
多任务操作系统:同时并发地交互执行多个进程的操作系统。
多任务操作系统可以分为两类:
非抢占式多任务 cooperative multitasking:除非进程自己主动停止运行,否则它会一直执行。这个主动挂起自己的动作叫做让步(yielding)。当调度程序无法主导每个进程的运行时长时,麻烦就会增多。
抢占式多任务 preemptive multitasking:由调度程序决定何时停止一个进程的运行,以便其他进程能够得到执行的机会,这个强制将当前执行进程挂起的动作叫做抢 ...
Linux_kernel_development_03_process_management
进程管理
操作系统为用户程序服务,因此,进程管理是所有操作系统的心脏所在。
进程
进程是处于执行期的程序及其相关的资源的总称,它包含其他资源(如打开的文件、挂起的信号等),内核需要有效、透明地管理所有细节。进程还有另一个名称:任务(task)
线程(thread)是在进程中的活动对象,每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的是线程,对Linux而言,线程不与进程区分,它只是一种特殊的进程。
进程提供两种虚拟机制:
虚拟处理器:许多进程共享一个处理器,但是虚拟处理器使得进程认为自己在独享处理器。
虚拟内存:许多进程共享一个内存资源,但是虚拟内存使得进程认为自己独享整个内存资源。
在Linux中,通常使用 fork() 系统调用,通过复制一个现有进程来创建一个新进程。
父进程:调用 fork() 的进程
子进程:新生成的进程
在 fork() 调用结束后,父进程恢复执行,子进程也开始执行。因此,fork() 系统调用会从内核返回两次,一次回到父进程,一次回到子进程。
在 fork() 之后,通常会使用 exec() 来创建新的地址空间,并把新的程序载入 ...