【瞎折腾】Hack Deepin Desktop Environment
我想要什么?
初来乍到 Deepin,界面不可谓不美观。试用不久就发现一个不爽的地方,键盘快捷方式太少了,特别是没有控制窗口停靠贴标的快捷方式,根本就没有这个选项。
在官方论坛里搜索一番,deepin-wm
的 commit message 中有一条 :feat: support interactive tiling
,这个新功能在官方论坛中也有介绍:
1、当一个窗口拖到边界分屏的时候; 2、剩下的应用窗口会全部平铺展示; 3、这时候点击剩下的应用窗口,会自动放置在另一半屏幕,方便左右对比;
Concurrent with Semaphore
Semaphore
Dijkstra 大佬提出了一种解决不同线程之前同步和互斥问题的方法。这种方法就是 PV 操作,它基于 Semaphore(信号量)。
可以把信号量简单看成一个非负整数,只能使用两种操作来改变它的值,这两种操作就是 P 和 V,用伪代码描述如下(与教材《操作系统教程》上不同,这里的信号量不能为负值)。PV 操作的伪代码实现如下:
-
P(s)
1 2 3 4 5 6 7 8
P(s) { if (p != 0) { s--; } else { append this thread to list; sleep(); } }
-
V(s)
1 2 3 4 5 6
V(s) { s++; if (list is no empty) { list.pop().wakeup(); } }
P 和 V 的执行过程都是不可打断的,并且 P 和 V 要成对的出现。这样就保证了程序不可能进入信号量为负值的状态,可以利用这个特性实现进程之间的互斥和同步。
6.828 Homework 2:Shell
这次的作业是实现一个简单的 shell。通过阅读 xv6 book 的第零章,基本上就可以实现题目中所说的三个功能,也是shell的基本功能:运行简单的命令,输入输出重定向,管道。
题目提供的sh.c
已经实现了命令的解析(大概看了一下流程,大概就是个递归下降解释器吧,这次作业无需关心这个),只需要完成runcmd
函数中缺少的代码即可。
流程
先从 main
函数看起:
|
|
main
函数循环调用 getcmd
从 console 读取命令,对 cd
命令做了特别处理。之后fork
创建子进程,调用parsecmd
解析命令,再调用runcmd
执行得到的命令。最后调用wait
等待子进程结束。main
的基本流程就这样。
JavaFX与Kotlin的Main函数
晚上想做个小应用,不想用 丑陋的swing
(确信)。于是试了试JavaFX
。MVC 模式,XML 和 Scene Builder
设计 UI,设计出的 UI 颜值还高。这样一看还是比较熟悉的嘛,好像和 Android 的套路差不多。
当然还是要用Kotlin
。不过在写Main
函数的时候就遇到问题了,简直气炸(
三次尝试
一
首先,在 Java 里的代码应该是这样的:
|
|
没有任何问题。
那么在 Kotlin 中,我首先想到的是 Top level
的 Main 函数:
|
|