mirror of
https://github.com/LCTT/TranslateProject.git
synced 2026-08-23 04:03:29 +08:00
Compare commits
819 Commits
0.4
...
wxy-patch-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ce7ec556a | ||
|
|
0d80a48d23 | ||
|
|
949e20f629 | ||
|
|
c4fa2ed158 | ||
|
|
7ea075a2b0 | ||
|
|
5d3ae6632e | ||
|
|
c1dc99d028 | ||
|
|
0d045808b4 | ||
|
|
faf417487c | ||
|
|
717659e026 | ||
|
|
bda691214d | ||
|
|
d431d68bde | ||
|
|
7e93af490a | ||
|
|
bfc3de1eef | ||
|
|
64ae6c9984 | ||
|
|
2669003b71 | ||
|
|
ad7221642b | ||
|
|
d7b697740c | ||
|
|
aad6ae4e7e | ||
|
|
6674e6f8b7 | ||
|
|
fa5cb4ca42 | ||
|
|
f39123d6e5 | ||
|
|
701bc8b885 | ||
|
|
22e4761338 | ||
|
|
7c07cf6418 | ||
|
|
8b4ee8a29c | ||
|
|
3d83918007 | ||
|
|
c9de886b73 | ||
|
|
82337ce73c | ||
|
|
f1fa489c0f | ||
|
|
80ba007027 | ||
|
|
02b3d48695 | ||
|
|
94654611cf | ||
|
|
7378e434bd | ||
|
|
0b678a33f9 | ||
|
|
eb79d17cd5 | ||
|
|
9f9141f40f | ||
|
|
598be2f137 | ||
|
|
61215256e2 | ||
|
|
bfacb17c1b | ||
|
|
9537ae138b | ||
|
|
a7d81eb771 | ||
|
|
aac3973d3f | ||
|
|
2194fddc14 | ||
|
|
cf868bf532 | ||
|
|
66357a205a | ||
|
|
a67c10d8cb | ||
|
|
66e8fd1488 | ||
|
|
d50b1719c1 | ||
|
|
2eff6f87ca | ||
|
|
132b51d1bd | ||
|
|
50bc1146c1 | ||
|
|
6ef8f741a0 | ||
|
|
9d92d79804 | ||
|
|
ea184e4d37 | ||
|
|
7e83061915 | ||
|
|
c63ebfc9b1 | ||
|
|
66f73cecd9 | ||
|
|
4b1cf00de4 | ||
|
|
501b523b60 | ||
|
|
e485589413 | ||
|
|
7a22458511 | ||
|
|
b0c3e086c2 | ||
|
|
c9a2515cb8 | ||
|
|
3b406b77bc | ||
|
|
98d5ce18c1 | ||
|
|
2a27c97ef2 | ||
|
|
3d4552dda2 | ||
|
|
d60c46e5a9 | ||
|
|
a354007151 | ||
|
|
2cf23b3895 | ||
|
|
29a483e3b2 | ||
|
|
da35fe0060 | ||
|
|
81472f4f0d | ||
|
|
9922bb0490 | ||
|
|
3e38d5e88e | ||
|
|
02f59037e9 | ||
|
|
d143f7ce65 | ||
|
|
015ac8c6c6 | ||
|
|
2b2288bd92 | ||
|
|
f96565399f | ||
|
|
b58e79959f | ||
|
|
4f1f6b2f65 | ||
|
|
3ab4fc9d69 | ||
|
|
957017bd7f | ||
|
|
9c1b115a50 | ||
|
|
3456817a0f | ||
|
|
0d414d919b | ||
|
|
590a843d25 | ||
|
|
7f054a729e | ||
|
|
1f78d120e9 | ||
|
|
b2a94dca34 | ||
|
|
2440431cf6 | ||
|
|
eb49a038c5 | ||
|
|
3e36653ec7 | ||
|
|
40932e89df | ||
|
|
97ea240dc4 | ||
|
|
62e03c65cf | ||
|
|
cf991ff545 | ||
|
|
087f0915ac | ||
|
|
d0e7340a0c | ||
|
|
a64d35e063 | ||
|
|
bbf16157b0 | ||
|
|
1376841474 | ||
|
|
020fcce48f | ||
|
|
17cfbfb966 | ||
|
|
6add80f119 | ||
|
|
6411d64889 | ||
|
|
9e26d29ff1 | ||
|
|
c5241bbce2 | ||
|
|
46f72edb1b | ||
|
|
8d5d6b7c4a | ||
|
|
36a23f7904 | ||
|
|
2475a21e2d | ||
|
|
1cd7edeba5 | ||
|
|
bf542c8c03 | ||
|
|
322e01e6a5 | ||
|
|
39925bfd6b | ||
|
|
a7b688a45b | ||
|
|
e44501b307 | ||
|
|
5f8314869a | ||
|
|
325dfcd485 | ||
|
|
84a39cc674 | ||
|
|
f2adf8e48e | ||
|
|
b67653b893 | ||
|
|
241bb8d2c2 | ||
|
|
4d8d833f19 | ||
|
|
aa67f36fba | ||
|
|
8580dca008 | ||
|
|
b72be36dc5 | ||
|
|
93d5d2c753 | ||
|
|
f71cfff22c | ||
|
|
f8b1470802 | ||
|
|
b718892489 | ||
|
|
e49aa99f4c | ||
|
|
fb3f0a7dcc | ||
|
|
2e1b1b36fa | ||
|
|
e72e486302 | ||
|
|
fb8c206a55 | ||
|
|
c7c8d47230 | ||
|
|
569b8d5573 | ||
|
|
ae46179b83 | ||
|
|
2aa146c886 | ||
|
|
44fc082d57 | ||
|
|
e7a14a44e4 | ||
|
|
a2dcac1b2a | ||
|
|
d7a3266cb6 | ||
|
|
ad98336294 | ||
|
|
cb89bc9d87 | ||
|
|
3cf3e1f331 | ||
|
|
76252b700a | ||
|
|
950f187111 | ||
|
|
28e11e0659 | ||
|
|
3ac22aa787 | ||
|
|
3e09a4a93a | ||
|
|
c3ac61c361 | ||
|
|
5294dc405e | ||
|
|
c7cbc234d9 | ||
|
|
0816d91981 | ||
|
|
aaa360f4ac | ||
|
|
0f3890f211 | ||
|
|
41d61616fa | ||
|
|
8d54c29b63 | ||
|
|
cf41fa4d35 | ||
|
|
62bf0d40f2 | ||
|
|
d50aeb91c9 | ||
|
|
472274e405 | ||
|
|
067bdeed04 | ||
|
|
94bf184087 | ||
|
|
bf03e4fea8 | ||
|
|
56a3aa51cf | ||
|
|
6573faff92 | ||
|
|
7454865ed6 | ||
|
|
a88398c298 | ||
|
|
101c91f5f1 | ||
|
|
3983a7327a | ||
|
|
12cf7d1aa8 | ||
|
|
593017cb7b | ||
|
|
50ceffd9a3 | ||
|
|
18b4da4f9e | ||
|
|
134883bd2b | ||
|
|
d572b596d3 | ||
|
|
5f92dd7400 | ||
|
|
3291e46978 | ||
|
|
2fe2cb79c5 | ||
|
|
5008fd7c64 | ||
|
|
e057623394 | ||
|
|
64c39ce9bf | ||
|
|
1fdb5d4df7 | ||
|
|
2dc8d8561d | ||
|
|
ff36759e68 | ||
|
|
847bd2d606 | ||
|
|
13a9387e81 | ||
|
|
1c8eaa640f | ||
|
|
7e3e56fd31 | ||
|
|
c746d6d366 | ||
|
|
98587fefbe | ||
|
|
f2fd3d3a82 | ||
|
|
42de141c7b | ||
|
|
26414a090d | ||
|
|
8a73e00089 | ||
|
|
8a4ee82ac1 | ||
|
|
8077dd9030 | ||
|
|
2354f20b85 | ||
|
|
ee3bea1334 | ||
|
|
33c7b9aebf | ||
|
|
74fefe8035 | ||
|
|
32ece7c926 | ||
|
|
238820f9f0 | ||
|
|
014add58ea | ||
|
|
374413cbd1 | ||
|
|
9e0df19c7b | ||
|
|
19fbc62fe4 | ||
|
|
313715ad9c | ||
|
|
0927322f79 | ||
|
|
9ee40e8114 | ||
|
|
4866d829c4 | ||
|
|
e9bce04f15 | ||
|
|
300346e63a | ||
|
|
902e9bc2e2 | ||
|
|
776fc39bff | ||
|
|
5273fea366 | ||
|
|
71719a0c1d | ||
|
|
d97edd8fb1 | ||
|
|
8ef742dcc0 | ||
|
|
a2b00bd4c5 | ||
|
|
6ee31fcdd1 | ||
|
|
0b7aed1daf | ||
|
|
8c32125ad7 | ||
|
|
f867eb5350 | ||
|
|
1193965cd6 | ||
|
|
ccd9bf6292 | ||
|
|
f5b083689f | ||
|
|
8e16d61383 | ||
|
|
a8f90f0fe3 | ||
|
|
7c4ff9b20b | ||
|
|
eea392972a | ||
|
|
bd09b3e882 | ||
|
|
478dfa16da | ||
|
|
7b6c000ca9 | ||
|
|
29a74210eb | ||
|
|
433cc88ad4 | ||
|
|
892123785c | ||
|
|
a7cfd00f81 | ||
|
|
fc1286d4bf | ||
|
|
d0bbabb484 | ||
|
|
377340f00d | ||
|
|
fc9fcc77a3 | ||
|
|
cf295aedf8 | ||
|
|
40bc89b564 | ||
|
|
6c8a280c05 | ||
|
|
846b8bced1 | ||
|
|
0be7934f18 | ||
|
|
173e6a9414 | ||
|
|
be602e5645 | ||
|
|
fe7da7e07a | ||
|
|
55807a0f63 | ||
|
|
82fddff5df | ||
|
|
9a50733542 | ||
|
|
ed116012ec | ||
|
|
96de878460 | ||
|
|
424e64896c | ||
|
|
4b423da797 | ||
|
|
a65ba1caf4 | ||
|
|
c78fdc5819 | ||
|
|
5d317857c0 | ||
|
|
3667e60c5d | ||
|
|
f4614a3485 | ||
|
|
8a5845a23d | ||
|
|
b90c91252d | ||
|
|
e29ae2bd60 | ||
|
|
96ad4143e2 | ||
|
|
ed9d27fcbf | ||
|
|
7004008a93 | ||
|
|
6df1cf8eb9 | ||
|
|
610f169c15 | ||
|
|
27fa9b259e | ||
|
|
64f19564cf | ||
|
|
a95744dd0f | ||
|
|
14cf1f860b | ||
|
|
c56647c783 | ||
|
|
f74002c9e9 | ||
|
|
8ba91ef04a | ||
|
|
b1784de3ce | ||
|
|
c54e256c27 | ||
|
|
b9a7a0228a | ||
|
|
f5fc9e9a36 | ||
|
|
2dfd39cbf0 | ||
|
|
ba7ad69c59 | ||
|
|
e81daaf44e | ||
|
|
92e09c5d09 | ||
|
|
3f00ef999b | ||
|
|
358f4c38db | ||
|
|
ffa64fbc72 | ||
|
|
b1e86baa3b | ||
|
|
4770a0ac4e | ||
|
|
6f7f750894 | ||
|
|
2cd3c72960 | ||
|
|
06e9b05cc1 | ||
|
|
c1ac45ae09 | ||
|
|
e9947bdef5 | ||
|
|
97375a674e | ||
|
|
b79faec126 | ||
|
|
06a7c13a8f | ||
|
|
342b7f80af | ||
|
|
a364195fb5 | ||
|
|
dd8421e5a1 | ||
|
|
38b0b9f258 | ||
|
|
c004212366 | ||
|
|
d475f3f367 | ||
|
|
3cf57a5c2d | ||
|
|
3a703dd244 | ||
|
|
6ce989f966 | ||
|
|
9645ff79b7 | ||
|
|
66bd8f5796 | ||
|
|
298d55a48f | ||
|
|
7df910cbf0 | ||
|
|
43def82c97 | ||
|
|
4b2e780c4d | ||
|
|
c281fc3d25 | ||
|
|
6c5056653c | ||
|
|
1f7ca30707 | ||
|
|
ad1c14bb30 | ||
|
|
023dce4071 | ||
|
|
eeb910431e | ||
|
|
d8cfd4580d | ||
|
|
37c52f306a | ||
|
|
46614cea36 | ||
|
|
3710204f8b | ||
|
|
8634942371 | ||
|
|
ddb0f0375e | ||
|
|
fa1b58f8f2 | ||
|
|
27ffe7c049 | ||
|
|
e9f40ed258 | ||
|
|
a34b86f7e0 | ||
|
|
eab965edd4 | ||
|
|
3774e2ba02 | ||
|
|
c85e3c83e6 | ||
|
|
b94961a8fe | ||
|
|
d97e583365 | ||
|
|
d076eb059a | ||
|
|
75722dbf0e | ||
|
|
81a0da1730 | ||
|
|
847140d9a8 | ||
|
|
38cc102163 | ||
|
|
9375f0da66 | ||
|
|
fb666e768e | ||
|
|
7f41b1fc28 | ||
|
|
dbd0177f64 | ||
|
|
c25360ef46 | ||
|
|
f553979743 | ||
|
|
5131525599 | ||
|
|
fb0863512c | ||
|
|
e6b927efda | ||
|
|
c0c9a589cb | ||
|
|
a867307f7e | ||
|
|
5554edf645 | ||
|
|
a899e62b39 | ||
|
|
9e7f8d766c | ||
|
|
8c5a0c26c9 | ||
|
|
4f3e576585 | ||
|
|
0ad393c9a1 | ||
|
|
43531a2a50 | ||
|
|
db8445e5bc | ||
|
|
b1df73cd7d | ||
|
|
ca8d0e2ae1 | ||
|
|
ed01aaa429 | ||
|
|
15e2fe17fd | ||
|
|
ee4e348723 | ||
|
|
d03e7ebc16 | ||
|
|
b4c5fec26b | ||
|
|
1c162f1025 | ||
|
|
08bf740f2a | ||
|
|
a8e18a9e61 | ||
|
|
22e90feefb | ||
|
|
f0f54e43a4 | ||
|
|
bf8c252f39 | ||
|
|
c37066c1b0 | ||
|
|
e5cab3bbb2 | ||
|
|
e80faded31 | ||
|
|
4b7d1c2ca4 | ||
|
|
ef1dd125e1 | ||
|
|
ac7ca57b8b | ||
|
|
6826720e18 | ||
|
|
8e7040078f | ||
|
|
1c983200be | ||
|
|
1acd7a0531 | ||
|
|
a53b606c3e | ||
|
|
cd387f89ea | ||
|
|
d9b41e73fa | ||
|
|
4910eafd1b | ||
|
|
f9209437e2 | ||
|
|
49e690f815 | ||
|
|
25c1a80dce | ||
|
|
5b96b46077 | ||
|
|
d86bab8e45 | ||
|
|
2c2ff615cc | ||
|
|
16352de495 | ||
|
|
73c2f0d1f4 | ||
|
|
6120e16423 | ||
|
|
42e56388a6 | ||
|
|
6ad3c144ca | ||
|
|
e696c19fc0 | ||
|
|
3281cccea3 | ||
|
|
3ac865c6fd | ||
|
|
7eaf1c389a | ||
|
|
40b4725761 | ||
|
|
ab8f5bca0c | ||
|
|
042e9b3d92 | ||
|
|
82c358022e | ||
|
|
b55aa4ba3b | ||
|
|
5c914c4967 | ||
|
|
f4a6533e41 | ||
|
|
5ffae2bad6 | ||
|
|
5ee48632e1 | ||
|
|
a9e7f5d045 | ||
|
|
db69076de1 | ||
|
|
aeb47cdc6c | ||
|
|
14ebc49d27 | ||
|
|
80e0077a4c | ||
|
|
7a4e81b6f5 | ||
|
|
eb4fd1df4f | ||
|
|
e62642584c | ||
|
|
3c1cb1a62d | ||
|
|
243c188e81 | ||
|
|
8086b512d0 | ||
|
|
6a1e330c80 | ||
|
|
e054abeb84 | ||
|
|
e84af44237 | ||
|
|
c3803dc333 | ||
|
|
9ef5ff8f59 | ||
|
|
7cf72a1464 | ||
|
|
4f761dd4cb | ||
|
|
0b2a360966 | ||
|
|
c31ec4d86f | ||
|
|
4fcec9e99e | ||
|
|
44e0fd59d5 | ||
|
|
3fb7dec60a | ||
|
|
36f4b87727 | ||
|
|
add3afe96c | ||
|
|
3c4d19f061 | ||
|
|
afb3f6cb93 | ||
|
|
70ab0caf5d | ||
|
|
81f73aa2e2 | ||
|
|
4b8fe82a88 | ||
|
|
9d0085db58 | ||
|
|
2e24382859 | ||
|
|
74bfc233e7 | ||
|
|
4094a8a6e1 | ||
|
|
19eb26643c | ||
|
|
e2ecd622f7 | ||
|
|
54e21afadb | ||
|
|
a696ee773c | ||
|
|
ca60883c37 | ||
|
|
395125a091 | ||
|
|
b1b1d1a5bd | ||
|
|
aa1c21a601 | ||
|
|
5d4cef1ca9 | ||
|
|
3ea03f0d6d | ||
|
|
20f90e8160 | ||
|
|
bfaa712b86 | ||
|
|
d9d8597c29 | ||
|
|
2953e7e30f | ||
|
|
c8fc5b8faa | ||
|
|
8e1d0a9870 | ||
|
|
61f09c4da7 | ||
|
|
5a9ce5b798 | ||
|
|
4d9e08f327 | ||
|
|
655415996f | ||
|
|
e059786e65 | ||
|
|
d01c87adbd | ||
|
|
078b941a61 | ||
|
|
2337fd25a6 | ||
|
|
aa94752a72 | ||
|
|
9b259dc5e9 | ||
|
|
7b987ff0db | ||
|
|
f071744366 | ||
|
|
8d499b9d69 | ||
|
|
cc9a72723f | ||
|
|
f1d7125e51 | ||
|
|
f3a61e1ec6 | ||
|
|
621f04206a | ||
|
|
42be98c214 | ||
|
|
10cef806bb | ||
|
|
e67efd78ea | ||
|
|
3914355df2 | ||
|
|
d15697b528 | ||
|
|
9c1b7b849c | ||
|
|
7dfcc28bee | ||
|
|
05fe55203b | ||
|
|
00b7caa3ba | ||
|
|
44df872d14 | ||
|
|
3b833cf911 | ||
|
|
7f2d864da6 | ||
|
|
c46d8fe237 | ||
|
|
89515678b1 | ||
|
|
f105a53de2 | ||
|
|
04a53d6909 | ||
|
|
f9622218fc | ||
|
|
4b0e0c31ff | ||
|
|
09b2110b8c | ||
|
|
553d2daa6f | ||
|
|
1945aadfa1 | ||
|
|
be50f2fc04 | ||
|
|
57be4061c9 | ||
|
|
1b283980a7 | ||
|
|
2d4ed3577c | ||
|
|
760d563e57 | ||
|
|
bae4dbd996 | ||
|
|
1f097836c4 | ||
|
|
39df952da1 | ||
|
|
d9b97178c9 | ||
|
|
0bb5e73eff | ||
|
|
46d78eb2e3 | ||
|
|
3f6cae0d01 | ||
|
|
6e9a966202 | ||
|
|
20a3cd7613 | ||
|
|
6660fc80d0 | ||
|
|
03ca023594 | ||
|
|
0ae116ad4c | ||
|
|
c3a13fd7e6 | ||
|
|
aac4263ee2 | ||
|
|
f11e6a632d | ||
|
|
2dfe09c189 | ||
|
|
69e4374efb | ||
|
|
6e9c005482 | ||
|
|
980d16e9f1 | ||
|
|
1d1e17f123 | ||
|
|
b2ba9af794 | ||
|
|
4be4118c21 | ||
|
|
5df4babaf5 | ||
|
|
9aa8b8ed35 | ||
|
|
e0b539daf5 | ||
|
|
e33c0b680c | ||
|
|
42cd50bc05 | ||
|
|
5c035ca46d | ||
|
|
221ca99333 | ||
|
|
6faa614db4 | ||
|
|
cff92a3e69 | ||
|
|
7b9d1ba1a6 | ||
|
|
a31c48dd8a | ||
|
|
7675f8b53e | ||
|
|
d63e731979 | ||
|
|
e346ac7850 | ||
|
|
186dd4e262 | ||
|
|
a5e22a259d | ||
|
|
848a369275 | ||
|
|
23a5b04cac | ||
|
|
84c7397a6e | ||
|
|
7d29b5de43 | ||
|
|
052dd58918 | ||
|
|
241f50fa68 | ||
|
|
072039589f | ||
|
|
cf027144eb | ||
|
|
f4c92f94a9 | ||
|
|
380181ef44 | ||
|
|
1032258fc4 | ||
|
|
0818d3d392 | ||
|
|
6e75296b2c | ||
|
|
a5010a463d | ||
|
|
828ca22cb2 | ||
|
|
d1f6edfa40 | ||
|
|
fa5f595437 | ||
|
|
70d2ce50a3 | ||
|
|
c7d56a732f | ||
|
|
12c12a78ec | ||
|
|
7fb7069b57 | ||
|
|
60368129ea | ||
|
|
dab07be9eb | ||
|
|
9545ba8abd | ||
|
|
626ddd65f0 | ||
|
|
82bea3aa27 | ||
|
|
4ab998fe36 | ||
|
|
56e1f4fb4f | ||
|
|
a22242fd69 | ||
|
|
418338d81d | ||
|
|
6d6154bbea | ||
|
|
219f150d69 | ||
|
|
f6b573adc4 | ||
|
|
14bf6f8018 | ||
|
|
05911c86af | ||
|
|
c8b4805b09 | ||
|
|
6cc857cb17 | ||
|
|
50f90b19a7 | ||
|
|
10d2144804 | ||
|
|
5745d45641 | ||
|
|
a18a37cc2b | ||
|
|
1f884131d8 | ||
|
|
fd2cda7c71 | ||
|
|
fc2642cf55 | ||
|
|
44f20b805d | ||
|
|
e735d6e205 | ||
|
|
be06bbd574 | ||
|
|
89ae92d975 | ||
|
|
ce5dbfa63c | ||
|
|
7c8bd0668d | ||
|
|
64b02b2a7b | ||
|
|
f90aba0261 | ||
|
|
0f2ffab412 | ||
|
|
db26e66265 | ||
|
|
33871f40e7 | ||
|
|
ab73f959a7 | ||
|
|
4f0fb289b2 | ||
|
|
45cb594531 | ||
|
|
4c3ba25c80 | ||
|
|
0f5579fe6c | ||
|
|
1ff53b1ca1 | ||
|
|
d586066aaa | ||
|
|
97f4892e40 | ||
|
|
89ca914b9b | ||
|
|
19068e214d | ||
|
|
46ba4e3376 | ||
|
|
49bfc1b3b2 | ||
|
|
1cd7bd407c | ||
|
|
5e4b59d641 | ||
|
|
ba811d993f | ||
|
|
bad07c1c0c | ||
|
|
7de5406c03 | ||
|
|
71b382e54d | ||
|
|
28bf7ddfd3 | ||
|
|
dccb1de0ab | ||
|
|
1867376390 | ||
|
|
59499173aa | ||
|
|
1f882c7ee8 | ||
|
|
03ae5da3ec | ||
|
|
10b4176046 | ||
|
|
35fb79eec3 | ||
|
|
b85c882dc1 | ||
|
|
24702ff3e7 | ||
|
|
406bde8175 | ||
|
|
6d43788771 | ||
|
|
061e24b78b | ||
|
|
03e6f37f37 | ||
|
|
a1eaa25d50 | ||
|
|
c47ada7b0c | ||
|
|
f8901702b9 | ||
|
|
3b05274dd7 | ||
|
|
1c98e99bc6 | ||
|
|
a54a905b5c | ||
|
|
77a0b275cf | ||
|
|
ab5825cc24 | ||
|
|
2154d5fd2b | ||
|
|
a8c9332482 | ||
|
|
535e4089f3 | ||
|
|
e248d871ed | ||
|
|
579815e175 | ||
|
|
f6fecd6aa2 | ||
|
|
a1851dd6d4 | ||
|
|
a1eaff2195 | ||
|
|
3e1b993564 | ||
|
|
aa3436aea2 | ||
|
|
d7a8ba06a9 | ||
|
|
f886332647 | ||
|
|
94bb093869 | ||
|
|
3f9cf54117 | ||
|
|
ec58eced41 | ||
|
|
e4c3fa68a6 | ||
|
|
3864d1fa78 | ||
|
|
b01cd4a5c4 | ||
|
|
7912977e19 | ||
|
|
97408d137f | ||
|
|
b8380e2f85 | ||
|
|
e9ffffe01a | ||
|
|
99f697e529 | ||
|
|
6659e4f1d9 | ||
|
|
ece447ff8e | ||
|
|
efa427ba74 | ||
|
|
869db0cb43 | ||
|
|
bebc4b026b | ||
|
|
215f3311a6 | ||
|
|
3a13260fcb | ||
|
|
b936bb6afc | ||
|
|
505b6ace24 | ||
|
|
221f5d99ff | ||
|
|
d8bc54efa2 | ||
|
|
46d26bd921 | ||
|
|
615c7ec637 | ||
|
|
89d87e1315 | ||
|
|
eb8a1f91e7 | ||
|
|
1531784f8a | ||
|
|
ffb4d53062 | ||
|
|
f04a0fb733 | ||
|
|
d2c0b9b009 | ||
|
|
fa77f29b65 | ||
|
|
32fccf8f04 | ||
|
|
b3c5edf0e5 | ||
|
|
30a8ee821d | ||
|
|
0c293b8df3 | ||
|
|
4f18d1f4f9 | ||
|
|
c1c740b568 | ||
|
|
6604d5aea4 | ||
|
|
c1a36dea4e | ||
|
|
cad2c3493e | ||
|
|
e1a35373ad | ||
|
|
afb5e3646f | ||
|
|
33f021f66d | ||
|
|
39d50bd6a0 | ||
|
|
71a5492429 | ||
|
|
5a21d7c8d1 | ||
|
|
a396c990eb | ||
|
|
0ece7b4602 | ||
|
|
7a55030a2c | ||
|
|
bbd9ad7820 | ||
|
|
7b74fa7cf8 | ||
|
|
46f071981b | ||
|
|
06512bd653 | ||
|
|
2f13db9861 | ||
|
|
744bc2d91a | ||
|
|
b3f9cb99cb | ||
|
|
391a60dc5b | ||
|
|
609281f8f2 | ||
|
|
0546c27f2e | ||
|
|
7db2e321ca | ||
|
|
6133cbd1ea | ||
|
|
0aa2e694cb | ||
|
|
19705ff8c9 | ||
|
|
ecf6f425d5 | ||
|
|
f53c5f6408 | ||
|
|
46c5184753 | ||
|
|
eccbc88159 | ||
|
|
3e98e17fdc | ||
|
|
52c8050028 | ||
|
|
f68f610020 | ||
|
|
e16f771b74 | ||
|
|
8261036e9f | ||
|
|
42b6ada045 | ||
|
|
a7f22c74b1 | ||
|
|
53206982c8 | ||
|
|
79eef9cc80 | ||
|
|
7a9dbb7495 | ||
|
|
74f9b22b97 | ||
|
|
2ac2e04b19 | ||
|
|
87762349fe | ||
|
|
ed46ad7f75 | ||
|
|
4e0809466e | ||
|
|
dd87a793f9 | ||
|
|
5e84ef7600 | ||
|
|
5cc2670055 | ||
|
|
b98804b811 | ||
|
|
2ff41832f2 | ||
|
|
2e6da405d5 | ||
|
|
27805e4088 | ||
|
|
c45c1f0a53 | ||
|
|
a896818860 | ||
|
|
2b0cc678fe | ||
|
|
b686b03143 | ||
|
|
c118d050fd | ||
|
|
4f49b8fc34 | ||
|
|
333424b4c1 | ||
|
|
cff099ae26 | ||
|
|
6b1a55c0f2 | ||
|
|
43be1f629b | ||
|
|
de0e87d0f0 | ||
|
|
9dd39cf20d | ||
|
|
26233b3200 | ||
|
|
7375e09037 | ||
|
|
d9d5336df6 | ||
|
|
859dfa282d | ||
|
|
1db13a32fb | ||
|
|
504566c6c4 | ||
|
|
9f504d341b | ||
|
|
8a30660803 | ||
|
|
34a2f4a225 | ||
|
|
6b4b423f63 | ||
|
|
4610bde841 | ||
|
|
4b33e44ec4 | ||
|
|
9503c8dc1e | ||
|
|
d74996a2af | ||
|
|
bb97316b84 | ||
|
|
4e5c396487 | ||
|
|
1f85d4be28 | ||
|
|
43f75277ff | ||
|
|
43a5990088 | ||
|
|
f6b4eff5ae | ||
|
|
0b2d955dab | ||
|
|
1a720b1212 | ||
|
|
6677f333b7 | ||
|
|
d8b03aca7b | ||
|
|
d5ea13afde | ||
|
|
3805242a7d | ||
|
|
5af3595603 | ||
|
|
0027a43a90 | ||
|
|
d02f6c9f6e | ||
|
|
1749b75cb3 | ||
|
|
9a03d1e09b | ||
|
|
588063039a | ||
|
|
629b629755 | ||
|
|
5cc69cd501 | ||
|
|
afcc388ad6 | ||
|
|
3ee352eed7 | ||
|
|
01815fc40e | ||
|
|
18dfea6c12 | ||
|
|
d65eec525e | ||
|
|
19afe0dcc9 | ||
|
|
a8a96efa93 | ||
|
|
366ea33fa1 | ||
|
|
d1ea9651a9 | ||
|
|
a7a3a04eaf | ||
|
|
9f28160d37 | ||
|
|
d195a6f2d0 | ||
|
|
f48f24db0e | ||
|
|
68788669a6 | ||
|
|
790a31eac0 | ||
|
|
6413de4c11 | ||
|
|
c2f1913457 | ||
|
|
7d27554ca3 | ||
|
|
6d810e522e | ||
|
|
3abb5ebbb3 | ||
|
|
24cc2938aa | ||
|
|
83eb46ccaf | ||
|
|
ff0c905a02 | ||
|
|
972255cd40 | ||
|
|
299cd77305 | ||
|
|
425f2362c3 | ||
|
|
919b703223 | ||
|
|
f87f2594af | ||
|
|
9f692f8069 | ||
|
|
6d3f43005c | ||
|
|
84a265ca4b |
84
LinuxChina-End.md
Normal file
84
LinuxChina-End.md
Normal file
@@ -0,0 +1,84 @@
|
||||
“Linux 中国” 开源社区,停止运营
|
||||
======
|
||||
|
||||
这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个决定确实艰难。
|
||||
|
||||
在写这篇告别信之前,我久久停笔不前。然而,要说的话,其实在我心里已经反复思考了好几遍。
|
||||
|
||||
**从即日起,“Linux 中国” 这个社区,包括它的主网( https://linux.cn/ )、公众号、视频号,以及下属的《硬核观察》栏目,将无限期停止更新和运营。**
|
||||
|
||||
停止运营的原因其实很平常,大抵包括以下几个方面:
|
||||
|
||||
### “Linux 中国” 已经完成了其历史使命
|
||||
|
||||
最初,我们的愿望是想把 “Linux 中国” 建设成一个传播开源技术的公益型社区。但是经过十几年的发展,目前开源文化和 Linux 相关的开源技术已经得到了广泛传播(在这期间,我们或许也做了一些小小的贡献)。因此,继续运营所能起到的作用并没有那么大了。
|
||||
|
||||
出于偶然原因,“Linux 中国” 其实并未按照我们的最初设想发展,这么多年下来,真正坚持下来的项目也就是一个翻译团队 LCTT,翻译了数千篇文章,引导数百人参与了开源贡献。然而,近年来,随着计算机翻译技术的进步,尤其是 ChatGPT 的出现,翻译工作的必要性大为降低。自去年以来,我一直使用 ChatGPT 来翻译一些文章,尽管还需要一至两次校对,但基本没什么大问题。所以,LCTT 的存在也显得不那么重要了。
|
||||
|
||||
事实上,LCTT 已经陷入了一种半死亡状态,数百名贡献者基本上都处于休眠了状态,甚至由于技术原因,连自动化选题工作都难以维持。唯一能持续翻译的,除了我,就是我们的首席译者 geekpi 了。从这个角度来看,这已经不再是一个社区化的翻译组织了。
|
||||
|
||||
### 最初的方向选择和理想主义无法避免的结果
|
||||
|
||||
2003 年,在创立 “Linux 中国” 之前,我还创立过另外一个叫做 “炎黄角马(CNGNU)” 的开源技术社区。但后来因为我创业失败,这个社区就关闭了。随后,我的弟弟王兴江利用我手中闲置的域名 **linux.cn** 建立了一个新的网站,我们给它起了一个狂妄的名字 “Linux 中国” —— 实际上,需要澄清的是,我们和 Linux 的官方机构没有任何关联,也不代表 Linux 官方。
|
||||
|
||||
建立这个网站(社区)的初衷是为了传播知识和文化,并没有考虑过未来的盈利模式,这也导致我们后来排斥将社区变成一个商业网站,去做一些培训、会议之类的商业活动。
|
||||
|
||||
但这带来了巨大的资金压力,尤其是在托管服务器价格高昂的那段时期。幸运的是,我们得到了七牛云在 CDN 方面的赞助、阿里云在 PR 方面的投放,让我们得以发展。当然,还有一些其它的广告主和朋友的赞助,稍后容我一一致谢。
|
||||
|
||||
2015 年,我离开了中国电信,成为了一名自由人,没有人再给我发工资了。这些年,“Linux 中国” 有一些收入,主要是为广告商撰写和发布的一些文章,但是收入不太稳定。而在众所周知的那三年里,收入状况甚至更惨淡。说实话,过去几年,我大致处于一种个人经济上的慢性失血状态。
|
||||
|
||||
所以,现在,当整体经济不佳时,压力更大。
|
||||
|
||||
### 个人疲惫和人生的交叉路口
|
||||
|
||||
近些年,“Linux 中国” 越来越像是一个 “个人” 网站,几乎所有的流程都需要我亲自来完成。“Linux 中国” 的公众号自从开设的第一天起,就没有任何一天停止过更新 —— 无论是年三十还是我的身体抱恙,无论是在出差路上还是带家人出游。这两年,我又开始了《硬核观察》栏目,这需要我每天花费数小时采编、录制和发布视频,如今也有了 1263 期,从未停歇。
|
||||
|
||||
累吗?累,但更累的是,没有尽头的累。
|
||||
|
||||
我今年正好五十岁了,对我来说,这个年龄是我需要重新定位人生的一个标志点。当我三十岁时,我颇有一种 “顿觉昨日非” 的感觉,从此改变了人生轨迹;当我四十岁时,经历了父亲去世、稍后几年弟弟及其他亲人陆续去世的打击;今年,我再次站在人生的交叉口,我想我应该有所改变了。
|
||||
|
||||
幸运的是,我一直非常担心的身体健康,目前还算还没有出现大问题。前段时间去做了好几年没敢做的体检,基本上没太大的问题。
|
||||
|
||||
### 没有别的选择了吗?
|
||||
|
||||
坦白说,我认真反复想过。
|
||||
|
||||
但是,我没有找到合适托付 “Linux 中国” 的人或机构。一个不盈利、持续亏损的社区,很难找到能保持其独立性和原则的托付人。
|
||||
|
||||
我也不愿意将 “Linux 中国” 所有的资产都卖给商业机构。有人曾经愿意出高价买我们的域名,但是,他们出的价远远买不起我为此出售良心和名誉的代价。
|
||||
|
||||
总的来说,就是因为这些大大小小的原因,我做出了艰难的决定,结束这些年的坚持。对不起了,大家。
|
||||
|
||||
### 对不起
|
||||
|
||||
做这个决定前,我最无法放下的不是我投入的那么多精力,而是那些始终坚定支持 “Linux 中国” 的朋友们。包括那 174 位在微信公众号上“几乎看过你所有的内容”的读者,也包括经常在 B 站上给《硬核观察》留言数百字、期期不落都观看和点评的观众,以及 “Linux 中国” 主网上那些熟悉的评论者的 ID 和定位,他们让我倍感感动和内疚。对不起,是我让你们失望了,辜负了大家的期待和支持。
|
||||
|
||||
### 感谢
|
||||
|
||||
除了道歉,我还需要感谢很多人。
|
||||
|
||||
首先,我要感谢参与过社区的许多人,包括 LCTT 的五百多位贡献者和社区的朋友们。特别要感谢 bestony、geekpi、oska874、lujun9976、vizv、lkxed 等主要贡献者。“Linux 中国” 开源社区,其实是你们的,是大家的,而不是我的。能与大家共同拥有这样一段美好回忆,是我的荣幸。在此,我不能一一尽数所有贡献者,你可以在 https://linux.cn/lctt-list 看到 LCTT 全部贡献者的名单和贡献量。
|
||||
|
||||
其次,要感谢在 “Linux 中国” 成长过程中帮助过我们的许多公司。这包括七牛云、阿里云、UCloud、腾讯云、EasyStack、华为、字节跳动、青云、马哥教育、刘遄老师等等,以及我一时无法全部记起的朋友们。他们都是我们这些年得以一路走来的助力。
|
||||
|
||||
最后,我要感谢那些我可能完全不知道名字的支持过 “Linux 中国” 的人,就像我说的,“你的每次点击和分享都是对我们的支持” 的读者,以及那些在社区活动中总能认出来我的人。
|
||||
|
||||
### 接下来
|
||||
|
||||
这篇告别信发出后,除非有特殊情况,我将停止在 “Linux 中国” 的主网、公众号、视频号、B 站等所有渠道的内容发布。
|
||||
|
||||
我会在春节期间将 “Linux 中国” 所有发布的文章都打包成一份电子书,供大家收藏留用,所以大家不必自己用网络爬虫来抓取了。当然,我们的主网和公众号都会保持相当长的时间的访问,只是我可能不再更新了。
|
||||
|
||||
### 至于我个人呢?
|
||||
|
||||
我今年计划躺平几个月,然后准备一个人出门走走,或许是自驾,或许是摩旅,去寻找一下人生的意义。我可能会在我的视频号 “**硬核老王**” 中发布我的行程,也可能会停留在某个地方,可能会经过你的城市,也许我们可以把~~酒~~(水)言欢。
|
||||
|
||||
江湖再见,诸位。
|
||||
|
||||
*(题图:DA/c42007de-fab5-48c9-9976-3c4ca97bcf6e)*
|
||||
|
||||
---
|
||||
|
||||
“Linux 中国”创始人 硬核老王
|
||||
|
||||
2024/2/1
|
||||
22
README.md
22
README.md
@@ -20,21 +20,7 @@ LCTT 已经拥有几百名活跃成员,并欢迎更多的 Linux 志愿者加
|
||||
- LCTT 官网: [https://linux.cn/lctt/](https://linux.cn/lctt/)
|
||||
- LCTT 状态: [https://lctt.github.io/](https://lctt.github.io/)
|
||||
|
||||
加入我们
|
||||
-------------------------------
|
||||
|
||||
请首先加入翻译组的 QQ 群,群号是:**198889102**,加群时请说明是“*志愿者*”。
|
||||
|
||||
加入的成员,请:
|
||||
|
||||
1. 修改你的 QQ 群名片为“译者-您的_GitHub_ID”。
|
||||
2. 阅读 [WIKI](https://lctt.github.io/wiki) 了解如何开始。
|
||||
3. 遇到不解之处,请在群内发问。
|
||||
|
||||
如何开始
|
||||
-------------------------------
|
||||
|
||||
请阅读 [WIKI](https://lctt.github.io/wiki)。如需要协助,请在群内发问。
|
||||
**LCTT 已经伴随 Linux 中国开源社区 [停止运营](LinuxChina-End.md) 而停止运作。**
|
||||
|
||||
历史
|
||||
-------------------------------
|
||||
@@ -76,7 +62,11 @@ LCTT 已经拥有几百名活跃成员,并欢迎更多的 Linux 志愿者加
|
||||
* 2018/09/10 [LCTT 五周年](https://linux.cn/article-9999-1.html)。
|
||||
* 2018/10/25 重构了 CI,感谢 vizv、lujun9972、bestony。
|
||||
* 2018/11/13 [成立了项目管理委员会(PMC)](https://linux.cn/article-10279-1.html),初始成员为:@wxy (主席)、@oska874、@lujun9972、@bestony、@pityonline、@geekpi、@qhwdw。
|
||||
|
||||
* 2020/09/10 Linux 中国旗下贡献者组织 [LCTT 七年回顾和展望](https://linux.cn/article-12600-1.html)
|
||||
* 2022/09/10 开源贡献者翻译组 [LCTT 九岁](https://linux.cn/article-15017-1.html) 啦
|
||||
* 2023/01/31 发布《[LCTT 术语词典](https://linux.cn/article-15496-1.html)》
|
||||
* 2023/09/10 [LCTT 10 年,迎来新蜕变](https://linux.cn/article-16178-1.html)
|
||||
* 2024/02/01 [Linux 中国及 LCTT 停止运营](https://linux.cn/article-16602-1.html)
|
||||
|
||||
项目管理委员及核心成员
|
||||
-------------------------------
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
[#]: subject: "An open source developer's guide to 12-Factor App methodology"
|
||||
[#]: via: "https://opensource.com/article/21/11/open-source-12-factor-app-methodology"
|
||||
[#]: author: "Richard Conn https://opensource.com/users/richardaconn-0"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "trisbestever"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16386-1.html"
|
||||
|
||||
12-Factor 应用方法论的开源开发者指南
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这 12 项基本原则能够帮助团队快速高效地构建高度可扩展的应用程序
|
||||
|
||||
[12-Factor 应用方法论][2] 为在短时间内构建应用程序并使其具有可扩展性提供了指导。它由 Heroku 的开发人员创建,用于软件即服务(SaaS)应用程序、网络应用程序以及可能的通信平台即服务(CPaaS)。在有效组织项目和管理可扩展应用程序方面,12 要素应用程序方法论对开源开发具有强大的优势。
|
||||
|
||||
### 12-Factor 应用方法论的原则
|
||||
|
||||
12-Factor 应用方法论的规则非常严格,也是开发和部署 SaaS 应用程序的基石,并且不受任何编程语言或数据库的限制。
|
||||
|
||||
#### 1:一份基准代码,多份部署
|
||||
|
||||
![一个说明图表:显示了一个由左边的绿线代表的代码库,引导到右边由绿色方块代表的四个部署。橙色方块代表暂存环境,而红色方块代表生产环境。][3]
|
||||
|
||||
每个应用程序都应该有一个具有多个不同环境/部署的代码库。
|
||||
|
||||
开发人员不应仅仅为了在不同环境中设置而开发另一个代码库。不同的环境代表不同的状态,但这些不同的环境应该共享同一个代码库。
|
||||
|
||||
在许多开源项目都存储在 GitLab 这样的版本控制系统中的情况下,一个环境可以被视为一个分支。例如,你可以在任何中央版本控制系统中为名为 VoIP-app 的云 VoIP 应用程序创建一个单独的存储库,然后创建两个分支:开发分支(`development`)和暂存分支(`staging`),并将主分支(`master`)作为发布分支。
|
||||
|
||||
#### 2:明确声明和隔离依赖关系
|
||||
|
||||
应声明所有依赖关系。你的应用程序可能会依赖外部系统工具或库,但不应对系统工具或库有任何 _隐含的_ 依赖。你的应用程序必须始终明确声明所有依赖关系及其正确版本。
|
||||
|
||||
在代码库中包含依赖关系可能会产生问题,特别是在开源项目中,外部库的更改可能会将错误引入代码库。例如,代码库可能会使用一个外部库,但没有明确声明该依赖关系或版本。如果外部库更新到更新的、未经测试的版本,这可能会与你的代码产生兼容性问题。如果明确声明了依赖关系及其正确版本,你的代码库就不会出现这种问题。
|
||||
|
||||
根据技术栈的不同,最好使用软件包管理器,通过读取代表依赖库名称和版本的依赖库声明清单,在各自的系统上下载依赖库。
|
||||
|
||||
#### 3:在环境中存储配置
|
||||
|
||||
当需要支持多个环境或客户端时,配置就成了应用程序的重要组成部分。不同部署之间的配置应存储在环境变量中。这样就可以在部署之间轻松更改配置,而无需更改代码。
|
||||
|
||||
对于闭源应用程序来说,这一原则是有益的,因为你不会希望数据库连接信息或其他秘密数据等敏感信息被公开。然而,在开放源代码开发中,这些细节都是公开的。在这种情况下,好处是你不需要反复修改代码。你只需这样设置变量,只需改变环境,就能让代码完美运行。
|
||||
|
||||
#### 4:把后端服务当作附加资源
|
||||
|
||||
所有后备服务(如数据库、外部存储或消息队列)都被视为附加资源,由执行环境附加或分离。根据这一原则,如果这些服务的位置或连接细节发生变化,仍无需更改代码。这些细节可以在配置中找到。
|
||||
|
||||
备份服务可以从部署中快速附加或分离。例如,如果基于云的电子表格的数据库无法正常工作,开发人员应该能够创建一个从最近备份恢复的新数据库服务器,而无需对代码库进行任何更改。
|
||||
|
||||
#### 5:严格分离构建和运行
|
||||
|
||||
12-Factor 应用方法论要求严格区分构建、发布和运行阶段。
|
||||
|
||||
* 第一阶段是 _构建_ 阶段。在这一阶段,源代码被组装或编译成可执行文件,同时加载依赖关系并创建资产。每次需要部署新代码时,构建阶段就会开始。
|
||||
* 第二阶段是 _发布_ 阶段。在此阶段,构建阶段生成的代码与部署的当前配置相结合。最终发布的版本包含构建和配置,可在执行环境中立即执行。
|
||||
* 第三个阶段是 _运行_ 阶段,也是最后阶段:应用程序在执行环境中运行。该阶段不应被其他任何阶段打断。
|
||||
|
||||
通过严格区分这些阶段,我们可以避免代码中断,使系统维护更加易于管理。
|
||||
|
||||
#### 6:以一个或多个无状态进程运行应用
|
||||
|
||||
应用程序作为一个或多个进程的集合在执行环境中执行。这些进程是无状态的,其持久化数据存储在数据库等后台服务中。
|
||||
|
||||
这对开源非常有用,因为使用某版本应用程序的开发人员可以在其云平台上创建多节点部署,以实现可扩展性。数据不会在其中持久化,因为如果其中任何一个节点崩溃,数据就会丢失。
|
||||
|
||||
#### 7:通过端口绑定提供服务
|
||||
|
||||
你的应用程序应作为独立的服务,独立于其他应用程序。它它应该能通过URL供其他服务访问,以服务形式存在。这样,你的应用程序就可以在需要时作为其他应用程序的资源。利用这一概念,你可以构建 [REST API][4]。
|
||||
|
||||
#### 8:通过进程模型进行扩展
|
||||
|
||||
该原则也称为并发原则,它表明应用程序中的每个进程都应能够自我扩展、重启或克隆。
|
||||
|
||||
开发人员可以创建多个进程,并将应用程序的负载分配给这些进程,而不是将一个进程变大。通过这种方法,你可以将每种工作负载分配给一个进程类型,从而构建能处理不同工作负载的应用程序。
|
||||
|
||||
#### 9:快速启动和优雅终止以增强健壮性
|
||||
|
||||
你的应用应当基于简单的进程构建,因此开发者可以放大进程的同时还能在发生问题时重启它们。这使得应用的进程易于丢弃。
|
||||
|
||||
根据这一原则构建应用程序意味着代码的快速部署、快速弹性扩展、更灵活的发布流程以及稳健的生产部署。所有这些在开源开发环境中都非常有用。
|
||||
|
||||
#### 10:尽可能的保持开发、预发布、生产环境相同
|
||||
|
||||
同一项目的团队应使用相同的操作系统、支持服务和依赖关系。这样可以降低出现错误的可能性,减少开发所需的时间。
|
||||
|
||||
由于开源项目的开发人员分散在各地,他们可能无法就所使用的系统、服务和依赖关系进行 [沟通][5] ,因此将这一原则付诸实践对于开源项目来说可能是一个挑战。减少这些差异的一种可能性是制定开发指南,建议使用何种操作系统、服务和依赖关系。
|
||||
|
||||
#### 11:把日志当作事件流
|
||||
|
||||
日志对于排除生产问题或了解用户行为至关重要。但是,12-Factor 应用方法论并不适合处理日志的管理。
|
||||
|
||||
相反,应将日志条目作为事件流,写入标准输出,并将其发送到单独的服务进行分析和存档。机器人流程自动化(RPA)技术可作为处理和分析日志的第三方服务。执行环境将决定如何处理该数据流。这为反省应用程序的行为提供了更大的灵活性和能力。
|
||||
|
||||
#### 12:后台管理任务当作一次性进程运行
|
||||
|
||||
这一原则实际上与开发无关,而是与应用程序管理有关。管理进程应在与应用程序常规长期运行进程相同的环境中运行。在本地部署中,开发人员可以直接使用应用程序签出目录内的 Shell 命令来执行一次性管理进程。
|
||||
|
||||
### 结论
|
||||
|
||||
使用 12-Factor 应用方法论开发应用程序,可以提高效率,加快发布速度。在开源开发中,偏离某些指导原则可能是有意义的,但最好还是尽可能严格遵守这些指导原则。
|
||||
|
||||
开源的 12-Factor 应用是可能的。一个很好的例子是 [Jitsi][6][, (一个开源视频会议平台)][7], 在疫情期间扩展了 100 倍的规模,取得了巨大成功,它就是采用 12-Factor 应用方法论构建的。
|
||||
|
||||
*(题图:MJ/4bc8b463-49d0-4702-8ad3-6a07a718d5d9)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/11/open-source-12-factor-app-methodology
|
||||
|
||||
作者:[Richard Conn][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[trisbestever](https://github.com/trisbestever)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/richardaconn-0
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/gears_devops_learn_troubleshooting_lightbulb_tips_520.png?itok=HcN38NOk (Tips and gears turning)
|
||||
[2]: https://www.redhat.com/architect/12-factor-app
|
||||
[3]: https://opensource.com/sites/default/files/uploads/codebase-deploy_1.png (Codebase)
|
||||
[4]: https://opensource.com/article/21/9/ansible-rest-apis
|
||||
[5]: https://opensource.com/article/21/10/global-communication-open-source
|
||||
[6]: https://jitsi.org/
|
||||
[7]: http://jitsi.org
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/16/124441qs8hltth7hurdzos.png
|
||||
@@ -0,0 +1,108 @@
|
||||
[#]: subject: "AI: Some History and a Lot More about Matrices"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/06/ai-some-history-and-a-lot-more-about-matrices/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16399-1.html"
|
||||
|
||||
人工智能教程(二):人工智能的历史以及再探矩阵
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
*在本系列的 [第一篇文章](https://linux.cn/article-16326-1.html) 中,我们讨论了人工智能、机器学习、深度学习、数据科学等领域的关联和区别。我们还就整个系列将使用的编程语言、工具等做出了一些艰难的选择。最后,我们还介绍了一点矩阵的知识。在本文中,我们将深入地讨论人工智能的核心——矩阵。不过在此之前,我们先来了解一下人工智能的历史。*
|
||||
|
||||
我们为什么需要了解人工智能的历史呢?历史上曾出现过多次人工智能热潮,但在很多情况下,对人工智能潜力的巨大期望都未能达成。了解人工智能的历史,有助于让我们看清这次人工智浪潮是会创造奇迹,抑或只是另一个即将破灭的泡沫。
|
||||
|
||||
我们对人工智能的最寻起源于何时呢?是在发明数字计算机之后吗?还是更早呢?我相信对一个无所不知的存在的追求可以追溯到文明之初。比如古希腊神话中的 <ruby>德尔菲<rt>Delphi</rt></ruby> 就是这样一位能回答任何问题的先知。从远古时代起,对于超越人类智慧的创造性机器的探索同样吸引着我们 。历史上有过几次制造国际象棋机器的失败的尝试。其中就有臭名昭著的<ruby>机械特克<rt>Mechanical Turk</rt></ruby>,它并不是真正的机器人,而是由一位藏在内部的棋手操控的。<ruby>约翰·纳皮尔<rt>John Napier</rt></ruby> 发明的对数、<ruby>布莱斯·帕斯卡<rt>Blaise Pascal</rt></ruby> 的计算器、<ruby>查尔斯·巴贝奇<rt>Charles Babbage</rt></ruby> 的差分机等,这些都是人工智能研究的前身。回顾人类历史,你会发现更多真实或虚构的时刻,人们想要获得超越人脑的智能。如果不考虑以上这些历史成就,对真正人工智能的探索起始于数字计算机的发明。
|
||||
|
||||
那么,人工智能发展至今有哪些里程碑呢?前面已经提到,数字计算机的发明是人工智能研究历程中最重要的事件。与可扩展性依赖于功率需求的机电设备不同,数字设备受益于技术进步,比如从真空管到晶体管到集成电路再到如今的超大规模集成技术。
|
||||
|
||||
人工智能发展的另一个里程碑是 <ruby>阿兰·图灵<rt>Alan Turing</rt></ruby> 首次对人工智能的理论分析。他提出的 <ruby>图灵测试<rt>Turing test</rt></ruby> 是最早的人工智能测试方法之一。现在图灵测试可能已经不太适用了,但它是定义人工智能的最初尝试之一。图灵测试可以简单描述如下:假设有一台能够与人类对话的机器,如果它能在对话中让人无法分辨它是人还是机器,那么就可以认为这台机器具有智能。如今的聊天机器人非常强大,使我们很容易看出图灵测试无法识别出真正的人工智能。但在 20 世纪 50 年代初,这确实为理解人工智能提供了一个理论框架。
|
||||
|
||||
20 世纪 50 年代末,<ruby>约翰·麦卡锡<rt>John McCarthy</rt></ruby> 发明了 Lisp 编程语言。它是最早的高级编程语言之一。在此之前,计算机编程用的是机器语言和汇编语言(众所周知地难用)。有了强大的机器和编程语言,计算机科学家中的乐观主义和梦想家顺理成章地开始用它们来创造人工智能。20 世纪 60 年代初,对人工智能机器的期望达到了顶峰。当然计算机科学领域取得了很大发展,但人工智能的奇迹发生了吗?很遗憾,并没有。20 世纪 60 年代见证了第一次人工智能热潮的兴起和破灭。然而计算机科学以无与伦比的速度继续发展着。
|
||||
|
||||
到了 70 年代和 80 年代,算法在这一时期发挥了主要作用。在这段时间,许多新的高效算法被提出。20 世纪 60 年代末<ruby>高德纳·克努特<rt>Donald Knuth</rt></ruby>(我强烈建议你了解一下他,在计算机科学界,他相当于数学界的高斯或欧拉)著名的《<ruby>计算机程序设计艺术<rt>The Art of Computer Programming</rt></ruby>》第一卷的出版标志着算法时代的开始。在这些年中,开发了许多通用算法和图算法。此外,基于人工神经网络的编程也在此时兴起。尽管早在 20 世纪 40 年代,<ruby>沃伦·S.·麦卡洛克<rt>Warren S. McCulloch</rt></ruby>和<ruby>沃尔特·皮茨<rt>Walter Pitts</rt></ruby> 就率先提出了人工神经网络,但直到几十年后它才成为主流技术。今天,深度学习几乎完全是基于人工神经网络的。算法领域的这种发展导致了 20 世纪 80 年代人工智能研究的复苏。然而,这一次,通信和算力的限制阻碍了人工智能的发展,使其未能达到人们野心勃勃的预期。然后是 90 年代、千禧年,直到今天。又一次,我们对人工智能的积极影响充满了热情和希望。
|
||||
|
||||
我你们可以看到,在数字时代,人工智能至少有两次前景光明的机会。但这两次人工智能都没有达到它的预期。现在的人工智能浪潮也与此类似吗?当然这个问题很难回答。但我个人认为,这一次人工智能将产生巨大的影响(LCTT 译注:本文发表于 2022 年 6 月,半年后,ChatGTP 才推出)。是什么让我做出这样的预测呢?第一,现在的高性能计算设备价格低廉且容易获得。在 20 世纪 60 年代或 80 年代,只有几台如此强大的计算设备,而现在我们有数百万甚至数十亿台这样的机器。第二,现在有大量数据可用来训练人工智能和机器学习程序。想象一下,90 年代从事数字图像处理的人工智能工程师,能有多少数字图像来训练算法呢?也许是几千或者几万张吧。现在单单数据科学平台 Kaggle(谷歌的子公司)就拥有超过 1 万个数据集。互联网上每天产生的大量数据使训练算法变得容易得多。第三,高速的互联网连接使得与大型机构协作变得更加容易。21 世纪的头 10 年,计算机科学家之间的合作还很困难。如今互联网的速度已经使谷歌 Colab、Kaggle、Project jupiter 等人工智能项目的协作成为现实。由于这三个因素,我相信这一次人工智能将永远存在,并会出现许多优秀的应用。
|
||||
|
||||
### 更多矩阵的知识
|
||||
|
||||
![图 1:矩阵 A、B、C、D][2]
|
||||
|
||||
在大致了解了人工智能的历史后,现在是时候回到矩阵与向量这一主题上了。在上一篇文章中,我已经对它们做了简要介绍。这一次,我们将更深入矩阵的世界。首先看图 1 和 图 2,其中显示了从 A 到 H 共 8 个矩阵。为什么人工智能和机器学习教程中需要这么多矩阵呢?首先,正如前一篇文章中提到的,矩阵是线性代数的核心,而线性代数即使不是机器学习的大脑,也是机器学习的核心。其次,在接下来的讨论中,它们每一个都有特定的用途。
|
||||
|
||||
![图 2:矩阵 E、F、G、H][3]
|
||||
|
||||
让我们看看矩阵是如何表示的,以及如何获取它们的详细信息。图 3 展示了怎么用 NumPy 表示矩阵 A。虽然矩阵和数组并不完全等价,但实践中我们经常将它们作为同义词来使用。
|
||||
|
||||
![图 3:用 NumPy 表示矩阵 A][4]
|
||||
|
||||
我强烈建议你仔细学习如何使用 NumPy 的 `array` 函数创建矩阵。虽然 NumPy 也提供了 `matrix` 函数来创建二维数组和矩阵。但是它将在未来被废弃,所以不再建议使用了。在图 3 还显示了矩阵 A 的一些详细信息。`A.size` 告诉我们数组中元素的个数。在我们的例子中,它是 9。代码 `A.nidm` 表示数组的 <ruby>维数<rt>dimension</rt></ruby>。很容易看出矩阵 A 是二维的。`A.shape` 表示矩阵 A 的<ruby>阶数<rt>order</rt></ruby>,矩阵的阶数是矩阵的行数和列数。虽然我不会进一步解释,但使用 NumPy 库时需要注意矩阵的大小、维度和阶数。图 4 显示了为什么应该仔细识别矩阵的大小、维数和阶数。定义数组时的微小差异可能导致其大小、维数和阶数的不同。因此,程序员在定义矩阵时应该格外注意这些细节。
|
||||
|
||||
![图 4:数组的大小、维数和阶数][5]
|
||||
|
||||
现在我们来做一些基本的矩阵运算。图 5 显示了如何将矩阵 A 和 B 相加。NumPy 提供了两种方法将矩阵相加,`add` 函数和 `+` 运算符。请注意,只有阶数相同的矩阵才能相加。例如,两个 4 × 3 矩阵可以相加,而一个 3 × 4 矩阵和一个 2 × 3 矩阵不能相加。然而,由于编程不同于数学,NumPy 在实际上并不遵循这一规则。图 5 还展示了将矩阵 A 和 D 相加。记住,这种矩阵加法在数学上是非法的。一种叫做 <ruby>广播<rt>broadcasting </rt></ruby> 的机制决定了不同阶数的矩阵应该如何相加。我们现在不会讨论广播的细节,但如果你熟悉 C 或 C++,可以暂时将其理解为变量的类型转换。因此,如果你想确保执行正真数学意义上的矩阵加法,需要保证以下测试为真:
|
||||
|
||||
![图 5:矩阵相加][6]
|
||||
|
||||
```
|
||||
A.shape == B.shape
|
||||
```
|
||||
|
||||
广播机制也不是万能的,如果你尝试把矩阵 D 和 H 相加,会产生一个运算错误。
|
||||
|
||||
当然除了矩阵加法外还有其它矩阵运算。图 6 展示了矩阵减法和矩阵乘法。它们同样有两种形式,矩阵减法可以由 `subtract` 函数或减法运算符 `-` 来实现,矩阵乘法可以由 `matmul` 函数或矩阵乘法运算符 `@` 来实现。图 6 还展示了 <ruby>逐元素乘法<rt>element-wise multiplication</rt></ruby> 运算符 `*` 的使用。请注意,只有 NumPy 的 `matmul` 函数和 `@` 运算符执行的是数学意义上的矩阵乘法。在处理矩阵时要小心使用 `*` 运算符。
|
||||
|
||||
![图 6:更多矩阵运算][7]
|
||||
|
||||
对于一个 m x n 阶和一个 p x q 阶的矩阵,当且仅当 n 等于 p 时它们才可以相乘,相乘的结果是一个 m x q 阶矩的阵。图 7 显示了更多矩阵相乘的示例。注意 `E@A` 是可行的,而 `A@E` 会导致错误。请仔细阅读对比 `D@G` 和 `G@D` 的示例。使用 `shape` 属性,确定这 8 个矩阵中哪些可以相乘。虽然根据严格的数学定义,矩阵是二维的,但我们将要处理更高维的数组。作为例子,下面的代码创建一个名为 T 的三维数组。
|
||||
|
||||
![图 7:更多矩阵乘法的例子][8]
|
||||
|
||||
```
|
||||
T = np.array([[[11,22], [33,44]], [[55,66], [77,88]]])
|
||||
```
|
||||
|
||||
### Pandas
|
||||
|
||||
到目前为止,我们都是通过键盘输入矩阵的。如果我们需要从文件或数据集中读取大型矩阵并处理,那该怎么办呢?这时我们就要用到另一个强大的 Python 库了——Pandas。我们以读取一个小的 CSV (<ruby>逗号分隔值<rt>comma-separated value</rt></ruby>)文件为例。图 8 展示了如何读取 `cricket.csv` 文件,并将其中的前三行打印到终端上。在本系列的后续文章中将会介绍 Pandas 的更多特性。
|
||||
|
||||
![图 8:用 Pandas 读取 CSV 文件][9]
|
||||
|
||||
### 矩阵的秩
|
||||
|
||||
矩阵的 <ruby>秩<rt>Rank</rt></ruby> 是由它的行(列)张成的向量空间的维数。如果你还记得大学线性代数的内容的话,你一定对维数、向量空间和张成还有印象,那么你也应该能理解矩阵的秩的含义了。但如果你不熟悉这些术语,那么可以简单地将矩阵的秩理解为矩阵中包含的信息量。当然,这又是一种未来方便理解而过度简化的说法。图 9 显示了如何用 NumPy 求矩阵的秩。矩阵 A 的秩为 3,因为它的任何一行都不能从其它行中得到。矩阵 B 的秩为 1,因为第二行和第三行可以由第一行分别乘以 2 和 3 得到。矩阵 C 只有一个非零行,因此秩为 1。同样的,其它矩阵的秩也不难理解。矩阵的秩与我们的主题关系密切,我们会在后续文章中再提到它。
|
||||
|
||||
![图 9:求矩阵的秩][10]
|
||||
|
||||
本次的内容就到此结束了。在下一篇文章中,我们将扩充工具库,以便它们可用于开发人工智能和机器学习程序。我们还将更详细地讨论 <ruby>神经网络<rt>neural network</rt></ruby>、<ruby>监督学习<rt>supervised learning</rt></ruby>、<ruby>无监督学习<rt>unsupervised learning</rt></ruby> 等术语。此外,从下一篇文章开始,我们将使用 JupyterLab 代替 Linux 终端。
|
||||
|
||||
*(题图:MJ/ce77d714-3651-44e4-96b0-ffbf7ae4269c)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/06/ai-some-history-and-a-lot-more-about-matrices/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/06/AI-Some-History-and-a-Lot-More-about-Matrices-1.jpg
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-1-Matrices-A-B-C-and-D.jpg
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-2-Matrices-E-F-G-and-H.jpg
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-3-Matrix-A-with-NumPy-350x167.jpg
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-4-Size-dimension-and-shape-of-an-array-350x292.jpg
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-5-Matrix-addition-350x314.jpg
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-6-More-matrix-operations-1-350x375.jpg
|
||||
[8]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-7-More-examples-of-matrix-multiplication-590x293.jpg
|
||||
[9]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-8-Reading-a-CSV-file-with-Pandas-350x123.jpg
|
||||
[10]: https://www.opensourceforu.com/wp-content/uploads/2022/06/Figure-9-Finding-the-rank-of-a-matrix-350x366.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/20/150356w8cvn62a82uvgc8a.png
|
||||
@@ -0,0 +1,225 @@
|
||||
[#]: subject: "Are You Familiar with These Popular Open Source Databases?"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/09/are-you-familiar-with-these-popular-open-source-databases/"
|
||||
[#]: author: "Jishnu Saurav Mittapalli https://www.opensourceforu.com/author/jishnu-saurav-mittapalli/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16374-1.html"
|
||||
|
||||
你应该知道的主流开源数据库
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 随着数据的飞速增长,数据的组织变得至关重要。本文将简要介绍当今软件开发中最流行的数据库。
|
||||
|
||||
在软件系统中,数据被格式化地组织和存储,通过数据库可以以电子方式访问它们。因为数据已经成为一种非常重要的资产,对我们来说,掌握当今使用的各种数据库的基本知识是非常重要的。
|
||||
|
||||
我们要看的第一个数据库是 MySQL。
|
||||
|
||||
### MySQL
|
||||
|
||||
[MySQL 官网](https://www.mysql.com/cn/)
|
||||
|
||||
MySQL 是使用最广泛的开源数据库管理系统之一。它由<ruby>甲骨文公司<rt>Oracle Corporation</rt></ruby>所有。它可以在大多数主流操作系统上运行,如 Windows、MacOS、Linux 等。MySQL 既适用于小型应用,同时也能胜任大型应用。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 适配各种操作系统
|
||||
* 适配多种编程语言,如 PHP、C、C++、Perl 等
|
||||
* 开源、免费
|
||||
* 它支持高达 8 百万 Tb 的巨大数据量
|
||||
* 可定制化
|
||||
* 比其他数据库快得多
|
||||
|
||||
要在基于 Ubuntu 的计算机上安装并使用 MySQL,使用下面的命令:
|
||||
|
||||
```
|
||||
$sudo apt update
|
||||
$sudo apt install mysql-server
|
||||
$sudo systemctl start mysql.service
|
||||
```
|
||||
|
||||
### MariaDB
|
||||
|
||||
[MariaDB 官网](https://mariadb.org/)
|
||||
|
||||
MariaDB 是一款由 MySQL 的开发人员开发的开源关系型数据库,因其优秀的性能和与 MySQL 良好的兼容性而广受欢迎。它是当今大多数主要云产品的一部分,对其稳定性和性能起到重要作用。最近通过使用 Galera Cluster 技术,MariaDB 新增了集群功能。另外 MariaDB 还与 Oracle 数据库有(一定的)兼容性。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 安装方便
|
||||
* 支持大数据操作
|
||||
* 高可扩展性
|
||||
* 易于导入数据
|
||||
|
||||
要在基于 Ubuntu 的计算机上安装并使用 MariaDB,请使用以下命令:
|
||||
|
||||
```
|
||||
$sudo apt update
|
||||
$sudo apt install mariadb-server
|
||||
$sudo systemctl start mariadb.service
|
||||
```
|
||||
|
||||
### RethinkDB
|
||||
|
||||
[RethinkDB 官网](https://rethinkdb.com/)
|
||||
|
||||
RethinkDB 是一个开源、免费、分布式、基于文档的 NoSQL 数据库。它由 RethinkDB 公司开发。(LCTT 译注:RethinkDB 公司已于 2016 年倒闭。RethinkDB 数据库现作为开源项目继续维护。[消息来源](https://rethinkdb.com/blog/rethinkdb-shutdown/))它可以存储具有动态模式的 JSON 文件。更重要的是,它可以将查询结果的实时更新推送给应用程序。由于它的分布式特性,它具有高度可扩展性。RethinkDB 提供了丰富的内置函数,使其成为一个高可用性的数据库。由于它是当今流行的数据库,学习如何使用它是很重要的。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 适合于 Web 应用
|
||||
* 易于扩展
|
||||
* 内置函数多,可用性高
|
||||
* 基于 JSON 动态文档
|
||||
|
||||
要在基于 Ubuntu 的计算机上使用 RethinkDB,下面的命令会有帮助:
|
||||
|
||||
```
|
||||
# 添加软件仓库源
|
||||
source /etc/lsb-release && echo "deb https://download.rethinkdb.com/repository/ubuntu-$DISTRIB_CODENAME $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
|
||||
|
||||
# 下载并安装 RethinkDB 的 GPG 密钥
|
||||
$wget -qO- https://download.rethinkdb.com/repository/raw/pubkey.gpg | sudo apt-key add -
|
||||
|
||||
$sudo apt update
|
||||
$sudo apt-get install rethinkdb
|
||||
$sudo systemctl start rethinkdb
|
||||
```
|
||||
|
||||
### OrientDB
|
||||
|
||||
[OrientDB 官网](https://orientdb.org/)
|
||||
|
||||
OrientDB 是一个基于 Java 的开源 NoSQL 数据库管理系统。它支持多种数据模型,比如文档、字典、对象和图。它以图数据库的形式存储关系。下面的命令可以帮助你在 Ubuntu 机器上使用 OrientDB:
|
||||
|
||||
```
|
||||
$sudo apt-get update
|
||||
$wget -O orientdb-community-2.2.20.tar.gz http://orientdb.com/download.php?file=orientdb-community-2.2.20.tar.gz&os=linux
|
||||
$tar -zxvf orientdb-community-2.2.20.tar.gz
|
||||
$sudo mv ~/orientdb-community-2.2.20 /opt/orientdb
|
||||
```
|
||||
|
||||
### CouchDB
|
||||
|
||||
[CouchDB 官网](https://couchdb.apache.org/)
|
||||
|
||||
CouchDB 是用 Erlang 开发的开源 NoSQL 数据库。它使用多种协议和格式来传输、处理和共享数据。它使用 JSON 格式存储数据,支持 MapReduce,并用 JavaScript 作为查询语言。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 可以存储任何类型的数据
|
||||
* 支持 MapReduce,可以高效地处理数据
|
||||
* 整体结构非常简单
|
||||
* 索引和检索速度快
|
||||
|
||||
下面的命令可以帮助你在 Ubuntu 机器上使用 CouchDB:
|
||||
|
||||
```
|
||||
$echo "deb https://apache.bintray.com/couchdb-deb focal main" >> /etc/apt/sources.list
|
||||
$sudo apt-get update
|
||||
$sudo apt install apache2 couchdb -y
|
||||
```
|
||||
|
||||
### Firebird
|
||||
|
||||
[Firebird 官网](https://firebirdsql.org/)
|
||||
|
||||
Firebird 是一个开源关系型数据库。它兼容所有操作系统,如 Linux、Windows 和 MacOS。它最初是从开源数据库 Interbase 派生而来的。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 数据库功能不受限制
|
||||
* 非常稳定,功能强大
|
||||
* 配置和使用简单
|
||||
|
||||
以下命令可以帮助你在 Ubuntu 机器上使用 Firebird:
|
||||
|
||||
```
|
||||
$sudo apt-get update
|
||||
$sudo apt-get install firebird2.5-superclassic
|
||||
```
|
||||
|
||||
### Cassandra
|
||||
|
||||
[Cassandra 官网](https://cassandra.apache.org/_/index.html)
|
||||
|
||||
Cassandra 是一个 Apache 基金会旗下的 NoSQL 数据库。它具有高度可扩展性、分布式、高性能的特点,可以很好地处理大量数据。其分布式的特性,使它没有单点故障。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 高性能
|
||||
* 高可扩展性
|
||||
* 采用点对点架构
|
||||
|
||||
以下命令可以帮助你在 Ubuntu 机器上使用 Cassandra:
|
||||
|
||||
```
|
||||
$curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
|
||||
$sudo apt-get update
|
||||
$sudo apt-get install cassandra
|
||||
$sudo systemctl enable cassandra
|
||||
$sudo systemctl start cassandra
|
||||
```
|
||||
|
||||
### PostgreSQL
|
||||
|
||||
[PostgreSQL 官网](https://www.postgresql.org/)
|
||||
|
||||
如今,PostgreSQL 是最流行的开源关系数据库管理系统之一。它易于扩展,同时还与 SQL 兼容。这个数据库管理系统经过了 30 多年的积极开发。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 与 MySQL 相比,Postgres 可以存储更多种类的数据
|
||||
* 支持几乎所有的 SQL 特性
|
||||
* 高度可扩展
|
||||
|
||||
下面的命令可以帮助你在 Ubuntu 机器上使用 PostgreSQL:
|
||||
|
||||
```
|
||||
$sudo apt-get update
|
||||
$sudo apt-get install postgresql postgresql-contrib
|
||||
```
|
||||
|
||||
### CockroachDB
|
||||
|
||||
[CockroachDB 官网](https://www.cockroachlabs.com/#)
|
||||
|
||||
CockroachDB 是一个为可靠性而生的数据库。它可以像<ruby>蟑螂<rt>cockroach</rt></ruby>一样在灾难性的情况下顽强生存、蓬勃发展。它可以处理大量的数据。还可以构建多集群数据库。
|
||||
|
||||
#### 优点
|
||||
|
||||
* 很容易部署
|
||||
* 高一致性
|
||||
* 分布式事务
|
||||
* 高可用性
|
||||
* 兼容 SQL
|
||||
|
||||
### Redis
|
||||
|
||||
[Redis 官网](https://redis.io/)
|
||||
|
||||
Redis 是一个基于键值的开源 NoSQL 数据存储数据库。它支持各种类型的键,使用非常方便。
|
||||
|
||||
### 结语
|
||||
|
||||
我们已经浏览了最知名和最流行的开源数据库管理系统。了解这些不同的数据库非常有趣。尝试不同的选择,发现最适合你需求的数据库。另外,一定要查看这些数据库的官方文档。
|
||||
|
||||
*(题图:MJ/40ba9f14-5948-431a-a899-36c6b1ff4dfe)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/09/are-you-familiar-with-these-popular-open-source-databases/
|
||||
|
||||
作者:[Jishnu Saurav Mittapalli][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/jishnu-saurav-mittapalli/
|
||||
[b]: https://github.com/lkxed
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/13/092356pzxmjf7xtfnqft5t.png
|
||||
@@ -0,0 +1,113 @@
|
||||
[#]: subject: "Remixing Linux for blind and visually impaired users"
|
||||
[#]: via: "https://opensource.com/article/22/9/linux-visually-impaired-users"
|
||||
[#]: author: "Vojtech Polasek https://opensource.com/users/vpolasek"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16397-1.html"
|
||||
|
||||
Vojtux:针对视力障碍用户改造 Linux
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Vojtux 是 Fedora 项目的一部分,它是一款专门为视力障碍者打造的非官方 Linux 发行版。
|
||||
|
||||
我五岁时,父亲给我们带来了第一台电脑。那一刻,我就明确了自己的职业追求:计算机领域。从那时起,我就一直和电脑打交道。在高中阶段,我开始尝试黑客活动,以决定自己专注于何种领域,最终我选择了安全工程师作为我的职业。
|
||||
|
||||
如今,我已经在红帽的安全合规团队任职软件工程师两年多了,我在捷克进行远程工作。我已经使用 Linux 12 年了,主要是 Arch Linux 和 Fedora,然而我过去也管理过 Debian、Gentoo 和 Ubuntu。
|
||||
|
||||
![Vojtech 的图片][1]
|
||||
|
||||
*图片说明:这是一张黑白的笑脸 Vojtech 图片,图中有一个红色边框,背景是一架纸飞机。*
|
||||
|
||||
工作之余,我玩盲人足球,我还参与了许多项目,这些项目都是为了帮助视力障碍者和视力正常人群建立联系。包括我还在一个为视力障碍者举办活动的小型非政府组织(NGO)工作。我还在开发一个叫做 [Vojtux][2] 的 Fedora 项目,这也是一个专门为视力障碍者打造的非官方 Linux 发行版。
|
||||
|
||||
### 辅助技术栈
|
||||
|
||||
我在使用智能设备时,需要依赖多种辅助技术,其中最主要的一款叫做屏幕阅读器。它是一款能将屏幕上的内容通过语音或盲文传达给视力障碍者的软件(简单来说,它就像我们的眼睛)。它能读并通知我当前正在关注的按钮或页面元素是什么,使得我能够与图形用户界面进行互动。
|
||||
|
||||
屏幕阅读器使用语音合成技术,将屏幕上的内容声音化。市面上有众多的语音合成器,有些听起来比别的更自然。我使用的是 Espeak,它听起来没有那么自然,但是它很轻便,运行也很快。此外,它几乎支持所有的语言,包括我正在使用的捷克语。
|
||||
|
||||
最后,我使用了一台能以盲文显示一行文字的盲文显示器,尤其在我写代码或者做代码审查的时候,我离不开它。通过触觉自由地从一个代码元素转移到另一个元素,使我能更轻松地把握代码的结构。我还可以使用它的按钮将光标移至我感兴趣的字符或屏幕区域,如果我想的话,我还能使用上面的盲文键盘输入。
|
||||
|
||||
### 我在日常生活中如何应用辅助技术
|
||||
|
||||
作为一个视障人士在使用电脑时,有许多事情其实可以借助上述技术轻松完成。以下是我日常经常做的一些事情:
|
||||
|
||||
- 我十分喜欢使用文本控制台。一般来说,只要是文字信息,盲人就可以借助屏幕阅读器进行阅读(虽然并非所有情况都适用,但在大多数情况下是可行的)。我通常用控制台进行系统管理、文本编辑以及查阅指导手册和文档。
|
||||
- 我喜欢浏览网络并与网页进行互动。
|
||||
- 我使用 VSCode 和 [Eclipse][3] 进行代码编写以及代码审查工作。
|
||||
- 我会发送电子邮件以及进行即时通讯。
|
||||
- 我可以使用诸如谷歌文档(虽非开源,但在现代办公环境中广为使用)和 [LibreOffice][4] 这样的文本处理软件。谷歌文档的开发团队加入了许多键盘快捷键,我可以利用它们在文档中浏览、跳转到标题或者注释里等等。
|
||||
- 通常来说,我能够播放多媒体内容,但这也取决于应用程序的开发方式,有些媒体播放器在这方面做得更好。
|
||||
|
||||
### 可行,但困扰重重
|
||||
|
||||
随着技术的进步,一些任务尽管是可行的,但完成起来却相当困难,我称这类任务为“可行,但困扰重重”。
|
||||
|
||||
处理 PDF 文件非常艰难。有时,我不得不采用光学字符识别(OCR)软件将图像转换为文本。例如,我最近需要阅读一份餐厅菜单,他们在他们的网站上提供 PDF 菜单,但它已经被压平,丧失了文字层。在我这里,这显示为一片空白屏幕。我只能通过在智能手机上使用 OCR 应用程序来帮我提取文本。这不仅需要额外的步骤,而且提取的文本翻译并不总是完全准确。
|
||||
|
||||
查看和创建演示文稿也可能困难重重。为了解决这个问题,我采用像 [Pandoc][5] 这样的软件用 HTML 创建幻灯片,它可以处理 [Markdown][6] 并将其转换成幻灯片。我已经使用这种方法好几年了,效果很好。它允许我完全掌控生成的幻灯片,因为 Markdown 就是简单的文本。
|
||||
|
||||
通过将其基于声音或文字,可以使视频游戏更易于接入。然而,在 Linux 上玩游戏可以是一大挑战,不仅需要找到能够进行无障碍访问的游戏,而且由于大多数 PC 游戏原生支持 Windows,因此还需要处理一些兼容性问题。
|
||||
|
||||
有些网站和界面比其他的难以导航。往往只需要通过正确设置一些属性,这些问题就可以很容易地得到解决。一般来说,大量的网页内容都以图像的形式存在。提高网页内容可访问性的一个快速有效的方法就是确保图像都添加了替代文本,使得屏幕阅读器可以读出来,让无法辨识图像的人们也能了解图像内容。还有另一种经常遇到的情况是遇到没有标签的控件:你知道那里有一个按钮或复选框,但你无法确定它具体的功能。
|
||||
|
||||
### Vojtux 项目:为了更好的 Linux 可访问性
|
||||
|
||||
开发者并不是特意设计出无障碍访问困难的应用程序,问题在于他们通常不清楚如何测试可访问性。由于视障 Linux 用户数量有限,可访问性的测试和反馈往往不足。因此,开发者往往不能生产易于访问的应用,用户也相应较少。这样形成了一个恶性循环。
|
||||
|
||||
Vojtux 项目就是希望能处理这个问题。我们希望能建立一个对视障用户更友好的 Fedora 改造版本。我们的目标是吸引更多用户,并鼓励他们发现并报告问题,以便开源社区的开发者可以解决这些问题。
|
||||
|
||||
你可能会问为什么要做这个项目?我们需要明确的是,Fedora 在设计上并非就没有可访问性,实际上,它有许多作为包的形式存在的辅助工具。但这些工具不是从一开始就存在,且需要许多细小的配置才能顺利使用,这可能会让初次使用 Fedora 的用户感到困惑。
|
||||
|
||||
我们期望 Vojtux 对视障用户而言尽可能友好和可预知。当用户启动立付镜像时,只需出现图形用户界面,屏幕阅读就会立即开始。所有必要的可访问性 [环境变量][7] 将会被正确地加载和配置。
|
||||
|
||||
Vojtux 还实现了以下功能,例如:
|
||||
|
||||
- 配置开机就能使用的辅助性环境变量。
|
||||
- 图形界面一加载,Orca 屏幕阅读器就会启动。
|
||||
- 添加了自定义库,该库包含额外的语音合成和打包软件。
|
||||
- 添加了许多替代键盘快捷键。
|
||||
- 还有一个特别的脚本可以控制显示器的开关。很多用户根本不需要显示器,关闭它则是一种极好的节能方式!
|
||||
|
||||
### 想要帮忙?这就需要你了
|
||||
|
||||
首先,如果你希望为 Vojtux 做贡献(或只是帮助传播),可以在我们的 [项目库][2] 查找更多信息。
|
||||
|
||||
此外,在团队中与视障人士协作时,可能需要考虑应用哪些无障碍技术。例如,因为我们都是通过声音获取信息,所以我们很难同时进行听说和阅读,除非有人非常熟练于使用盲文显示器。
|
||||
|
||||
最后,要记住,无论是演示幻灯片、网站还是 PDF,盲人和视障用户都与你使用相同的最终产品。当你开发产品或创作内容时,你的选择对我们能否有效地进行互动和访问有着巨大的影响。知道我们在这里,我们热爱使用计算机和科技,并且我们经常愿意帮助你进行测试。
|
||||
|
||||
![Vojtech 手持足球的照片][8]
|
||||
|
||||
*图片说明:手持足球的 Vojtech,他身穿足球服,戴着防护眼镜。*
|
||||
|
||||
本文作者最初于 2022 年 9 月发布文章,并在后续将项目的官方名称更新为 Vojtux。
|
||||
|
||||
*(题图:MJ/06477e84-6119-45d0-8085-5936a607ee68)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/9/linux-visually-impaired-users
|
||||
|
||||
作者:[Vojtech Polasek][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/vpolasek
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/2022-08/Vojtech.png
|
||||
[2]: https://github.com/vojtapolasek/Fegora
|
||||
[3]: https://opensource.com/article/20/12/eclipse
|
||||
[4]: https://opensource.com/article/22/2/libreoffice-accessibility
|
||||
[5]: https://opensource.com/article/18/9/intro-pandoc
|
||||
[6]: https://opensource.com/article/19/9/introduction-markdown
|
||||
[7]: https://opensource.com/article/19/8/what-are-environment-variables
|
||||
[8]: https://opensource.com/sites/default/files/2022-08/Vojtech%20holding%20a%20football.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/19/213037vnff11ziqxnjcsft.png
|
||||
@@ -0,0 +1,332 @@
|
||||
[#]: subject: "4 Incredibly Simple Ways to Customize Budgie Desktop in Linux"
|
||||
[#]: via: "https://itsfoss.com/budgie-customization/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "Drwhooooo"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16372-1.html"
|
||||
|
||||
4 种超简单的自定义 Budgie 桌面的方式
|
||||
======
|
||||
|
||||
> Budgie 是一种现代的桌面体验方式。你可以根据自己的喜好,使用这些定制技巧进一步增强它的功能。
|
||||
|
||||
如果你要求我将 MATE 桌面现代化,并增加功能和 GTK 支持,我可能会想出像 Budgie 这样的东西!
|
||||
|
||||
Budgie,是一款令人惊艳的桌面环境(DE),为你提供熟悉的布局和独特的用户体验。
|
||||
|
||||
那么,如何自定义你的 Budgie 桌面才能提升个人体验呢?莫慌;我这里有几条妙计助你改善你的 Budgie 体验。
|
||||
|
||||
我们的目标大致如下:
|
||||
|
||||
* 修改壁纸
|
||||
* 修改主题,图标以及光标(简易操作)
|
||||
* 自定义面板
|
||||
* 自定义停靠区
|
||||
|
||||
让我们开始吧!🤩
|
||||
|
||||
### 1、改变 Budgie 桌面环境壁纸
|
||||
|
||||
Budgie 桌面预装了一些好看的壁纸。
|
||||
|
||||
修改 Budgie 桌面壁纸,你们只需要做这两个小步骤:
|
||||
|
||||
1. 在主界面点击右键,选择 “<ruby>改变桌面背景<rt>Change Desktop Background</rt></ruby>”
|
||||
2. 选择图片,然后该图片就会应用在你的主屏幕中
|
||||
|
||||
![][1]
|
||||
|
||||
要是你不太中意其中的可用壁纸,你也可以自网络下载相关壁纸。
|
||||
|
||||
下好后,打开文件管理器,导航至图片所在位置,右键点击该图片,选择 “<ruby>设置为壁纸……<rt>Set as Wallpaper...</rt></ruby>”选项。
|
||||
|
||||
![][2]
|
||||
|
||||
### 2、修改桌面主题、图标以及光标主题
|
||||
|
||||
通常情况下,我们从网络上下载了主题,提取下载的文件,然后就会将文件移动到相应目录以便 [应用于 Linux 主题][3]。
|
||||
|
||||
> **[如何在 Ubnutu 上安装主题][3]**
|
||||
|
||||
但要那么整的话,既需要花费些功夫,又不是最高效的方法。(如果你好奇去试试的话)
|
||||
|
||||
那么此处便是 **ocs-url** 工具发力的地方了。
|
||||
|
||||
**ocs-url** 是一款一键安装所有主题风格(比如说来自 gnome-look.org 门户网站内容)的工具。
|
||||
|
||||
> 💡 Gnome-look.org 和 pling.com 是 [Opendesktop.org][5] 旗下的两个网络站点,可以帮助你一站式搜索主题风格,壁纸,图标,以及其它好物。
|
||||
|
||||
这个工具与任何桌面环境都没有官方隶属关系。
|
||||
|
||||
但令人遗憾的是,它没有被任何 Linux 发行版的软件包管理器包含,也就是说你得在你的系统里手动安装它。
|
||||
|
||||
那么首先,移动至 [ocs-url 的官方下载页面][6],转到 “<ruby>文件<rt>Files</rt></ruby>” 选项卡,将软件包下载至你的系统中:
|
||||
|
||||
![][7]
|
||||
|
||||
完成后,打开你的命令提示符,将文件地址改成文件下载的位置。对于大多数用户来说,便是下载(`Downloads`)文件夹:
|
||||
|
||||
```
|
||||
cd Downloads
|
||||
```
|
||||
|
||||
现在,使用你的 Linux 发行版对应的指令:
|
||||
|
||||
**适用于 Ubuntu:**
|
||||
|
||||
```
|
||||
sudo dpkg -i ocs-url*.deb
|
||||
```
|
||||
|
||||
**适用于 Fedora:**
|
||||
|
||||
```
|
||||
sudo dnf install qt5-qtbase qt5-qtbase-gui qt5-qtsvg qt5-qtdeclarative qt5-qtquickcontrols && sudo rpm -i ocs-url*.rpm
|
||||
```
|
||||
|
||||
**适用于 Arch:**
|
||||
|
||||
```
|
||||
sudo pacman -S qt5-base qt5-svg qt5-declarative qt5-quickcontrols && sudo pacman -U ocs-url*.pkg.tar.xz
|
||||
```
|
||||
|
||||
**适用于 openSUSE:**
|
||||
|
||||
```
|
||||
sudo zypper install libQt5Svg5 libqt5-qtquickcontrols && sudo rpm -i ocs-url*.rpm
|
||||
```
|
||||
|
||||
现在,让我们看看该如何安装主题风格,图标以及光标风格。
|
||||
|
||||
#### 修改系统主题风格
|
||||
|
||||
修改系统主题风格的第一步 —— 访问 [Gnome Look][8] 门户网站并选择你中意的主题风格(你可以在 GTK 3 和 GTK 4 之间选择)。
|
||||
|
||||
![][9]
|
||||
|
||||
选择任意你最喜欢的主题风格;这里我选择 “Kripton” 风格,你可以看到有一个 “<ruby>安装<rt>Install</rt></ruby>” 选项。
|
||||
|
||||
在这里,你需要遵循两个小步骤:
|
||||
|
||||
* 点击 “<ruby>安装<rt>Install</rt></ruby>” 按钮之后,会呈现该主题风格的不同类型。选择其中一个。
|
||||
* 然后会跳出一个提示符,你需要再点击一次 “<ruby>安装<rt>Install</rt></ruby>” 按钮:
|
||||
|
||||
![][10]
|
||||
|
||||
然后它会打开 ocs-url 工具询问你是否安装所选主题风格。
|
||||
|
||||
点击 “<ruby>确定<rt>OK</rt></ruby>” 按钮安装该主题风格:
|
||||
|
||||
![][11]
|
||||
|
||||
现在,进入 <ruby>Budgie 桌面设置<rt>Budgie Desktop Settings</rt></ruby> 界面,然后在“<ruby>样式<rt>Style</rt></ruby>” 子菜单下的 “<ruby>组件<rt>Widget</rt></ruby>” 选项中点击需要安装的主题风格。
|
||||
|
||||
![][12]
|
||||
|
||||
#### 修改图标
|
||||
|
||||
要修改图标,先访问有关 [Gnome-look 门户网站中的图标区][13],来搜索你中意的图标:
|
||||
|
||||
![][14]
|
||||
|
||||
找到图标后,可以看到有两个按钮:“<ruby>下载<rt>Download</rt></ruby>” 和 “<ruby>安装<rt>Install</rt></ruby>”。点击 “<ruby>安装<rt>Install</rt></ruby>” 按钮。
|
||||
|
||||
可以看到有多个图标,但大多数例子里只展现了一个。点击选项之一,弹出提示,再次点击“<ruby>安装<rt>Install</rt></ruby>” 按钮:
|
||||
|
||||
![][15]
|
||||
|
||||
然后,可以看到来自 ocs-url 弹出的提示符询问你是否安装所选图标包,点击 “<ruby>确定<rt>OK</rt></ruby>” 安装图标包:
|
||||
|
||||
![][16]
|
||||
|
||||
下一步,打开 <ruby>Budgie 桌面设置<rt>Budgie Desktop Settings</rt></ruby> 的 “<ruby>图标<rt>icons</rt></ruby>” 子菜单,你便可以使用最近安装过的图标风格(我用过 elementary-kde 风格):
|
||||
|
||||
![][17]
|
||||
|
||||
#### 修改光标主题风格
|
||||
|
||||
和之前步骤类似,访问 [Gnome Look 门户网站的光标区][18] 搜索最适合你的光标:
|
||||
|
||||
![][19]
|
||||
|
||||
选好心仪的光标风格后,点击相应选项,然后你就可以安装相对应的光标风格了。
|
||||
|
||||
弹出提示,再次点击 “<ruby>安装<rt>Install</rt></ruby>” 按钮:
|
||||
|
||||
![][20]
|
||||
|
||||
弹出来自 ocs-url 工具的提示,点击安装光标主题风格。只需要点个 “<ruby>确定<rt>OK</rt></ruby>” 然后开始安装:
|
||||
|
||||
![][21]
|
||||
|
||||
完成后,打开 <ruby>Budgie 桌面设置<rt>Budgie Desktop Settings</rt></ruby> 界面,在对应子页面的 “<ruby>光标<rt>Cursors</rt></ruby>” 面板中选择刚刚安装的光标主题风格:
|
||||
|
||||
![][22]
|
||||
|
||||
### 3、自定义 Budgie 桌面面板
|
||||
|
||||
根据 Linux 发行版的不同,面板的位置也可能不同。例如,假设你用的是 Solus 的 Budgie 或者 Ubuntu 的 Budgie。
|
||||
|
||||
打开 <ruby>Budgie 桌面设置<rt>Budgie Desktop Settings</rt></ruby> ,在那里你可以寻找到对于面板的相关设置:
|
||||
|
||||
![][23]
|
||||
|
||||
如你所见,它将启用的小程序分三个部分显示在面板上:
|
||||
|
||||
<ruby>始端<rt>Start</rt></ruby>(最左侧)、<ruby>中间<rt>Center</rt></ruby>,以及 <ruby>末端<rt>End</rt></ruby>(最右侧)。
|
||||
|
||||
> 📋 注意,每个小程序有自己不同的设置选项,所以还能单独设置它们。
|
||||
|
||||
你可以在它们之间做些调整。比如,在这个地方我将时钟工具挪到左边,以便它和我的工作流界面看起来更加融洽:
|
||||
|
||||
![][24]
|
||||
|
||||
要想移动小程序,只需要选中该小程序然后点击上下箭头按钮(位于小程序列表上方)。
|
||||
|
||||
如果你想移除小程序,只需要选中该程序然后点击删除按钮即可:
|
||||
|
||||
![][25]
|
||||
|
||||
这里有一个 “+” 图标样式的选项,可以添加更多小程序。点击它,会为你弹出所有可用的小程序。
|
||||
|
||||
找到一个有用的小程序,选中该程序并点击 “<ruby>添加<rt>Add</rt></ruby>” 按钮:
|
||||
|
||||
![][26]
|
||||
|
||||
要是你希望面板变透明、想1添加阴影,想增加或减少小程序之间的距离,那么就访问设置菜单中的这个页面(如下图):
|
||||
|
||||
![][27]
|
||||
|
||||
举个例子,这里,我将自己的面板设置了透明和阴影,让它看起来更舒服点:
|
||||
|
||||
![][28]
|
||||
|
||||
### 4、定制 Budgie 桌面的停靠区
|
||||
|
||||
在本节,我会向你介绍如何将自己的停靠区设计得更好,功能性更强:
|
||||
|
||||
* 修改停靠区主题风格
|
||||
* 添加更多工具应用以赋予停靠区更多特性
|
||||
|
||||
#### 修改停靠区主题风格
|
||||
|
||||
可惜啦,这次 ocs-url 工具可就帮不上什么忙了,设置的唯一方式就是手动操作!
|
||||
|
||||
首先,[访问 Gnome Look 的 Plank 主题区][29],下载你心仪的 Plank 停靠区主题风格。
|
||||
|
||||
这里,我选了模仿 macOS 系统的 Monterey 主题风格(dark-inline 版):
|
||||
|
||||
![][30]
|
||||
|
||||
现在,打开命令提示符,找到该主题风格下载位置。
|
||||
|
||||
对大多数用户来说,即下载(`Downloads`)文件夹所在位置:
|
||||
|
||||
```
|
||||
cd ~/Downloads
|
||||
```
|
||||
|
||||
现在,[使用解压指令][31] 将文件释放到 `.local/share/plank/themes/`:
|
||||
|
||||
```
|
||||
unzip <theme_name.zip> -d .local/share/plank/themes/
|
||||
```
|
||||
|
||||
在我的环境下是这样:
|
||||
|
||||
```
|
||||
unzip Monterey-Dark-inline.zip -d ~/.local/share/plank/themes/
|
||||
```
|
||||
|
||||
![][32]
|
||||
|
||||
然后,打开 “<ruby>Plank 偏好设置<rt>Plank preferences</rt></ruby>”,改成刚下载的主题。
|
||||
|
||||
我将我的风格改成 “Monterey -Dark inline”:
|
||||
|
||||
![][33]
|
||||
|
||||
#### 添加 docklet 应用以增加更多特性
|
||||
|
||||
可以、把 docklet 应用当作 applet,但与它不同的是,没有太多选项。
|
||||
|
||||
想要添加或移除 docklet 应用,首先得需要打开 “<ruby>Plank 偏好设置<rt>Plank preferences</rt></ruby>”,然后访问 “Docklets” 菜单,列出可用选项:
|
||||
|
||||
![][34]
|
||||
|
||||
现在,如果你想添加一些 docklet 应用,只需要把它们拖进停靠区即可:
|
||||
|
||||
![][35]
|
||||
|
||||
但如果你想把添加的 docklet 应用移除出去呢?
|
||||
|
||||
简单,把它们从停靠区中拖拽出去就行了:
|
||||
|
||||
![][36]
|
||||
|
||||
### 准备好使用 Budgie 了吗?
|
||||
|
||||
当然,为了方便起见,你可以安装已内置 Budgie 桌面环境的 Linux 发行版。
|
||||
|
||||
或者你还是可以选择在你现有的发行版(比如说 Ubuntu)中 [安装 Budgie][37]:
|
||||
|
||||
> **[如何在 Ubuntu 上安装 Budgie][37]**
|
||||
|
||||
在本教程中,我使用的是 Ubuntu 版本的 Budgie。无论你使用哪个发行版,这些步骤都适用于 Budgie 桌面。
|
||||
|
||||
💬 你是怎么自定义你的 Budgie 桌面的呢?你想为这篇文章贡献更多内容吗?在下方评论区分享你的经验吧。
|
||||
|
||||
*(题图:MJ/44c073b0-b866-4eeb-b3e0-579d7afe0992)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/budgie-customization/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Drwhooooo](https://github.com/Drwhooooo)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/08/Change-wallpaper.png
|
||||
[2]: https://itsfoss.com/content/images/2023/08/Set-third-party-wallpaper-in-budgie-desktop.png
|
||||
[3]: https://itsfoss.com/install-themes-ubuntu/
|
||||
[4]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[5]: https://www.opendesktop.org/
|
||||
[6]: https://www.opendesktop.org/p/1136805/
|
||||
[7]: https://itsfoss.com/content/images/2023/08/Download-ocs-url-in-budgie.png
|
||||
[8]: https://www.gnome-look.org/browse?cat=135&ord=latest
|
||||
[9]: https://itsfoss.com/content/images/2023/09/Open-gnome-look-to-install-system-themes-in-budgie-desktop.png
|
||||
[10]: https://itsfoss.com/content/images/2023/09/Install-theme-from-ocs-url-in-budgie-dekstop.png
|
||||
[11]: https://itsfoss.com/content/images/2023/09/Install-theme-from-ocs-url.png
|
||||
[12]: https://itsfoss.com/content/images/2023/09/Change-theme-in-Budgie-desktop-using-the-budgie-desktop-settings-1.png
|
||||
[13]: https://www.gnome-look.org/browse?cat=132&ord=latest
|
||||
[14]: https://itsfoss.com/content/images/2023/09/Download-icons-for-budgie-desktop.png
|
||||
[15]: https://itsfoss.com/content/images/2023/09/Install-icons-for-budgie-desktop-environment.png
|
||||
[16]: https://itsfoss.com/content/images/2023/09/Use-ocs-url-to-install-icons-in-budgie-desktop-environment.png
|
||||
[17]: https://itsfoss.com/content/images/2023/09/Select-icon-to-customize-the-budgie-desktop-from-budgie-desktop-settings.png
|
||||
[18]: https://www.gnome-look.org/browse?cat=107&ord=latest
|
||||
[19]: https://itsfoss.com/content/images/2023/09/Download-cursor-icons-for-budgie-desktop.png
|
||||
[20]: https://itsfoss.com/content/images/2023/09/Install-cursor-icons-for-the-budgie-desktop-environment.png
|
||||
[21]: https://itsfoss.com/content/images/2023/09/Install-the-cursor-icon-theme-in-budgie-desktop-environment-using-the-ocs-url.png
|
||||
[22]: https://itsfoss.com/content/images/2023/09/Select-the-cursor-icon-theme-from-the-budgie-desktop-settings-for-custoomizing-the-budgie-desktop-environment.png
|
||||
[23]: https://itsfoss.com/content/images/2023/09/Access-budgie-desktop-panel-settings.png
|
||||
[24]: https://itsfoss.com/content/images/2023/09/Move-applets-in-budgie-desktop.png
|
||||
[25]: https://itsfoss.com/content/images/2023/09/Delete-applet-from-the-panel.png
|
||||
[26]: https://itsfoss.com/content/images/2023/09/Add-applet-in-budgie-desktop-environment.png
|
||||
[27]: https://itsfoss.com/content/images/2023/09/Tweak-panel-of-the-budgie-desktop.png
|
||||
[28]: https://itsfoss.com/content/images/2023/09/Add-transparency-and-shadows-in-budgie-desktop-panel-1.png
|
||||
[29]: https://www.gnome-look.org/browse?cat=273&ord=latest
|
||||
[30]: https://itsfoss.com/content/images/2023/09/Download-theme-for-the-plank-dock-in-budgie-desktop-environment.png
|
||||
[31]: https://itsfoss.com/unzip-linux/
|
||||
[32]: https://itsfoss.com/content/images/2023/09/extract-plank-dock-themes-in-budgie-desktop.png
|
||||
[33]: https://itsfoss.com/content/images/2023/09/Change-theme-in-plank-dock-1.png
|
||||
[34]: https://itsfoss.com/content/images/2023/09/Docklets-in-Plank-dock.png
|
||||
[35]: https://itsfoss.com/content/images/2023/09/Add-docklets-in-Plank-dock-budgie-desktop-configuration.gif
|
||||
[36]: https://itsfoss.com/content/images/2023/09/Remove-docklets-from-the-plank-budgie-desktop.gif
|
||||
[37]: https://itsfoss.com/install-budgie-ubuntu/
|
||||
224
published/202311/20231018 Fun With Cmatrix in Linux.md
Normal file
224
published/202311/20231018 Fun With Cmatrix in Linux.md
Normal file
@@ -0,0 +1,224 @@
|
||||
[#]: subject: "Fun With Cmatrix in Linux"
|
||||
[#]: via: "https://itsfoss.com/using-cmatrix/"
|
||||
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16422-1.html"
|
||||
|
||||
在 Linux 中玩乐:Cmatrix 之旅
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 玩得开心,安德森先生!
|
||||
|
||||
Cmatrix 是一款充满乐趣的 Linux 和 Unix 系统命令行程序。它可以模仿经典电影《<ruby>黑客帝国<rt>Matrix</rt></ruby>》系列中的场景,用绿色的字符流营造出雨一般的下落效果。
|
||||
|
||||
![Cmatrix 命令][1]
|
||||
|
||||
除了充满视觉冲击力的绿色字符流之外,你还可以发挥想象,利用这款有趣的命令做更多事情。
|
||||
|
||||
> 🚧 需要注意的是,Cmatrix 是一个 CPU 密集型的命令,所以请慎重使用它。
|
||||
|
||||
### 如何在 Ubuntu 及其他 Linux 系统中安装 Cmatrix
|
||||
|
||||
Cmatrix 已经被收录在几乎所有主要的 Linux 发行版的官方库中。如果你是 Ubuntu 用户,可以通过如下命令来安装 Cmatrix:
|
||||
|
||||
```
|
||||
sudo apt install cmatrix
|
||||
```
|
||||
|
||||
对于 Fedora 用户,应该使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo dnf install cmatrix
|
||||
```
|
||||
|
||||
而对于 Arch Linux 用户,则可以使用 pacman 命令进行安装:
|
||||
|
||||
```
|
||||
sudo pacman -S cmatrix
|
||||
```
|
||||
|
||||
### Cmatrix 的基础应用
|
||||
|
||||
cmatrix 命令自身提供了丰富的选项,你可以自由改变默认的绿色字符流的外观呈现。
|
||||
|
||||
#### 加粗的字符
|
||||
|
||||
你可以选择使用 `-b` 选项,偶尔展示加粗的字符,
|
||||
|
||||
```
|
||||
cmatrix -b
|
||||
```
|
||||
|
||||
![加粗的 Cmatrix 字符][2]
|
||||
|
||||
或者,你也可以调整设置,让所有的字符都以加粗方式显示,
|
||||
|
||||
```
|
||||
cmatrix -B
|
||||
```
|
||||
|
||||
![全部显示为加粗的字符][3]
|
||||
|
||||
#### 异步滚动
|
||||
|
||||
默认情况下,Cmatrix 会创建一个字符同步下落的显示。但如果你想看到一个更为动态、视觉上更吸引人的显示效果,就可以在代码中操控字符的下落速度。
|
||||
|
||||
你可以这样设置 Cmatrix,让其进行异步滚动:
|
||||
|
||||
```
|
||||
cmatrix -a
|
||||
```
|
||||
|
||||
#### 自定义字符下落速度
|
||||
|
||||
你想让字符下落的速度更快,或者更慢吗?只需在 Cmatrix 中做出微小改动,就可以实现。
|
||||
|
||||
如想让字符以更快的速度下落,你可以这样设定:
|
||||
|
||||
```
|
||||
cmatrix -u 2
|
||||
```
|
||||
|
||||
![字符快速下落][4]
|
||||
|
||||
在这里,默认的屏幕更新延迟是 4,如果你把这个值降低,那么字符下落的速度就会增加,反之则会减慢。所以,如果你想让 Cmatrix 以更慢的速度运行,你可以这样设置:
|
||||
|
||||
```
|
||||
cmatrix -u 9
|
||||
```
|
||||
|
||||
![字符慢速下落][5]
|
||||
|
||||
#### 自定义颜色
|
||||
|
||||
你可能想问,绿色能改吗?当然,你想变成紫色也行。
|
||||
|
||||
运行 Cmatrix 的时候,你可以自由调整它的颜色。只需要使用 `-C` 选项,然后在后面添加你想要的颜色,如下所示:
|
||||
|
||||
```
|
||||
cmatrix -C magenta
|
||||
```
|
||||
|
||||
![颜色变为洋红色][6]
|
||||
|
||||
你可以任选绿色(`green`)、红色(`red`)、蓝色(`blue`)、白色(`white`)、黄色(`yellow`)、青色(`cyan`)、洋红色(`magenta`)以及黑色(`black`)这些颜色。
|
||||
|
||||
#### 其他可选设置
|
||||
|
||||
选项 | 对应功能
|
||||
---|---
|
||||
`cmatrix -o` | 旧式滚动模式
|
||||
`cmatrix -m` | Lambda 模式:把所有的字符变为 lambda 符号
|
||||
`cmatrix -s` | 屏保模式:按键有就自动退出
|
||||
`cmatrix -h` | 调出帮助手册
|
||||
|
||||
### 运行 Cmatrix 时的快捷键选项
|
||||
|
||||
就算在启动 Cmatrix 的时候你没有添加任何选项,你仍可以在实际运行中随时改变设置。下面就是一些可供你随时选择的选项。
|
||||
|
||||
#### 随时改变颜色
|
||||
|
||||
当然,你无需重新启动程序,就可以随时改变显示的颜色。但需要记住,不同的键位对应着不同的颜色。在 Cmatrix 未关闭的情况下,如果你按下了存储在键位上的指令,显示的颜色将会直接变更。
|
||||
|
||||
颜色 | 相应键位
|
||||
---|---
|
||||
红色 | `!`
|
||||
绿色 | `@`
|
||||
黄色 | `#`
|
||||
蓝色 | `$`
|
||||
洋红色 | `%`
|
||||
青色 | `^`
|
||||
白色 | `&`
|
||||
黑色 | `)`
|
||||
|
||||
#### 自由调整更新速度
|
||||
|
||||
在 Cmatrix 运行的过程中,你可以按 `0` 到 `9` 的任何一位数字键来随意改变当前的更新速度。
|
||||
|
||||
此外,Cmatrix 也有许多其他的选项可供你选择,你可以在命令的 man 页面里面找到它们。
|
||||
|
||||
```
|
||||
man cmatrix
|
||||
```
|
||||
|
||||
### 彩虹魔法:Cmatrix 配合 lolcat
|
||||
|
||||
> 🚧 请注意,Cmatrix 本身就是 CPU 密集型的命令,所以在使用其他命令操控它的时候需特别小心。
|
||||
|
||||
你可以将 Cmatrix 和 lolcat 结合在一起使用,以此营造出一种更加有趣的视觉效果。如果你是 Ubuntu 的用户,可以通过如下的命令来安装 lolcat:
|
||||
|
||||
```
|
||||
sudo apt install lolcat
|
||||
```
|
||||
|
||||
安装完毕后,只需简单地通过管道将 Cmatrix 连接到 lolcat,你便可以看到赏心悦目的彩虹效果了。
|
||||
|
||||
```
|
||||
cmatrix | lolcat
|
||||
```
|
||||
|
||||
![Cmatrix 配合 Lolcat 效果][7]
|
||||
|
||||
当然,你也可以尝试用 lolcat 来管理所有的 Cmatrix 的功能。
|
||||
|
||||
或者,你可以调出一个倾斜的彩虹条纹效果,为自己的视觉体验增添一些新花样。
|
||||
|
||||
```
|
||||
cmatrix | lolcat -p 100
|
||||
```
|
||||
|
||||
此外,只要轻轻一点,你就可以直接反转现有的背景和前景颜色,使你的终端完全沉浸在五彩斑斓之中。
|
||||
|
||||
```
|
||||
cmatrix | lolcat -i
|
||||
```
|
||||
|
||||
![Cmatrix 与反转颜色的 Lolcat][8]
|
||||
|
||||
### 终端界面的无尽可能
|
||||
|
||||
我知道 Cmatrix 不可能是 [最实用的 Linux 命令][9],但无可否认,它令人喜爱且同样能够带给你乐趣。难道你不想尝试更多和你的 Linux 系统之间的 [有趣交互][10] 吗?
|
||||
|
||||
就像 [Cowsay][11] 这样的命令,虽然简单,却欢乐无穷:
|
||||
|
||||
> **[哞~ 我的 Linux 终端里有头牛][11]**
|
||||
|
||||
这里还有更多玩法等待你去探索:
|
||||
|
||||
> **[在终端中享受乐趣的 13 种 Linux 命令][12]**
|
||||
|
||||
现在,玩得开心,安德森先生!
|
||||
|
||||
*(题图:MJ/9f9f8665-e5d0-47b5-9df0-b39abd9dca3d)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/using-cmatrix/
|
||||
|
||||
作者:[Sreenath][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/10/Cmatrix.gif
|
||||
[2]: https://itsfoss.com/content/images/2023/10/cmatrix-occasional-bold-characters.png
|
||||
[3]: https://itsfoss.com/content/images/2023/10/cmatrix-all-bold-characters.png
|
||||
[4]: https://itsfoss.com/content/images/2023/10/Cmatrix-fast.gif
|
||||
[5]: https://itsfoss.com/content/images/2023/10/cmatrix-slow.gif
|
||||
[6]: https://itsfoss.com/content/images/2023/10/cmatrix-magenta-color.png
|
||||
[7]: https://itsfoss.com/content/images/2023/10/Cmatrix-with-lolcat.png
|
||||
[8]: https://itsfoss.com/content/images/2023/10/cmatrix-with-inverse-colors.png
|
||||
[9]: https://itsfoss.com/essential-ubuntu-commands/
|
||||
[10]: https://itsfoss.com/funny-linux-commands/
|
||||
[11]: https://linux.cn/article-15952-1.html
|
||||
[12]: https://itsfoss.com/funny-linux-commands/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/28/072046sff97h9bfqvfq8va.png
|
||||
159
published/202311/20231031 Install VSCodium on Fedora.md
Normal file
159
published/202311/20231031 Install VSCodium on Fedora.md
Normal file
@@ -0,0 +1,159 @@
|
||||
[#]: subject: "Install VSCodium on Fedora"
|
||||
[#]: via: "https://itsfoss.com/install-vscodium-fedora/"
|
||||
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16414-1.html"
|
||||
|
||||
如何在 Fedora 上安装 VSCodium
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> VSCodium 是微软 VS Code 真正开源的版本,它可以轻松安装在 Fedora 上。具体方法如下。
|
||||
|
||||
Visual Studio Code(VS Code)是微软开发的一款流行的跨平台文本编辑器。它基于 Electron 框架构建,被开发人员广泛用于编码和文本编辑任务。VS Code 的核心,称为 “Code - OSS”,是开源的,并在 MIT 许可证下分发。然而,微软添加了特定的自定义功能,并在专有许可下发布了其品牌版本的编辑器。
|
||||
|
||||
为了解决有关 [遥测][1] 和许可的问题,有一个名为 “[VSCodium][2]” 的替代方案,它是社区驱动、禁用遥测且获得 MIT 许可的 VS Code 版本。
|
||||
|
||||
![VSCodium running on Fedora 39][3]
|
||||
|
||||
在本教程中,我将指导你完成在 Fedora Linux 系统上安装和运行 VSCodium 的过程。
|
||||
|
||||
有三种方法可以做到这一点:
|
||||
|
||||
1. 从发布页面下载 rpm 文件进行安装。但是,你需要重复该过程才能更新软件包(这可能会令人沮丧)。
|
||||
2. 添加 [paulcarroty][4] 仓库(如 [VSCodium][5] 网站所述)。因此,当你 [更新你的 Fedora 系统][6] VScodium 也会得到更新(这是相当无缝的)。
|
||||
3. 使用 flatpak 版本,你可能已经尝试过从 GNOME “软件”中安装该版本(我有过同样的糟糕经历,因此可能会有所不同)。
|
||||
|
||||
第一个非常简单,即从 [发布页面][8] 下载并 [安装 RPM 文件][7]。那么,让我们切入主题并遵循其他两种方法。
|
||||
|
||||
### 方法 1:通过添加仓库来安装 VSCodium
|
||||
|
||||
打开终端:你可以通过在应用菜单中搜索 “Terminal” 来打开终端。
|
||||
|
||||
添加 GPG 密钥:以便包管理器信任仓库的打包者。
|
||||
|
||||
```
|
||||
sudo rpmkeys --import https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg
|
||||
```
|
||||
|
||||
添加 VSCodium 仓库:以下命令会将仓库添加到你的 Fedora 系统。
|
||||
|
||||
```
|
||||
printf "[gitlab.com_paulcarroty_vscodium_repo]\nname=download.vscodium.com\nbaseurl=https://download.vscodium.com/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab .com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg\nmetadata_expire=1h" | sudo tee -a /etc/yum.repos.d/vscodium.repo
|
||||
|
||||
```
|
||||
|
||||
安装VSCodium:现在你已经添加了 VSCodium 存储库,你可以使用以下命令安装它(喜欢前沿软件的人可以将软件包名称替换为 **codium-insiders** 来安装 insider 版本):
|
||||
|
||||
```
|
||||
sudo dnf install codium
|
||||
```
|
||||
|
||||
启动 VSCodium:你现在可以从应用菜单或在终端中运行以下命令来启动 VSCodium:
|
||||
|
||||
```
|
||||
codium
|
||||
```
|
||||
|
||||
#### 删除 VSCodium
|
||||
|
||||
如果你不喜欢 VSCodium 以及它基于 Electron 的事实,或者改用 Neovim。你可以使用以下命令删除它:
|
||||
|
||||
```
|
||||
sudo dnf remove codium
|
||||
```
|
||||
|
||||
你可以将仓库和签名添加到你的系统中,也可以不保留(为什么不)。
|
||||
|
||||
因此,让我们摆脱该仓库:
|
||||
|
||||
```
|
||||
sudo rm /etc/yum.repos.d/vscodium.repo
|
||||
```
|
||||
|
||||
### 方法 2:使用 Flatpak 安装 VSCodium
|
||||
|
||||
你也可以安装 Flatpak。因此,以下是在 Fedora 上使用 Flatpak 安装 VSCodium 的步骤:
|
||||
|
||||
你可以通过启用 Flathub 直接在 Fedora 上安装它,如果你使用的是最新版本之一并且为 Fedora 启用了第三方仓库,那么可能会启用该功能。只需在 GNOME “软件” 应用中搜索 VSCodium 并单击安装即可。
|
||||
|
||||
![Installing the flatpak from Gnome Software][9]
|
||||
|
||||
不过,由于某些原因运行旧版本的用户,或者他们可能有一个未启用 Flatpak 的分叉,也可以效仿。
|
||||
|
||||
安装 Flatpak 并启用 Flathub:Fedora 通常预装了 Flatpak。如果尚未安装,你可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo dnf install flatpak
|
||||
```
|
||||
|
||||
要启用 Flathub 仓库,请使用以下命令:
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
现在你已经设置了 Flatpak,你可以使用 Flathub 仓库安装 VSCodium。运行以下命令:
|
||||
|
||||
```
|
||||
flatpak install flathub com.vscodium.codium
|
||||
```
|
||||
|
||||
启动 VSCodium:你可以使用以下命令通过 Flatpak 启动 VSCodium:
|
||||
|
||||
```
|
||||
flatpak run com.vscodium.codium
|
||||
```
|
||||
|
||||
或者,你也可以在应用菜单中搜索 “VSCodium” 并从那里启动它。
|
||||
|
||||
就是这样! 你现在应该已经使用 Flatpak 在 Fedora 系统上安装并运行了 VSCodium。
|
||||
|
||||
要删除它,请使用以下命令:
|
||||
|
||||
```
|
||||
sudo flatpak uninstall com.vscodium.codium
|
||||
```
|
||||
|
||||
### 附言
|
||||
|
||||
如果你使用过 VS Code,那么你不会发现这两个软件之间有任何区别。这只是为了开放和免受微软版本的邪恶遥测的影响。
|
||||
|
||||
在 Fedora,我首先安装了 Flatpak 版本,但在 Wayland 会话中,VSCodium 没有显示任何窗口装饰(这显然是默认的)。这让我很难用鼠标导航。
|
||||
|
||||
![VSCodium flatpak showing no window decorations.][10]
|
||||
|
||||
我尝试了一些方法来解决这个问题,但由于 Fflatpak 配置文件的位置很奇怪,所以没有成功。如果有人有或能找到解决上述问题的办法,请在下面发表评论。不过,使用 rpm 版本倒是天衣无缝(也许怀疑论者对替代软件包管理系统的看法是对的)。
|
||||
|
||||
扩展和插件在大部分情况下都没有问题。你也可以按照本教程在企业 Linux 系列的任何发行版(如 Alma Linux、Rocky Linux 等)上安装。
|
||||
|
||||
*(题图:MJ/5f39d386-d28c-4b3d-97a8-b498290d54f7)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-vscodium-fedora/
|
||||
|
||||
作者:[Anuj Sharma][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/anuj/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://code.visualstudio.com/docs/getstarted/telemetry
|
||||
[2]: https://itsfoss.com/vscodium/
|
||||
[3]: https://itsfoss.com/content/images/2023/10/codium-on-fedora.png
|
||||
[4]: https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo
|
||||
[5]: https://vscodium.com/
|
||||
[6]: https://itsfoss.com/update-fedora/
|
||||
[7]: https://itsfoss.com/install-rpm-files-fedora/
|
||||
[8]: https://github.com/VSCodium/vscodium/releases
|
||||
[9]: https://itsfoss.com/content/images/2023/10/codium-flatpak-fedora.png
|
||||
[10]: https://itsfoss.com/content/images/2023/10/codium-flatpak-no-decorations.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/26/134531enn7h0bn7z97977b.png
|
||||
@@ -0,0 +1,129 @@
|
||||
[#]: subject: "Fedora Linux Flatpak cool apps to try for November"
|
||||
[#]: via: "https://fedoramagazine.org/fedora-linux-flatpak-cool-apps-to-try-for-november/"
|
||||
[#]: author: "Eduard Lucena https://fedoramagazine.org/author/x3mboy/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16401-1.html"
|
||||
|
||||
在 Fedora Linux 上值得尝试的酷炫 Flatpak 应用(11 月)
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
> 本文介绍了 Flathub 中可用的项目以及安装说明。
|
||||
|
||||
[Flathub][2] 是获取和分发适用于所有 Linux 应用的地方。它由 Flatpak 提供支持,允许 Flathub 应用在几乎任何 Linux 发行版上运行。
|
||||
|
||||
请阅读“[Flatpak 入门][3]”。为了启用 flathub 作为你的 flatpak 提供商,请使用 [Flatpak 站点][4]上的说明。
|
||||
|
||||
### TurboWarp
|
||||
|
||||
[TurboWarp][5] 是 Scratch 的修改版本。Scratch 是一种具有简单视觉界面的编码语言,允许年轻人创建数字故事、游戏和动画。
|
||||
|
||||
我喜欢 Scratch,但自从我发现 TurboWarp 以来,我儿子就再也没有回头。界面更清晰,具有夜间模式,比原始 Scratch 运行速度更快,并且内存经过优化。
|
||||
|
||||
你可以通过单击网站上的安装按钮或手动使用以下命令来安装 TurboWarp:
|
||||
|
||||
````
|
||||
flatpak install flathub org.turbowarp.TurboWarp
|
||||
````
|
||||
|
||||
### Szyszka
|
||||
|
||||
[Szyska][6] 是文件重命名器,具有许多有趣的功能,例如:
|
||||
|
||||
* 很好的性能
|
||||
* 适用于 Linux、Mac 和 Windows
|
||||
* 使用 GTK 4 创建的 GUI
|
||||
* 多种规则可自由组合:
|
||||
* 替换文字
|
||||
* 修剪文本
|
||||
* 添加文字
|
||||
* 添加号码
|
||||
* 清除文本
|
||||
* 将字母更改为大写/小写
|
||||
* 自定义规则
|
||||
* 保存规则供以后使用
|
||||
* 能够编辑、重新排序规则和结果
|
||||
* 处理数十万条记录
|
||||
|
||||
你可以通过单击网站上的安装按钮或手动使用以下命令来安装 Szyszka:
|
||||
|
||||
````
|
||||
flatpak install flathub com.github.qarmin.szyszka
|
||||
````
|
||||
|
||||
### Marker
|
||||
|
||||
[Marker][7] 是一个用 GTK3 编写的 MarkDown 编辑器。这是我在 GTK 上快速写作的最爱之一。它的一些特点是:
|
||||
|
||||
* 使用 [scidown][8] 对 Markdown 文档进行 HTML 和 LaTeX 转换
|
||||
* 支持 YAML 标头
|
||||
* 文档类
|
||||
* 投影仪/演示模式
|
||||
* 摘要部分
|
||||
* 目录
|
||||
* 外部文档包含
|
||||
* 带有参考 ID 和标题的方程、图形、表格和清单
|
||||
* 内部参考文献
|
||||
* 使用 [KaTeX][9] 或 [MathJax][10] 进行 TeX 数学渲染
|
||||
* 使用 [highlight.js][11] 对代码块进行语法高亮显示
|
||||
* 使用 [pandoc][12] 灵活的导出选项
|
||||
* PDF
|
||||
* RTF
|
||||
* ODT
|
||||
* DOCX
|
||||
|
||||
你可以通过单击网站上的安装按钮或使用以下命令手动安装 Marker:
|
||||
|
||||
````
|
||||
flatpak install flathub com.github.fabiocolacio.marker
|
||||
````
|
||||
|
||||
*Marker 也在 fedora 的仓库中以 rpm 的形式提供。*
|
||||
|
||||
### Librum
|
||||
|
||||
[Librum][13] 是一个用于管理图书馆和阅读电子书的应用。这是管理书籍和文档集合的好方法,包括对一长串格式的支持。它的一些特点是:
|
||||
|
||||
* 现代电子阅读器
|
||||
* 个性化和可定制的库
|
||||
* 图书元数据编辑
|
||||
* 一个免费的应用内书店,拥有超过 70,000 本书
|
||||
* 书籍在所有设备上同步
|
||||
* 高亮显示书签文本搜索
|
||||
|
||||
你可以通过单击网站上的安装按钮或使用以下命令手动安装 Librum:
|
||||
|
||||
````
|
||||
flatpak install flathub com.librumreader.librum
|
||||
````
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/fedora-linux-flatpak-cool-apps-to-try-for-november/
|
||||
|
||||
作者:[Eduard Lucena][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/x3mboy/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/10/flatpak-apps-for-november-banner-816x345.jpg
|
||||
[2]: https://flathub.org
|
||||
[3]: https://fedoramagazine.org/getting-started-flatpak/
|
||||
[4]: https://flatpak.org/setup/Fedora
|
||||
[5]: https://flathub.org/apps/org.turbowarp.TurboWarp
|
||||
[6]: https://flathub.org/apps/com.github.qarmin.szyszka
|
||||
[7]: https://flathub.org/apps/com.github.fabiocolacio.marker
|
||||
[8]: https://github.com/wallberg13/scidown
|
||||
[9]: https://katex.org/
|
||||
[10]: https://www.mathjax.org/
|
||||
[11]: https://highlightjs.org/
|
||||
[12]: https://pandoc.org/
|
||||
[13]: https://flathub.org/apps/com.librumreader.librum
|
||||
@@ -0,0 +1,176 @@
|
||||
[#]: subject: "8 Websites Linux Users Should Have bookmarked"
|
||||
[#]: via: "https://itsfoss.com/useful-linux-websites/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16366-1.html"
|
||||
|
||||
Linux 用户必备的 8 大网站
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这里列举的是我个人最喜欢的 Linux 网站,希望你也能喜欢。
|
||||
|
||||
既然你已经在关注我们,我们能为你解答大多数关于 Linux 的基础需求。
|
||||
|
||||
然而,对 Linux 的学习总是无止境的,即便是对于资深的 Linux 专家也是如此。👨💻👩💻
|
||||
|
||||
实际上,一些网站和博客内容对于 Linux 新手以及有经验的用户都十分有用。
|
||||
|
||||
下面我就来列举一些你或许应该收藏的优秀网站。
|
||||
|
||||
### 1、ArchWiki
|
||||
|
||||
![][1]
|
||||
|
||||
[ArchWiki][2] 平台提供了各种信息。无论你是寻求关于工具、安全技术、安装程序、桌面环境,或是其它任何主题的内容,你都可以在 ArchWiki 上找到相关的深入讨论。
|
||||
|
||||
从技术角度讲,ArchWiki 充当着 Arch Linux 发行版的文档门户。不过,即使你并非 Arch Linux 的用户,你仍然可以在这里找到教程、指南、常见问题解答(F.A.Q),以及大量其它的关键信息。
|
||||
|
||||
这些信息表述清晰,经过详尽的审查以及更新,且易于理解。
|
||||
|
||||
> **[ArchWiki][2]**
|
||||
|
||||
### 2、ExplainShell
|
||||
|
||||
![][3]
|
||||
|
||||
[ExplainShell][4] 是一个非常有趣的平台,可以帮助你快速识别命令中所使用的参数。
|
||||
|
||||
通常,我们需要分别检索手册页或者是命令信息。而有了 ExplainShell,这个过程就变得更高效,它能够迅速为你提供所需的信息,同时为你提供对应的手册页链接。
|
||||
|
||||
它主要显示从 Ubuntu 的手册页库中提取的信息。所以,无论你是正在进行软件安装,进行 Git 提交,还是连接到 SSH,你都可以借助 ExplainShell 来深入理解各种命令。
|
||||
|
||||
> **[ExplainShell][4]**
|
||||
|
||||
### 3、Crontab.guru
|
||||
|
||||
![][5]
|
||||
|
||||
如果你想要创建 [cron 任务][6] 以实现自动化,那么 [Crontab.guru][7] 就是一款必备的便利网站。
|
||||
|
||||
只需输入你计划在 cron 任务中采用的表达式,即可获取关于其是否会按预期工作的详细反馈。对于正确的表达式,它将直接呈现你想通过 cron 任务设定的时间表。
|
||||
|
||||
除此之外,即使你是 cron 的新手,它也会在编辑器里高亮表达月份/日期/星期的字段。
|
||||
|
||||
如果内容符合你的预期,就可以直接使用,或者编辑以修正并使用。
|
||||
|
||||
> **[Crontab.guru][7]**
|
||||
|
||||
### 4. DistroWatch
|
||||
|
||||
![][9]
|
||||
|
||||
[DistroWatch][10] 或许是每个 Linux 用户都耳熟能详的网站。该网站以列举当前热门 Linux 发行版而闻名,一些用户甚至参考其流行度榜单,以了解自己偏爱的发行版是否位列其他版本之上。
|
||||
|
||||
在这里,你可以获取到最新发布的各种 Linux 发行版的更新信息,其中可能包括一些你此前未曾听闻过的版本,以及新版本的简要更改日志。
|
||||
|
||||
如果你订阅了它们的通讯,还可以收到发行版评论以及一些有关开发的新闻。对于希望跟踪最新发行版的用户,这个网站值得你书签收藏。
|
||||
|
||||
> **[DistroWatch][10]**
|
||||
|
||||
### 5、Phoronix
|
||||
|
||||
![][11]
|
||||
|
||||
[Phoronix][12] 是目前为止最老牌的 Linux 网站之一,专注于发布面向硬件的内容。
|
||||
|
||||
无论你正寻找与最新处理器相关的 Linux 基准测试,还是 Linux 发行版的性能报告,你都可以在 Phoronix 上找到。除此之外,你还可以在这里定期获取到 Linux 世界的最新消息和开发动向。
|
||||
|
||||
> **[Phoronix][12]**
|
||||
|
||||
### 6、Ubuntu Blog
|
||||
|
||||
![][13]
|
||||
|
||||
Canonical 的博客主要关注 Ubuntu、其开发动态、企业级更新以及其它技术性进展。
|
||||
|
||||
如何你希望了解关于 Ubuntu 的所有事情,那么 [Ubuntu Blog][14] 就是你的最佳书签。无论你是物联网爱好者,还是利用 Ubuntu 进行机器人工程开发,总有新动态在发生。
|
||||
|
||||
坦白说,鉴于 Ubuntu 广泛的应用,你无法从任何特定的博客获取所有这些更新信息。
|
||||
|
||||
> **[Ubuntu Blog][14]**
|
||||
|
||||
### 7、GamingOnLinux
|
||||
|
||||
![][15]
|
||||
|
||||
尽管我们也会覆盖一些游戏更新,并为你提供一个 [游戏指南][16],但是对于全面了解 Linux 游戏和 Steam Deck 的一切,[GamingOnLinux][17] 是你的终极选择。
|
||||
|
||||
不论是新的开发动态、新游戏、SteamOS 的发布、SteamVR,还是对 Linux 用户有重要影响的促销信息,你都可以在这里找到。
|
||||
|
||||
> **[GamingOnLinux][17]**
|
||||
|
||||
### 8、Reddit 的 /r/Linux 子论坛
|
||||
|
||||
![][18]
|
||||
|
||||
虽然 Reddit 已经与过去有所不同,但其子论坛仍然值得关注。
|
||||
|
||||
[/r/Linux 子论坛][19] 是一个值得你收藏的社区,你可以在这里读到开源世界和 Linux 领域的最新动态。也许 Reddit 用户并没有你想象中那么友好,但如果你想随时了解最新的变化,这个子论坛绝对值得你的收藏。
|
||||
|
||||
> **[/r/Linux 子论坛][19]**
|
||||
|
||||
### 私货:Linux 中国
|
||||
|
||||
翻译这篇文章时,我觉得应该将我们的网站也推荐给大家:
|
||||
|
||||
Linux 中国是一家立足中文开源爱好者社区的网站,已经持续为大家提供了十多年的关于开源、技术方面的内容。除了网站,我们还提供了同名的微信公众号、知乎官方账号。此外,我们在 BiliBili、YouTube、微博、抖音上也提供了短视频内容;在喜马拉雅上提供了音频内容;以及,很多人都在订阅的 RSS。
|
||||
|
||||
> **[Linux 中国][19A]**
|
||||
|
||||
顺便说一句,我们现在提供了深色模式和文本模式,你试过了吗?
|
||||
|
||||
### 我收藏了什么?
|
||||
|
||||
我很喜欢 **Phoronix 带来的硬件深度分析** 和 **Distrowatch 对新发行版项目的最新消息**,因此这两个网站一直位于我的收藏列表中。
|
||||
|
||||
而你需要收藏什么呢?
|
||||
|
||||
事实上,如果你是 Ubuntu 的桌面用户,关注 **Canonical 的博客**无疑能帮你了解最新版本的发布和新功能的解读。对于游戏爱好者,**GamingOnLinux** 是你的一站式解决方案。
|
||||
|
||||
假如你是那种总想知道事物运作方式或本质的人,那么,**ArchWiki**应该是你的首选。
|
||||
|
||||
当然,对于所有跟 Linux 相关的东西,我们会竭尽全力为你提供最佳的内容。所以,请别忘了也收藏我们哦!😉
|
||||
|
||||
💬 那么,你最喜欢收藏哪些网站呢?请在下方评论区告诉我吧!
|
||||
|
||||
*(题图:MJ/f29cd1de-dacc-4b38-b91d-a697d9adf8da)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/useful-linux-websites/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/10/archwiki-archlinux.jpg
|
||||
[2]: https://wiki.archlinux.org/
|
||||
[3]: https://itsfoss.com/content/images/2023/10/explainshell.jpg
|
||||
[4]: https://explainshell.com/
|
||||
[5]: https://itsfoss.com/content/images/2023/10/crontab-guru.jpg
|
||||
[6]: https://itsfoss.com/cron-job/
|
||||
[7]: https://crontab.guru/
|
||||
[8]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[9]: https://itsfoss.com/content/images/2023/10/distrowatch-screenshot.jpg
|
||||
[10]: https://distrowatch.com/
|
||||
[11]: https://itsfoss.com/content/images/2023/10/phoronix.jpg
|
||||
[12]: https://www.phoronix.com/
|
||||
[13]: https://itsfoss.com/content/images/2023/10/ubuntu-blog.jpg
|
||||
[14]: https://ubuntu.com/blog
|
||||
[15]: https://itsfoss.com/content/images/2023/10/gamingonlinux.jpg
|
||||
[16]: https://itsfoss.com/linux-gaming-guide/
|
||||
[17]: https://gamingonlinux.com/
|
||||
[18]: https://itsfoss.com/content/images/2023/10/linux-subreddit.jpg
|
||||
[19]: https://www.reddit.com/r/linux/
|
||||
[19A]: https://linux.cn/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/10/111732lnv0n709f7n59xqv.png
|
||||
@@ -0,0 +1,190 @@
|
||||
[#]: subject: "Rename Files and Directories in Linux Command Line"
|
||||
[#]: via: "https://itsfoss.com/linux-rename-files-directories/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16411-1.html"
|
||||
|
||||
终端基础:在 Linux 中重命名文件和目录
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在这篇基本命令行教程中,你将学习在 Linux 终端重命名文件和目录的各种方法。
|
||||
|
||||
如何在 Linux 终端中重命名文件和目录?你可以使用 `mv` 命令。
|
||||
|
||||
是的,与用于将文件和文件夹从一个位置“移动”到另一个位置的 `mv` 命令相同。
|
||||
|
||||
你可以在“移动文件和目录”时简单地指定文件和目录的新名称。
|
||||
|
||||
要重命名文件,请使用:
|
||||
|
||||
```
|
||||
mv old_file new_file
|
||||
```
|
||||
|
||||
同样,要重命名目录,请使用:
|
||||
|
||||
```
|
||||
mv old_dir new_dir
|
||||
```
|
||||
|
||||
听起来很容易,对吧? 但我将在这里详细讨论文件重命名:
|
||||
|
||||
* 向你展示重命名的实际示例
|
||||
* 显示通过结合 `find` 和 `exec` 命令批量重命名多个文件的示例
|
||||
* 讨论用于批量重命名文件的专用程序
|
||||
|
||||
我们来一一看看。
|
||||
|
||||
### 使用 mv 命令重命名文件和目录
|
||||
|
||||
使用 `mv` 命令重命名同一目录中的文件:
|
||||
|
||||
```
|
||||
mv file1.txt file2.txt
|
||||
```
|
||||
|
||||
同样,你可以重命名同一位置的目录:
|
||||
|
||||
```
|
||||
mv dir1 dir2
|
||||
```
|
||||
|
||||
这是我重命名文件和目录的示例:
|
||||
|
||||
![][1]
|
||||
|
||||
如你所见,与 [cp 命令][2] 不同,你不必使用递归选项来通过 [mv 命令][3] 处理目录。
|
||||
|
||||
> 🚧 如果你尝试使用相同的名称重命名该文件,你会看到一个错误(显然)。
|
||||
|
||||
你还可以在将文件移动到另一个位置时重命名它:
|
||||
|
||||
```
|
||||
mv old-file-name another_dir/new-file-name
|
||||
```
|
||||
|
||||
在下面的示例中,我将名为 `firefox-quiz.txt` 的文件移动到示例目录。在这样做的同时,我将其重命名为 `quiz.txt`。
|
||||
|
||||
![][4]
|
||||
|
||||
我将其视为剪切粘贴操作。
|
||||
|
||||
> 💡 虽然你可以将多个文件移动到另一个位置(`mv file1 file2 file2 dir`),但你不能使用 `mv` 重命名多个文件。为此,你必须采用我在以下部分中讨论的其他策略。
|
||||
|
||||
### 通过组合 mv、find 和 exec 命令重命名与某个模式匹配的多个文件
|
||||
|
||||
> 🚧 批量重命名此类文件时要格外小心。一步错误的举动就会导致无法挽回的不良结果。
|
||||
|
||||
`find` 命令用于根据文件名、类型、修改时间和其他参数在给定目录中查找文件。[exec 命令与 find][5] 结合使用,对 `find` 命令的结果执行命令。
|
||||
|
||||
使用 `find`、`exec` 和 `mv` 命令没有固定标准的结构。你可以根据需要组合它们。
|
||||
|
||||
假设你想通过在名称中添加 `_old` 来重命名当前目录中以 `.txt` 结尾的所有文件。所以 `file_1.txt` 变成 `file_1.txt_old` 等等。
|
||||
|
||||
```
|
||||
find . -type f -name "*.txt" -exec mv {} {}_old ;
|
||||
```
|
||||
|
||||
![][6]
|
||||
|
||||
这只是一个示例,你的重命名要求可能会有所不同。另外,**以上仅适用于不带空格的文件名**。
|
||||
|
||||
**专业提示**:在处理这样的批量操作时,你可以巧妙地使用 `echo` 命令来查看将执行什么操作,而不是实际执行它。如果看起来不错,那就采取实际行动吧。
|
||||
|
||||
例如,首先查看哪些文件将被重命名:
|
||||
|
||||
```
|
||||
find . -type f -name "*.txt" -exec echo mv {} {}_old \;
|
||||
```
|
||||
|
||||
![][7]
|
||||
|
||||
如你所见,实际上没有重命名任何文件。但是,如果你在没有使用回显(`echo`)命令的情况下运行上述命令,你将看到将执行什么命令。
|
||||
|
||||
如果你觉得没问题,请删除 `echo` 命令并继续进行实际的重命名。
|
||||
|
||||
```
|
||||
find . -type f -name "*.txt" -exec mv {} {}_old \;
|
||||
```
|
||||
|
||||
我在 《Efficient Linux 命令行》一书中学到了这个技巧。一本充满了这样的小宝石的优秀书。难怪它已成为 [我最喜欢的 Linux 书籍][8]之一。
|
||||
|
||||
### 使用 rename 命令轻松重命名多个文件
|
||||
|
||||
有一个名为 `rename` 的便捷命令行程序,可用于根据给定的 Perl 正则表达式模式批量重命名文件。
|
||||
|
||||
该实用程序不是 GNU 工具链的一部分,也不是预安装的。因此,你必须首先使用发行版的包管理器来安装它。
|
||||
|
||||
对于 Debian/Ubuntu,命令为:
|
||||
|
||||
```
|
||||
sudo apt install rename
|
||||
```
|
||||
|
||||
你可以通过以下方式使用它:
|
||||
|
||||
```
|
||||
rename [options] perl_regex [files]
|
||||
```
|
||||
|
||||
选项有:
|
||||
|
||||
* `-v` : 详细模式
|
||||
* `-n` :无操作,显示将被重命名的文件,但不重命名它们
|
||||
* `-o` : 不覆盖
|
||||
* `-f` : 强制覆盖现有文件
|
||||
* `-s` : 不重命名软链接,只重命名其目标
|
||||
|
||||
现在,让我们采用你在上一节中看到的相同示例。将 `*.txt` 重命名为 `.txt_old`。
|
||||
|
||||
```
|
||||
rename 's/\.txt$/.txt_old/' **
|
||||
```
|
||||
|
||||
我不打算在这里解释正则表达式。`**` 表示查看所有子目录中的所有文件。
|
||||
|
||||
![][11]
|
||||
|
||||
正如你所看到的,它按预期工作。
|
||||
|
||||
### 总结
|
||||
|
||||
我希望你喜欢这个技巧,它可以帮助你学习在 Linux 命令行中执行基本任务。当然是针对那些想学习和使用命令行的人。桌面用户始终拥有用于此类任务的 GUI 工具。
|
||||
|
||||
如果你对 Linux 命令完全陌生,本系列将对你有很大帮助。
|
||||
|
||||
> **[终端基础:Linux 终端入门][12]**
|
||||
|
||||
如果你有疑问或建议,请告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linux-rename-files-directories/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/11/renaming-file-directory-linux-command-line.png
|
||||
[2]: https://itsfoss.com/cp-command/
|
||||
[3]: https://linuxhandbook.com/mv-command/
|
||||
[4]: https://itsfoss.com/content/images/2023/11/rename-file-while-moving-another-location.png
|
||||
[5]: https://linuxhandbook.com/find-exec-command/
|
||||
[6]: https://itsfoss.com/content/images/2023/11/bulk-renaming-files-linux-1.png
|
||||
[7]: https://itsfoss.com/content/images/2023/11/use-echo-for-dry-run-renaming-files.png
|
||||
[8]: https://itsfoss.com/best-linux-books/
|
||||
[9]: https://itsfoss.com/content/images/2023/04/efficient-at-linux-command-line-horizontal.png
|
||||
[10]: https://amzn.to/3MPjiHw
|
||||
[11]: https://itsfoss.com/content/images/2023/11/use-rename-command-linux.png
|
||||
[12]: https://linux.cn/article-16104-1.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/24/215355ef7zfwuh9cx74u47.jpg
|
||||
@@ -0,0 +1,138 @@
|
||||
[#]: subject: "How to rebase to Fedora Linux 39 on Silverblue"
|
||||
[#]: via: "https://fedoramagazine.org/how-to-rebase-to-fedora-linux-39-on-silverblue/"
|
||||
[#]: author: "Michal Konečný https://fedoramagazine.org/author/zlopez/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16369-1.html"
|
||||
|
||||
如何将 Silverblue 重定位到 Fedora Linux 39
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
Fedora Silverblue 是 [一款基于 Fedora Linux 构建的面向桌面的操作系统][2]。这款操作系统非常适合日常使用、开发和容器化的工作流程。它有 [许多优势][3],例如可以在发生问题时轻松回滚操作。如果你想在 Fedora Silverblue 系统上更新或将系统 <ruby>重定位<rt>rebase</rt></ruby> 到 Fedora Linux 39,本文会提供帮助。文章不仅会指导你执行操作,还会教你如何在遇到意外情况时撤销操作。
|
||||
|
||||
### 更新你目前的系统
|
||||
|
||||
在实际重定位至 Fedora Linux 39 前,你需要先安装所有待处理的更新。你可以在终端中使用下面的命令:
|
||||
|
||||
```
|
||||
$ rpm-ostree update
|
||||
```
|
||||
|
||||
或者你也可以通过 GNOME “软件”应用安装更新,然后重新启动系统。
|
||||
|
||||
### 使用 GNOME “软件” 重定位
|
||||
|
||||
在 GNOME “软件”应用的更新页面上,你可以看到 Fedora Linux 的新版本已经可以使用。
|
||||
|
||||
首先,你需要点击 “<ruby>下载<rt>Download</rt></ruby>” 按钮来下载新的操作系统镜像。这个过程可能需要一些时间。完成后,你会发现更新已经准备好进行安装。
|
||||
|
||||
接下来,点击 “<ruby>重新启动 & 升级<rt>Restart & Upgrade</rt></ruby>” 按钮。这个过程只需要几分钟,一旦更新完成,计算机将会重新启动。重启后,你会看到崭新的 Fedora Linux 39 的系统环境,看起来很简单,是吧?
|
||||
|
||||
### 使用终端进行重定位
|
||||
|
||||
如果你更喜欢在终端操作,那么这部分指南就是为你准备的。
|
||||
|
||||
首先你需要确认 39 版本是否已经可以使用:
|
||||
|
||||
```
|
||||
$ ostree remote refs fedora
|
||||
```
|
||||
|
||||
在命令输出中你应该看到如下内容:
|
||||
|
||||
```
|
||||
fedora:fedora/39/x86_64/silverblue
|
||||
```
|
||||
|
||||
如果你想保留当前的部署(这意味着这个部署将会持续在 GRUB 中显示为一个选项,直到你手动移除它),你可以通过运行下面的命令实现:
|
||||
|
||||
```
|
||||
# 0 是在 rpm-ostree 状态中的条目位置
|
||||
$ sudo ostree admin pin 0
|
||||
```
|
||||
|
||||
如果你想移除已经固定的部署,你可以使用下面的命令:
|
||||
|
||||
```
|
||||
# 2 是在 rpm-ostree 状态中的条目位置
|
||||
$ sudo ostree admin pin --unpin 2
|
||||
```
|
||||
|
||||
然后,将你的系统重定位至 Fedora Linux 39 镜像。
|
||||
|
||||
```
|
||||
$ rpm-ostree rebase fedora:fedora/39/x86_64/silverblue
|
||||
```
|
||||
|
||||
最后,重启你的电脑,启动进入 Fedora Linux 39 版本。
|
||||
|
||||
### 如何进行回滚
|
||||
|
||||
如果遇到任何问题(例如,如果你无法启动 Fedora Linux 39),回滚是非常容易的。在系统启动时,在 GRUB 菜单中选择 Fedora Linux 39 之前的版本,然后你的系统就会启动这个更早的版本而非 Fedora Linux 39。如果你在启动过程中看不到 GRUB 菜单,那么在启动时尝试按下 `ESC` 键。如果你想让更早版本的选择永久生效,你可以使用下面的命令:
|
||||
|
||||
```
|
||||
$ rpm-ostree rollback
|
||||
```
|
||||
|
||||
现在,你已经了解如何将 Fedora Silverblue 系统重定位到 Fedora Linux 39,以及如何进行系统回滚了。那么何不今天就试试看呢?
|
||||
|
||||
### 常见问题解答
|
||||
|
||||
在每篇关于重定位 Silverblue 到新版本的文章的评论中,总会有相似的问题,因此我会在这个部分尝试解答这些问题。
|
||||
|
||||
**问题:在 Fedora 的重定位过程中我能跳过某些版本吗?例如直接从 Fedora 37 Silverblue 更新到 Fedora 39 Silverblue。**
|
||||
|
||||
答案:虽然有时可能可以在重定位过程中跳过某些版本,但并不推荐这样操作。你应当始终更新到紧邻的新版本(例如从 38 更新到 39),以避免不必要的错误。
|
||||
|
||||
**问题:我安装了 [rpm-fusion][4] ,在重定位过程中出现错误,我应当怎样进行重定位?**
|
||||
|
||||
答案:如果你在 Silverblue 安装上加入了 [rpm-fusion][4],你在重定位前应当执行以下操作:
|
||||
|
||||
```
|
||||
rpm-ostree update \
|
||||
--uninstall rpmfusion-free-release \
|
||||
--uninstall rpmfusion-nonfree-release \
|
||||
--install rpmfusion-free-release \
|
||||
--install rpmfusion-nonfree-release
|
||||
```
|
||||
|
||||
执行完上述操作后,你可以按照本篇博文的步骤完成重定位过程。
|
||||
|
||||
**问题:这个指南是否适用于其他的 ostree 版本(例如 Kinoite, Sericea)?**
|
||||
|
||||
答案:是的,你可以照着本指南的 _使用终端进行重定位_ 部分的操作来完成所有的 Fedora ostree 版本的重定位过程。只需要使用对应的分支即可。例如对于 Kinoite,你可以使用
|
||||
|
||||
```
|
||||
fedora:fedora/39/x86_64/kinoite
|
||||
```
|
||||
|
||||
而非
|
||||
|
||||
```
|
||||
fedora:fedora/39/x86_64/silverblue
|
||||
```
|
||||
|
||||
*(题图:MJ/71150afc-ae44-48f3-8689-e86758e07b1e)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/how-to-rebase-to-fedora-linux-39-on-silverblue/
|
||||
|
||||
作者:[Michal Konečný][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/zlopez/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2021/04/silverblue-rebase-816x345.jpg
|
||||
[2]: https://docs.fedoraproject.org/en-US/fedora-silverblue/
|
||||
[3]: https://fedoramagazine.org/give-fedora-silverblue-a-test-drive/
|
||||
[4]: https://rpmfusion.org/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/11/152119r6nv12c115vntzp4.png
|
||||
@@ -0,0 +1,139 @@
|
||||
[#]: subject: "Fixing 'target not found' Error in Arch Linux"
|
||||
[#]: via: "https://itsfoss.com/target-not-found-arch-linux/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16419-1.html"
|
||||
|
||||
修复 Arch Linux 中的 “target not found” 错误
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 如果在 Arch Linux 中安装软件包时遇到 “target not found” 错误,您可以采取以下措施。
|
||||
|
||||
有一天,我尝试在 Arch Linux 上安装 Hyprland。当我使用 [Pacman 命令安装][1] 它时,它抛出 “target not found”(目标未发现)错误。
|
||||
|
||||
```
|
||||
$ sudo pacman -S hyprland
|
||||
[sudo] password for abhishek:
|
||||
error: target not found: hyprland
|
||||
|
||||
```
|
||||
|
||||
这是一个意外,因为我知道 Hyprland 是可用的。
|
||||
|
||||
**我的修复方法**是更新系统,在大多数情况下,它可以解决此问题。
|
||||
|
||||
```
|
||||
sudo pacman -Syu
|
||||
```
|
||||
|
||||
这里,本地包数据库不同步。我需要更新缓存。这里还建议更新系统。
|
||||
|
||||
在大多数情况下,这就是修复此错误的方法。但是,你看到此错误的原因可能还有其他一些。让我在这里详细讨论它们。
|
||||
|
||||
### 修复:更新系统
|
||||
|
||||
Arch Linux 是一个 [滚动发布发行版][2],并且它提供的更新非常频繁。如果你不每隔几天更新一次系统,你的本地包数据库将与远程镜像不同步,并且你将在安装软件包时遇到问题。
|
||||
|
||||
本地包数据库仅保留包的元数据,例如版本号、用于获取包的仓库 URL 等。
|
||||
|
||||
当你搜索软件包时,`pacman` 会提供搜索结果,表明该软件包可用。但是,该包在你的本地数据库中具有较旧的版本号。当 `pacman` 在远程仓库中搜索包(以获取实际的包)时,它不再找到旧版本的 URL。
|
||||
|
||||
这就是导致 “target not found” 错误的原因。
|
||||
|
||||
修复方法是更新本地数据库。这可以与 `pacman -Sy` 一起使用,但是,建议 [更新整个 Arch Linux 系统][3] 以避免依赖冲突等。
|
||||
|
||||
```
|
||||
sudo pacman -Syu
|
||||
```
|
||||
|
||||
> 📋 如果你已有几周没有更新系统,请做好更新超过 1 GB 的准备。这可能需要一些时间,具体取决于你的互联网速度和你使用的镜像。
|
||||
|
||||
就我而言,Arch 安装在我的辅助系统上。由于我一周左右无法使用它,该系统已经过时了。更新后,我就可以安装 [Hyprland][4]。
|
||||
|
||||
![][5]
|
||||
|
||||
> 💡 如果这不起作用,请通过添加额外的 `y` 强制刷新所有包数据库: `sudo pacman -Syyu`
|
||||
|
||||
### 修复 “target not found” 错误的其他建议
|
||||
|
||||
如果上述方法没有为你解决此错误,这里有一些修复此错误的提示。
|
||||
|
||||
#### 仔细检查包名称
|
||||
|
||||
我亲爱的 Watson,这可能看起来很简单,但人们通常只是错误地输入了包名称。
|
||||
|
||||
Linux 区分大小写,包通常以小写命名。因此,如果你要使用一个名为 Flameshot 的流行工具,那么它的包名称很可能是 flameshot。
|
||||
|
||||
此外,某些软件的拼写与常见软件的拼写不同。例如,它是 hyprland,这使我错误地输入了 hyperland(使用通常的 “hyper” 拼写)。
|
||||
|
||||
![][6]
|
||||
|
||||
在极少数情况下,可能会混淆是 `l`、`I` 或者 `1`。
|
||||
|
||||
基本上,确保你输入的包名称是正确的。
|
||||
|
||||
#### 查看该软件包在仓库中是否可用
|
||||
|
||||
Arch Linux 的仓库中有大量软件包。但这并不意味着它拥有所有可能的 Linux 软件包。
|
||||
|
||||
访问 Arch Linux 官方软件包网站:
|
||||
|
||||
[Arch Linux 软件包搜索][7]
|
||||
|
||||
在这里输入包名,查看该包是否可用。如果是,它是哪个仓库以及它在哪个设备上可用。
|
||||
|
||||
![][8]
|
||||
|
||||
`x86_64` 适用于英特尔架构,任何包含 ARM 架构的均适用于 [树莓派类设备][9]。
|
||||
|
||||
> 💡 如果在某些仓库中找到该软件包,但 pacman 即使在更新的系统上也找不到它,请检查 `pacman.conf` 文件并查看是否启用了所述仓库。
|
||||
|
||||
#### 确保它不是 AUR 包
|
||||
|
||||
[Arch 用户仓库(AUR)][10] 是提供更新包的附加社区支持平台。
|
||||
|
||||
现在,有多种使用 AUR 包的方法,但 `pacman` 不是其中之一。
|
||||
|
||||
检查你尝试安装的软件包是否是 AUR 软件包。首先检查官方 Arch 仓库,如上所述。如果不存在,请检查 AUR 页面。
|
||||
|
||||
如果它是 AUR 包,则必须 [使用 yay][11] 或一些 [其他 AUR 帮助程序][12]。你不能使用 `pacman` 安装 AUR 软件包。
|
||||
|
||||
### 你能解决这个问题吗?
|
||||
|
||||
在大多数情况下,更新系统可以解决此问题。在极少数情况下,可能还有其他原因,我已经提到了一些建议。
|
||||
|
||||
现在轮到你了。如果你能够解决此问题,请在评论区告诉我。
|
||||
|
||||
*(题图:MJ/b71c9760-4cb1-41de-a336-3e38026bcfeb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/target-not-found-arch-linux/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/pacman-command/
|
||||
[2]: https://itsfoss.com/rolling-release/
|
||||
[3]: https://itsfoss.com/update-arch-linux/
|
||||
[4]: https://hyprland.org/
|
||||
[5]: https://itsfoss.com/content/images/2023/11/installing-hyperland.png
|
||||
[6]: https://itsfoss.com/content/images/2023/11/pacman-target-not-found-error-arch-linux.png
|
||||
[7]: https://archlinux.org/packages/
|
||||
[8]: https://itsfoss.com/content/images/2023/11/arch-linux-package-search.png
|
||||
[9]: https://itsfoss.com/raspberry-pi-alternatives/
|
||||
[10]: https://itsfoss.com/aur-arch-linux/
|
||||
[11]: https://itsfoss.com/install-yay-arch-linux/
|
||||
[12]: https://itsfoss.com/best-aur-helpers/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/26/235547szhfv062quxx0hry.png
|
||||
@@ -0,0 +1,78 @@
|
||||
[#]: subject: "elementary OS 8 Details Revealed!"
|
||||
[#]: via: "https://news.itsfoss.com/elementary-os-8-dev/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16375-1.html"
|
||||
|
||||
下一代 elementary OS 8 剧透
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 你是否正在关注 elementary OS 8 的升级呢?接下来的信息你必须了解。
|
||||
|
||||
elementary OS 无疑是 [最美丽的 Linux 发行版][1] 中的佼佼者。就在一个月之前,注重隐私保护的 [elementary OS 7.1][2] 版本也发布了。
|
||||
|
||||
现在,通过最新的公告,我们对即将发布的 elementary OS 8 有了更全面的了解。
|
||||
|
||||
而且这一次,我们看起来可能会早一点体验到新的 elementary OS 版本。
|
||||
|
||||
让我们深入挖掘下吧!🤓
|
||||
|
||||
### elementary OS 8:一项雄心勃勃的尝试
|
||||
|
||||
**elementary OS 的开发者已经将目标转向** OS 8 系列,他们 **对此寄予了深厚的期待,看好其带来的大量结构性改变和升级**。
|
||||
|
||||
根据 elementary OS 8 的开发路线图,此次主要版本将以 **Ubuntu 24.04 的源代码库** 为基础构建,然而,目前的情况显示,我们至少需要 **等到 2024 年 4 月才能见到 OS 8 的发布**。
|
||||
|
||||
同时,他们也明确提到,他们设定了一些 **非常雄心勃勃的目标**,希望未来的 6 个月内就可以完成。不过,他们 **打算在 OS 8 完全准备就绪后再进行发布**。
|
||||
|
||||
那么,这些目标具体有哪些呢?
|
||||
|
||||
首先,他们计划默认实现对 [Wayland][3] 的 **过渡**,这不算令人意外,因为我们已经看到许多主流发行版都在采用它。接下来便是 **延续 GTK 4 的过渡**,其中包含了一些目前处于开发最后阶段的核心应用。
|
||||
|
||||
此外,他们正处于 **设计新的快速设置菜单的初级阶段**,并且还明确表示,**此次发布会对他们的桌面环境 Pantheon 的设计进行重大改进**。
|
||||
|
||||
读到这里,你可能会产生一个问题;**那么,elementary OS 7 将会如何呢?**
|
||||
|
||||
开发者已经明确表示,**当前正在使用 OS 7 的用户从现在起可能会收到的更新会变少**,因为他们认为 OS 7 版本已经相当完善。
|
||||
|
||||
但是,所有以 Flatpak 包形式提供的应用还将继续定期接收更新,这当然也包括了许多 elementary OS 的核心应用。
|
||||
|
||||
想要了解更多信息,你可以参考 [官方公告][4]。如果你对 **elementary OS 8 的开发进度** 感兴趣,你可以在其 GitHub [项目看板][5] 上进行关注。
|
||||
|
||||
**你是否想要尝试一下 elementary OS 8 的早期构建版本呢?**
|
||||
|
||||
好的,**基于 Ubuntu 24.04 源代码库的试验构建版** 现在就可以下载了!请记住,想要获取下载权限,**你需要成为 GitHub 上的赞助者**。
|
||||
|
||||
现在就可以前往官方的 [构建网站][6] 开始下载了。
|
||||
|
||||
> **[elementary OS 早期访问][6]**
|
||||
|
||||
💬 你对此感到兴奋吗?欢迎在下方留言分享你的观点!
|
||||
|
||||
*(题图:MJ/e707c7c7-8d97-4f41-a955-cf455784493f)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/elementary-os-8-dev/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/beautiful-linux-distributions/
|
||||
[2]: https://news.itsfoss.com/elementary-os-7-1/
|
||||
[3]: https://wayland.freedesktop.org/
|
||||
[4]: https://blog.elementary.io/lets-talk-os-8/
|
||||
[5]: https://github.com/orgs/elementary/projects/128/views/1
|
||||
[6]: https://builds.elementary.io/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/13/154850fxab1f5lwnj5qwz5.png
|
||||
@@ -0,0 +1,302 @@
|
||||
[#]: subject: "How git cherry-pick and revert use 3-way merge"
|
||||
[#]: via: "https://jvns.ca/blog/2023/11/10/how-cherry-pick-and-revert-work/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16378-1.html"
|
||||
|
||||
Git 的遴选和撤销操作是如何利用三路合并的
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
大家好!几天前,我尝试向其他人解释 Git 遴选(`git cherry-pick`)的工作原理,结果发现自己反而更混淆了。
|
||||
|
||||
我原先以为 Git 遴选是简单地应用一个补丁,但当我真正这样尝试时,却未能成功!
|
||||
|
||||
因此,接下来我们将谈论我原来以为的遴选操作(即应用一个补丁),这个理解为何不准确,以及实际上它是如何执行的(进行“三路合并”)。
|
||||
|
||||
尽管本文的内容有些深入,但你并不需要全部理解才能有效地使用 Git。不过,如果你(和我一样)对 Git 的内部运作感到好奇,那就跟我一起深入探讨一下吧!
|
||||
|
||||
### 遴选操作并不只是应用一个补丁
|
||||
|
||||
我先前理解的 `git cherry-pick COMMIT_ID` 的步骤如下:
|
||||
|
||||
* 首先是计算 `COMMIT_ID` 的差异,就如同执行 `git show COMMIT_ID --patch > out.patch` 这个命令
|
||||
* 然后是将补丁应用到当前分支,就如同执行 `git apply out.patch` 这个命令
|
||||
|
||||
在我们详细讨论之前,我想指出的是,虽然大部分情况下这个模型是正确的,如果这是你的认知模型,那就没有问题。但是在一些细微的地方,它可能会错,我觉得这个疑惑挺有意思的,所以我们来看看它究竟是如何运作的。
|
||||
|
||||
如果我在存在合并冲突的情况下尝试进行“计算差异并应用补丁”的操作,下面我们就看看具体会发生什么情况:
|
||||
|
||||
```
|
||||
$ git show 10e96e46 --patch > out.patch
|
||||
$ git apply out.patch
|
||||
error: patch failed: content/post/2023-07-28-why-is-dns-still-hard-to-learn-.markdown:17
|
||||
error: content/post/2023-07-28-why-is-dns-still-hard-to-learn-.markdown: patch does not apply
|
||||
```
|
||||
|
||||
这一过程无法成功完成,它并未提供任何解决冲突或处理问题的方案。
|
||||
|
||||
而真正运行 `git cherry-pick` 时的实际情况却大为不同,我遭遇到了一处合并冲突:
|
||||
|
||||
```
|
||||
$ git cherry-pick 10e96e46
|
||||
error: could not apply 10e96e46... wip
|
||||
hint: After resolving the conflicts, mark them with
|
||||
hint: "git add/rm <pathspec>", then run
|
||||
hint: "git cherry-pick --continue".
|
||||
```
|
||||
|
||||
因此,看起来 “Git 正在应用一个补丁”这样的理解方式并不十分准确。但这里的错误信息确实标明了 “无法**应用** 10e96e46”,这么看来,这种理解又不完全是错的。这到底是怎么回事呢?
|
||||
|
||||
### 那么,遴选到底是怎么执行的呢?
|
||||
|
||||
我深入研究了 Git 的源代码,主要是想了解 `cherry-pick` 是如何工作的,最终我找到了 [这一行代码][1]:
|
||||
|
||||
```
|
||||
res = do_recursive_merge(r, base, next, base_label, next_label, &head, &msgbuf, opts);
|
||||
```
|
||||
|
||||
所以,遴选实际上就是一种……合并操作?这有些出乎意料。那具体都合并了什么内容?如何执行这个合并操作的呢?
|
||||
|
||||
我意识到我对 Git 的合并操作并不是特别理解,于是我上网搜索了一下。结果发现 Git 实际上采用了一种被称为 “三路合并” 的合并方式。那这到底是什么含义呢?
|
||||
|
||||
### Git 的合并策略:三路合并
|
||||
|
||||
假设我要合并下面两个文件,我们将其分别命名为 `v1.py` 和 `v2.py`。
|
||||
|
||||
```
|
||||
def greet():
|
||||
greeting = "hello"
|
||||
name = "julia"
|
||||
return greeting + " " + name
|
||||
```
|
||||
|
||||
```
|
||||
def say_hello():
|
||||
greeting = "hello"
|
||||
name = "aanya"
|
||||
return greeting + " " + name
|
||||
```
|
||||
|
||||
在这两个文件间,存在两处不同:
|
||||
|
||||
* `def greet()` 和 `def say_hello`
|
||||
* `name = "julia"` 和 `name = "aanya"`
|
||||
|
||||
我们应该选择哪个呢?看起来好像不可能有答案!
|
||||
|
||||
不过,如果我告诉你,原始的函数(我们称之为 `base.py`)是这样的:
|
||||
|
||||
```
|
||||
def say_hello():
|
||||
greeting = "hello"
|
||||
name = "julia"
|
||||
return greeting + " " + name
|
||||
```
|
||||
|
||||
一切似乎变得清晰许多!在这个基础上,`v1` 将函数的名字更改为 `greet`,`v2` 将 `name = "aanya"`。因此,合并时,我们应该同时做出这两处改变:
|
||||
|
||||
```
|
||||
def greet():
|
||||
greeting = "hello"
|
||||
name = "aanya"
|
||||
return greeting + " " + name
|
||||
```
|
||||
|
||||
我们可以命令 Git 使用 `git merge-file` 来完成这次合并,结果正是我们预期的:它选择了 `def greet()` 和 `name = "aanya"`。
|
||||
|
||||
```
|
||||
$ git merge-file v1.py base.py v2.py -p
|
||||
def greet():
|
||||
greeting = "hello"
|
||||
name = "aanya"
|
||||
return greeting + " " + name⏎
|
||||
```
|
||||
|
||||
这种将两个文件与其原始版本进行合并的方式,被称为 **三路合并**。
|
||||
|
||||
如果你想在线上试一试,我在 [jvns.ca/3-way-merge/][2] 创建了一个小实验场。不过我只是草草制作,所以可能对移动端并不友好。
|
||||
|
||||
### Git 合并的是更改,而非文件
|
||||
|
||||
我对三路合并的理解是 —— Git 合并的是**更改**,而不是文件。我们对同一个文件做出两种不同的更改,Git 试图以合理的方式将这两种更改结合到一起。当两个更改都对同一行进行操作时,Git 可能会遇到困难,此时就会产生合并冲突。
|
||||
|
||||
Git 也可以合并超过两处的更改:你可以对同一文件有多达 8 处不同的更改,Git 会尝试将所有更改协调一致。这被称为八爪鱼合并,但除此之外我对其并不了解,因为我从未执行过这样的操作。
|
||||
|
||||
### Git 如何使用三路合并来应用补丁
|
||||
|
||||
接下来,让我们进入到一个有些出乎意料的情境!当我们讨论 Git “应用补丁”(如在变基 —— `rebase`、撤销 —— `revert` 或遴选 —— `cherry-pick` 中所做的)时,其实并非是生成一个补丁文件并应用它。相反,实际执行的是一次三路合并。
|
||||
|
||||
下面是如何将提交 `X` 作为补丁应用到你当前的提交,并与之前的 `v1`、`v2` 和 `base` 设置相对应:
|
||||
|
||||
1. **在你当前提交中**,文件的版本是 `v1`。
|
||||
2. **在提交 X 之前**,文件的版本是 `base`。
|
||||
3. **在提交 X 中**,文件的版本是 `v2`。
|
||||
4. 执行 `git merge-file v1 base v2` 以合并它们(实际上,Git 并不直接执行 `git merge-file`,而是运行一个实现这个功能的 C 函数)。
|
||||
|
||||
总的来说,你可以将 `base` 和 `v2` 视为“补丁”,它们之间的差异就是你想要应用到 `v1` 上的更改。
|
||||
|
||||
### 遴选如何运作
|
||||
|
||||
假设我们有如下提交图,并且我们打算在 `main` 分支上遴选提交 `Y`:
|
||||
|
||||
```
|
||||
A - B (main)
|
||||
\
|
||||
\
|
||||
X - Y - Z
|
||||
```
|
||||
|
||||
那么,如何将此情景转化为我们前面提过的 `v1`、`v2` 和 `base` 组成的三路合并呢?
|
||||
|
||||
* `B` 是 `v1`
|
||||
* `X` 是 `base`,而 `Y` 是 `v2`
|
||||
|
||||
所以,`X` 和 `Y` 共同构成了这个“补丁”。
|
||||
|
||||
其实,`git rebase` 无非就是重复多次执行 `git cherry-pick` 的过程。
|
||||
|
||||
### 撤销如何运作
|
||||
|
||||
现在,假如我们希望在如下的提交图上执行 `git revert Y`:
|
||||
|
||||
```
|
||||
X - Y - Z - A - B
|
||||
```
|
||||
|
||||
* `B` 是 `v1`
|
||||
* `Y` 是 `base`,而 `X` 是 `v2`
|
||||
|
||||
这个过程反映的实际上就是遴选的情况,不过 `X` 和 `Y` 的位置颠倒了。我们需要这样做因为我们期望生成一个“反向补丁”。在 Git 中,撤销和遴选关系如此的紧密,它们甚至在同一个文件中实现:[revert.c][3]。
|
||||
|
||||
### “三路补丁”是一个非常棒的技巧
|
||||
|
||||
使用三路合并将提交作为补丁应用的这个技巧非常巧妙且酷炫,我很惊讶之前从未听说过!我并未听过一个特定的名字来描述这种方法,但我更倾向于称之为“三路补丁”。
|
||||
|
||||
“三路补丁”的理念在于,你可以通过两个文件来定义补丁:在应用补丁前后的文件(在我们这篇文章中称之为 `base` 和 `v2`)。
|
||||
|
||||
因此,总体来看有三个文件被涉及到:一个是原文件,另外两个构成了补丁。
|
||||
|
||||
最重要的是,与普通补丁相比,三路补丁是一个更加高效的补丁方案,因为在有两个完整文件的情况下,你拥有更丰富的上下文信息来进行合并。
|
||||
|
||||
以下是我们例子中的常规补丁的大致情况:
|
||||
|
||||
```
|
||||
@@ -1,1 +1,1 @@:
|
||||
- def greet():
|
||||
+ def say_hello():
|
||||
greeting = "hello"
|
||||
```
|
||||
|
||||
而下面这就是一个三路补丁。不过,需要提醒的是这个“三路补丁”并不是一个真正的文件格式,这只是我自己提出的一种概念。
|
||||
|
||||
```
|
||||
BEFORE: (the full file)
|
||||
def greet():
|
||||
greeting = "hello"
|
||||
name = "julia"
|
||||
return greeting + " " + name
|
||||
AFTER: (the full file)
|
||||
def say_hello():
|
||||
greeting = "hello"
|
||||
name = "julia"
|
||||
return greeting + " " + name
|
||||
```
|
||||
|
||||
### 《Building Git》 中提到了这点
|
||||
|
||||
James Coglan 的书籍 [《Building Git》][4] 是我在 Git 源码之外唯一找到的地方,他解释了 `git cherry-pick` 是如何在底层运用三路合并的(我原以为《Pro Git》可能会提及这个,但我并没能找到此话题的内容)。
|
||||
|
||||
我购买完这本书后发现,我早在 2019 年时就已经买过了,这对我来说真的是个很好的参考。
|
||||
|
||||
### Git 中的合并实际上比这更复杂
|
||||
|
||||
在 Git 中,合并不限于三路合并 —— 还有一种我不太理解的叫做“递归合并”,还有许多具体处理文件删除和移动的细节,同时也有多种合并算法。
|
||||
|
||||
如果想要了解更多相关知识,我最好的建议是阅读《Building Git》,尽管我还未完全阅读这本书。
|
||||
|
||||
### Git 应用到底做了什么?
|
||||
|
||||
我也参阅了 Git 的源代码,试图理解 `git apply` 的功能。它似乎(不出意外地)在 `apply.c` 中实现。这段代码解析了一个补丁文件,并通入目标文件来寻找应该在何处应用补丁。核心逻辑似乎在 [这里][5]:思路好像是从补丁建议的行数开始,然后向前向后找寻。
|
||||
|
||||
```
|
||||
/*
|
||||
* There's probably some smart way to do this, but I'll leave
|
||||
* that to the smart and beautiful people. I'm simple and stupid.
|
||||
*/
|
||||
backwards = current;
|
||||
backwards_lno = line;
|
||||
forwards = current;
|
||||
forwards_lno = line;
|
||||
current_lno = line;
|
||||
for (i = 0; ; i++) {
|
||||
...
|
||||
```
|
||||
|
||||
这个处理过程不禁让人觉得非常直白、与之前的期望相符。
|
||||
|
||||
### Git 三路应用的工作方式
|
||||
|
||||
`git apply` 命令中也有一个 `--3way` 参数,可以实现三路合并。因此,我们实际上可以通过如下方式,使用 `git apply` 来大体实现 `git cherry-pick` 的功能:
|
||||
|
||||
```
|
||||
$ git show 10e96e46 --patch > out.patch
|
||||
$ git apply out.patch --3way
|
||||
Applied patch to 'content/post/2023-07-28-why-is-dns-still-hard-to-learn-.markdown' with conflicts.
|
||||
U content/post/2023-07-28-why-is-dns-still-hard-to-learn-.markdown
|
||||
```
|
||||
|
||||
但要注意,参数 `--3way` 并不只用到了补丁文件的内容!补丁文件开始的部分是:
|
||||
|
||||
```
|
||||
index d63ade04..65778fc0 100644
|
||||
```
|
||||
|
||||
`d63ade04` 和 `65778fc0` 是旧/新文件版本在 Git 对象数据库中的 ID,因此 Git 可以用这些 ID 来执行三路补丁操作。但如果有人将补丁文件通过邮件发送给你,而你并没有新/旧版本的文件,就无法执行这个操作:如果你缺少 blob,将会出现如下错误:
|
||||
|
||||
```
|
||||
$ git apply out.patch
|
||||
error: repository lacks the necessary blob to perform 3-way merge.
|
||||
```
|
||||
|
||||
### 三路合并有点历史了
|
||||
|
||||
有一部分人指出,三路合并比 Git 的历史还要久远,它起源于 70 年代末期左右。有一篇 2007 年的 [论文][5A] 对此进行了讨论。
|
||||
|
||||
### 就说这么多!
|
||||
|
||||
我真的对于我对于 Git 内部应用补丁的核心方法其实理解得并不深入这一点感到非常吃惊——学习这一点真的很酷!
|
||||
|
||||
虽然我对 Git 用户界面存在 [诸多不满][6],但是这个特定问题并不包含在内。三路合并似乎是统一解决一系列不同问题的优雅方式,它对于人们来说也很直观(“应用一个补丁”这个想法是许多编程者都习以为常的思考模式,而它底层实现为三路合并的细节,实际上没有人真正需要去思考)。
|
||||
|
||||
*我顺便快速推荐一下:我正在写一部有关 Git 的 [zine][7],如果你对它的发布感兴趣,你可以注册我非常不频繁的 [公告邮件列表][8]。*
|
||||
|
||||
*(题图:MJ/321bc2c9-4363-4661-802a-c74fb6a721b2)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2023/11/10/how-cherry-pick-and-revert-work/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://github.com/git/git/blob/dadef801b365989099a9929e995589e455c51fed/sequencer.c#L2353-L2358
|
||||
[2]: https://jvns.ca/3-way-merge/
|
||||
[3]: https://github.com/git/git/blob/dadef801b365989099a9929e995589e455c51fed/builtin/revert.c
|
||||
[4]: https://shop.jcoglan.com/building-git/
|
||||
[5]: https://github.com/git/git/blob/dadef801b365989099a9929e995589e455c51fed/apply.c#L2684
|
||||
[5A]: https://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf
|
||||
[6]: https://jvns.ca/blog/2023/11/01/confusing-git-terminology/
|
||||
[7]: https://wizardzines.com
|
||||
[8]: https://wizardzines.com/zine-announcements/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/14/103134uddjt7ljl8dbbdj2.png
|
||||
@@ -0,0 +1,100 @@
|
||||
[#]: subject: "Stunning New Steam Deck OLED Unveiled!"
|
||||
[#]: via: "https://news.itsfoss.com/steam-deck-oled/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16368-1.html"
|
||||
|
||||
震撼登场!全新的 Steam Deck OLED 公开亮相!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 一款全新的、拥有更好显示效果以及卓越规格的 Steam Deck。
|
||||
|
||||
随着假期临近,Valve 带给我们可能让这个季节更加欢乐的一些新鲜事。
|
||||
|
||||
他们近期的一次公告中,揭露了具备多项令人兴奋升级的**全新 Steam Deck 变体**。
|
||||
|
||||
快来一起深入了解一下吧。
|
||||
|
||||
### 🆕 Steam Deck OLED:有哪些新特点?
|
||||
|
||||
此款 Steam Deck 变体,如名所示,配备了**全新的 90Hz、7.4 英寸 HDR OLED 显示屏**,支持达到**高达 1,000 尼特的 HDR 峰值亮度**以及**600 尼特的 SDR 亮度**。
|
||||
|
||||
相较于现有的配备了 LCD 的型号, OLED 显示屏能够**为玩家呈现更为深邃的黑色和更加明亮的色彩**。
|
||||
|
||||
然而,超凡的显示屏**并非新款 Steam Deck 唯一的亮点**,它的处理器也实现了升级,**更高效的 6 纳米 AMD “Sephiroth” APU**如今负责所有板上的处理任务。
|
||||
|
||||
作为上述特性的补充,Steam Deck OLED 还配备有**更大容量的 50Whr 电池**,能够带给你持久的电池续航。
|
||||
|
||||
在连接性方面,它提供了**Wi-Fi 6** 和 **Bluetooth 5.3**,实现了**更优质的下载体验**。
|
||||
|
||||
> 📋 配有一根 2.5m 的电缆的 45W USB Type-C PD3.0 电源供应器,以便为电池充电。
|
||||
|
||||
对于**控制器也有所改进**,优化了模拟摇杆的顶部材料和形状,实现了更佳的粘性和防尘性,肩部按钮的反应更敏捷,并提供优越的触感反馈等等。
|
||||
|
||||
**操作系统仍然是 LCD 版本上的 Steam OS 3**,但是,如果你想尝试些不同的东西,不妨试试 [Bazzite][1]。
|
||||
|
||||
#### 🛠️ 主要规格
|
||||
|
||||
如果你想了解,新推出的 Steam Deck OLED 其实力如何?这里有详细的配置:
|
||||
|
||||
* **APU:** 6 纳米 AMD “Sephiroth”
|
||||
* **CPU:** 4 核,[Zen 2][3],主频 2.4–3.5 GHz
|
||||
* **GPU:** 8x [RDNA 2][4] 处理单元,主频 1.6 GHz
|
||||
* **RAM:** 16 GB LPDDR5
|
||||
* **存储:** 512 GB 或 1 TB 的 NVMe SSD
|
||||
* **操作系统:** [SteamOS][5] 3(基于 Arch)
|
||||
* **重量:** 669 克
|
||||
|
||||
**但是,等等,还有更多!**
|
||||
|
||||
Valve 也推出了**特别的限量版 Steam Deck OLED** ,它具有所有相同的技术规格和 1 TB 的存储,**透明壳体以及烟雾般透明的外观色彩**。一起来看看吧👇
|
||||
|
||||
![][6]
|
||||
|
||||
它看起来真的很酷。我非常喜欢许多制造商现在的做法,通过透明的外壳来展示设备本身。也许,这是一个很好的趋势。
|
||||
|
||||
Valve 表明,这款设备只在美国和加拿大有**数量有限的供应**。
|
||||
|
||||
这个量产策略之所以限量,是因为他们想**尝试**了解是否有大量的对此类产品的需求,他们计划在未来尝试更多的颜色方案。
|
||||
|
||||
### 🛒 在哪儿购买呢?
|
||||
|
||||
**起价为 549 美元**,你可以在 11 月 16 日之后在 [Steam Store][7] 采购 Steam Deck OLED。
|
||||
|
||||
但请注意,并非所有 Steam 运营的区域都有销售。
|
||||
|
||||
> **[Steam Deck OLED][7]**
|
||||
|
||||
如果你在想;**原有的 Steam Deck LCD 版本会怎么样?**
|
||||
|
||||
嗯,这些机型依然会有供应,并会定期更新。
|
||||
|
||||
💬 在即将到来的假期季节,你会想要购买一台吗?请在下方让我知道你的想法!
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/steam-deck-oled/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/bazzite/
|
||||
[2]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[3]: https://en.wikipedia.org/wiki/Zen_2
|
||||
[4]: https://en.wikipedia.org/wiki/RDNA_2
|
||||
[5]: https://itsfoss.com/steamos/
|
||||
[6]: https://news.itsfoss.com/content/images/2023/11/Steam_Deck_OLED_LE.png
|
||||
[7]: https://store.steampowered.com/steamdeck
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/11/144604h3w4wf53jg4ftw7w.jpg
|
||||
@@ -0,0 +1,74 @@
|
||||
[#]: subject: "New Fedora Slimbook 14″ joins the Fedora Slimbook 16″"
|
||||
[#]: via: "https://fedoramagazine.org/new-fedora-slimbook-14-joins-the-fedora-slimbook-16/"
|
||||
[#]: author: "Joseph Gayoso https://fedoramagazine.org/author/joseph/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16377-1.html"
|
||||
|
||||
新款 Fedora Slimbook 14 加入 Fedora Slimbook 阵营
|
||||
=====
|
||||
|
||||
![][6]
|
||||
|
||||
自从我们发布 Fedora Slimbook 笔记本电脑的公告到现在已经过去近一个月了。这只是我们和 Slimbook 之间的合作关系的开始,我们的目标是在更多的设备上预装 Fedora Linux 系统。目前我们已经收到了非常积极的反馈!剩下的,我们想要和大家分享更多来自我们硬件合作伙伴的新消息,我们希望你会觉得很兴奋。
|
||||
|
||||
### 介绍 Fedora Slimbook 14 英寸版
|
||||
|
||||
![][3]
|
||||
|
||||
尽管 Fedora Slimbook 16 英寸版的性能很出色,但我们注意到许多消费者对于笔记本电脑的尺寸以及英伟达显卡的配置表示了担忧,他们希望有更小的选择。为了回应这些反馈,Slimbook 推出了更小尺寸的 Fedora Slimbook 14 英寸版,以满足这些消费者的需求。这款新型号的电脑仍然保持了 Fedora 品牌的标志,包括电脑后盖和超级键上的 Fedora 标志,并且预装了 Fedora Workstation 系统!
|
||||
|
||||
主要特性:
|
||||
|
||||
* 无英伟达 GPU:虽然将这一点作为特性有些奇怪,但对于那些希望享受 Fedora 完整体验、期望硬件全面兼容的消费者来说,这一点准没错。
|
||||
* 英特尔 i7-12700H 处理器:能满足你所有的计算需求,性能出众。
|
||||
* 99Wh 电池:超长电池寿命,让你在出门在外时也能保持高效。
|
||||
* 轻便,只有 1.25 公斤:无论你去哪里,都可以轻松携带。
|
||||
* 镁合金机身:外壳轻便且耐磨。
|
||||
* 2880x1800 的屏幕分辨率:在高分辨率的显示屏上享受鲜明的视觉效果和细节。
|
||||
* 99% 的 sRGB 色彩准确度:非常适合设计师,媒体和内容创作人员使用。
|
||||
|
||||
与 Fedora Slimbook 16 英寸版一样,每售出一台 Fedora Slimbook 14 英寸版,都会有 3% 的收益捐献给 GNOME 基金会。
|
||||
|
||||
我们希望 Fedora Slimbook 14 英寸版可以满足你对电源和便携性的需求,并且展示出你对 Fedora 的热爱!想了解更多信息,请访问 <https://fedora.slimbook.es/>。
|
||||
|
||||
![][4]
|
||||
|
||||
![][5]
|
||||
|
||||
![][7]
|
||||
|
||||
### 折扣
|
||||
|
||||
Slimbook 针对 Fedora 社区推出了两种折扣!
|
||||
|
||||
为了庆祝 Fedora Linux 39 的发布,Slimbook 推出了针对两款 Fedora Slimbook 的 100 欧元折扣活动!当你选择结账的时候,你会发现这个折扣已经直接被应用上去了。这项优惠将在限定的时间中推出。
|
||||
|
||||
而且,如果你是 Fedora 项目的贡献者,还可以享受额外的 100 欧元折扣!关于如何获得这个折扣的更多信息,你可以点击 [这个社区博客文章][8] 查阅。
|
||||
|
||||
在我们与 Slimbook 建立并发展这个伙伴关系的过程中,我们非常感谢他们的良好合作。我们致力于让 Linux 更广泛地应用于硬件设备上,我们希望这些新的公告能让你对 Fedora 的硬件合作伙伴计划感到兴奋!
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/new-fedora-slimbook-14-joins-the-fedora-slimbook-16/
|
||||
|
||||
作者:[Joseph Gayoso][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/joseph/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/10/fedora-slimbook-masto-816x345.jpg
|
||||
[2]: https://www.behance.net/daimarstein
|
||||
[3]: https://fedoramagazine.org/wp-content/uploads/2023/11/Executive1416_FEDORA-1024x431.png
|
||||
[4]: https://fedoramagazine.org/wp-content/uploads/2023/11/FedoraSlimbook_14_Keyboard-1024x683.jpg
|
||||
[5]: https://fedoramagazine.org/wp-content/uploads/2023/11/FedoraSlimbook-1024x749.jpg
|
||||
[6]: https://fedoramagazine.org/wp-content/uploads/2023/11/FedoraSlimbook_14_Key_F-947x1024.jpg
|
||||
[7]: https://fedoramagazine.org/wp-content/uploads/2023/11/FEDORA_Pantalla_1614-1024x340.png
|
||||
[8]: https://communityblog.fedoraproject.org/fedora-slimbook-contributor-discount/
|
||||
147
published/202311/20231113 FIDO2 for centrally managed users.md
Normal file
147
published/202311/20231113 FIDO2 for centrally managed users.md
Normal file
@@ -0,0 +1,147 @@
|
||||
[#]: subject: "FIDO2 for centrally managed users"
|
||||
[#]: via: "https://fedoramagazine.org/fido2-for-centrally-managed-users/"
|
||||
[#]: author: "Iker Pedrosa https://fedoramagazine.org/author/ipedrosa/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16406-1.html"
|
||||
|
||||
为集中管理的用户提供 FIDO2 认证
|
||||
=====
|
||||
|
||||
![][0]
|
||||
|
||||
Fedora 39 通过 SSSD 和 FreeIPA 为集中管理的用户开启了 FIDO2 认证功能。此篇文章将指导你如何进行配置和启用该功能。
|
||||
|
||||
### FIDO2
|
||||
|
||||
[FIDO2][4] 是以 [公钥加密][5] 为基础的开放式认证标准,比起密码和一次性密码(OTP),它的安全性更高且易用性更强。它通常以类似小型 USB 和基于 NFC 的硬件安全令牌的方式提供。有几种符合 FIDO 认可的密钥品牌,例如:YubiKey、NitroKey、SoloKey v2 等等。
|
||||
|
||||
此协议的优势包括:
|
||||
|
||||
* 通过使用公钥加密来消除密码,从而实现无密码认证。
|
||||
* 采用 [多因素认证][6](MFA)以实现强力认证。
|
||||
* 减少了应用程序之间密码或公钥的重复使用,降低数据泄露的风险。
|
||||
* 私钥位于安全令牌中并且永不离开,这大大减少了被网络钓鱼的威胁。
|
||||
|
||||
#### 前面的文章
|
||||
|
||||
在 Fedora 杂志中,有多篇文章阐述了如 FIDO2 的应用场景:《[如何使用 FIDO2 验证本地用户][7]》 和 《[如何解锁硬盘][8]》。而此篇文章介绍了如何使用 FIDO2 验证远程用户。请注意,上述所说的设备,主要是指那些来自 Yubico 采用了其他协议的设备,而此篇指南的目的并非讨论这些协议。
|
||||
|
||||
### 集中管理的用户
|
||||
|
||||
[SSSD][9] 和 [FreeIPA][10] 最近新增了一个名为 <ruby>[通行密钥][11]<rt>passkey</rt></ruby> 的特性,以便对集中管理的用户执行 FIDO2 认证。此功能目前只在 [SSSD 2.9.0][12] 和 [FreeIPA 4.11.0][13] 等版本中支持。
|
||||
|
||||
Fedora 39 已经包含了这些版本,因此,它是第一个为集中管理的用户启用 FIDO2 认证的发行版。此外,用户在认证成功后,也会一并获取一个 Kerberos 票据,实现对其他服务的身份证明。
|
||||
|
||||
请注意,从这里开始,我将交替使用 FIDO2 和通行密钥这两个术语。
|
||||
|
||||
### FIDO2 认证
|
||||
|
||||
#### FIDO2 配置
|
||||
|
||||
作为额外的安全措施,应在设备中启用 MFA 以防你丢失了密钥,恶意行为者无法使用它进行认证。
|
||||
|
||||
列出连接的通行密钥设备:
|
||||
|
||||
```
|
||||
$ fido2-token -L
|
||||
```
|
||||
|
||||
为你的通行密钥设备设置 PIN(将大写字母替换为所需的):
|
||||
|
||||
```
|
||||
$ fido2-token -C /dev/hidrawX
|
||||
```
|
||||
|
||||
如果你有一个兼容的设备,你还可以启用其他认证因素,例如指纹。
|
||||
|
||||
#### 集中用户配置
|
||||
|
||||
首先,我们来创建一个用户,并将通行密钥(`passkey`)设置为其认证方式(请根据需要将大写字母替换为相应的):
|
||||
|
||||
```
|
||||
$ ipa user-add USERNAME --first NAME --last SURNAME --user-auth-type=passkey
|
||||
```
|
||||
|
||||
或者,如果你已有一个用户,并只需要将 `passkey` 设置为其认证方式:
|
||||
|
||||
```
|
||||
$ ipa user-mod USERNAME --user-auth-type=passkey
|
||||
```
|
||||
|
||||
#### 集中管理用户的 FIDO2 注册
|
||||
|
||||
接下来,我们为该用户注册这个通行密钥。这个步骤会提示你输入 PIN 码,随后触摸设备:
|
||||
|
||||
```
|
||||
$ ipa user-add-passkey USERNAME --register
|
||||
Enter PIN:
|
||||
Please touch the device.
|
||||
------------------------------------
|
||||
Added passkey mappings to user "USERNAME"
|
||||
------------------------------------
|
||||
User login: USERNAME
|
||||
Passkey mapping: passkey:XR/MXigmgiBz1z7/RlWoWZkXKIEf1x9Ux5uPNxtzzSTdTiF407u2nRYMPkK8pWjwUR8Aa2urCcC9cnpLbkKgFg==,MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZqgERsFFv4Yev1dyo2Ap4PvLirg3P3Uhig5mNA4qf061C9q5rg0nMDz9AOYxZmBrwvQEXHCasMNO9VAIVnBIVg==
|
||||
```
|
||||
|
||||
此刻,用户的认证已准备就绪。
|
||||
|
||||
注意,如果你想在生产环境中使用此用户,我建议你至少注册两个不同的设备。这样,即使你丢失了其中一个设备,你也可以用另一个进行认证。
|
||||
|
||||
#### 集中管理的用户的 FIDO2 认证
|
||||
|
||||
在初次尝试中,只有在物理连接令牌的系统中才能进行认证。这意味着你可以使用 `su` 或图形界面,但不能远程使用 ssh。
|
||||
|
||||
我们来试试使用 `su`,记得将大写字母替换为所需的。当要求你输入 PIN,然后触摸设备时,当设备灯闪烁时触摸它:
|
||||
|
||||
```
|
||||
$ su - USERNAME@DOMAIN
|
||||
Insert your passkey device, then press ENTER.
|
||||
Enter PIN:
|
||||
```
|
||||
|
||||
如果一切进行顺利,Kerberos 票据也应已被授予,然后你就可以向其他服务进行远程认证:
|
||||
|
||||
```
|
||||
$ klist
|
||||
Ticket cache: KCM:879400005:34862
|
||||
Default principal: USERNAME@DOMAIN
|
||||
Valid starting Expires Service principal
|
||||
10/20/23 09:46:04 10/21/23 09:32:37 krbtgt/DOMAIN@DOMAIN
|
||||
```
|
||||
|
||||
### 结论
|
||||
|
||||
此认证机制的目标是提升安全性。通过使用一种众所周知、开放式的标准实现无密码和多因素认证,从而降低数据泄露和网络钓鱼威胁的风险。用户只需要一个硬件令牌及另外一个如 PIN 或者指纹的认证方式,从而消除对密码的需求,同时提供了方便的多因素认证方法。更进一步,每个应用或服务都使用一个唯一的密钥,这样任何一个应用或服务的数据泄露都不会影响其他的。最后,用户并不需要知道他们的凭据的具体细节,只需了解他们使用了一个实体令牌,这极大地降低了社交工程攻击的可能性。
|
||||
|
||||
*(题图:MJ/838d5392-79b4-4c22-ab0f-c2ada4bf2833)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/fido2-for-centrally-managed-users/
|
||||
|
||||
作者:[Iker Pedrosa][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/ipedrosa/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/10/featured_image-816x345.png
|
||||
[2]: https://unsplash.com/@lazycreekimages?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[3]: https://unsplash.com/photos/skeleton-key-surround-with-dry-leaves-1bjsASjhfkE?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[4]: https://fidoalliance.org/fido2/
|
||||
[5]: https://en.wikipedia.org/wiki/Public-key_cryptography
|
||||
[6]: https://en.wikipedia.org/wiki/Multi-factor_authentication
|
||||
[7]: https://fedoramagazine.org/use-fido-u2f-security-keys-with-fedora-linux/
|
||||
[8]: https://fedoramagazine.org/use-systemd-cryptenroll-with-fido-u2f-or-tpm2-to-decrypt-your-disk/
|
||||
[9]: https://sssd.io/
|
||||
[10]: https://freeipa.readthedocs.io/en/latest/
|
||||
[11]: https://fedoraproject.org/wiki/Changes/Passkey_authentication_centrally_managed_users
|
||||
[12]: https://sssd.io/release-notes/sssd-2.9.0.html
|
||||
[13]: https://www.freeipa.org/release-notes/4-11-0.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/23/095049o1kdwqugdgw5d1mk.png
|
||||
@@ -0,0 +1,116 @@
|
||||
[#]: subject: "Install the Latest Calibre on Ubuntu"
|
||||
[#]: via: "https://itsfoss.com/install-calibre-ubuntu/"
|
||||
[#]: author: "Ishaan Bhimwal https://itsfoss.com/author/community/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16394-1.html"
|
||||
|
||||
在 Ubuntu 上安装最新版的 Calibre
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Calibre 是一款自由开源的电子书软件。下面介绍如何在 Ubuntu Linux 上安装它。
|
||||
|
||||
作为电子书管理的瑞士军刀,Calibre 一直备受书籍爱好者和数字书虫们的喜爱。
|
||||
|
||||
虽然存在更好(更轻量级)的 [电子书阅读器][1],但 Calibre 在创建电子书、转换格式以及管理你的电子书库方面做得更出色。简言之,它是满足你所有电子书需求的全套解决方案。
|
||||
|
||||
在本教程中,我将会涉及:
|
||||
|
||||
* 从 Ubuntu 的仓库安装 Calibre(简单易行,但可能不是最新版本)
|
||||
* 使用官方二进制文件安装 Calibre(稍微复杂些,但能获取最新版本)
|
||||
|
||||
### 方法1:从 Ubuntu 的仓库安装 Calibre
|
||||
|
||||
该方法简单易用,但可能无法获得最新的 Calibre 版本。但大多数情况下,这并不会造成问题。
|
||||
|
||||
Ubuntu 的 universe 仓库中提供了 Calibre 的稳定版本。此仓库在大多数系统中默认已启用,因此你只需在软件中心搜索即可,或者使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install calibre
|
||||
```
|
||||
|
||||
![][2]
|
||||
|
||||
安装完成后,在系统菜单中找到它,然后启动。
|
||||
|
||||
#### 卸载 Calibre
|
||||
|
||||
如果你不再需要它,可以使用下面的命令卸载 Calibre:
|
||||
|
||||
```
|
||||
sudo apt remove calibre
|
||||
```
|
||||
|
||||
### 方法2:获取最新版本的 Calibre
|
||||
|
||||
[Calibre 官方][3] 推荐安装提供的官方二进制文件。目的是防止用户使用存在错误或已过时的软件包。该二进制文件包含了所有私有版本的依赖项,支持 32 位和 64 位的机器。
|
||||
|
||||
首先,我们需要检查系统上是否已经安装了必要的依赖项:
|
||||
|
||||
```
|
||||
apt -qq list xdg-utils wget xz-utils python3
|
||||
```
|
||||
|
||||
![][4]
|
||||
|
||||
如果上述包出现缺失的情况,就将它们安装上。
|
||||
|
||||
然后,复制并粘贴下列命令到终端里,按回车键以进行安装或升级:
|
||||
|
||||
```
|
||||
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
|
||||
```
|
||||
|
||||
![][5]
|
||||
|
||||
**可能的问题处理** :如果你看到一个关于证书不受信任的错误,这表示你的电脑没有安装任何根证书,所以不能安全地下载安装程序。如果你仍然想要继续,向 `wget` 输入命令 `--no-check-certificate`,就像下面的命令一样:
|
||||
|
||||
```
|
||||
sudo -v && wget --no-check-certificate -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
|
||||
```
|
||||
|
||||
#### 卸载 Calibre
|
||||
|
||||
如果你按照上述二进制安装法安装了 Calibre,你可以通过运行 `sudo calibre-uninstall` 来卸载 Calibre。或者,直接删除安装文件夹,这样就可以删除 99% 的安装文件。
|
||||
|
||||
![][6]
|
||||
|
||||
### 结语
|
||||
|
||||
在一个数字阅读日渐普及的世界,这款开源软件证明了由社区驱动创新的强大影响。无论你是一名资深的电子书爱好者,还是正在初探数字阅读的世界,Calibre 都有你需要的东西。
|
||||
|
||||
尽管有 [详细的文档资源][7],我们还提供了一个简单教程 [指导你在 Calibre 中创建电子书][8]。
|
||||
|
||||
> [完整指南:在 Linux 上使用 Calibre 创建电子书][8]
|
||||
|
||||
_在 Ubuntu 中体验 Calibre 吧。_
|
||||
|
||||
*(题图:MJ/b63e15a1-1a1c-4ae3-b6c7-40b4537cb567)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-calibre-ubuntu/
|
||||
|
||||
作者:[Ishaan Bhimwal][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/community/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-ebook-readers-linux/
|
||||
[2]: https://itsfoss.com/content/images/2023/09/QPemD12.png
|
||||
[3]: https://calibre-ebook.com/download_linux
|
||||
[4]: https://itsfoss.com/content/images/2023/09/XnFwJIX.png
|
||||
[5]: https://itsfoss.com/content/images/2023/09/UrBF54u.png
|
||||
[6]: https://itsfoss.com/content/images/2023/09/i9KwV8E.png
|
||||
[7]: https://calibre-ebook.com/help
|
||||
[8]: https://linux.cn/article-7977-1.html
|
||||
[9]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/18/120237ptz6266meg1st2i1.png
|
||||
@@ -0,0 +1,122 @@
|
||||
[#]: subject: "OBS Studio 30.0: Linux Edition - No More Ubuntu 20.04, Yes to AV1"
|
||||
[#]: via: "https://news.itsfoss.com/obs-studio-30/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16387-1.html"
|
||||
|
||||
OBS Studio 30.0 发布,增加 AV1 支持
|
||||
===
|
||||
|
||||
![][0]
|
||||
|
||||
> OBS Studio 30.0 对于 Linux 用户来说是一个重要的版本。
|
||||
|
||||
OBS Studio 无疑是 [Linux 上最佳的录屏软件][1] 之一,它深受众多内容创作者的喜爱,他们使用它进行视频录制和流媒体直播。
|
||||
|
||||
近日的公告发布了一个**全新的主要版本** —— **OBS Studio 30**,距离今年一月份的 [上一次主要版本][2] 已经近 11 个月。
|
||||
|
||||
接下来就让我来一一为你介绍。
|
||||
|
||||
### 🆕 OBS Studio 30:新特性有哪些?
|
||||
|
||||
![][4]
|
||||
|
||||
作为一个主要版本,OBS Studio 30 带来了一系列引人期待的改进,但是,也有一项变化可能**令部分用户感到不满**。
|
||||
|
||||
这个版本的一些**重要亮点**包括:
|
||||
|
||||
* 停止对 Ubuntu 20.04 的支持
|
||||
* 用户界面/体验的提升
|
||||
* 视频编码能力的提升
|
||||
|
||||
#### 停止对 Ubuntu 20.04 的支持
|
||||
|
||||
随着 OBS Studio 30 的发布,对 Ubuntu 20.04 的支持不复存在。
|
||||
|
||||
做出这个决定的主要原因在于,开发者发现维护 Qt 5 越来越困难,这也相应影响了他们在改进 OBS 用户界面/用户体验方面的工作。
|
||||
|
||||
实际上,**Ubuntu 20.04 是唯一一个使用 Qt 5 运行 OBS 的第一方发行版**,开发者表示,相比其他版本,这个发行版的**用户基数已经在逐渐减少**。
|
||||
|
||||
这**并非一夜之间的改变**,早在六月份,OBS Studio 就在其 GitHub 仓库中公布了这项改动。
|
||||
|
||||
目前,**Ubuntu 20.04 的用户**有两个选择,他们可以选择 [升级到 Ubuntu 22.04][5] 或更高版本,或者转用 OBS Studio 的 [Flatpak 版本][6]。
|
||||
|
||||
开发人员还**提到了他们可能会在 2025 年 4 月左右停止对 Qt 6.2 和 Ubuntu 22.04 的支持**。但是,你目前无需对此感到担忧。你可以阅读 [官方公告][7] 了解详细的计划。
|
||||
|
||||
#### 用户界面/体验的提升
|
||||
|
||||
![][8]
|
||||
|
||||
“<ruby>停靠区<rt>Docks</rt></ruby>”菜单中新增了一项“<ruby>全高窗口<rt>Full-Height docks</rt></ruby>”选项,这将方便集成 Twitch 和 YouTube 上直播时所见的长聊天窗口。
|
||||
|
||||
同时,**状态栏也进行了重新设计**,以更结构化、有条理的形式展示同样的信息,我个人非常喜欢这种改变。
|
||||
|
||||
**老状态栏有些棘手**,在我直播或录制期间,我经常会忘记它的存在 😆
|
||||
|
||||
![][9]
|
||||
|
||||
在 OBS Studio 30 中也新增了一个“<ruby>安全模式<rt>Safe Mode</rt></ruby>”,这种模式下,应用程序将在不加载任何第三方插件、脚本或 web sockets 的情况下启动,以便**对故障进行排除**。
|
||||
|
||||
你可以通过两种方式访问到这个模式,一是当 OBS Studio 断电意外关闭,另一种是在下图所示的“<ruby>帮助<rt>Help</rt></ruby>”菜单中手动启动。
|
||||
|
||||
![][10]
|
||||
|
||||
#### 视频编码能力的提升
|
||||
|
||||
OBS Studio 30 新增了对**三种主要视频编码技术**的支持,分别是 [Intel QSV][11] H264,高效视频编码([HEVC][12]),以及 [AV1][13]。
|
||||
|
||||
许多使用 Linux 的内容创作者会赞赏 OBS 做出的这些改进。
|
||||
|
||||
#### 🛠️ 更多的改变和改进
|
||||
|
||||
除上述提及的点外,还有一些其他值得注意的改动:
|
||||
|
||||
* 引入了**WHIP/WebRTC 输出**。
|
||||
* 可通过拖拽**调整过滤器顺序**。
|
||||
* 提供**YouTube Live 控制室面板**的支持。
|
||||
* 修复了在记录高帧率视频设备时**出现日志问题**的错误。
|
||||
* 为 [Decklink][14] 增加了**10 位捕获和 HDR 回放**的支持。
|
||||
|
||||
要获得更多关于 OBS Studio 30 的详细信息,你可以查看 [官方发布备注][15]。
|
||||
|
||||
### 📥 下载 OBS Studio 30
|
||||
|
||||
你可以前往 [官方网站][16] 下载 OBS Studio 的最新版本,其支持**Linux**,**Windows** 以及 **macOS** 平台。
|
||||
|
||||
> **[OBS Studio][16]**
|
||||
|
||||
💬 你是否打算试运行一下 OBS Studio 30 然后告诉我们你的体验呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/obs-studio-30/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-linux-screen-recorders/
|
||||
[2]: https://news.itsfoss.com/obs-studio-29-release/
|
||||
[3]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/11/OBS_Studio_30_1.png
|
||||
[5]: https://itsfoss.com/upgrade-ubuntu-version/
|
||||
[6]: https://flathub.org/apps/com.obsproject.Studio
|
||||
[7]: https://github.com/obsproject/obs-studio/discussions/9055
|
||||
[8]: https://news.itsfoss.com/content/images/2023/11/OBS_Studio_30_2-3.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/11/OBS_Studio_30_3.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/11/OBS_Studio_30_4.png
|
||||
[11]: https://en.wikipedia.org/wiki/Intel_Quick_Sync_Video
|
||||
[12]: https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding
|
||||
[13]: https://en.wikipedia.org/wiki/AV1
|
||||
[14]: https://www.blackmagicdesign.com/in/products/decklink
|
||||
[15]: https://github.com/obsproject/obs-studio/releases/tag/30.0.0
|
||||
[16]: https://obsproject.com/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/16/151643x7ppos30qo79oj31.jpg
|
||||
@@ -0,0 +1,137 @@
|
||||
[#]: subject: "Blender 4.0 Release Arrives With Game-Changing Rendering Upgrades"
|
||||
[#]: via: "https://news.itsfoss.com/blender-4-0-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16388-1.html"
|
||||
|
||||
Blender 4.0 版本发布,引领了渲染升级的新趋势
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Blender 4.0 的发布使其成为图形设计从业者和艺术家们极度期待的工具。
|
||||
|
||||
Blender 是**一款极受欢迎的开源 3D 计算机图形软件套件**,它广泛应用于动画电影制作、动态图形、视觉特效等多个领域。
|
||||
|
||||
最近,Blender 基金会公布了**Blender 4.0 的发布**,这一版本“为渲染、创建工具以及更多内容打开了新的可能性,让你的创造自由提升到新的水平。”
|
||||
|
||||
接下来,让我们一起探索一下此版本带来的新视野。
|
||||
|
||||
### 🆕 Blender 4.0:有哪些新特性?
|
||||
|
||||
![][1]
|
||||
|
||||
作为一个重要的版本更新,Blender 4.0 提供了丰富的新功能。然而,我们只针对一些核心的亮点进行介绍:
|
||||
|
||||
* 用户界面改进
|
||||
* 光线与阴影链接
|
||||
* 改良的 Principled BSDF
|
||||
* 更优化的人物绑定
|
||||
|
||||
在我们详述一些细节之际,下面是一则官方视频,总结了主要的变更事项:
|
||||
|
||||
![][1A]
|
||||
|
||||
#### 用户界面改进
|
||||
|
||||
![][2]
|
||||
|
||||
在 Blender 中,最重要且直接面向用户的部分无疑就是它的界面。界面的字体已经改变为 [Inter][3],**此举旨在改进应用内的文字可读性**,使它不受显示器大小影响。
|
||||
|
||||
此外,用户还可以通过在常规下拉菜单或者右键菜单上按空格键,使用**新增的搜索功能**。同时,一份调整过的启动画面,使得用户在旧版 Blender 中**迁移保存的设置**变得更为简单。
|
||||
|
||||
![][4]
|
||||
|
||||
我们在文件菜单中添加了一项新的 “<ruby>增量保存<rt>Save Incremental</rt></ruby>”选项。这个选项可以保存当前的 `.blender` 文件,并给文件名添加一个递增的数字。
|
||||
|
||||
#### 光线与阴影链接
|
||||
|
||||
![][5]
|
||||
|
||||
它被开发团队称为最受期待的功能,Blender 4.0 新增了光线与阴影链接功能。这些功能使设计师可以**设置灯光以影响场景中特定的物体**,甚至可**控制哪些物体可以挡住光源**,充当阴影的遮挡体。
|
||||
|
||||
关于这些功能的更多详情,可以参考 [官方文档][6]。
|
||||
|
||||
#### 改良的 Principled BSDF
|
||||
|
||||
![][7]
|
||||
|
||||
Blender 的 [Principled BSDF][8] 系统在本次更新中进行了大规模的改良,现在此系统提供了**支持更广泛的材料类型,并且工作更加高效**。
|
||||
|
||||
改良亮点包括:
|
||||
|
||||
* <ruby>涂层<rt>Coat</rt></ruby>,这个特性可以模拟例如手机显示屏后的玻璃表面等效果,它被放置在所有的基层之上。
|
||||
* <ruby>光泽感<rt>Sheen</rt></ruby>,现在它使用新的微纤维渲染模型,成为排列在发射和涂层之上的最高层,从而控制表面反光。
|
||||
* 实现了多散射 GGX 策略,以在 Cycles 渲染器中提高渲染效率,使得**渲染过程中消耗的电力更少**。
|
||||
* **金属表面的边缘着色**,这项新特性提供了一种装饰金属表面的艺术友好方式。它可以渲染基于 F82 着色模型的复杂折射系数。
|
||||
|
||||
以下的插图更好地展示了 Principled BSDF 的改善状况:
|
||||
|
||||
![][9]
|
||||
|
||||
#### 绑定优化
|
||||
|
||||
![][10]
|
||||
|
||||
Blender 4.0 的特性之一就是为 [Armature][11] 骨骼添加了 <ruby>骨骼集合<rt>Bone Collections</rt></ruby>。此设定继承了现有对象物体的实现方式。
|
||||
|
||||
它**替代了传统的编号层和骨骼组特性**,以吸取组合选择操作符来按骨骼颜色/集合来选择分组,设定 Armature 骨骼的颜色等等。
|
||||
|
||||
同时,**姿势库也得到了更新**,新引入的资产架使得姿势资产在 3D 视口中可见。
|
||||
|
||||
#### 🛠️ 更多改进和优化
|
||||
|
||||
一些其他值得注意的变化还包括:
|
||||
|
||||
* **停止支持英特尔 HD4000 系列的 GPU**。
|
||||
* 实施了新的 [blendfile 兼容性政策][12]。
|
||||
* **吸附功能得到改善**,变得更快,定位更精准。
|
||||
* 对于 Linux 和 Windows 用户,现在 **OpenGL 的最小版本要求** 是 4.3。
|
||||
* **Filmic 已被 AgX 视图转换所替代**,以更好地处理过度曝光区域的颜色。
|
||||
|
||||
你还可以参考 [官方发布说明][13] 来获取更多的更新详情。
|
||||
|
||||
### 📥 下载 Blender 4.0
|
||||
|
||||
你可以从 [官方网站][14] 下载 Blender 的最新 tar 包,支持 **Linux**、 **Windows**, 和 **macOS**等平台。
|
||||
|
||||
当然如果你有特殊需求,你也可以在 [Snap 商店][15] 或是 [Steam][16] 中下载。
|
||||
|
||||
> **[Blender][14]**
|
||||
|
||||
💬 准备好使用 Blender 4.0 开启你的创造之旅了吗?还是你有其他的首选项?欢迎在评论区分享你的想法!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/blender-4-0-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0.png
|
||||
[1A]: https://youtu.be/LcQkk7NbOoY
|
||||
[2]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0_2.png
|
||||
[3]: https://rsms.me/inter/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0_2b.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0_3.png
|
||||
[6]: https://docs.blender.org/manual/en/4.0/render/cycles/object_settings/light_linking.html
|
||||
[7]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0_4.png
|
||||
[8]: https://docs.blender.org/manual/en/4.0/render/shader_nodes/shader/principled.html
|
||||
[9]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0_4b.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/11/Blender_4.0_5.png
|
||||
[11]: https://docs.blender.org/manual/en/latest/animation/armatures/introduction.html
|
||||
[12]: https://wiki.blender.org/wiki/Process/Compatibility_Handling
|
||||
[13]: https://wiki.blender.org/wiki/Reference/Release_Notes/4.0
|
||||
[14]: https://www.blender.org/download/
|
||||
[15]: https://snapcraft.io/blender
|
||||
[16]: https://store.steampowered.com/app/365670/Blender/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/16/155543ys6vz9tu2uzqw97v.jpg
|
||||
@@ -0,0 +1,144 @@
|
||||
[#]: subject: "Linux eBook Reader Foliate 3.0 Upgrade: Improves UX With GTK 4 Port"
|
||||
[#]: via: "https://news.itsfoss.com/foliate-3-0/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16393-1.html"
|
||||
|
||||
全新的 Linux 电子书阅读器 Foliate 3.0 发布
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 引入了 GTK 4 ,并优化了 UI。
|
||||
|
||||
Foliate 作为 [Linux 上最佳的电子书阅读器][1] 之一,在过去几年中发展得相当不错,按时接收更新和错误修复。
|
||||
|
||||
然而,因为它的底层技术有些过时,使其近来显得有些老旧。但随着 **Foliate 3.0** 的发布,情况已经有所改变。
|
||||
|
||||
让我们详细了解一下这些改进。
|
||||
|
||||
### 🆕 Foliate 3.0:新增了什么?
|
||||
|
||||
![][2]
|
||||
|
||||
在 3.0 版本中,**Foliate 进行了彻底的重构**,采用了 [GTK 4][3]、[Adwaita][4] 等现代平台库。开发者预示,我们可以期待一个焕然一新的界面和比以前更出色的性能。
|
||||
|
||||
现在,Foliate 开始**使用自己的电子书解析器/渲染器**,并抛弃了 [Epub.js][5] 和 [KindleUnpack][6]。遗憾的是,他们在 3.0 发布时**并未及时移植某些功能**,因此这个版本**并未支持 [OPDS][7] 目录和离线字典**。
|
||||
|
||||
说到这次发布的一些亮点,其中包括:
|
||||
|
||||
* 用户界面全新升级
|
||||
* 更佳的渲染质量
|
||||
* 优化的用户体验
|
||||
|
||||
#### 用户界面全新升级
|
||||
|
||||
![][8]
|
||||
|
||||
如你所见,Foliate 的主要变化在于其用户界面。它现在采用了**全新的布局**,把图书库和电子书阅读器都整合到一个窗口中。
|
||||
|
||||
还有一个**新的侧边栏**,在这里你可以找到一些重要的功能,如目录、注释和书签。
|
||||
|
||||
![][9]
|
||||
|
||||
在顶部,你可以看到**一个方便的搜索栏**,让你可以在书中搜索特定的词或句子,同时有一个“<ruby>图书库<rt>Library</rt></ruby>”按钮可以帮助你回到你的电子书库。
|
||||
|
||||
> 📋 你可以用标题栏中的选项来切换侧边栏的可见性。
|
||||
|
||||
此外,分页模式也进行了重大的改进。
|
||||
|
||||
它们增加了**动画和 1:1 触屏/触摸板滑动手势的支持**,**支持超过两列**,优化了调整性能,此外,你还可以**配置最大的宽度和高度**等等。
|
||||
|
||||
#### 更佳的渲染
|
||||
|
||||
在书籍渲染方面,也进行了许多改进,其中一些重要的包括:
|
||||
|
||||
* 如果一个网页不是有效的 XHTML,那它会被当作 HTML 处理。
|
||||
* Mobipocket 文件现在被优化为多个部分以显著提升性能。
|
||||
* 当一个文件被重新加载时,它现在会正确的重新加载,而不只是重新渲染。
|
||||
* 不再直接将整个文件加载至内存,因此启动时间和内存使用得以优化。
|
||||
|
||||
#### 优化的用户体验
|
||||
|
||||
![][10]
|
||||
|
||||
除了用户界面的优化,Foliate 3.0 还引入了一些**非常酷的用户体验改进**。
|
||||
|
||||
比如书签系统,添加书签的按钮被移至标题栏,并且被添加书签的页面会在顶部显示特殊的标记。
|
||||
|
||||
图像查看器也有所更新,如今当图片被复制时,它们将以其原始格式进行保存。此外,只需双击图片就能打开,其它选项已被删除。
|
||||
|
||||
进度滑块同样得到了优化,现在可以支持键盘和鼠标滚轮操作。在那里你还能找到更新了的配音功能,现在使用 [Speech Dispatcher][11] 作为其后端。
|
||||
|
||||
#### 🛠️ 其他的改动和优化
|
||||
|
||||
这次改进还包含了一些其他方面,值得注意的包括:
|
||||
|
||||
* 现在你可以打印特定的章节和文本选段。
|
||||
* 把实验性质的传统标题栏选项移除了。
|
||||
* 注解现在会随着各自的时间戳保存下来。
|
||||
* 一个安全修复,禁用了对 Flatpak 的沙盒逃逸权限。
|
||||
|
||||
你可以浏览 [官方发布公告][12] 获取更多信息。
|
||||
|
||||
### 📥 如何获取 Foliate
|
||||
|
||||
这个全新的 Foliate 版本已经在 [Flathub 商店][13] 和 [Snap 商店][14](目前只提供开发者版本)上架。
|
||||
|
||||
> **[Foliate (Flathub)][13]**
|
||||
|
||||
你还可以通过访问 [官方网站][15] 或 [GitHub 仓库][16] 来获取源代码。
|
||||
|
||||
### 故障排除提示
|
||||
|
||||
如果 **Foliate 不能正常加载 EPUB 文件**,而你**正在使用英伟达显卡**,那么你可以设置以下任一环境变量来启动应用:
|
||||
|
||||
```
|
||||
WEBKIT_DISABLE_COMPOSITING_MODE=1
|
||||
```
|
||||
|
||||
```
|
||||
WEBKIT_DISABLE_DMABUF_RENDERER=1
|
||||
```
|
||||
|
||||
如果你已经安装了 **Foliate 的 Flatpak 版本**,只需使用 [Flatseal][17] 添加相同的环境变量即可。对我来说,第二个命令奏效了。
|
||||
|
||||
你可以查阅相关的 [GitHub 议题][18] 进行进一步的故障排除。
|
||||
|
||||
*(题图:MJ/647e01ba-def8-43f3-b21a-94b2a54ee5c6)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/foliate-3-0/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-ebook-readers-linux/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/11/Foliate_3.0_1.png
|
||||
[3]: https://blog.gtk.org/2020/12/16/gtk-4-0/
|
||||
[4]: https://gnome.pages.gitlab.gnome.org/libadwaita/
|
||||
[5]: https://github.com/futurepress/epub.js
|
||||
[6]: https://github.com/kevinhendricks/KindleUnpack
|
||||
[7]: https://en.wikipedia.org/wiki/Open_Publication_Distribution_System
|
||||
[8]: https://news.itsfoss.com/content/images/2023/11/Foliate_3.0_2.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/11/Foliate_3.0_3.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/11/Foliate_3.0_4.png
|
||||
[11]: https://wiki.archlinux.org/title/Speech_dispatcher
|
||||
[12]: https://github.com/johnfactotum/foliate/releases/tag/3.0.0
|
||||
[13]: https://flathub.org/apps/com.github.johnfactotum.Foliate
|
||||
[14]: https://snapcraft.io/foliate
|
||||
[15]: https://johnfactotum.github.io/foliate/
|
||||
[16]: https://github.com/johnfactotum/foliate
|
||||
[17]: https://itsfoss.com/flatseal/
|
||||
[18]: https://github.com/johnfactotum/foliate/issues/1093
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/18/113642mf8bft5rmo7io5ux.png
|
||||
@@ -0,0 +1,280 @@
|
||||
[#]: subject: "Writing useful terminal TUI on Linux with dialog and jq"
|
||||
[#]: via: "https://fedoramagazine.org/writing-useful-terminal-tui-on-linux-with-dialog-and-jq/"
|
||||
[#]: author: "Jose Nunez https://fedoramagazine.org/author/josevnz/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16391-1.html"
|
||||
|
||||
使用 dialog 和 jq 在 Linux 上编写高效终端 TUI
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
### 为何选择文字用户界面(TUI)?
|
||||
|
||||
许多人每日都在使用终端,因此,<ruby>文字用户界面<rt>Text User Interface</rt></ruby>(TUI)逐渐显示出其价值。它能减少用户输入命令时的误差,让终端操作更高效,提高生产力。
|
||||
|
||||
以我的个人使用情况为例:我每日会通过家用电脑远程连接到我使用 Linux 系统的实体 PC。所有的远程网络连接都通过私有 VPN 加密保护。然而,当我需要频繁重复输入命令进行连接时,这种经历实在令人烦躁。
|
||||
|
||||
于是,我创建了下面这个 Bash 函数,从而有所改进:
|
||||
|
||||
```
|
||||
export REMOTE_RDP_USER="myremoteuser"
|
||||
function remote_machine() {
|
||||
/usr/bin/xfreerdp /cert-ignore /sound:sys:alsa /f /u:$REMOTE_RDP_USER /v:$1 /p:$2
|
||||
}
|
||||
```
|
||||
|
||||
但后来,我发现自己还是频繁地执行下面这条命令(在一行中):
|
||||
|
||||
```
|
||||
remote_pass=(/bin/cat/.mypassfile) remote_machine $remote_machine $remote_pass
|
||||
```
|
||||
|
||||
这太烦了,更糟糕的是,我的密码被明文存储在我的电脑上(我虽然使用了加密驱动器,但这点依然令人不安)。
|
||||
|
||||
因此,我决定投入一些时间,编写一个实用的脚本,从而更好地满足我的基本需求。
|
||||
|
||||
#### 我需要哪些信息才能连接到远程桌面?
|
||||
|
||||
实际上,要连接到远程桌面,你只需提供少量信息。这些信息需要进行结构化处理,所以一个简单的 JSON 文件就能够满足要求:
|
||||
|
||||
```
|
||||
{"machines": [
|
||||
{
|
||||
"name": "machine1.domain.com",
|
||||
"description": "Personal-PC"
|
||||
},
|
||||
{
|
||||
"name": "machine2.domain.com",
|
||||
"description": "Virtual-Machine"
|
||||
}
|
||||
],
|
||||
"remote_user": "MYUSER@DOMAIN",
|
||||
"title" : "MY COMPANY RDP connection"
|
||||
}
|
||||
```
|
||||
|
||||
尽管在各种配置文件格式中,JSON 并非最佳选择(例如,它不支持注解),但是 Linux 提供了许多工具通过命令行方式解析 JSON 内容。其中,特别值得一提的工具就是 [jq][5]。下面我要向你展示如何利用它来提取机器列表:
|
||||
|
||||
```
|
||||
/usr/bin/jq --compact-output --raw-output '.machines[]| .name' \
|
||||
$HOME/.config/scripts/kodegeek_rdp.json) \
|
||||
"machine1.domain.com" "machine2.domain.com"
|
||||
|
||||
```
|
||||
|
||||
`jq` 的文档可以在 [这里][6] 找到。另外,你也可以直接将你的 JSON 文件复制粘贴到 [jq play][7],试用你的表达式,然后在你的脚本中使用这些表达式。
|
||||
|
||||
既然已经准备好了连接远程计算机所需的所有信息,那现在就让我们来创建一个美观实用的 TUI 吧。
|
||||
|
||||
#### Dialog 的帮助
|
||||
|
||||
[Dialog][8] 是那些你可能希望早些认识的、被低评估的 Linux 工具之一。你可以利用它构建出一个井然有序、简介易懂,并且完美适用于你终端的用户界面。
|
||||
|
||||
比如,我可以创建一个包含我喜欢的编程语言的简单的复选框列表,且默认选择 Python:
|
||||
|
||||
```
|
||||
dialog --clear --checklist "Favorite programming languages:" 10 30 7\
|
||||
1 Python on 2 Java off 3 Bash off 4 Perl off 5 Ruby off
|
||||
|
||||
```
|
||||
|
||||
![][9]
|
||||
|
||||
我们通过这条命令向 `dialog` 下达了几个指令:
|
||||
|
||||
* 清除屏幕(所有选项都以 `--` 开头)
|
||||
* 创建一个带有标题的复选框(第一个位置参数)
|
||||
* 决定窗口尺寸(高度、宽度和列表高度,共 3 个参数)
|
||||
* 列表中的每条选项都由一个标签和一个值组成。
|
||||
|
||||
惊人的是,仅仅一行代码,就带来了简洁直观和视觉友好的选择列表。
|
||||
|
||||
关于 `dialog` 的详细文档,你可以在 [这里][10] 阅读。
|
||||
|
||||
#### 整合所有元素:使用 Dialog 和 JQ 编写 TUI
|
||||
|
||||
我编写了一个 TUI,它使用 `jq` 从我的 JSON 文件中提取配置详细信息,并且使用 `dialog` 来组织流程。每次运行,我都会要求输入密码,并将其保存在一个临时文件中,脚本使用后便会删除这个临时文件。
|
||||
|
||||
这个脚本非常基础,但它更安全,也使我能够专注于更重要的任务 🙂
|
||||
|
||||
那么 [脚本][11] 看起来是怎样的呢?下面是代码:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
# Author Jose Vicente Nunez
|
||||
# Do not use this script on a public computer. It is not secure...
|
||||
# https://invisible-island.net/dialog/
|
||||
# Below some constants to make it easier to handle Dialog
|
||||
# return codes
|
||||
: ${DIALOG_OK=0}
|
||||
: ${DIALOG_CANCEL=1}
|
||||
: ${DIALOG_HELP=2}
|
||||
: ${DIALOG_EXTRA=3}
|
||||
: ${DIALOG_ITEM_HELP=4}
|
||||
: ${DIALOG_ESC=255}
|
||||
# Temporary file to store sensitive data. Use a 'trap' to remove
|
||||
# at the end of the script or if it gets interrupted
|
||||
declare tmp_file=$(/usr/bin/mktemp 2>/dev/null) || declare tmp_file=/tmp/test$$
|
||||
trap "/bin/rm -f $tmp_file" QUIT EXIT INT
|
||||
/bin/chmod go-wrx ${tmp_file} > /dev/null 2>&1
|
||||
:<<DOC
|
||||
Extract details like title, remote user and machines using jq from the JSON file
|
||||
Use a subshell for the machine list
|
||||
DOC
|
||||
declare TITLE=$(/usr/bin/jq --compact-output --raw-output '.title' $HOME/.config/scripts/kodegeek_rdp.json)|| exit 100
|
||||
declare REMOTE_USER=$(/usr/bin/jq --compact-output --raw-output '.remote_user' $HOME/.config/scripts/kodegeek_rdp.json)|| exit 100
|
||||
declare MACHINES=$(
|
||||
declare tmp_file2=$(/usr/bin/mktemp 2>/dev/null) || declare tmp_file2=/tmp/test$$
|
||||
# trap "/bin/rm -f $tmp_file2" 0 1 2 5 15 EXIT INT
|
||||
declare -a MACHINE_INFO=$(/usr/bin/jq --compact-output --raw-output '.machines[]| join(",")' $HOME/.config/scripts/kodegeek_rdp.json > $tmp_file2)
|
||||
declare -i i=0
|
||||
while read line; do
|
||||
declare machine=$(echo $line| /usr/bin/cut -d',' -f1)
|
||||
declare desc=$(echo $line| /usr/bin/cut -d',' -f2)
|
||||
declare toggle=off
|
||||
if [ $i -eq 0 ]; then
|
||||
toggle=on
|
||||
((i=i+1))
|
||||
fi
|
||||
echo $machine $desc $toggle
|
||||
done < $tmp_file2
|
||||
/bin/cp /dev/null $tmp_file2
|
||||
) || exit 100
|
||||
# Create a dialog with a radio list and let the user select the
|
||||
# remote machine
|
||||
/usr/bin/dialog \
|
||||
--clear \
|
||||
--title "$TITLE" \
|
||||
--radiolist "Which machine do you want to use?" 20 61 2 \
|
||||
$MACHINES 2> ${tmp_file}
|
||||
return_value=$?
|
||||
# Handle the return codes from the machine selection in the
|
||||
# previous step
|
||||
export remote_machine=""
|
||||
case $return_value in
|
||||
$DIALOG_OK)
|
||||
export remote_machine=$(/bin/cat ${tmp_file})
|
||||
;;
|
||||
$DIALOG_CANCEL)
|
||||
echo "Cancel pressed.";;
|
||||
$DIALOG_HELP)
|
||||
echo "Help pressed.";;
|
||||
$DIALOG_EXTRA)
|
||||
echo "Extra button pressed.";;
|
||||
$DIALOG_ITEM_HELP)
|
||||
echo "Item-help button pressed.";;
|
||||
$DIALOG_ESC)
|
||||
if test -s $tmp_file ; then
|
||||
/bin/rm -f $tmp_file
|
||||
else
|
||||
echo "ESC pressed."
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# No machine selected? No service ...
|
||||
if [ -z "${remote_machine}" ]; then
|
||||
/usr/bin/dialog \
|
||||
--clear \
|
||||
--title "Error, no machine selected?" --clear "$@" \
|
||||
--msgbox "No machine was selected!. Will exit now..." 15 30
|
||||
exit 100
|
||||
fi
|
||||
|
||||
# Send 4 packets to the remote machine. I assume your network
|
||||
# administration allows ICMP packets
|
||||
# If there is an error show message box
|
||||
/bin/ping -c 4 ${remote_machine} >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
/usr/bin/dialog \
|
||||
--clear \
|
||||
--title "VPN issues or machine is off?" --clear "$@" \
|
||||
--msgbox "Could not ping ${remote_machine}. Time to troubleshoot..." 15 50
|
||||
exit 100
|
||||
fi
|
||||
|
||||
# Remote machine is visible, ask for credentials and handle user
|
||||
# choices (like password with a password box)
|
||||
/bin/rm -f ${tmp_file}
|
||||
/usr/bin/dialog \
|
||||
--title "$TITLE" \
|
||||
--clear \
|
||||
--insecure \
|
||||
--passwordbox "Please enter your Windows password for ${remote_machine}\n" 16 51 2> $tmp_file
|
||||
return_value=$?
|
||||
case $return_value in
|
||||
$DIALOG_OK)
|
||||
# We have all the information, try to connect using RDP protocol
|
||||
/usr/bin/mkdir -p -v $HOME/logs
|
||||
/usr/bin/xfreerdp /cert-ignore /sound:sys:alsa /f /u:$REMOTE_USER /v:${remote_machine} /p:$(/bin/cat ${tmp_file})| \
|
||||
/usr/bin/tee $HOME/logs/$(/usr/bin/basename $0)-$remote_machine.log
|
||||
;;
|
||||
$DIALOG_CANCEL)
|
||||
echo "Cancel pressed.";;
|
||||
$DIALOG_HELP)
|
||||
echo "Help pressed.";;
|
||||
$DIALOG_EXTRA)
|
||||
echo "Extra button pressed.";;
|
||||
$DIALOG_ITEM_HELP)
|
||||
echo "Item-help button pressed.";;
|
||||
$DIALOG_ESC)
|
||||
if test -s $tmp_file ; then
|
||||
/bin/rm -f $tmp_file
|
||||
else
|
||||
echo "ESC pressed."
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
```
|
||||
|
||||
![][12]
|
||||
|
||||
你从代码中可以看出,`dialog` 预期的是位置参数,并且允许你在变量中捕获用户的回应。这实际上使其成为编写文本用户界面的 Bash 扩展。
|
||||
|
||||
上述的小例子只涵盖了一些部件的使用,其实还有更多的文档在 [官方 dialog 网站][8]上。
|
||||
|
||||
### Dialog 和 JQ 是最好的选择吗?
|
||||
|
||||
实现这个功能可以有很多方法(如 [Textual][13],Gnome 的 [Zenity][14],Python 的 [TKinker][15]等)。我只是想向你展示一种高效的方式——仅用 100 行代码就完成了这项任务。
|
||||
|
||||
_确实,它并不完美_。更具体地讲,它与 Bash 的深度集成使得代码有些冗长,但仍然保持了易于调试和维护的特性。相比于反复复制粘贴长长的命令,这无疑是一个更好的选择。
|
||||
|
||||
最后,如果你喜欢在 Bash 中使用 `jq` 处理 JSON,那么你会对这个 [jq 配方的精彩集合][16] 感兴趣的。
|
||||
|
||||
*(题图:MJ/a9b7f60a-02ec-4d3f-88ae-2321f49ac0e1)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/writing-useful-terminal-tui-on-linux-with-dialog-and-jq/
|
||||
|
||||
作者:[Jose Nunez][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/josevnz/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/11/TUI_w_dialog_n_jq-816x345.jpg
|
||||
[2]: https://unsplash.com/@riku?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[3]: https://unsplash.com/photos/black-flat-screen-computer-monitor-wvJuYrM5iuw?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[4]: https://en.wikipedia.org/wiki/Virtual_private_network
|
||||
[5]: https://stedolan.github.io/jq/
|
||||
[6]: https://jqlang.github.io/jq/manual/
|
||||
[7]: https://jqplay.org/
|
||||
[8]: https://invisible-island.net/dialog/
|
||||
[9]: https://fedoramagazine.org/wp-content/uploads/2023/11/dialog-example1.png
|
||||
[10]: https://invisible-island.net/dialog/#documentation
|
||||
[11]: https://raw.githubusercontent.com/josevnz/scripts/main/kodegeek_rdp.sh
|
||||
[12]: https://fedoramagazine.org/wp-content/uploads/2023/11/dialog-example2.png
|
||||
[13]: https://textual.textualize.io/
|
||||
[14]: https://gitlab.gnome.org/GNOME/zenity/commits/master?ofs=1900
|
||||
[15]: https://docs.python.org/3/library/tkinter.html
|
||||
[16]: https://nntrn.github.io/jq-recipes/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/18/071418mc44bs42keebfe1c.png
|
||||
157
published/202311/20231118 Enabling Bluetooth on Arch Linux.md
Normal file
157
published/202311/20231118 Enabling Bluetooth on Arch Linux.md
Normal file
@@ -0,0 +1,157 @@
|
||||
[#]: subject: "Enabling Bluetooth on Arch Linux"
|
||||
[#]: via: "https://itsfoss.com/bluetooth-arch-linux/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16403-1.html"
|
||||
|
||||
故障排除:在 Arch Linux 上启用蓝牙
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Arch Linux 上的蓝牙无法工作?以下是对我有用的方法,以及解决 Arch 上蓝牙问题的其它技巧。
|
||||
|
||||
[我很轻松地安装了 Arch Linux][1],这要归功于 archinstall 脚本。
|
||||
|
||||
在我开始使用它并探索之后,我尝试使用我的蓝牙耳机,却发现蓝牙无法工作。
|
||||
|
||||
我可以看到蓝牙选项,但无法启用它。单击开关会只会切换回禁用状态。
|
||||
|
||||
下面是我所做的以及有作用的事情。
|
||||
|
||||
### 确保蓝牙服务正在运行
|
||||
|
||||
如果该服务未运行,蓝牙将不会打开,你将无法连接到它。
|
||||
|
||||
检查蓝牙服务的状态并查看其是否正在运行。
|
||||
|
||||
````
|
||||
systemctl status bluetooth
|
||||
````
|
||||
|
||||
它给了我以下输出:
|
||||
|
||||
```
|
||||
[abhishek@itsfoss ~]$ systemctl status bluetooth
|
||||
○ bluetooth.service - Bluetooth service
|
||||
Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; disabled; preset: disabled)
|
||||
Active: inactive (dead)
|
||||
Docs: man:bluetoothd(8)
|
||||
```
|
||||
|
||||
如你所见,`bluetooth` 服务处于非活动状态。它没有运行。并且状态被禁用。
|
||||
|
||||
这意味着蓝牙守护程序当前未运行,也未设置为每次启动时自动启动。
|
||||
|
||||
这让事情变得更容易了。我在第一次尝试中就找出了根本原因。在 Arch Linux 中这种情况并不常见。
|
||||
|
||||
使用以下命令启动蓝牙守护进程:
|
||||
|
||||
````
|
||||
sudo systemctl start bluetooth
|
||||
````
|
||||
|
||||
让蓝牙服务在系统启动时自动运行:
|
||||
|
||||
````
|
||||
systemctl enable bluetooth
|
||||
````
|
||||
|
||||
它应该显示以下输出:
|
||||
|
||||
```
|
||||
[abhishek@itsfoss ~]$ systemctl enable bluetooth
|
||||
Created symlink /etc/systemd/system/dbus-org.bluez.service → /usr/lib/systemd/system/bluetooth.service.
|
||||
Created symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service → /usr/lib/systemd/system/bluetooth.service.
|
||||
```
|
||||
|
||||
现在,蓝牙已启用,并且在系统设置中很明显:
|
||||
|
||||
![][2]
|
||||
|
||||
### 连接蓝牙设备的提示
|
||||
|
||||
你可能已经知道应该首先将蓝牙设备置于配对模式。这很关键。
|
||||
|
||||
之后,你可以尝试关闭然后再次打开蓝牙按钮,以便它搜索可用的设备。
|
||||
|
||||
如果它没有立即显示,你可以单击其他一些系统设置并再次返回蓝牙。过去它对我有用过几次,不要问为什么。
|
||||
|
||||
### 其他故障排除提示
|
||||
|
||||
以下是修复 Arch Linux 中蓝牙连接问题的更多提示:
|
||||
|
||||
#### 确保未被阻止
|
||||
|
||||
确保蓝牙未被阻止:
|
||||
|
||||
````
|
||||
rfkill list
|
||||
````
|
||||
|
||||
检查输出:
|
||||
|
||||
```
|
||||
[abhishek@itsfoss ~]$ rfkill list
|
||||
0: hci0: Bluetooth
|
||||
Soft blocked: no
|
||||
Hard blocked: no
|
||||
1: phy0: Wireless LAN
|
||||
Soft blocked: no
|
||||
Hard blocked: no
|
||||
```
|
||||
|
||||
如果你发现蓝牙被阻止,请使用以下命令取消阻止:
|
||||
|
||||
```
|
||||
rfkill unblock bluetooth
|
||||
```
|
||||
|
||||
#### Pipewire 与 Pulseaudio
|
||||
|
||||
在某些情况下,如果你过去尝试过 Pipewire 和 Pulseaudio,它们可能会破坏工作。
|
||||
|
||||
如果你使用 Pipewire,请确保安装了 pipewire-pulse:
|
||||
|
||||
```
|
||||
sudo pacman -Syu pipewire-pulse
|
||||
```
|
||||
|
||||
如果你使用 Pulseaudio,`bluez` 和 `pulseaudio-bluetooth` 可以帮助你。
|
||||
|
||||
查看 Arch Wiki 页面以获取更多信息。
|
||||
|
||||
> **[蓝牙耳机 - Arch 维基][3]**
|
||||
|
||||
### 这对你有用吗?
|
||||
|
||||
硬件兼容性问题是任何操作系统都会遇到的问题,Linux 也不例外。
|
||||
|
||||
事情没有单一的解决方案。你的系统可能存在与我的系统不同的问题,此处提到的建议可能适合你,也可能不适用于你。
|
||||
|
||||
完善的 Arch 维基提供的建议比我所能提供的要多得多。如果你仍然无法解决蓝牙问题,请执行此操作。
|
||||
|
||||
现在看你的了。对你有用吗?如果有,是哪种方法?如果没有,你遇到了什么样的问题,以及到目前为止你尝试过哪些故障排除方法?
|
||||
|
||||
*(题图:MJ/60bd220b-bb4f-4d51-9c41-162c8c4714b3)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/bluetooth-arch-linux/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.youtube.com/watch?v=WksxVLrALhg
|
||||
[2]: https://itsfoss.com/content/images/2023/11/bluetooth-working-arch-linux.png
|
||||
[3]: https://wiki.archlinux.org/favicon.ico
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/21/201358dz5gex5xu9689kkx.png
|
||||
184
published/202311/20231119 LibreOffice Alternatives for Linux.md
Normal file
184
published/202311/20231119 LibreOffice Alternatives for Linux.md
Normal file
@@ -0,0 +1,184 @@
|
||||
[#]: subject: "LibreOffice Alternatives for Linux"
|
||||
[#]: via: "https://itsfoss.com/libreoffice-alternatives-linux/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16427-1.html"
|
||||
|
||||
适用于 Linux 的 LibreOffice 替代品
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> LibreOffice 当然很棒,但是如果你想找一些其它的替代品,那这里有一些。
|
||||
|
||||
LibreOffice 是一个出色的开源文档套件。它预装在许多 Linux 发行版上,应该足以满足大多数用户的需求。
|
||||
|
||||
然而,有些人可能不喜欢它的用户界面和功能集。某些用户可能想尝试其他选项,看看它们是否提供更好的微软 Office 文档兼容性。
|
||||
|
||||
无论出于何种原因,好消息是我们有一些不错的 LibreOffice 替代品可供你探索。
|
||||
|
||||
> ✋ **非自由和开源软件警告!** 这里提到的一些应用并非开源。它们被列入是因为能在 Linux 下使用。
|
||||
|
||||
### 1、ONLYOFFICE
|
||||
|
||||
[ONLYOFFICE][1] 是一个令人印象深刻的文档套件,具有各种版本,可满足各种用户的需求。
|
||||
|
||||
与其他文档程序相比,它因提供与微软 Office 文档更好的兼容性而广受欢迎。功能集可能不如 LibreOffice 那么大,但就用户体验和兼容性而言,它可能是更好的选择。
|
||||
|
||||
你可以在 Linux 和其他平台上免费使用其 [桌面编辑器][2]。你还可以选择自行托管社区版本并将其用作在线编辑器。但是,它确实对同时连接/用户有限制。
|
||||
|
||||
考虑到你可以在 GitHub 上找到 [源代码][3],它即使不完全是供个人使用的自由和开放源码软件,也是一个**可获得源代码**的解决方案。
|
||||
|
||||
亮点:
|
||||
|
||||
* 现代用户体验
|
||||
* 更好的微软 Office 兼容性
|
||||
* 在线编辑器(自托管或企业选项)
|
||||
* 跨平台
|
||||
|
||||
### 2、Apache OpenOffice
|
||||
|
||||
![][4]
|
||||
|
||||
LibreOffice 分支自 [Apache OpenOffice][5]。
|
||||
|
||||
当然,OpenOffice 的功能不如 LibreOffice 丰富。然而,对于寻求较旧/熟悉的用户界面以及满足基本要求的更稳定体验的用户来说,OpenOffice 是一个不错的选择。
|
||||
|
||||
OpenOffice 不像 LibreOffice 那样得到积极维护,但你可以期待每年/每两年发布一次。不要忘记,你也可以轻松地 [安装 Apache OpenOffice][6]。
|
||||
|
||||
我们有详细的 [LibreOffice 和 OpenOffice 文档套件之间的比较][7] 来帮助你做出决定。
|
||||
|
||||
> **[LibreOffice 和 OpenOffice 的相似与不同之处][7]**
|
||||
|
||||
亮点:
|
||||
|
||||
* 老式用户界面
|
||||
* 对于某些用户来说它更稳定
|
||||
* 跨平台
|
||||
|
||||
### 3、CryptPad
|
||||
|
||||
![][9]
|
||||
|
||||
[CryptPad][10] 是一款仅在线使用的开源协作套件,可作为 LibreOffice 的替代品满足基本需求。他们还在改进支持文档/演示文稿的功能,就像谷歌文档一样。
|
||||
|
||||
你可以使用 CryptPad 添加富文本文档、电子表格等。然而,在撰写本文时,他们正在努力支持像谷歌文档一样的更成熟的文档。当你阅读本文或尝试一下时,它可能已经有所改进。
|
||||
|
||||
如果你需要一个功能不太花哨的端到端文档套件,CryptPad 可能是一个不错的选择。
|
||||
|
||||
你可以使用官方托管实例、公共实例或自行托管。
|
||||
|
||||
亮点:
|
||||
|
||||
* 端到端加密
|
||||
* 实时协作
|
||||
* 安全云存储(可选)
|
||||
* 自托管或已托管
|
||||
|
||||
### 4、SoftMaker FreeOffice(非自由和开源软件)
|
||||
|
||||
![][11]
|
||||
|
||||
SoftMaker 的 [FreeOffice][12] 是一个适用于 Linux 和其他平台的专有文档套件。
|
||||
|
||||
它以其类似微软 Office 的用户界面以及与微软 Office 文件的良好兼容性而闻名。
|
||||
|
||||
与 OpenOffice 不同,SoftMaker 的免费 Office 版本的更新更多,与 LibreOffice 相比是一个不错的选择。如果你喜欢其免费产品并需要专业支持并解锁更多功能,你可以选择其高级版本。
|
||||
|
||||
请参阅我们的深入 [LibreOffice 和 FreeOffice 之间的比较][13] 了解更多:
|
||||
|
||||
亮点:
|
||||
|
||||
* 类似微软 Office 的用户界面
|
||||
* 良好的微软 Office 文件格式兼容性
|
||||
* 可选高级版具有更多功能和专业支持
|
||||
* 跨平台
|
||||
|
||||
### 5、WPS Office(非自由/开源软件)
|
||||
|
||||
![][14]
|
||||
|
||||
WPS Office 对 Windows 用户而言很流行,它也适用于 Linux。
|
||||
|
||||
它是一个专有程序,提供适用于安卓和 iOS 的时尚移动应用。有些人可能不喜欢它,因为它的开发者是一家中国软件公司,但它提供了漂亮的用户界面和良好的微软 Office 兼容性。
|
||||
|
||||
你可以将其视为文档套件中的 “**Deepin**”,它是 [最美丽的 Linux 发行版][15] 之一。它提供了良好的用户体验并且免费使用。
|
||||
|
||||
作为一个免费选项,其跨平台的便捷可用性使其成为比 LibreOffice 更有趣的选择。
|
||||
|
||||
要解锁 PDF 编辑功能、云存储、专业支持并摆脱广告,你可以选择其 PRO 版本。
|
||||
|
||||
亮点:
|
||||
|
||||
* 漂亮的用户界面
|
||||
* 移动应用支持
|
||||
* 良好的微软 Office 文件格式兼容性
|
||||
* 可选专业版,具有更多功能
|
||||
* 跨平台
|
||||
|
||||
### 6、Calligra
|
||||
|
||||
![][16]
|
||||
|
||||
[Calligra][17] 是一个 KDE 办公套件。它可能不如 LibreOffice 功能丰富,但它是一个更简单的替代方案。
|
||||
|
||||
无论你是否使用基于 KDE 的发行版,它都应该可以在你的 Linux 发行版上正常运行。我在我的 Fedora 系统上对其进行了测试,如上面的截图所示。
|
||||
|
||||
你可以在大多数 Linux 发行版的默认仓库中找到所有程序(例如 Calligra Words 和 Calligra Sheets)。它还包括用于项目管理的 Calligra Plan 和用于演示的 Stage 等程序。
|
||||
|
||||
虽然它可能不会经常发布重大版本,但根据其 [GitLab 页面][18],它由一些贡献者积极维护。如果你喜欢这个项目,你可以以各种方式帮助他们。
|
||||
|
||||
亮点:
|
||||
|
||||
* 使用简单
|
||||
* 与平常不同的东西
|
||||
* 支持微软 Office 文件格式
|
||||
* 仅限 Linux
|
||||
|
||||
### 总结
|
||||
|
||||
尽管没有一个选项可以完全取代 LibreOffice,但它们相比 LibreOffice 带来了各种好处。
|
||||
|
||||
有些可以为你提供更好或更简单的用户体验,而另一些则可以更好地处理微软 Office 文件格式。
|
||||
|
||||
你可以根据自己的喜好来选择,看看是否符合你的需求。
|
||||
|
||||
💬 你会选择什么作为 LibreOffice 的替代品? 在评论中让我知道你的想法。
|
||||
|
||||
*(题图:MJ/796761b9-96a1-4cb4-859e-a9f12e305771)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/libreoffice-alternatives-linux/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.onlyoffice.com/
|
||||
[2]: https://www.onlyoffice.com/en/desktop.aspx
|
||||
[3]: https://github.com/ONLYOFFICE
|
||||
[4]: https://itsfoss.com/content/images/2023/11/openoffice-writer.png
|
||||
[5]: https://www.openoffice.org/
|
||||
[6]: https://itsfoss.com/install-openoffice-ubuntu-linux/
|
||||
[7]: https://linux.cn/article-16079-1.html
|
||||
[8]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[9]: https://itsfoss.com/content/images/2023/11/cryptpad-rich-text.png
|
||||
[10]: https://cryptpad.org/
|
||||
[11]: https://itsfoss.com/content/images/2023/11/freeoffice-textmaker.png
|
||||
[12]: https://www.freeoffice.com/en/
|
||||
[13]: https://itsfoss.com/libreoffice-vs-freeoffice/
|
||||
[14]: https://itsfoss.com/content/images/2023/11/wps-office-linux.png
|
||||
[15]: https://itsfoss.com/beautiful-linux-distributions/
|
||||
[16]: https://itsfoss.com/content/images/2023/11/calligra-words.png
|
||||
[17]: https://calligra.org/
|
||||
[18]: https://invent.kde.org/office/calligra
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/30/080855bo0k9rdtpkssi0px.png
|
||||
@@ -0,0 +1,111 @@
|
||||
[#]: subject: "HandBrake 1.7 Release: A Meaningful Update for This Year"
|
||||
[#]: via: "https://news.itsfoss.com/handbrake-1-7-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16425-1.html"
|
||||
|
||||
HandBrake 1.7 发布
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这款视频转换工具带来了急需的改进。
|
||||
|
||||
流行的开源视频转换器 HandBrake 发布了新的重要版本,并进行了一些重要升级。该版本是在 [HandBrake 1.6][1] 发布近一年后推布的。
|
||||
|
||||
作为 [Linux 上最好的开源视频转换器][2] 之一,HandBrake 是许多人满足其视频转换/转码需求的首选选项。
|
||||
|
||||
让我们看看这个版本提供了什么。
|
||||
|
||||
### 🆕 HandBrake 1.7:有什么新功能?
|
||||
|
||||
![][3]
|
||||
|
||||
HandBrake 1.7 具有大量全面更新。
|
||||
|
||||
一些**关键亮点**包括:
|
||||
|
||||
* Linux 特定的改进
|
||||
* 新的 AV1 编码器
|
||||
* 提高性能
|
||||
|
||||
#### Linux 特定的改进
|
||||
|
||||
视频摘要中添加了对**位深度和 HDR 信息**的支持,还有一个**新选项可以在切换到电池电源或省电模式时暂停视频编码**。
|
||||
|
||||
然后添加了**对本机文件选择器的支持**、**对视频扫描的拖放支持**、**设置自动文件命名选项**、**删除过时的更新检查器** 等。
|
||||
|
||||
#### 新的 AV1 编码器
|
||||
|
||||
这是**此版本的主要亮点**,HandBrake 现在支持两种新的 AV1 编码器,**AMD VCN AV1** 和 **NVIDIA NVENC AV1**。
|
||||
|
||||
由于 SVT-AV1 的多通道 ABR 模式的实施,即使**现有的 AV1 编码支持也得到了提升**。
|
||||
|
||||
#### 提高性能
|
||||
|
||||
**HandBrake 的性能在 **ARM64/AArch64** 和 **Apple Silicon** 等 CPU 架构上得到了重大提升**。
|
||||
|
||||
现在,用户可以利用**新的 SVT-AV1 汇编优化**、**更快的 HEVC 解码**以及最新的 [FFmpeg][4] 库和**快 30% 的 bwdif 过滤**。
|
||||
|
||||
#### 🛠️ 其他更改和改进
|
||||
|
||||
至于其他改进,以下是一些值得注意的改进:
|
||||
|
||||
* 更新了许多第三方库。
|
||||
* 更新了 Creator 和 Social 的预设。
|
||||
* 添加了新的 [Apple VideoToolbox][5] 硬件预设。
|
||||
* 杜比视界和 HDR10+ 的动态范围元数据传递得到了改进。
|
||||
|
||||
自从我上次使用 HandBrake 以来已经有一段时间了。但是,我很高兴看到它仍然得到应有的照顾。
|
||||
|
||||
有关此版本的完整技术详细信息,你可以阅读 [发行说明][6]。
|
||||
|
||||
### 📥 下载 HandBrake 1.7
|
||||
|
||||
HandBrake 适用于 **Linux**、**Windows** 和 **macOS**。你可以前往[官方网站][7]获取你选择的包。
|
||||
|
||||
> **[HandBrake][7]**
|
||||
|
||||
如果你不确定如何安装; 那么你可以通过我们的[安装指南][8]了解更多信息。
|
||||
|
||||
### 如何升级?
|
||||
|
||||
HandBrake 通常会让你知道 Windows 和 macOS 上是否有新更新。开发人员建议你**备份在执行升级之前设置的所有自定义预设和应用首选项**。
|
||||
|
||||
**对于 Windows 用户**,开发人员建议安装 Microsoft .NET Desktop Runtime [6.0.x 版本][10],以便能够正确运行此程序。
|
||||
|
||||
但是,对于 **Linux 用户**,他们必须通过 Flathub 商店进行更新,或者使用官方网站或 [GitHub 仓库][11]上提供的更新后的 Flatpak 包重新安装。
|
||||
|
||||
> 📋 在撰写本文时,[Flathub store][12] 版本尚未发布 1.7 版本。你可以期待它很快出现。
|
||||
|
||||
💬 你会尝试这个新版本的 HandBrake 吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/handbrake-1-7-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://github.com/HandBrake/HandBrake/releases/tag/1.6.0
|
||||
[2]: https://itsfoss.com/open-source-video-converters/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/HandBrake_1.7.png
|
||||
[4]: https://ffmpeg.org/
|
||||
[5]: https://developer.apple.com/documentation/videotoolbox
|
||||
[6]: https://github.com/HandBrake/HandBrake/releases/tag/1.7.0
|
||||
[7]: https://handbrake.fr/downloads.php
|
||||
[8]: https://itsfoss.com/install-handbrake-ubuntu/
|
||||
[9]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[10]: https://dotnet.microsoft.com/en-us/download/dotnet/6.0
|
||||
[11]: https://github.com/HandBrake/HandBrake/releases
|
||||
[12]: https://flathub.org/apps/fr.handbrake.ghb
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/29/084457tjjbvbnev7idzvfi.jpg
|
||||
106
published/202311/20231120 What is Super Key in Linux.md
Normal file
106
published/202311/20231120 What is Super Key in Linux.md
Normal file
@@ -0,0 +1,106 @@
|
||||
[#]: subject: "What is Super Key in Linux?"
|
||||
[#]: via: "https://itsfoss.com/super-key/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16404-1.html"
|
||||
|
||||
Linux 黑话解释:Linux 中的 Super 键是什么?
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在本次 Linux 黑话解释系列的这一篇,我们会一起来探索 Linux 中的 `Super` 键(或称其为 `Meta` 键)。
|
||||
|
||||
当你在网上浏览 Linux 教程时,你可能会遇到 “`Super` 键” 这个术语,对于 Linux 的初学者来说,这可能会引起混淆。
|
||||
|
||||
概括地说,如果你的电脑预装了 Windows,那么带有 Windows 标志的 `Windows` 键就是 `Super` 键。
|
||||
|
||||
如果你使用的是苹果电脑,那么带有 `⌘` 符号的 `command` 键就是你的 `Super` 键。
|
||||
|
||||
![下面这个就是你的 Super 键(或者 Meta 键)][1]
|
||||
|
||||
很简单吧?
|
||||
|
||||
但是,为什么要将其命名为 `Super` 键呢?毫无疑问,背后一定有一些有趣的故事。
|
||||
|
||||
那么,让我们一起按下 `Super` 键,发掘更深层次的故事吧。
|
||||
|
||||
### Super 键背后的想法
|
||||
|
||||
它首次出现在 “space-cadet” 键盘中,这款键盘是在 1978 年为 [Lisp 机器][2] 设计的,其主要目的是用来模拟 `Meta` 键。(LCTT 译注:这款键盘的独特之处在于它设有七个修饰键,包括 `Shift`、`Control`、`Meta`、`Super`、`Hyper`,用户可以通过组合这些修饰键与其他键来输入更多的字符和命令,它对现代计算机键盘的发展产生了重要影响。)
|
||||
|
||||
`Meta` 键在 Emacs 编辑器中是非常重要的一个部分,但在当时的现代键盘中却未能配备实体的 `Meta` 键,因而人们常常通过不同的按键绑定来模仿其功能。
|
||||
|
||||
`Super` 键的引入,解决了这个问题,由此我们有了一个真实的 `Super` 键。
|
||||
|
||||
快进到 1994 年,当时 `Windows` 键首次在 [微软自然键盘][3] 上出现,它被用来迅速打开“开始”菜单。从 1996 年开始,将 `Meta` 键映射到 `Windows` 键成为了普遍的做法。
|
||||
|
||||
### Super 键的一般使用情况
|
||||
|
||||
当你在 Ubuntu 桌面上按下 `Super` 键时,它会显示活动概览,让你全面了解每个窗口正在进行的活动:
|
||||
|
||||
![在 Ubuntu 中按下 Super 键获得活动概览][4]
|
||||
|
||||
但你要知道,除了预览正在进行的活动,你其实还可以做更多。
|
||||
|
||||
比如,你可以同时按下 `Super` 键和 `Tab` 键,调出应用切换器,从而在正在运行的应用之间切换。
|
||||
|
||||
![][5]
|
||||
|
||||
下面列举了一些可以利用 `Super` 键的快捷键(在 Ubuntu 23.10 内部测试通过):
|
||||
|
||||
> 📋 如果你在使用的是基于 Ubuntu 的发行版,其中的某些快捷键可能并不会按照预期那样工作,因为发行版维护者可能已经将该快捷键指定为另一个任务。
|
||||
|
||||
快捷键 | 描述
|
||||
---|---
|
||||
`Super` | 打开活动概览
|
||||
`Super` + `Tab` | 切换开放应用
|
||||
`Super` + `D` | 显示桌面(最小化所有窗口)
|
||||
`Super` + `A` | 打开应用菜单
|
||||
`Super` + `S` | 显示快速设定
|
||||
`Super` + `←` | 将活动窗口移至屏幕的左半部分
|
||||
`Super` + `→` | 将活动窗口移至屏幕的右半部分
|
||||
`Super` + `↑` | 最大化活动窗口
|
||||
`Super` + `↓` | 最小化活动窗口
|
||||
`Super` + `L` | 锁定屏幕
|
||||
|
||||
这些操作实在太方便了,对吧?
|
||||
|
||||
### 通过快捷键提高生产效率
|
||||
|
||||
对于新接触 Ubuntu 的你,下列的一些有帮助的快捷键值得一试:
|
||||
|
||||
> **[Ubuntu 用户应该知道的 13 个快捷键][6]**
|
||||
|
||||
如果你刚开始使用终端,我会推荐你学习 [Linux 终端的基本快捷键][7]:
|
||||
|
||||
> **[专业用户喜欢使用的 21 个 Linux 终端快捷键][7]**
|
||||
|
||||
我希望这篇文章能给你带来宝贵的信息,使你对 Super 键有更深入的了解 ;)
|
||||
|
||||
*(题图:MJ/9b9a1146-0e76-459a-880d-b1a1a4fa5f1e)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/super-key/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/11/keyboard-linux.jpg
|
||||
[2]: https://en.wikipedia.org/wiki/Lisp_machine
|
||||
[3]: https://en.wikipedia.org/wiki/Microsoft_ergonomic_keyboards#Natural_Keyboard
|
||||
[4]: https://itsfoss.com/content/images/2023/11/Get-activities-overview-in-Ubuntu-by-pressing-the-super-key.png
|
||||
[5]: https://itsfoss.com/content/images/2023/02/App-Switch.png
|
||||
[6]: https://itsfoss.com/ubuntu-shortcuts/
|
||||
[7]: https://itsfoss.com/linux-terminal-shortcuts/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/21/211946e9resh69paphei8i.png
|
||||
@@ -0,0 +1,117 @@
|
||||
[#]: subject: "EndeavourOS Galileo: Xfce Out, KDE In"
|
||||
[#]: via: "https://news.itsfoss.com/endeavouros-galileo/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "GlassFoxowo-Dev"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16408-1.html"
|
||||
|
||||
EndeavourOS Galileo: 离开 Xfce,拥抱 KDE
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 基于 Arch Linux 的发行版 EndeavourOS 在其最新版本中进行了一些有趣的变更。
|
||||
|
||||
[基于 Arch Linux 的最佳用户友好型发行版][1] 之一,EndeavourOS 现已发布版本更新。
|
||||
|
||||
该版本代号为 “<ruby>伽利略<rt>Galileo</rt></ruby>”,沿用了我们在过去的版本中见过的类似命名方案,比如 [EndeavourOS “<ruby>卡西尼<rt>Cassini</rt></ruby>][2]。(LCTT 译注:伽利略、卡西尼都是著名天文学家,这些名字和这个操作系统的名称“<ruby>奋进<rt>Endeavour</rt></ruby>” 也都是航天器的名称。)
|
||||
|
||||
让我们来看看 “Galileo” 有什么新特性。
|
||||
|
||||
### 🆕 EndeavourOS Galileo: 有些什么新东西?
|
||||
|
||||
![][3]
|
||||
|
||||
尽管这个版本花费了一些时间才发布,但这是**一次重大升级,带来了一些重要的变化**。其中最明显的变化是转向了 KDE Plasma,以及放弃了 Xfce,稍后我们将详细讨论这一点。
|
||||
|
||||
**开发者决定使 EndeavourOS 比以前更为轻巧**,削减了一些预设设置,但仍然让你可以轻松地入门并使用 Arch Linux。
|
||||
|
||||
这个版本的一些**主要亮点**包括:
|
||||
|
||||
* 改进了 “欢迎” 应用
|
||||
* 调整了 Calamares 安装程序
|
||||
* KDE Plasma 取代 Xfce
|
||||
|
||||
#### 改进了 “欢迎” 应用
|
||||
|
||||
![][4]
|
||||
|
||||
在安装过程中显示的 “欢迎” 应用已经改进,现在它在左下角具有专门的**语言选择选项**。
|
||||
|
||||
图标也已更新,安装程序现在默认使用 KDE Plasma。
|
||||
|
||||
#### Calamares 安装程序调整
|
||||
|
||||
![][5]
|
||||
|
||||
为了配合 KDE Plasma 成为默认选择,EndeavourOS Galileo 上的 [Calamares][6] 安装程序**在安装过程中只允许安装一个桌面环境/窗口管理器**。
|
||||
|
||||
这是为了减轻安装后出现的冲突软件包问题。**安装完成后,你仍然可以安装其他桌面环境/窗口管理器**。
|
||||
|
||||
这还不是全部,**开发者还从安装程序中移除了社区版本**。因此,像 **Sway**、**Qtile**、**BSPWM**、**Openbox** 和 **Worm** 这样的变体无法通过 Calamares 安装了。
|
||||
|
||||
之所以不得不放弃这些变体,是因为大多数最初的开发者已经离开了这个项目,也没有其他人接手。幸运的是,**你仍然可以从它们的 [GitHub 页面][7] 手动安装这些社区版本**。
|
||||
|
||||
#### KDE Plasma 取代 Xfce
|
||||
|
||||
![][8]
|
||||
|
||||
未来,**KDE Plasma 将成为默认的桌面环境**,运行在立付环境和离线安装上,取代了 Xfce。
|
||||
|
||||
不用担心,**在安装 EndeavourOS 的过程中仍然可以选择安装 Xfce**,前面显示的截图就是证明。
|
||||
|
||||
正如开发者所述,这一举措背后的原因是:
|
||||
|
||||
> 为了使团队更容易进行开发和维护,我们转而使用 KDE Plasma 而不是 Xfce,因为对于我们的开发人员来说,使用 Calamares 安装程序能带来更原生的体验。
|
||||
|
||||
#### 🛠️ 其他变化和改进
|
||||
|
||||
以下是一些值得注意的其他亮点:
|
||||
|
||||
* 在新安装上启用了 **本地主机名解析**。
|
||||
* 当选择 systemd-boot 时,实施更强大的 **LUKS2 加密**。
|
||||
* 为了避免错误,对 **EFI 分区的权限** 进行了更严格的限制。
|
||||
* Calamares 上的 **软件包选择屏幕** 已经重新调整,更加直观。
|
||||
|
||||
你可以通过官方的 [公告博客][9] 了解更多关于 “Galileo” 版本的信息。
|
||||
|
||||
### 📥 获取 EndeavourOS Galileo
|
||||
|
||||
你可以从 [官方网站][10] 获取 EndeavourOS Galileo,他们还**在全球各地添加了新的下载镜像**,以提高访问速度。
|
||||
|
||||
> **[EndeavourOS Galileo][10]**
|
||||
|
||||
### 对现有用户有何影响?
|
||||
|
||||
没有。这个版本带来的变化仅影响新安装、安装程序和 ISO 上的立付环境。
|
||||
|
||||
**升级到 Galileo 不是强制性的**,定期更新系统的现有用户应该不会出现问题。
|
||||
|
||||
💬 你对这个版本有什么看法?放弃 Xfce 是一个好主意吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/endeavouros-galileo/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[GlassFoxowo-Dev](https://github.com/GlassFoxowo-Dev)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/arch-based-linux-distros/
|
||||
[2]: https://news.itsfoss.com/endeavouros-cassini/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/EndeavourOS_Galileo_1.jpg
|
||||
[4]: https://news.itsfoss.com/content/images/2023/11/EndeavourOS_Galileo_2.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/11/EndeavourOS_Galileo_3.png
|
||||
[6]: https://calamares.io/
|
||||
[7]: https://github.com/EndeavourOS-Community-Editions
|
||||
[8]: https://news.itsfoss.com/content/images/2023/11/EndeavourOS_Galileo_4.jpg
|
||||
[9]: https://endeavouros.com/news/slimmer-options-but-lean-and-in-a-new-live-environment-galileo-has-arrived/
|
||||
[10]: https://endeavouros.com/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/24/151118d9hh9ltji7990p9j.jpg
|
||||
@@ -0,0 +1,227 @@
|
||||
[#]: subject: "8 Open Source Password Managers to Enhance Your Privacy Game"
|
||||
[#]: via: "https://itsfoss.com/open-source-password-managers/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16412-1.html"
|
||||
|
||||
8 个提升你的隐私防护的开源密码管理器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 使用一些顶级开源密码管理器,确保你的登录凭证安全无虞。
|
||||
|
||||
密码管理器是一项非常有用的实用程序。在你想寻找一个合适的密码管理器时,有着丰富的选择。
|
||||
|
||||
你的智能手机制造商、浏览器、抗病毒软件都会提供密码管理器,并且还有其他多种第三方的选项。根据你的实际需求和便利性,你可以选择使用任何一款密码管理器。
|
||||
|
||||
但是,如果你偏爱开源的密码管理器,想要尝试使用开源的替代私有的?你有哪些选择呢?
|
||||
|
||||
这里,让我来为你揭示所有重要的信息。
|
||||
|
||||
### 为何选择开源的密码管理器?
|
||||
|
||||
密码管理器是一种关键的工具,它能存储各种敏感的数据,包括:
|
||||
|
||||
* 账号凭据
|
||||
* 安全笔记
|
||||
* 恢复代码
|
||||
* 2FA 令牌(某些情况下)
|
||||
|
||||
因此,使用一款能提供顶级隐私保护和安全性的密码管理器极为重要。
|
||||
|
||||
而选择开源选项,你将得到更好的透明度,并将有更多的人共同努力确保密码管理器的安全。
|
||||
|
||||
当然,如果你希望参与贡献、审查和改进密码管理器,你需要具备一定的技术能力。但是,即使你没有时间参与进来,用户和开发者社区依然会努力核实产品所做出的承诺。
|
||||
|
||||
这就是使用开源密码管理器所获得的优势。
|
||||
|
||||
对于私有的解决方案,你需要完全信任产品公司,而且你无法自行验证他们的声明。
|
||||
|
||||
考虑到选择安全工具的利弊,我在此为你推荐一些最受用户欢迎的密码管理器。
|
||||
|
||||
### 1、KeePass
|
||||
|
||||
![][1]
|
||||
|
||||
[KeePass][2] 是一款为 Windows 用户提供的卓越的开源密码管理器。你还可以试试 [利用 Wine 在 Linux 环境中运行这款 Windows 应用][3]。
|
||||
|
||||
这是一个纯本地的密码管理器,允许你将所有密码保存在一个数据库中。数据库经过加密,并设有主密钥保护(要牢记密钥,避免遗失)。
|
||||
|
||||
你可以根据需要,自主决定是否将数据库文件同步到任何选定的云存储中。但一般来说,将数据保存在自己的系统上,比存储在云端更为安全。
|
||||
|
||||
你既可以选择安装 KeePass,也可以通过 USB 设备运行它的便携版。此外,它还具备众多实用的功能,如附加附件、排序和导入导出等等。
|
||||
|
||||
亮点:
|
||||
|
||||
* 仅限本地使用
|
||||
* 可用的便携版
|
||||
* 支持导入 / 导出功能
|
||||
* 可通过分组 / 排序管理密码
|
||||
* 插件可用于增强功能集
|
||||
|
||||
### 2、Bitwarden
|
||||
|
||||
![][4]
|
||||
|
||||
[Bitwarden][5] 是一款强大、跨平台的密码管理器,涵盖了桌面应用程序和浏览器扩展。它与 KeePass 不同的之处在于,Bitwarden 依赖云端进行密码的加密和存储,大大提高了在多终端之间同步数据的便捷性。
|
||||
|
||||
Bitwarden 集成了你在密码管理器中可能需要的所有核心功能,而且对个人用户来说,所有的这些功能都有一个可承受的订阅价格。
|
||||
|
||||
你将得到一个使用起来更舒适的用户界面,并有众多功能供你使用。
|
||||
|
||||
亮点:
|
||||
|
||||
* 浏览器扩展和桌面应用
|
||||
* 移动应用
|
||||
* 提供自托管或基于云端的选项
|
||||
* 支持命令行界面访问
|
||||
* 对高级用户开放的紧急访问权限
|
||||
* 价格适中
|
||||
* 支持导入 / 导出功能
|
||||
* 提供 Bitwarden Send 功能,安全分享文本 / 笔记
|
||||
|
||||
### 3、Proton Pass
|
||||
|
||||
![][6]
|
||||
|
||||
[Proton Pass][7] 是以隐私保护为核心的 Proton 公司提供的优秀产品之一。
|
||||
|
||||
如果你已经在使用 Proton Mail 和 Proton VPN,并且希望从同一家值得信赖的公司使用多种服务,那么 Proton Pass 将是一个很好的选择。
|
||||
|
||||
你可以安装浏览器插件来开始使用 Proton Pass。在本文撰写时,它并未提供任何桌面应用程序。
|
||||
|
||||
除了所有基本功能外,你还可以在密码管理器内部使用电子邮件别名功能。随着 Proton Pass 的多样性,我们也提供了一个深入的 [Proton Pass 和 Bitwarden 的比较][8]。
|
||||
|
||||
亮点:
|
||||
|
||||
* 浏览器插件
|
||||
* 基于云
|
||||
* 移动应用
|
||||
* 作为 Proton 工具系列的一部分,使用起来非常方便
|
||||
* 邮件别名
|
||||
* 支持导入 / 导出
|
||||
|
||||
### 4、KeePassXC
|
||||
|
||||
![][10]
|
||||
|
||||
如果你对 KeePass 的功能感兴趣,并且需要原生的 Linux 支持,那么 [KeePassXC][11] 会是个不错的选择。
|
||||
|
||||
你将获得跨平台支持和浏览器扩展支持,无需依赖于插件。
|
||||
|
||||
总的来说,KeePassXC 可以视为 KeePass 的现代化替代版本,对用户体验进行了一些改善。
|
||||
|
||||
亮点:
|
||||
|
||||
* 仅支持离线
|
||||
* KeePass 的现代替代
|
||||
* 原生支持 Linux 和 macOS
|
||||
* 支持导入 / 导出
|
||||
|
||||
### 5、Passbolt
|
||||
|
||||
[Passbolt][12] 是一个为企业用户(或团队)设计的开源密码管理器。
|
||||
|
||||
不同于其他选择,Passbolt 不适合个人使用。你可以选择自我托管,或选择云托管版本,并根据你的实际需求选择适当的订阅方案。
|
||||
|
||||
尽管在社区版中,Passbolt 提供了所有基础的功能,但通过订阅计划你可以解锁更多的功能。
|
||||
|
||||
亮点:
|
||||
|
||||
* 专为企业和团队定制
|
||||
* 自托管或基于云
|
||||
* 支持命令行界面访问
|
||||
|
||||
### 6、Buttercup
|
||||
|
||||
![][13]
|
||||
|
||||
如果你在寻找一款优先考虑本地使用的密码管理器,那么[Buttercup][14] 就是一个针对 macOS、Linux 和 Windows 的理想选择。
|
||||
|
||||
如果你不需要云同步功能,但希望寻找一款与 KeePass 用户体验不同的密码管理器,那么 Buttercup 将是一个好的替代品。
|
||||
|
||||
这是一个带有简洁用户界面的跨平台开源密码管理器,同时提供了移动应用程序。
|
||||
|
||||
亮点:
|
||||
|
||||
* 仅支持离线使用
|
||||
* 易用性强
|
||||
* 兼容多平台
|
||||
* 界面简洁现代
|
||||
* 提供扩展支持
|
||||
|
||||
### 7、KWalletManager
|
||||
|
||||
![][15]
|
||||
|
||||
[KWalletManager][16] 是一款 [专为 Linux 设计的密码管理器][17],可对所有的用户凭证进行加密存储。
|
||||
|
||||
虽然它能在任何桌面环境下工作,但如果你使用的是 KDE 驱动的 Linux 系统,它能更好地与其他应用集成。
|
||||
|
||||
如果你需要一个能与应用程序集成、实现从 Linux 系统保存或自动填充密码的工具,KWalletManager 是个不错的选择。在某些情况下,它可能已经预装在 Linux 发行版中。如果你不打算使用 KWallet,应[禁用 KDE 钱包][18]。
|
||||
|
||||
亮点:
|
||||
|
||||
* 仅支持离线使用
|
||||
* 简单易用
|
||||
* 专为 Linux 定制
|
||||
|
||||
### 8、密码和密钥(即 GNOME 的 Seahorse)
|
||||
|
||||
![][19]
|
||||
|
||||
Seahorse 是 GNOME 发展出的一个实用工具,能存储密码并管理加密密钥。与 KWallet 类似,它是一款专为 Linux 设计的应用程序,与 Ubuntu 和其他几种发行版一起预装。
|
||||
|
||||
它不仅仅是一个传统的密码管理器,它还提供了许多其他功能,并且所有这一切都封装在了一个简洁的用户界面中。
|
||||
|
||||
亮点:
|
||||
|
||||
* 仅支持离线使用
|
||||
* 专为 Linux 定制
|
||||
* 可管理加密密钥和密码
|
||||
|
||||
### 总结
|
||||
|
||||
任何一款密码管理器都包含了全部的基础功能。因此,你需要根据具体的情况来做选择,比如是否支持自我托管、是否有紧急的共享访问,以及根据价格计划来决定所需的功能集等。
|
||||
|
||||
如果你需要一款以浏览器中心化的密码管理器,Proton Pass 就是不错的选择。而 KeePass 以及它的现代化版本 KeePassXC 是完美的离线工具。Bitwarden 则是全能解决方案。最后,Buttercup 和 Passbolt 对于那些希望体验最小化或需要团队协作功能的用户来说,也是独特的选择。
|
||||
|
||||
*(题图:MJ/8d97ac3c-1ed9-4dae-a176-03d99e6e8391)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/open-source-password-managers/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/11/keepass-windows.png
|
||||
[2]: https://keepass.info/
|
||||
[3]: https://itsfoss.com/use-windows-applications-linux/
|
||||
[4]: https://itsfoss.com/content/images/2023/11/bitwarden-extension-ui.jpg
|
||||
[5]: https://bitwarden.com/
|
||||
[6]: https://itsfoss.com/content/images/2023/11/proton-pass-ui-1.jpg
|
||||
[7]: https://proton.me/pass
|
||||
[8]: https://itsfoss.com/bitwarden-vs-proton-pass/
|
||||
[9]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[10]: https://itsfoss.com/content/images/2023/11/keepassxc.png
|
||||
[11]: https://keepassxc.org/
|
||||
[12]: https://www.passbolt.com/
|
||||
[13]: https://itsfoss.com/content/images/2023/11/buttercup.png
|
||||
[14]: https://buttercup.pw/
|
||||
[15]: https://itsfoss.com/content/images/2023/11/kde-wallet.jpg
|
||||
[16]: https://apps.kde.org/kwalletmanager5/
|
||||
[17]: https://itsfoss.com/password-managers-linux/
|
||||
[18]: https://itsfoss.com/disable-kde-wallet/
|
||||
[19]: https://itsfoss.com/content/images/2023/11/passwords-secrets.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/24/225319u3zy737zozu3col4.png
|
||||
@@ -0,0 +1,177 @@
|
||||
[#]: subject: "Wave: A Modern New Linux Terminal that You'll Love if You Hate Command Line"
|
||||
[#]: via: "https://news.itsfoss.com/wave-terminal/"
|
||||
[#]: author: "Abhishek https://news.itsfoss.com/author/root/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16409-1.html"
|
||||
|
||||
Wave:即使你讨厌命令行,也会喜欢的现代新 Linux 终端
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这是 Linux 终端的 VS Code,有可能在年轻一代编程者和 Linux 用户中流行起来。
|
||||
|
||||
对于新的终端仿真器的想法,我并不总是怀着兴奋的心情。
|
||||
|
||||
这里有 [数不清的用于 Linux 的终端软件][1]。从你的 Linux 发行版中自带的默认终端,到古老的经典版——“<ruby>终结者<rt>Terminator</rt></ruby>”,或更 “现代化” 的基于 Rust 且支持硬件加速的那种,如 [Rio][2]。
|
||||
|
||||
在这儿,可选择的软件绝对不匮乏。对我来说,为什么我需要关注另一个新的终端软件呢?
|
||||
|
||||
然而,当我发现这款新的终端时,我觉得,它有着引人瞩目的潜力。
|
||||
|
||||
![][3]
|
||||
|
||||
让我来解释下为何我会这么说。对于一名经验丰富的 Linux 用户,终端只不过是执行工作的一种工具。真正的能量来源于命令以及如何运用它们。在这里,终端仿真器吸引人的一点是支持多窗口,这也可以通过熟练使用 CLI 工具,比如 `screen` 或 `tmux` 来实现。
|
||||
|
||||
然而,对于一部分 Linux 用户,对他们来说,终端就是一个令人畏惧的地方。他们只会在绝对必要时以及再无他法的情况下才会使用它。就好像一个五岁的小孩夜里去洗手间。
|
||||
|
||||
然而,对于后者类型的 Linux 用户来说,这个新终端应该会是一个他们觉得舒适的工具。
|
||||
|
||||
看完它的特性后,你就会明白原因。
|
||||
|
||||
### Wave:为那些不习惯使用命令行的人设计的终端
|
||||
|
||||
呃... 这似乎就是这些开发者的初衷。
|
||||
|
||||
[Wave 终端][4] 主要是为了那些需要不时使用终端部署他们的项目或者调试应用的应用开发者们所打造。
|
||||
|
||||
#### 现代化的代码编辑器界面
|
||||
|
||||
![][5]
|
||||
|
||||
没错,这是一个终端,而不是代码编辑器。其界面设计类似于 VS Code,你可以把终端会话分组到工作区中。如果你的项目需要运行开发服务器、测试服务器和生产服务器,你可以把它们分组到一个工作区。
|
||||
|
||||
#### 不用学任何键盘快捷键就能编辑文件
|
||||
|
||||
你可以直接编辑本地系统或远程机器上的文件。这里没有学习的难度。像常规的文本编辑器一样直接使用它即可。
|
||||
|
||||
![][6]
|
||||
|
||||
#### 可以查看 Markdown,JSON 或图片
|
||||
|
||||
你可以渲染 Markdown 的预览,美观地显示 JSON 文件或以表格形式显示 CSV 文件数据。你还可以查看图片。
|
||||
|
||||
![][7]
|
||||
|
||||
#### 保持 SSH 连接持久化并保有通用历史
|
||||
|
||||
另一个赞赏的功能就是 Wave 可以保持你的 SSH 连接持久化。不用担心因为闲置一个小时而从远程服务器断开连接。即使远程系统重启了,它也会自动为你重新连接。
|
||||
|
||||
此外,你还可以得到合并的历史搜索的功能。不记得在哪个终端会话中运行了哪条命令?没关系。Wave 在这方面已经帮你考虑好了。
|
||||
|
||||
> 🤩 保存并保持 SSH 连接持久化,把它们分组到工作区,并且在图形界面下编辑文件,这些都是一个开发者成为 Wave 终端粉丝的充足理由。
|
||||
|
||||
### 我使用 Wave 终端的经历
|
||||
|
||||
在使用它几个小时后,以下是我体验。
|
||||
|
||||
当我首次启动它时,我看到了一个弹出窗口。它默认开启了遥测功能,这是一个典型的 VS Code 式的功能。好吧,我把它禁用了。
|
||||
|
||||
![][8]
|
||||
|
||||
下一个问题是服务条款。你必须接受它,但这个界面实际上没有提供阅读条款的途径。然而我可以在 [他们的网站][9] 上看到它。它是从 [Basecamp 的开源政策][10] 中引用过来的。
|
||||
|
||||
我不明白这个条款的必要性,因为这个软件在 Apache 2.0 下是开源许可的。这只会让人困惑。
|
||||
|
||||
无论如何,这就是第一次运行时的界面。如你所见,界面就像一个现代化的代码编辑器,它内含一个侧边栏可以让你将终端标签分组到工作区中。你可以为每个标签分配名称、图标和颜色。这在你需要连接到多个远程服务器时大有帮助。
|
||||
|
||||
![][11]
|
||||
|
||||
在这方面,你还可以像经典的 Putty 那样保存你的 SSH 连接。
|
||||
|
||||
![][12]
|
||||
|
||||
这样的话,你可以预设某个标签在启动时就开始特定的 SSH 连接。
|
||||
|
||||
对我来说最大的问题(如果这可以被称为“问题”)是输入字段。这只是底部的一个小输入框。你在这输入命令,它显示输出信息,整个输入命令及其输出都被组成一个框,然后移到上方。
|
||||
|
||||
![][13]
|
||||
|
||||
我更习惯于经典的终端输入方式,从上开始输入,然后一行行向下移动(然后滚动)。而在这里,却恰恰相反。
|
||||
|
||||
看,这是有意为之的。每条命令及其输出都是一个独立的框,一个独立的元素。你可以复制它、最小化它或从视图中将其存档。
|
||||
|
||||
#### 切片面包之后的最好东西
|
||||
|
||||
Wave 终端最大的目标就是它让你不会感觉自己在终端里。对于在终端中编辑文件的初学者来说,这就是他们的阿喀琉斯之踵。即使是在终端中使用基础编辑器(比如 Nano),那也要有一段学习曲线。
|
||||
|
||||
但是 Wave 不同。它内置了一个编辑器,你可以用 `codeedit filename` 命令调用,你就能像在图形文本编辑器中那样编辑文件。没错,你可以随意地使用你的鼠标。你还可以从编辑器菜单中选择文件类型。
|
||||
|
||||
![][14]
|
||||
|
||||
对于在终端中编辑配置文件感到提心吊胆的人来说,这绝对是个天赐福音。
|
||||
|
||||
开发者经常需要处理 Markdown 和 JSON 文件。Wave 终端完全有能力渲染这些文件。
|
||||
|
||||
![][15]
|
||||
|
||||
SSH 的连接是永久的。再也不用厌烦地频繁从远程服务器上断开连接了。Wave 完美地处理了它。
|
||||
|
||||
你可以从其 [文档页面][16] 进一步探索它的特性。
|
||||
|
||||
### 在 Linux 上安装 Wave 终端
|
||||
|
||||
你可以直接从他们的网站上下载 zip 文件。
|
||||
|
||||
> **[下载 Wave][18]**
|
||||
|
||||
解压它后,你会发现,它有一个命名为 `Wave` 的可执行文件,这个文件可以用来启动应用程序。
|
||||
|
||||
![][19]
|
||||
|
||||
试试它,如果你喜欢它,那就把整个文件夹移到 `/opt` 目录,为它创建一个新的桌面文件,这样它在系统菜单中就可以被搜索到了。我目前就不详述了。
|
||||
|
||||
现在还没有像 deb/rpm 这样针对某些特定发行版的安装文件。目前也暂时没有 Snap 或 Flatpak 的包。这是一个新应用。给它一些时间。
|
||||
|
||||
源代码在 GitHub 上可供参考。如果你喜欢,能够给它打一个星标。
|
||||
|
||||
> **[Wave Terminal 的 GitHub 仓库][20]**
|
||||
|
||||
### 总结
|
||||
|
||||
如你所见所觉,这是一个为应用开发者所创造出来的应用程序 —— 那些在编程上花费更多时间,并且需要通过命令行来部署或调试他们的应用的人。
|
||||
|
||||
从设计上就看得出,这款产品是为 macOS 用户量身定做的。从界面到键盘快捷键,每一样都带有 macOS 的气息。
|
||||
|
||||
但是没关系。只要 Wave 在 Linux 上可用,那对 Linux 用户来说就不重要了。
|
||||
|
||||
我只希望它不会转为闭源且成为将来的付费工具。如果真的那样,那的确很扫兴。
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/wave-terminal/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/root/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/linux-terminal-emulators/
|
||||
[2]: https://raphamorim.io/rio/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/wave-terminal.webp
|
||||
[4]: https://www.waveterm.dev/
|
||||
[5]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-1.webp
|
||||
[6]: https://news.itsfoss.com/content/images/2023/11/wave-edit-files-inline.webp
|
||||
[7]: https://news.itsfoss.com/content/images/2023/11/view-images-wave-terminal.webp
|
||||
[8]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-tos.png
|
||||
[9]: https://www.waveterm.dev/tos
|
||||
[10]: https://github.com/basecamp/policies/blob/master/terms/index.md
|
||||
[11]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-first-screen.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-putty-like-ssh-connection-add.png
|
||||
[13]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-interface.png
|
||||
[14]: https://news.itsfoss.com/content/images/2023/11/editing-files-wave-terminal.png
|
||||
[15]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-markdown-view.png
|
||||
[16]: https://docs.waveterm.dev/quickstart
|
||||
[17]: https://mintlify.s3-us-west-1.amazonaws.com/commandline/_generated/favicon/apple-touch-icon.png?v=3
|
||||
[18]: https://www.waveterm.dev/download
|
||||
[19]: https://news.itsfoss.com/content/images/2023/11/wave-terminal-executable.png
|
||||
[20]: https://github.com/wavetermdev/waveterm
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/24/164058enkoo1pol4sllr1p.jpg
|
||||
279
published/202311/20231123 git branches- intuition - reality.md
Normal file
279
published/202311/20231123 git branches- intuition - reality.md
Normal file
@@ -0,0 +1,279 @@
|
||||
[#]: subject: "git branches: intuition & reality"
|
||||
[#]: via: "https://jvns.ca/blog/2023/11/23/branches-intuition-reality/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16430-1.html"
|
||||
|
||||
Git 分支:直觉与现实
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
你好!我一直在投入写作一本关于 Git 的小册,因此我对 Git 分支投入了许多思考。我不断从他人那里听说他们觉得 Git 分支的操作方式违反直觉。这使我开始思考:直觉上的分支概念可能是什么样,以及它如何与 Git 的实际操作方式区别开来?
|
||||
|
||||
在这篇文章中,我想简洁地讨论以下几点内容:
|
||||
|
||||
* 我认为许多人可能有的一个直觉性的思维模型
|
||||
* Git 如何在内部实现分支的表示(例如,“分支是对提交的指针”)
|
||||
* 这种“直觉模型”与实际操作方式之间的紧密关联
|
||||
* 直觉模型的某些局限性,以及为何它可能引发问题
|
||||
|
||||
本文无任何突破性内容,我会尽量保持简洁。
|
||||
|
||||
### 分支的直观模型
|
||||
|
||||
当然,人们对分支有许多不同的直觉。我自己认为最符合“苹果树的一个分支”这一物理比喻的可能是下面这个。
|
||||
|
||||
我猜想许多人可能会这样理解 Git 分支:在下图中,两个红色的提交就代表一个“分支”。
|
||||
|
||||
![][1]
|
||||
|
||||
我认为在这个示意图中有两点很重要:
|
||||
|
||||
1. 分支上有两个提交
|
||||
2. 分支有一个“父级”(`main`),它是这个“父级”的分支
|
||||
|
||||
虽然这个观点看似合理,但实际上它并不符合 Git 对于分支的定义 — 最重要的是,Git 并没有一个分支的“父级”的概念。那么,Git 又是如何定义分支的呢?
|
||||
|
||||
### 在 Git 里,分支是完整的历史
|
||||
|
||||
在 Git 中,一个分支是每个过去提交的完整历史记录,而不仅仅是那个“分支”提交。因此,在我们上述的示意图中,所有的分支(`main` 和 `branch`)都包含了 4 次提交。
|
||||
|
||||
我创建了一个示例仓库,地址为:<https://github.com/jvns/branch-example>。它设置的分支方式与前图一样。现在,我们来看看这两个分支:
|
||||
|
||||
`main` 分支包含了 4 次提交:
|
||||
|
||||
```
|
||||
$ git log --oneline main
|
||||
70f727a d
|
||||
f654888 c
|
||||
3997a46 b
|
||||
a74606f a
|
||||
```
|
||||
|
||||
`mybranch` 分支也有 4 次提交。最后两次提交在这两个分支里都存在。
|
||||
|
||||
```
|
||||
$ git log --oneline mybranch
|
||||
13cb960 y
|
||||
9554dab x
|
||||
3997a46 b
|
||||
a74606f a
|
||||
```
|
||||
|
||||
因此,`mybranch` 中的提交次数为 4,而不仅仅是 2 次“分支”提交,即 `13cb960` 和 `9554dab`。
|
||||
|
||||
你可以用以下方式让 Git 绘制出这两个分支的所有提交:
|
||||
|
||||
```
|
||||
$ git log --all --oneline --graph
|
||||
* 70f727a (HEAD -> main, origin/main) d
|
||||
* f654888 c
|
||||
| * 13cb960 (origin/mybranch, mybranch) y
|
||||
| * 9554dab x
|
||||
|/
|
||||
* 3997a46 b
|
||||
* a74606f a
|
||||
```
|
||||
|
||||
### 分支以提交 ID 的形式存储
|
||||
|
||||
在 Git 的内部,分支会以一种微小的文本文件的形式存储下来,其中包含了一个提交 ID。这就是我一开始提及到的“技术上正确”的定义。这个提交就是分支上最新的提交。
|
||||
|
||||
我们来看一下示例仓库中 `main` 和 `mybranch` 的文本文件:
|
||||
|
||||
```
|
||||
$ cat .git/refs/heads/main
|
||||
70f727acbe9ea3e3ed3092605721d2eda8ebb3f4
|
||||
$ cat .git/refs/heads/mybranch
|
||||
13cb960ad86c78bfa2a85de21cd54818105692bc
|
||||
```
|
||||
|
||||
这很好理解:`70f727` 是 `main` 上的最新提交,而 `13cb96` 是 `mybranch` 上的最新提交。
|
||||
|
||||
这样做的原因是,每个提交都包含一种指向其父级的指针,所以 Git 可以通过追踪这些指针链来找到分支上所有的提交。
|
||||
|
||||
正如我前文所述,这里遗漏的一个重要因素是这两个分支间的任何关联关系。从这里能看出,`mybranch` 是 `main` 的一个分支——这一点并没有被表明出来。
|
||||
|
||||
既然我们已经探讨了直观理解的分支概念是如何不成立的,我接下来想讨论的是,为何它在某些重要的方面又是如何成立的。
|
||||
|
||||
### 人们的直观感觉通常并非全然错误
|
||||
|
||||
我发现,告诉人们他们对 Git 的直觉理解是“错误的”的说法颇为流行。我觉得这样的说法有些可笑——总的来说,即使人们关于某个题目的直觉在某些方面在技术上不精确,但他们通常会有完全合理的理由来支持他们的直觉!即使是“不正确的”模型也可能极其有用。
|
||||
|
||||
现在,我们来讨论三种情况,其中直觉上的“分支”概念与我们实际在操作中如何使用 Git 非常相符。
|
||||
|
||||
### 变基操作使用的是“直观”的分支概念
|
||||
|
||||
现在,让我们回到最初的图片。
|
||||
|
||||
![][1]
|
||||
|
||||
当你在 `main` 上对 `mybranch` 执行 <ruby>变基<rt>rebase</rt></ruby> 操作时,它将取出“直观”分支上的提交(只有两个红色的提交)然后将它们应用到 `main` 上。
|
||||
|
||||
执行结果就是,只有两次提交(`x` 和 `y`)被复制。以下是相关操作的样子:
|
||||
|
||||
```
|
||||
$ git switch mybranch
|
||||
$ git rebase main
|
||||
$ git log --oneline mybranch
|
||||
952fa64 (HEAD -> mybranch) y
|
||||
7d50681 x
|
||||
70f727a (origin/main, main) d
|
||||
f654888 c
|
||||
3997a46 b
|
||||
a74606f a
|
||||
```
|
||||
|
||||
在此,`git rebase` 创建了两个新的提交(`952fa64` 和 `7d50681`),这两个提交的信息来自之前的两个 `x` 和 `y` 提交。
|
||||
|
||||
所以直觉上的模型并不完全错误!它很精确地告诉你在变基中发生了什么。
|
||||
|
||||
但因为 Git 不知道 `mybranch` 是 `main` 的一个分叉,你需要显式地告诉它在何处进行变基。
|
||||
|
||||
### 合并操作也使用了“直观”的分支概念
|
||||
|
||||
合并操作并不复制提交,但它们确实需要一个“<ruby>基础<rt>base</rt></ruby>”提交:合并的工作原理是查看两组更改(从共享基础开始),然后将它们合并。
|
||||
|
||||
我们撤销刚才完成的变基操作,然后看看合并基础是什么。
|
||||
|
||||
```
|
||||
$ git switch mybranch
|
||||
$ git reset --hard 13cb960 # 撤销 rebase
|
||||
$ git merge-base main mybranch
|
||||
3997a466c50d2618f10d435d36ef12d5c6f62f57
|
||||
```
|
||||
|
||||
这里我们获得了分支分离出来的“基础”提交,也就是 `3997a4`。这正是你可能会基于我们的直观图片想到的提交。
|
||||
|
||||
### GitHub 的拉取请求也使用了直观的概念
|
||||
|
||||
如果我们在 GitHub 上创建一个拉取请求,打算将 `mybranch` 合并到 `main`,这个请求会展示出两次提交:也就是 `x` 和 `y`。这完全符合我们的预期,也和我们对分支的直观认识相符。
|
||||
|
||||
![][2]
|
||||
|
||||
我想,如果你在 GitLab 上发起一个合并请求,那显示的内容应该会与此类似。
|
||||
|
||||
### 直观理解颇为精准,但它有一定局限性
|
||||
|
||||
这使我们的对分支直观定义看起来相当准确!这个“直观”的概念和合并、变基操作以及 GitHub 拉取请求的工作方式完全吻合。
|
||||
|
||||
当你在进行合并、变基或创建拉取请求时,你需要明确指定另一个分支(如 `git rebase main`),因为 Git 不知道你的分支是基于哪个分支的。
|
||||
|
||||
然而,关于分支的直观理解有一个比较严重的问题:你直觉上认为 `main` 分支和某个分离的分支有很大的区别,但 Git 并不清楚这点。
|
||||
|
||||
所以,现在我们要来讨论一下 Git 分支的不同种类。
|
||||
|
||||
### 主干和派生分支
|
||||
|
||||
对于人类来说,`main` 和 `mybranch` 有着显著的区别,你可能针对如何使用它们,有着截然不同的意图。
|
||||
|
||||
通常,我们会将某些分支视为“<ruby>主干<rt>trunk</rt></ruby>”分支,同时将其他一些分支看作是“派生”。你甚至可能有派生的派生分支。
|
||||
|
||||
当然,Git 自身并没有这样的区分(“派生”是我刚刚构造的术语!),但是分支的种类确实会影响你如何处理它。
|
||||
|
||||
例如:
|
||||
|
||||
* 你可能会想将 `mybranch` 变基到 `main`,但你大概不会想将 `main` 变基到 `mybranch` —— 那就太奇怪了!
|
||||
* 一般来说,人们在重写“主干”分支的历史时比短期存在的派生分支更为谨慎。
|
||||
|
||||
### Git 允许你进行“反向”的变基
|
||||
|
||||
我认为人们经常对 Git 感到困惑的一点是 —— 由于 Git 并没有分支是否是另一个分支的“派生”的概念,它不会给你任何关于何时合适将分支 X 变基到分支 Y 的指引。这一切需要你自己去判断。
|
||||
|
||||
例如,你可以执行以下命令:
|
||||
|
||||
```
|
||||
$ git checkout main
|
||||
$ git rebase mybranch
|
||||
```
|
||||
|
||||
或者
|
||||
|
||||
```
|
||||
$ git checkout mybranch
|
||||
$ git rebase main
|
||||
```
|
||||
|
||||
Git 将会欣然允许你进行任一操作,尽管在这个案例中 `git rebase main` 是极其正常的,而 `git rebase mybranch` 则显得格外奇怪。许多人表示他们对此感到困惑,所以我提供了一个展示两种变基类型的图片以供参考:
|
||||
|
||||
![][3]
|
||||
|
||||
相似地,你可以进行“反向”的合并,尽管这相较于反向变基要正常得多——将 `mybranch` 合并到 `main` 和将 `main` 合并到 `mybranch` 都有各自的益处。
|
||||
|
||||
下面是一个展示你可以进行的两种合并方式的示意图:
|
||||
|
||||
![][4]
|
||||
|
||||
### Git 对于分支之间缺乏层次结构感觉有些奇怪
|
||||
|
||||
我经常听到 “`main` 分支没什么特别的” 的表述,而这令我感到困惑——对于我来说,我处理的大部分仓库里,`main` 无疑是非常特别的!那么人们为何会称其为不特别呢?
|
||||
|
||||
我觉得,重点在于:尽管分支确实存在彼此间的关系(`main` 通常是非常特别的!),但 Git 并不知情这些关系。
|
||||
|
||||
每当你执行如 `git rebase` 或 `git merge` 这样的 `git` 命令时,你都必须明确地告诉 Git 分支间的关系,如果你出错,结果可能会相当混乱。
|
||||
|
||||
我不知道 Git 在此方面的设计究竟“对”还是“错”(无疑它有利有弊,而我已对无休止的争论感到厌倦),但我认为,这对于许多人来说,原因在于它有些出人意料。
|
||||
|
||||
### Git 关于分支的用户界面也同样怪异
|
||||
|
||||
假设你只想查看某个分支上的“派生”提交,正如我们之前讨论的,这是完全正常的需求。
|
||||
|
||||
下面是用 `git log` 查看我们分支上的两次派生提交的方法:
|
||||
|
||||
```
|
||||
$ git switch mybranch
|
||||
$ git log main..mybranch --oneline
|
||||
13cb960 (HEAD -> mybranch, origin/mybranch) y
|
||||
9554dab x
|
||||
```
|
||||
|
||||
你可以用 `git diff` 这样查看同样两次提交的合并差异:
|
||||
|
||||
```
|
||||
$ git diff main...mybranch
|
||||
```
|
||||
|
||||
因此,如果你想使用 `git log` 查看 `x` 和 `y` 这两次提交,你需要用到两个点(`..`),但查看同样的提交使用 `git diff`,你却需要用到三个点(`...`)。
|
||||
|
||||
我个人从来都记不住 `..` 和 `...` 的具体用意,所以我通常虽然它们在原则上可能很有用,但我选择尽量避免使用它们。
|
||||
|
||||
### 在 GitHub 上,默认分支具有特殊性
|
||||
|
||||
同样值得一提的是,在 GitHub 上存在一种“特殊的分支”:每一个 GitHub 仓库都有一个“默认分支”(在 Git 术语中,就是 `HEAD` 所指向的地方),具有以下的特别之处:
|
||||
|
||||
* 初次克隆仓库时,默认会检出这个分支
|
||||
* 它作为拉取请求的默认接收分支
|
||||
* GitHub 建议应该保护这个默认分支,防止被强制推送,等等。
|
||||
|
||||
很可能还有许多我未曾想到的场景。
|
||||
|
||||
### 总结
|
||||
|
||||
这些说法在回顾时看似是显而易见的,但实际上我花费了大量时间去搞清楚一个更“直观”的分支概念,这是因为我已经习惯了技术性的定义,“分支是对某次提交的引用”。
|
||||
|
||||
同样,我也没有真正去思索过如何在每次执行 `git rebase` 或 `git merge` 命令时,让 Git 明确理解你分支之间的层次关系——对我而言,这已经成为第二天性,并没有觉得有何困扰。但当我反思这个问题时,可以明显看出,这很容易导致某些人混淆。
|
||||
|
||||
*(题图:MJ/a5a52832-fac8-4190-b3bd-fec70166aa16)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2023/11/23/branches-intuition-reality/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://jvns.ca/images/git-branch.png
|
||||
[2]: https://jvns.ca/images/gh-pr.png
|
||||
[3]: https://jvns.ca/images/backwards-rebase.png
|
||||
[4]: https://jvns.ca/images/merge-two-ways.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/01/004025i72vi4t0o7027cyf.png
|
||||
@@ -0,0 +1,348 @@
|
||||
[#]: subject: "Building RHEL and RHEL UBI images with mkosi"
|
||||
[#]: via: "https://fedoramagazine.org/create-images-directly-from-rhel-and-rhel-ubi-package-using-mkosi/"
|
||||
[#]: author: "Zbigniew Jędrzejewski-Szmek https://fedoramagazine.org/author/zbyszek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "GlassFoxowo-Dev"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16421-1.html"
|
||||
|
||||
使用 mkosi 构建 RHEL 和 RHEL UBI 镜像
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
mkosi 是一个轻量级工具,用于从发行版软件包构建镜像。本文介绍如何使用 mkosi 从 RHEL 和 RHEL <ruby>[通用基础镜像][4]<rt>Universal Base Image</rt></ruby>(UBI)的软件包构建镜像。RHEL UBI 是 RHEL 的一个子集,可以在没有订阅的情况下免费使用。
|
||||
|
||||
### mkosi 特性
|
||||
|
||||
mkosi 支持一些输出格式,但最重要的是 <ruby>[可发现磁盘镜像][4]<rt>Discoverable Disk Images</rt></ruby>(DDI)。同一个 DDI 可用于引导容器、或运行在虚拟机、抑或是复制到 U 盘以引导真实物理机,然后从 U 盘复制到磁盘以引导系统。该镜像具有标准化的布局和描述其用途的元数据。
|
||||
|
||||
mkosi 依赖其他工具来完成大部分工作:使用 `systemd-repart` 在磁盘镜像上创建分区,使用 `mkfs.btrfs` / `mkfs.ext4` / `mkfs.xfs` 等创建文件系统,并使用 `dnf` / `apt` / `pacman` / `zypper` 下载和解压包。
|
||||
|
||||
mkosi 支持一系列发行版:Debian 和 Ubuntu、Arch Linux、openSUSE,当然还包括 Fedora、CentOS Stream 及其衍生版本,以及最近的 RHEL UBI 和 RHEL 。由于实际的“重活”是由其他工具完成的,mkosi 可以进行交叉构建。这意味着可以使用一个发行版构建各种其他发行版的镜像。唯一的要求是主机上安装了相应的工具。Fedora 有原生的 `apt`、`pacman` 和 `zypper`,因此它为使用 mkosi 构建任何其他发行版提供了良好的基础。
|
||||
|
||||
它还有一些有趣的功能:镜像可以由非特权用户创建,或者在没有设备文件的容器中创建,特别是没有对回环设备的访问权限。它还可以在没有特权的情况下将这些镜像启动为虚拟机(使用 `qemu`)。
|
||||
|
||||
配置是声明性的,非常容易创建。使用 `systemd-repart` 创建磁盘分区,并使用 `repart.d` 配置文件定义应该如何完成此操作。
|
||||
|
||||
有关更多详细信息,请参见 Daan DeMeyer 在 All Systems Go 大会上的两个演讲:《[systemd-repart: Building Discoverable Disk Images][5]》 和 《[mkosi: Building Bespoke Operating System Images][6]》。
|
||||
|
||||
### 项目目标
|
||||
|
||||
mkosi 的一个目标是允许对软件项目进行针对不同发行版的测试。它将为一个发行版创建一个镜像(使用该发行版的软件包),然后将软件项目编译并安装到该镜像中,插入不属于软件包的额外文件。但是,首个阶段,即从软件包创建镜像的过程,本身就是有用的。这是我们将首先展示的内容。
|
||||
|
||||
我们 [^1] 最近添加了对 RHEL 和 RHEL UBI 的支持。让我们从 RHEL UBI 开始,利用发行版软件包创建镜像。
|
||||
|
||||
请注意,下面的示例要求 mkosi 19,而且不适用于更早的版本。
|
||||
|
||||
### 带有 Shell 的基本 RHEL UBI 镜像
|
||||
|
||||
```
|
||||
$ mkdir -p mkosi.cache
|
||||
$ mkosi \
|
||||
-d rhel-ubi \
|
||||
-t directory \
|
||||
-p bash,coreutils,util-linux,systemd,rpm \
|
||||
--autologin
|
||||
```
|
||||
|
||||
上面的命令指定了发行版 `rhel-ubi`,输出格式 `directory`,并请求安装软件包 `bash`、`coreutils`、…、`rpm`。`rpm` 通常不需要放到镜像内部,但在这里用于内省会很有用。我们还启用了以 root 用户自动登录。
|
||||
|
||||
在启动构建之前,我们创建了缓存目录 `mkosi.cache`。当存在缓存目录时,mkosi 会自动使用它来持久化下载的 RPM 包。这将使相同软件包集合的后续调用速度更快。
|
||||
|
||||
然后,我们可以使用 `systemd-nspawn` 将此镜像作为容器启动:
|
||||
|
||||
```
|
||||
$ sudo mkosi \
|
||||
-d rhel-ubi \
|
||||
-t directory \
|
||||
boot
|
||||
```
|
||||
|
||||
```
|
||||
systemd 252-14.el9_2.3 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS -FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY +P11KIT -QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
|
||||
Detected virtualization systemd-nspawn.
|
||||
Detected architecture x86-64.
|
||||
Detected first boot.
|
||||
|
||||
Red Hat Enterprise Linux 9.2 (Plow)
|
||||
...
|
||||
[ OK ] Created slice Slice /system/getty.
|
||||
[ OK ] Created slice Slice /system/modprobe.
|
||||
[ OK ] Created slice User and Session Slice.
|
||||
...
|
||||
[ OK ] Started User Login Management.
|
||||
[ OK ] Reached target Multi-User System.
|
||||
|
||||
Red Hat Enterprise Linux 9.2 (Plow)
|
||||
Kernel 6.5.6-300.fc39.x86_64 on an x86_64
|
||||
|
||||
image login: root (automatic login)
|
||||
|
||||
[root@image ~]# rpm -q rpm systemd
|
||||
rpm-4.16.1.3-22.el9.x86_64
|
||||
systemd-252-14.el9_2.3.x86_64
|
||||
```
|
||||
|
||||
正如前面提到的,此镜像可以用于启动虚拟机。但在此设置下,这是不可能的 —— 我们的镜像没有内核。事实上,RHEL UBI 根本不提供内核,因此我们无法使用它进行引导(无论是在虚拟机上还是在裸机上)。
|
||||
|
||||
### 创建镜像
|
||||
|
||||
我一开始说是要创建镜像,但到目前为止我们只有一个目录。让我们开始实际创建一个镜像:
|
||||
|
||||
```
|
||||
$ mkosi \
|
||||
-d rhel-ubi \
|
||||
-t disk \
|
||||
-p bash,coreutils,util-linux,systemd,rpm \
|
||||
--autologin
|
||||
```
|
||||
|
||||
这将生成 `image.raw`,一个带有 GPT 分区表和单个根分区(用于本机架构)的磁盘镜像。
|
||||
|
||||
```
|
||||
$ sudo systemd-dissect image.raw
|
||||
Name: image.raw
|
||||
Size: 301.0M
|
||||
Sec. Size: 512
|
||||
Arch.: x86-64
|
||||
|
||||
Image UUID: dcbd6499-409e-4b62-b251-e0dd15e446d5
|
||||
OS Release: NAME=Red Hat Enterprise Linux
|
||||
VERSION=9.2 (Plow)
|
||||
ID=rhel
|
||||
ID_LIKE=fedora
|
||||
VERSION_ID=9.2
|
||||
PLATFORM_ID=platform:el9
|
||||
PRETTY_NAME=Red Hat Enterprise Linux 9.2 (Plow)
|
||||
ANSI_COLOR=0;31
|
||||
LOGO=fedora-logo-icon
|
||||
CPE_NAME=cpe:/o:redhat:enterprise_linux:9::baseos
|
||||
HOME_URL=https://www.redhat.com/
|
||||
DOCUMENTATION_URL=https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9
|
||||
BUG_REPORT_URL=https://bugzilla.redhat.com/
|
||||
REDHAT_BUGZILLA_PRODUCT=Red Hat Enterprise Linux 9
|
||||
REDHAT_BUGZILLA_PRODUCT_VERSION=9.2
|
||||
REDHAT_SUPPORT_PRODUCT=Red Hat Enterprise Linux
|
||||
REDHAT_SUPPORT_PRODUCT_VERSION=9.2
|
||||
|
||||
Use As: ✗ bootable system for UEFI
|
||||
✓ bootable system for container
|
||||
✗ portable service
|
||||
✗ initrd
|
||||
✗ sysext extension for system
|
||||
✗ sysext extension for initrd
|
||||
✗ sysext extension for portable service
|
||||
|
||||
RW DESIGNATOR PARTITION UUID PARTITION LABEL FSTYPE ARCHITECTURE VERITY GROWFS NODE PARTNO
|
||||
rw root 1236e211-4729-4561-a6fc-9ef8f18b828f root-x86-64 xfs x86-64 no yes /dev/loop0p1 1
|
||||
```
|
||||
|
||||
好的,我们现在有一个镜像,镜像中包含了一些来自 RHEL UBI 软件包的内容。我们如何在其上加点我们自己的东西呢?
|
||||
|
||||
### 使用自己的文件扩展镜像
|
||||
|
||||
有几种方法可以扩展镜像,包括从头开始编译某些东西。但在那之前,让我们做一些更简单的事情,将一个现成的文件系统注入到镜像中:
|
||||
|
||||
```
|
||||
$ mkdir -p mkosi.extra/srv/www/content
|
||||
$ cat >mkosi.extra/srv/www/content/index.html <<'EOF'
|
||||
<h1>Hello, World!</h1>
|
||||
EOF
|
||||
```
|
||||
|
||||
现在,该镜像将包含 `/srv/www/content/index.html`。
|
||||
|
||||
这种方法用于注入额外的配置或简单的程序。
|
||||
|
||||
### 从源代码构建
|
||||
|
||||
现在让我们过一遍完整流程,从源代码构建一些东西。例如,一个简单的 Meson 项目,有一个单独的 C 文件:
|
||||
|
||||
```
|
||||
$ cat >hello.c <<'EOF'
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
char buf[1024];
|
||||
|
||||
FILE *f = fopen("/srv/www/content/index.html", "re");
|
||||
size_t n = fread(buf, 1, sizeof buf, f);
|
||||
|
||||
fwrite(buf, 1, n, stdout);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
|
||||
$ cat >meson.build <<'EOF'
|
||||
project('hello', 'c')
|
||||
executable('hello', 'hello.c',
|
||||
install: true)
|
||||
EOF
|
||||
```
|
||||
|
||||
```
|
||||
$ cat >mkosi.build <<'EOF'
|
||||
set -ex
|
||||
|
||||
mkosi-as-caller rm -rf "$BUILDDIR/build"
|
||||
mkosi-as-caller meson setup "$BUILDDIR/build" "$SRCDIR"
|
||||
mkosi-as-caller meson compile -C "$BUILDDIR/build"
|
||||
meson install -C "$BUILDDIR/build" --no-rebuild
|
||||
EOF
|
||||
$ chmod +x mkosi.build
|
||||
```
|
||||
|
||||
总结一下:我们有一些源代码(`hello.c`),一个构建系统配置文件(`meson.build`),以及一个由 mkosi 调用的胶水脚本(`mkosi.build`)。对于实际的项目,也会有相同的元素,只是更加复杂。
|
||||
|
||||
这个脚本需要一些解释。mkosi 在创建镜像时使用用户命名空间。这允许包管理器(例如 `dnf`)安装由不同用户拥有的文件,即使它是由一个普通非特权用户调用的。我们使用 `mkosi-as-caller` 切换回调用者以进行编译。这样,在 `$BUILDDIR` 下编译期间创建的文件将由调用者拥有。
|
||||
|
||||
现在让我们使用我们的程序构建镜像。与之前的调用相比,我们需要额外的软件包:`meson`、`gcc`。由于我们现在有了构建脚本,mkosi 将执行两个构建阶段:首先创建一个构建镜像,并在其中调用构建脚本,将安装产物存储在一个临时目录中,然后构建最终镜像,并将安装产物注入其中。(mkosi 设置 `$DESTDIR`,`meson install` 自动使用 `$DESTDIR`,因此并不需要我们明确指定。)
|
||||
|
||||
```
|
||||
$ mkosi \
|
||||
-d rhel-ubi \
|
||||
-t disk \
|
||||
-p bash,coreutils,util-linux,systemd,rpm \
|
||||
--autologin \
|
||||
--build-package=meson,gcc \
|
||||
--build-dir=mkosi.builddir \
|
||||
--build-script=mkosi.build \
|
||||
-f
|
||||
```
|
||||
|
||||
此时,我们有了带有自定义载荷的镜像 `image.raw`。我们可以启动我们新创建的可执行文件作为 shell 命令:
|
||||
|
||||
```
|
||||
$ sudo mkosi -d rhel-ubi -t directory shell hello
|
||||
<h1>Hello, World!</h1>
|
||||
```
|
||||
|
||||
### 获取 RHEL 的开发者订阅
|
||||
|
||||
RHEL UBI 主要用作容器构建的基础层。它提供了有限的软件包(约 1500 个)。现在让我们切换到完整的 RHEL 安装。
|
||||
|
||||
获取 RHEL 的最简单方法是使用 [开发者许可证][8]。它提供了权限注册 16 个运行 RHEL 的物理或虚拟节点,并提供自助式支持。
|
||||
|
||||
首先,[创建一个账户][9]。然后,转到 [管理页面][10] 并确保启用了“用于 Red Hat 订阅管理的简化内容访问”。接下来,[创建一个新的激活密钥][11],选择 “Red Hat 个人开发者订阅”。记下显示的组织 ID。在下面,我们将使用密钥名称和组织 ID 分别表示为 `$KEY_NAME` 和 `$ORGANIZATION_ID`。
|
||||
|
||||
现在,我们准备使用 RHEL 内容:
|
||||
|
||||
```
|
||||
$ sudo dnf install subscription-manager
|
||||
$ sudo subscription-manager register \
|
||||
--org $ORGANIZATION_ID --activationkey $KEY_NAME
|
||||
```
|
||||
|
||||
### 使用 RHEL 构建镜像
|
||||
|
||||
在之前的示例中,我们通过参数开关指定了所有配置。这对于快速开发很友好,但可能在情况复杂时变得难以处理。RHEL 是一个严肃的发行版,所以让我们改为使用配置文件:
|
||||
|
||||
```
|
||||
$ cat >mkosi.conf <<'EOF'
|
||||
[Output]
|
||||
Format=directory
|
||||
Output=rhel-directory
|
||||
|
||||
[Distribution]
|
||||
Distribution=rhel
|
||||
|
||||
[Content]
|
||||
Packages=
|
||||
bash
|
||||
coreutils
|
||||
util-linux
|
||||
systemd
|
||||
systemd-boot
|
||||
systemd-udev
|
||||
kernel-core
|
||||
|
||||
Bootable=yes
|
||||
Bootloader=uki
|
||||
Autologin=yes
|
||||
WithDocs=no
|
||||
EOF
|
||||
```
|
||||
|
||||
首先,让我们检查一下一切是否正常:
|
||||
|
||||
```
|
||||
$ mkosi summary
|
||||
```
|
||||
|
||||
现在让我们构建镜像(呃,或者说,目录):
|
||||
|
||||
```
|
||||
$ mkosi build
|
||||
$ mkosi qemu
|
||||
```
|
||||
|
||||
```
|
||||
Welcome to Red Hat Enterprise Linux 9.2 (Plow)!
|
||||
|
||||
[ OK ] Created slice Slice /system/modprobe.
|
||||
[ OK ] Reached target Initrd Root Device.
|
||||
[ OK ] Reached target Initrd /usr File System.
|
||||
[ OK ] Reached target Local Integrity Protected Volumes.
|
||||
[ OK ] Reached target Local File Systems.
|
||||
[ OK ] Reached target Path Units.
|
||||
[ OK ] Reached target Remote Encrypted Volumes.
|
||||
[ OK ] Reached target Remote Verity Protected Volumes.
|
||||
[ OK ] Reached target Slice Units.
|
||||
[ OK ] Reached target Swaps.
|
||||
...
|
||||
[ OK ] Listening on Journal Socket.
|
||||
[ OK ] Listening on udev Control Socket.
|
||||
[ OK ] Listening on udev Kernel Socket.
|
||||
...
|
||||
Red Hat Enterprise Linux 9.2 (Plow)
|
||||
Kernel 5.14.0-284.30.1.el9_2.x86_64 on an x86_64
|
||||
|
||||
localhost login: root (automatic login)
|
||||
[root@localhost ~]#
|
||||
```
|
||||
|
||||
很好,我们将“镜像”构建为一个带有文件系统树的目录,并在虚拟机中引导了它。
|
||||
|
||||
在引导的虚拟机中,`findmnt /` 显示根文件系统是 virtiofs。这是一个虚拟文件系统,将主机的目录暴露给客户机。我们其实也可以构建一个更传统的镜像,其中包含文件系统和文件内的分区表,但“目录 + virtiofs” 对于开发来说更快且更友好。
|
||||
|
||||
我们刚刚引导的镜像未注册。要允许从镜像“内部”下载更新,我们必须将 `yum` 、`subscription-manager` 和 `NetworkManager` 添加到软件包列表,并在下载任何更新之前以与上述相同的方式调用 `subscription-manager`。在这之后,我们在基本仓库中就有大约 4500 个软件包可用,并且还有一些包含更多专业软件包的额外仓库。
|
||||
|
||||
### 最后
|
||||
|
||||
今天就是这些了。如果您有问题,可以在 Matrix 上找到我们,地址为 [#mkosi:matrix.org][12],或者在 [systemd 邮件列表][13] 上找到我们。
|
||||
|
||||
[^1]: Daan DeMeyer、Lukáš Nykrýn、Michal Sekletár、Zbigiew Jędrzejewski-Szmek
|
||||
|
||||
*(题图:MJ/a6e60316-ed03-4e23-b8b4-22332a0f5bfa)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/create-images-directly-from-rhel-and-rhel-ubi-package-using-mkosi/
|
||||
|
||||
作者:[Zbigniew Jędrzejewski-Szmek][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[GlassFoxowo](https://github.com/GlassFoxowo-Dev)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/zbyszek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/10/building_w_mkosi-816x345.jpg
|
||||
[2]: https://unsplash.com/@saadx?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[3]: https://unsplash.com/photos/aerial-photo-of-people-in-park-at-daytime-PqRvLsjD_TU?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[4]: https://uapi-group.org/specifications/specs/discoverable_disk_image/
|
||||
[5]: https://media.ccc.de/v/all-systems-go-2023-191-systemd-repart-building-discoverable-disk-images
|
||||
[6]: https://media.ccc.de/v/all-systems-go-2023-190-mkosi-building-bespoke-operating-system-images
|
||||
[7]: tmp.1bzWuYb2vw#a08aaa7d-ee14-4565-80a0-e3d19b21ad26
|
||||
[8]: https://developers.redhat.com/articles/faqs-no-cost-red-hat-enterprise-linux
|
||||
[9]: https://developers.redhat.com/register
|
||||
[10]: https://access.redhat.com/management
|
||||
[11]: https://access.redhat.com/management/activation_keys/new
|
||||
[12]: https://matrix.to/#/#mkosi:matrix.org
|
||||
[13]: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
|
||||
[14]: tmp.1bzWuYb2vw#a08aaa7d-ee14-4565-80a0-e3d19b21ad26-link
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/27/232213c9y5jt85t7vj8men.png
|
||||
@@ -0,0 +1,173 @@
|
||||
[#]: subject: "rlxOS: An Indepdent Immutable Linux Distro With Xfce Desktop"
|
||||
[#]: via: "https://news.itsfoss.com/rlxos/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16415-1.html"
|
||||
|
||||
rlxOS:一个独立的不可变 Linux 发行版,具有 Xfce 桌面
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这是一款具有良好的外观和感觉,独立的不可变发行版。
|
||||
|
||||
[不可变 Linux 发行版][1] 的市场在稳步增长。
|
||||
|
||||
只在今年,我们就见证了像 [Fedora Onyx][2]、[blendOS v3][3] 这样的新成员,以及 Ubuntu 24.04 LTS 将会出现的 [基于 Snap 的不可变 Ubuntu 桌面][4]。
|
||||
|
||||
在这篇 [初次体验][5] 的文章里,我们将探索 [rlxOS][6],它是一款自行建制的不可变发行版。
|
||||
|
||||
现在,让我们深入了解一下。
|
||||
|
||||
> 🚧 这个发行版相当新,可能无法作为日用主系统的替换产品。
|
||||
|
||||
### rlxOS:概述 ⭐
|
||||
|
||||
![][7]
|
||||
|
||||
rlxOS 以**从零开始构建**为自豪,作为一个 [独立的 Linux 发行版][8],能更好地控制核心和工作部分。作为不可变的发行版,它实现了一种 [滚动发布][9] 的方式,从而用户在面对大的更新时无需重新安装。
|
||||
|
||||
其**主要特点**包括:
|
||||
|
||||
* **不可变性**
|
||||
* **利用** [Ostree][10]
|
||||
* **关注隐私**
|
||||
* **原生支持 Flatpak**
|
||||
|
||||
如果你还不知道,不可变发行版可以让你在不影响系统核心的情况下进行变更。你可以将其视为分层变更,因此一个变更并不会影响另一个。
|
||||
|
||||
为了使这个实现,rlxOS 使用了一个软件更新守护程序([swupd][11]),这个程序保留了操作系统的两个版本(在更改前后),你可以按照 [文档][11] 进行一些在重启后会消失的更改。
|
||||
|
||||
这个守护程序也会让你有不同层的软件包。根据官方网站,该功能在稳定版本中还未推出。
|
||||
|
||||
另外,你可以轻松地按照 [文档][13] 设置 [Distrobox][12] 容器。
|
||||
|
||||
#### 初次印象 👨💻
|
||||
|
||||
我在使用 [Ubuntu 上的 VirtualBox][15] 的虚拟机(VM)上启动了 rlxOS。安装程序看起来非常舒服,它那种圆角矩形的感觉让我**想起了 GNOME 中** [**Adwaita**][16] **的主题风格**。
|
||||
|
||||
![][17]
|
||||
|
||||
我在进行过程中**需要手动使用** [GParted][18] **对驱动器进行分区**。首先,我在虚拟驱动器上建立了推荐的 msdos 分区表。
|
||||
|
||||
之后,我分了两个不同大小的分区,一个是 ext4 文件系统的 39.5 GB 分区,另一个是 fat32 文件系统的 512 MB 分区。
|
||||
|
||||
在这之后,我需要确定 fat32 分区有 `boot` 和 `esp` 标记,这样才能正确的安装 rlxOS。
|
||||
|
||||
> 📋 通过右键点击分区并选择“<ruby>管理标志<rt>Manage Flags</rt></ruby>”来设定标记。
|
||||
|
||||
![][19]
|
||||
|
||||
**安装程序还给出了关于分区的有效提示**,将较大的一个标记为 `Linux`,将较小的一个标记为 `EFI`。
|
||||
|
||||
如果你打算在 Windows 系统旁边安装它,你需要小心分区的设定,因为我们还没有在这里进行过测试。
|
||||
|
||||
![][20]
|
||||
|
||||
然后,确认屏幕会显示出来,揭示**一些重要的最后阶段信息**。我点击 “<ruby>应用<rt>Apply</rt></ruby>” 继续进行。
|
||||
|
||||
![][21]
|
||||
|
||||
然后,它**需要花费一些时间才能完成安装**。但是,出于一些原因,我在安装过程中能够点击 “<ruby>下一步<rt>Next</rt></ruby>” 和 “<ruby>上一步<rt>Back</rt></ruby>” 选项(我认为这些选项应是灰化的)。
|
||||
|
||||
![][22]
|
||||
|
||||
我建议你让安装自然进行,不要调整其他任何事情,并等待如下所示的 “<ruby>成功<rt>Success</rt></ruby>” 提示。
|
||||
|
||||
![][23]
|
||||
|
||||
在重启后,**快速设置向导**开始运行,我输入了用户信息和密码,然后再次重启。
|
||||
|
||||
![][24]
|
||||
|
||||
在重启后看到了**十分整洁的登录界面**,含有一张漂亮的壁纸,和标题栏常见的一些选项/信息。
|
||||
|
||||
![][25]
|
||||
|
||||
登录之后,我看到了**一个非常熟悉的桌面界面**,这个界面有**一个类似 Windows 的应用启动器**,和**一栏包含了有用的部件的任务栏**,如语言、通知、网络、节能模式等等。
|
||||
|
||||
![][26]
|
||||
|
||||
然而,我立刻注意到**rlxOS 预装的应用程序非常的少**。这可以看作一件好事,这取决于你问的人。
|
||||
|
||||
但是,我必须说,Xfce 的体验看起来很好。
|
||||
|
||||
在我看来,他们可以至少添加任何一款 [开源的微软办公套件替代品][27],诸如 [LibreOffice][28] 或 [ONLYOFFICE][29],这样这个发行版会有一个更为完整的体验。但是,当然,这是一个新的发行版,无可挑剔。
|
||||
|
||||
查看设置应用,它似乎很好的与系统主题相匹配。
|
||||
|
||||
![][30]
|
||||
|
||||
rlxOS使用 Xfce 作为其桌面,这是流行的且最小化的桌面环境之一。我测试的稳定版是运行定制化 [Xfce 4.18][31]。
|
||||
|
||||
![][32]
|
||||
|
||||
如果你过去使用过 Xfce,你会发现 rlxOS 上的版本既熟悉又有些许不同。我用了一段时间,对其所提供的内容很满意,比如多任务处理非常轻松,因为**rlxOS 支持工作空间**。
|
||||
|
||||
我只需要通过在任务栏中滚动/点击可以轻松地在工作区之间切换。
|
||||
|
||||
尽管这个发行版在这里那里有些小问题,但是它值得一试。在实物机器上的你的**体验会比在 VM 上更好**。
|
||||
|
||||
如果你对源代码感兴趣,或者你想要为其做出贡献,你可以查阅其 [GitHub 仓库][33]。
|
||||
|
||||
### 📥 下载 rlxOS
|
||||
|
||||
在我写这篇文章时,[官方网站][34] 上有**两个版本的 rlxOS 可供下载**。一个是**每月更新的稳定版本**,另一个是**被认为是不稳定的实验版本**。
|
||||
|
||||
> **[rlxOS][34]**
|
||||
|
||||
💬 你对 rlxOS 有什么看法,你会向他人推荐这款发行版吗?
|
||||
|
||||
*(题图:MJ/b045e868-db65-4904-a0e4-0252051296e5)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/rlxos/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/immutable-linux-distros/
|
||||
[2]: https://news.itsfoss.com/fedora-onyx-official/
|
||||
[3]: https://news.itsfoss.com/blendos-v3-released/
|
||||
[4]: https://news.itsfoss.com/ubuntu-all-snap-desktop/
|
||||
[5]: https://news.itsfoss.com/tag/first-look/
|
||||
[6]: https://rlxos.dev/
|
||||
[7]: https://news.itsfoss.com/content/images/2023/11/rlxos_1.jpg
|
||||
[8]: https://itsfoss.com/independent-linux-distros/
|
||||
[9]: https://itsfoss.com/rolling-release/
|
||||
[10]: https://en.wikipedia.org/wiki/OSTree
|
||||
[11]: https://docs.rlxos.dev/system-management/swupd/
|
||||
[12]: https://itsfoss.com/distrobox/
|
||||
[13]: https://docs.rlxos.dev/system-management/distrobox/
|
||||
[14]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[15]: https://itsfoss.com/install-virtualbox-ubuntu/
|
||||
[16]: https://en.wikipedia.org/wiki/Adwaita_(design_language)
|
||||
[17]: https://news.itsfoss.com/content/images/2023/11/rlxos_2.jpg
|
||||
[18]: https://gparted.org/
|
||||
[19]: https://news.itsfoss.com/content/images/2023/11/rlxos_3.jpg
|
||||
[20]: https://news.itsfoss.com/content/images/2023/11/rlxos_4.jpg
|
||||
[21]: https://news.itsfoss.com/content/images/2023/11/rlxos_5.jpg
|
||||
[22]: https://news.itsfoss.com/content/images/2023/11/rlxos_6.jpg
|
||||
[23]: https://news.itsfoss.com/content/images/2023/11/rlxos_7-1.jpg
|
||||
[24]: https://news.itsfoss.com/content/images/2023/11/rlxos_8.jpg
|
||||
[25]: https://news.itsfoss.com/content/images/2023/11/rlxos_10.jpg
|
||||
[26]: https://news.itsfoss.com/content/images/2023/11/rlxos_11.jpg
|
||||
[27]: https://itsfoss.com/best-free-open-source-alternatives-microsoft-office/#2-onlyoffice
|
||||
[28]: https://www.libreoffice.org/
|
||||
[29]: https://www.onlyoffice.com/
|
||||
[30]: https://news.itsfoss.com/content/images/2023/11/rlxos_11b.jpg
|
||||
[31]: https://news.itsfoss.com/xfce-4-18-release/
|
||||
[32]: https://news.itsfoss.com/content/images/2023/11/rlxos_13.jpg
|
||||
[33]: https://github.com/itsManjeet/rlxos
|
||||
[34]: https://rlxos.dev/downloads/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/26/175005asnmncwmiscmuems.png
|
||||
@@ -0,0 +1,94 @@
|
||||
[#]: subject: "Fractal 5: Linux Matrix Messaging App Level-Up with GTK 4 and Rust SDK"
|
||||
[#]: via: "https://news.itsfoss.com/fractal-5/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16429-1.html"
|
||||
|
||||
Fractal 5:Linux Matrix 消息应用迎来 GTK 4 和 Rust SDK 的升级
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> GNOME 上的 Matrix 消息应用得到升级,使用了 GTK4、Rust SDK 等新技术。
|
||||
|
||||
[Matrix][1],一个流行的安全、去中心化通讯网络,正在日益变得更为重要。我们周围的世界正在以前所未有的速度变化,而安全通讯工具的需求只是其产物之一,除此之外还有其他方面的需求。
|
||||
|
||||
在帮助实现 Matrix 功能方面的工具之一就是 Fractal。它是 [最好的 Matrix 分布式消息客户端之一][2]。
|
||||
|
||||
最近发布的消息是,**Fractal 5** 带来了大型改版。🎉
|
||||
|
||||
那么,让我们简要了解一下。
|
||||
|
||||
### 🆕 Fractal 5:有什么新特性?
|
||||
|
||||
![][3]
|
||||
|
||||
与之前版本相比,作为**完全重写**的 Fractal 5 现在采用了 [GTK 4][4]、[libadwaita][5] 和 [Matrix Rust SDK][6],提供了现代化的界面,使人感到非常亲切。
|
||||
|
||||
Fractal 现在在所有类型的屏幕上都可以**正确缩放**,无论是小屏还是大屏。之前版本的用户应该会觉得很熟悉,学习曲线不会太陡峭。
|
||||
|
||||
此外,现在可以**回复特定消息**,用 emoji **回应消息**,甚至在使用 Fractal 聊天时**编辑/删除消息**。
|
||||
|
||||
![][7]
|
||||
|
||||
你还可以将**当前位置发送**到你的任何聊天中,只需确保你的系统支持“位置服务”并已启用。
|
||||
|
||||
![][8]
|
||||
|
||||
查看图片和播放音频或视频现在更加直观,你可以直接从聊天窗口中查看/播放。
|
||||
|
||||
![][9]
|
||||
|
||||
最后,Fractal 现在支持**登录多个帐户**,并提供 [单点登录][10](SSO)的附加支持。这将使在同一客户端实例上处理多个帐户变得轻松。
|
||||
|
||||
![][11]
|
||||
|
||||
**对于将来的版本**,开发人员计划添加一些新功能,如房间设置、更好的管理工具和通知设置。他们还希望改善无障碍方面的内容。
|
||||
|
||||
你可以查看 [发布说明][12] 以了解所有技术细节。
|
||||
|
||||
我很高兴看到 Fractal 正在积极开发,如果问我,这个版本使其更加接近正在开发中的 [ElementX][13],它是 Element 消息应用的继任者。
|
||||
|
||||
我很高兴 Matrix 不再是少数人使用的小众事物,而是许多人建议的常态。
|
||||
|
||||
### 📥 下载 Fractal 5
|
||||
|
||||
你可以前往 [Flathub 商店][15]获取 Fractal 的最新版本。如果你对源代码感兴趣,可以参考其 [GitLab 仓库][16]。
|
||||
|
||||
> **[Fractal 5(Flathub)][15]**
|
||||
|
||||
💬 你使用 Fractal 吗?更喜欢其他 Matrix 客户端吗?在下面让我知道吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/fractal-5/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://matrix.org/
|
||||
[2]: https://itsfoss.com/best-matrix-clients/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/Fractal_5_a.png
|
||||
[4]: https://blog.gtk.org/2020/12/16/gtk-4-0/
|
||||
[5]: https://gitlab.gnome.org/GNOME/libadwaita
|
||||
[6]: https://github.com/matrix-org/matrix-rust-sdk
|
||||
[7]: https://news.itsfoss.com/content/images/2023/11/Fractal_5_c.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/11/Fractal_5_d.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/11/Fractal_5_e.png
|
||||
[10]: https://matrix.org/docs/older/client-sso-guide/
|
||||
[11]: https://news.itsfoss.com/content/images/2023/11/Fractal_5_f.png
|
||||
[12]: https://gitlab.gnome.org/GNOME/fractal/-/releases/5
|
||||
[13]: https://news.itsfoss.com/element-x-matrix-2/
|
||||
[14]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[15]: https://flathub.org/apps/org.gnome.Fractal
|
||||
[16]: https://gitlab.gnome.org/GNOME/fractal
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/30/174848tvkmukflffwhiuqi.jpg
|
||||
@@ -0,0 +1,96 @@
|
||||
[#]: subject: "Microsoft is Locking Down Search for Public Code on GitHub"
|
||||
[#]: via: "https://news.itsfoss.com/microsoft-github-open-source-code/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16424-1.html"
|
||||
|
||||
微软加码对 GitHub 上的公开代码搜索的限制
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 微软,你在 GitHub 上的行为究竟是何目的?
|
||||
|
||||
许多用户对 [微软收购 GitHub][1] 这一事实感到失望。当然,这并非用户能阻止的事情。
|
||||
|
||||
因此,有些人选择转向 GitLab 或其他 [GitHub 替代品][2],而部分人则决定坚守在 GitHub,不论他们的感受如何。
|
||||
|
||||
GitHub 是无数开发者熟悉的地方。无论现在是谁拥有它,这个平台都有它的价值,所以用户仍然根据自己的需求来选择使用它。
|
||||
|
||||
不幸的是,自微软加入之后,平台上才有了某些变化,两者之间似乎存在一些关联,而且部分改变让用户觉得不便。被关注起来的这个变化就是 2023 年 6 月实施的。
|
||||
|
||||
### 现在需要登录才能搜索代码
|
||||
|
||||
一位 GitHub 用户/贡献者 [抱怨][3] 在未登录的情况下无法在公开仓库中搜索代码,这让人非常失望。
|
||||
|
||||
> 📋 在 GitHub 上进行全局代码搜索已经需要登录用户操作,这样已经好几年了。现在所讨论的是仓库内搜索的情况。
|
||||
|
||||
下面是他的观点:
|
||||
|
||||
> 这真是让人感到恶心,这是对开源运动的亵渎。我必须指出,微软在这里是在滥用开源运动。
|
||||
>
|
||||
> 我们被告知这是出于安全考虑……但当我可以简单地克隆仓库,使用更专业的工具进行适当的搜索和分析时,那么这样的安全又是为了什么呢?
|
||||
>
|
||||
> 那么到底是什么原因呢?!你们还没有获得我们足够的数据吗?只是靠每次上厕所就能赚点钱,你们还要追踪我在看哪一行代码?
|
||||
|
||||
此外,他解释了在他认为应公开访问的仓库中搜索代码的不便。
|
||||
|
||||
> 我正在老旧的机器上使用,需要在我们自己的仓库中搜索东西,结果却做不到。我其实希望人们能够搜索我们的代码库。
|
||||
>
|
||||
> 那我该怎么做呢?我试过登录。但是我的密码管理器不在我手边,所以我不得不拿出我的手机。哦!现在我需要 2FA。然后我得回办公室拿我的 Yubi 密钥。旧的笔记本没有 USB-C 端口?好吧,现在我无能为力了。
|
||||
>
|
||||
> 这个变化不仅没必要,而且对你们自己的客户来说,简直是**敌意**。猖獗的敌意!
|
||||
|
||||
实际上,无法访问本应公开且对“**所有人**”开放的代码库让人极度不便。
|
||||
|
||||
这就是开源代码应该如何访问的,对吗?
|
||||
|
||||
Martin Woodward,**GitHub 的开发者关系副总裁**,对这个反馈简单地表示,这是一段时间以来的一个改变,主要是为了避免机器人。
|
||||
|
||||
> 对 [@koepnick][4] 的不便感到抱歉,虽然在很长一段时间里,我们在全仓库范围内的搜索都要求用户登录,但是当我们在 2023 年提升了搜索能力后,我们不得不将这一要求扩大到仓库内(参看 [https://github.blog/changelog/2023-06-07-code-search-now-requires-login/][5])。
|
||||
>
|
||||
> 主要是确保我们的服务器能够支撑 GitHub 上的开发者负载,并帮助防止服务器被匿名请求等机器人行为压垮。
|
||||
|
||||
当然,这是一个大公司的预期回应。不幸的是,这并没有说服为什么要在 GitHub 上做出这样的改变,而其他平台并没有这个限制。
|
||||
|
||||
声明说的更多的是“何时实施了此项更改”。
|
||||
|
||||
幸运的是,[代码搜索团队的一员][6] 试图阐述他们通过限制获得的优势。
|
||||
|
||||
**太长不看版:该策略可以减少滥用,但并不能阻止所有的机器人。**
|
||||
|
||||
那么,让我们思考一下,作为科技行业的重要参与者,微软没有足够的基础设施来抵御机器人,而不是通过限制访问代码来做到这一点吗?难道没有其他方式来保护代码免受机器人和其他恶意抓取器的侵袭,而不需要禁用搜索功能吗?
|
||||
|
||||
此外,讨论中的一些用户指出,开源代码的全部意义就在于任何人,无论身份是已知还是未知,都应该可以访问。
|
||||
|
||||
尽管代码关联到了开源许可证,但是这个限制似乎违反了开源的概念。
|
||||
|
||||
_微软是正在私下里试图控制 GitHub 上的开源利益吗?_ 🤔
|
||||
|
||||
💬 也许微软需要重新考虑这个变动,来让事情变得好一些?或者,也许他们可以提供一个比声明中更好的解释?
|
||||
|
||||
*(题图:MJ/d35ceb65-521d-4313-8e4c-60df0a898455)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/microsoft-github-open-source-code/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/microsoft-github/
|
||||
[2]: https://itsfoss.com/github-alternatives/
|
||||
[3]: https://github.com/orgs/community/discussions/77046
|
||||
[4]: https://github.com/koepnick
|
||||
[5]: https://github.blog/changelog/2023-06-07-code-search-now-requires-login/
|
||||
[6]: https://github.com/orgs/community/discussions/77046#discussioncomment-7683240
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/29/082734mnmvpphzuz4pojjx.png
|
||||
@@ -0,0 +1,167 @@
|
||||
[#]: subject: "A few bytes here, a few there, pretty soon you’re talking real memory"
|
||||
[#]: via: "https://dave.cheney.net/2021/01/05/a-few-bytes-here-a-few-there-pretty-soon-youre-talking-real-memory#easy-footnote-6-4231"
|
||||
[#]: author: "Dave Cheney https://dave.cheney.net/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "Drwhooooo"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16381-1.html"
|
||||
|
||||
这儿几个字节,那里几个字节,我们说的是真正的内存
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
今天的帖子来自于最近的 Go 语言的一次小测试,观察下面的测试基础片段 [^1]:
|
||||
|
||||
```
|
||||
func BenchmarkSortStrings(b *testing.B) {
|
||||
s := []string{"heart", "lungs", "brain", "kidneys", "pancreas"}
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
sort.Strings(s)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`sort.Strings` 是 `sort.StringSlice(s)` 的便捷包装器,`sort.Strings` 在原地对输入进行排序,因此不会分配内存(或至少 43% 回答此问题的 Twitter 用户是这么认为的)。然而,至少在 Go 的最近版本中,基准测试的每次迭代都会导致一次堆分配。为什么会是这种情况?
|
||||
|
||||
正如所有 Go 程序员应该知道的那样,接口是以 [双词结构][c] 实现的。每个接口值包含一个字段,其中保存接口内容的类型,以及指向接口内容的指针。[^2]
|
||||
|
||||
在 Go 语言伪代码中,一个接口可能是这样的:
|
||||
|
||||
```
|
||||
type interface struct {
|
||||
// the ordinal number for the type of the value
|
||||
// assigned to the interface
|
||||
type uintptr
|
||||
|
||||
// (usually) a pointer to the value assigned to
|
||||
// the interface
|
||||
data uintptr
|
||||
}
|
||||
```
|
||||
|
||||
`interface.data` 可以容纳一个机器字(在大多数情况下为 8 个字节),但一个 `[]string` 却需要 24 个字节:一个字用于指向切片的底层数组;一个字用于存储切片的长度;另一个字用于存储底层数组的剩余容量。那么,Go 是如何将 24 个字节装入个 8 个字节的呢?通过编程中最古老的技巧,即间接引用。一个 `[]string`,即 `s`,需要 24 个字节;但 `*[]string` —— 即指向字符串切片的指针,只需要 8 个字节。
|
||||
|
||||
### 逃逸到堆
|
||||
|
||||
为了让示例更加明确,以下是重新编写的基准测试,不使用 `sort.Strings` 辅助函数:
|
||||
|
||||
```
|
||||
func BenchmarkSortStrings(b *testing.B) {
|
||||
s := []string{"heart", "lungs", "brain", "kidneys", "pancreas"}
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
var ss sort.StringSlice = s
|
||||
var si sort.Interface = ss // allocation
|
||||
sort.Sort(si)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
为了让接口正常运行,编译器将赋值重写为 `var si sort.Interface = &ss`,即 `ss` 的地址分配给接口值。[^3] 我们现在有这么一种情况:出现一个持有指向 `ss` 的指针的接口值。它指向哪里?还有 `ss` 存储在哪个内存位置?
|
||||
|
||||
似乎 `ss` 被移动到了堆上,这也同时导致了基准测试报告中的分配:
|
||||
|
||||
```
|
||||
Total: 296.01MB 296.01MB (flat, cum) 99.66%
|
||||
8 . . func BenchmarkSortStrings(b *testing.B) {
|
||||
9 . . s := []string{"heart", "lungs", "brain", "kidneys", "pancreas"}
|
||||
10 . . b.ReportAllocs()
|
||||
11 . . for i := 0; i < b.N; i++ {
|
||||
12 . . var ss sort.StringSlice = s
|
||||
13 296.01MB 296.01MB var si sort.Interface = ss // allocation
|
||||
14 . . sort.Sort(si)
|
||||
15 . . }
|
||||
16 . . }
|
||||
```
|
||||
|
||||
发生这种分配是因为编译器当前无法确认 `ss` 比 `si` 生存期更长。Go 编译器开发人员对此的普遍态度是,觉得 [这个问题改进的余地][d],不过我们另找时间再议。事实上,`ss` 就是被分配到了堆上。因此,问题变成了:每次迭代会分配多少个字节?为什么不去询问 `testing` 包呢?
|
||||
|
||||
```
|
||||
% go test -bench=. sort_test.go
|
||||
goos: darwin
|
||||
goarch: amd64
|
||||
cpu: Intel(R) Core(TM) i7-5650U CPU @ 2.20GHz
|
||||
BenchmarkSortStrings-4 12591951 91.36 ns/op 24 B/op 1 allocs/op
|
||||
PASS
|
||||
ok command-line-arguments 1.260s
|
||||
```
|
||||
|
||||
可以看到,在 amd 64 平台的 Go 1.16 beta1 版本上,每次操作会分配 24 字节。[^4] 然而,在同一平台先前的 Go 版本中,每次操作则消耗了 32 字节。
|
||||
|
||||
```
|
||||
% go1.15 test -bench=. sort_test.go
|
||||
goos: darwin
|
||||
goarch: amd64
|
||||
BenchmarkSortStrings-4 11453016 96.4 ns/op 32 B/op 1 allocs/op
|
||||
PASS
|
||||
ok command-line-arguments 1.225s
|
||||
```
|
||||
|
||||
这引出了本文的主题,即 Go 1.16 版本中即将推出的一项便利改进。不过在讨论这个内容之前,我需要聊聊 “<ruby>尺寸类别<rt>size class</rt></ruby>”。
|
||||
|
||||
### 尺寸类别
|
||||
|
||||
在解释什么是 “<ruby>尺寸类别<rt>size class</rt></ruby>” 之前,我们先考虑个问题,理论上的 Go 语言在运行时是如何在其堆上分配 24 字节的。有一个简单的方法:追踪目前为止已分配到的所有内存的动向——利用指向堆上最后分配的字节的指针。分配 24 字节,堆指针就会增加 24,然后将前一个值返回给调用函数。只要写入的请求 24 字节的代码不超出该标记的范围,这种机制就没有额外开销。不过,现实情况下,内存分配器不仅要分配内存,有时还得释放内存。
|
||||
|
||||
最终,Go 语言程序在运行时将释放这些 24 字节,但从运行的视角来看,它只知道它给调用者的开始地址。它不知道从该地址起始之后又分配了多少字节。为了允许释放内存,我们假设的 Go 语言程序运行时分配器必须记录堆上每个分配的长度值。那么这些长度值的分配存储在何处?当然是在堆上。
|
||||
|
||||
在我们的设想中,当程序运行需要分配内存的时候,它可以请求稍微多一点,并把它用来存储请求的数量。而对于我们的切片示例而言,当我们请求 24 字节时,实际上会消耗 24 字节加上存储数字 `24` 的一些开销。这些开销有多大?事实上,实际上的最小开销量是一个字。[^5]
|
||||
|
||||
用来记录 24 字节分配的开销将是 8 字节。25% 不是很大,但也不算糟糕,随着分配的大小增加,开销将变得微不足道。然而,如果我们只想在堆上存储一个字节,会发生什么?开销将是请求数据量的 8 倍!是否有一种更高效的方式在堆上分配少量内存?
|
||||
|
||||
与其在每个分配旁边存储长度,不如将相同大小的内容存储在一起,这个主意如何?如果所有的 24 字节的内容都存储在一起,那么运行时会自动获取它们的大小。运行时所需要的是一个单一的位,指示 24 字节区域是否在使用中。在 Go 语言中,这些区域被称为 Size Classes,因为相同大小的所有内容都会存储在一起(类似学校班级,所有学生都按同一年级分班,而不是 C++ 中的类)。当运行时需要分配少量内存时,它会使用能够容纳该分配的最小的尺寸类别。
|
||||
|
||||
### 无限制的尺寸类别
|
||||
|
||||
现在我们知道尺寸类别是如何工作的了,那么问题又来了,它们存储在哪里?和我们想的一样,尺寸类别的内存来自堆。为了最小化开销,运行时会从堆上分配较大的内存块(通常是系统页面大小的倍数),然后将该空间用于单个大小的分配。不过,这里存在一个问题————
|
||||
|
||||
将大块区域用于存储同一大小的事物的模式很好用 [^6],如果分配大小的数量是固定的,最好是少数几个。那么在通用语言中,程序可以要求运行时以任何大小分配内存[^7]。
|
||||
|
||||
例如,想象一下向运行时请求 9 字节。9 字节是一个不常见的大小,因此可能需要一个新的尺寸类别来存储 9 字节大小的物品。因为 9 字节大小的物品不常见,所以分配的其余部分(通常为 4KB 或更多)可能会被浪费。由于尺寸类别的集合是固定的,如果没有精确匹配的 size class 可用,分配将并入到下一个尺寸类别。在我们的示例中,9 字节可能会在 12 字节的尺寸类别中分配。未使用的 3 字节的开销要比几乎未使用的整个尺寸类别分配好。
|
||||
|
||||
### 总结一下
|
||||
|
||||
这是谜题的最后一块拼图。Go 1.15 版本没有 24 字节的尺寸类别,因此 `ss` 的堆分配是在 32 字节的尺寸类别中分配的。由于 Martin Möhrmann 的工作,Go 1.16 版本有一个 24 字节的尺寸类别,非常适合分配给接口的切片值。
|
||||
|
||||
[^1]: 这不是正确的对排序函数进行基准测试的方式,因为在第一次迭代之后,输入已经排序。但这又是另外一个话题了。
|
||||
[^2]: 此语句的准确性取决于所使用的 Go 版本。例如,Go 1.15 版本添加了直接将一些 [整数存储在接口值][e] 中的功能,从而节省了分配和间接性。然而,对于大多数值来说,如果它不是指针类型,它的地址将被取出并存储在接口值中。
|
||||
[^3]: 编译器在接口值的类型字段中跟踪了这种手法,因此它记住了分配给 `si` 的类型是 `sort.StringSlice` 而不是 `*sort.StringSlice`。
|
||||
[^4]: 在 32 位平台上,这个数字减半,[但我们不再关注它][f]。
|
||||
[^5]: 如果你准备限制分配为 4G 或者可能是 64KB,你可以使用较少内存来存储分配的尺寸,但实际上使用小于一个字来存储长度标头的节省会受到填充的影响。
|
||||
[^6]: 将相同大小的物品存储在一起也是一种有效的对抗碎片化的策略。
|
||||
[^7]: 这并不是一个不切实际的设想,字符串有各种形状和大小,生成以前未见过的大小的字符串可能就像附加空格一样简单。
|
||||
|
||||
### 相关文章
|
||||
|
||||
1. [我在 Devfest 2017年西伯利亚大会谈 Go 语言][g]
|
||||
2. [如果对齐的内存写操作是原子性的,为什么我们还需要 sync/atomic 包呢?][h]
|
||||
3. [为你的树莓派创建一个真实的串行控制台][i]
|
||||
4. [为什么 Go 语言线程的栈是无限制的?][j]
|
||||
|
||||
*(题图:MJ/01d5fe46-778f-48fe-9481-162f4d0289dc)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://dave.cheney.net/2021/01/05/a-few-bytes-here-a-few-there-pretty-soon-youre-talking-real-memory
|
||||
|
||||
作者:[Dave Cheney][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Drwhooooo](https://github.com/Drwhooooo)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://dave.cheney.net/
|
||||
[b]: https://github.com/lujun9972
|
||||
[c]: https://research.swtch.com/interfaces
|
||||
[d]: https://github.com/golang/go/issues/23676
|
||||
[e]: https://golang.org/doc/go1.15#runtime
|
||||
[f]: https://www.tallengestore.com/products/i-never-look-back-darling-it-distracts-from-the-now-edna-mode-inspirational-quote-tallenge-motivational-poster-collection-large-art-prints
|
||||
[g]: https://dave.cheney.net/2017/08/23/im-talking-about-go-at-devfest-siberia-2017
|
||||
[h]: https://dave.cheney.net/2018/01/06/if-aligned-memory-writes-are-atomic-why-do-we-need-the-sync-atomic-package
|
||||
[i]: https://dave.cheney.net/2014/01/05/a-real-serial-console-for-your-raspberry-pi
|
||||
[j]: https://dave.cheney.net/2013/06/02/why-is-a-goroutines-stack-infinite
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202311/15/154636bhoqwdrdxczdhzxg.png
|
||||
@@ -0,0 +1,85 @@
|
||||
[#]: subject: "Cloud service providers: How to keep your options open"
|
||||
[#]: via: "https://opensource.com/article/22/5/cloud-service-providers-open"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16482-1.html"
|
||||
|
||||
保持对云服务供应商选择的多样性
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 不论云服务的开放程度如何,你都能为自己的环境选择合适的方式。
|
||||
|
||||
对于 Linux 用户来说,市场上有一种新型的电脑出现,我们称之为“云”。
|
||||
|
||||
如同你桌面上的个人电脑,背包里的笔记本电脑,或是你租用的虚拟私有服务器一样,你可以选择不同的云计算供应商。虽然品牌名称和你以往熟悉的硬件品牌不一致,但其核心概念是相同的。
|
||||
|
||||
要运行 Linux,你需要一台电脑。要在云上运行 Linux,你需要一个云服务供应商。就像你的电脑中的硬件和固件一样,你的计算堆栈可以使用多大的开源程度也是有区别的。
|
||||
|
||||
作为一个开源的用户,我更偏向于拥有尽量开放的计算集成环境。在对云计算市场进行详细的调研后,我形成了关于云服务供应商的三层观点。你可以根据这个体系作为指南,对你将选择的云供应商作出明确的决策。
|
||||
|
||||
### 开放堆栈
|
||||
|
||||
一个完全开放的云是从底层开始就建立在开源技术之上的云。由于云科技中有很大一部分从一开始就是开源的,因此技术层面的开放性堆栈并不难以实现。然而,也有云供应商以专有的方式重新发明轮子,这让用户很容易误入使用了许多封闭源码组件的云服务商的陷阱中。
|
||||
|
||||
如果你在寻找一个真正开放的云,那么你应该寻找一个提供 [OpenStack][2] 作为基础的云供应商。OpenStack 提供云的软件基础设施,包括通过 Neutron 实现的软件定义网络(SDN)、通过 Swift 实现的对象存储、身份和密钥管理、镜像服务等等。按照我的硬件电脑比喻,OpenStack 就是驱动云的“内核”。
|
||||
|
||||
当然,我并不是字面上的意思,但如果你的云供应商运行 OpenStack,那相当于你可以直接到达堆栈的底部。从用户的角度看,OpenStack 是你的云存在并拥有文件系统、网络等的原因所在。
|
||||
|
||||
在 OpenStack 的主体上,可能有一个像 Horizon 或 Skyline 这样的网络用户界面,可能有像 [OpenShift][3] 或 OKD(并不是一个缩写,但前身是 OpenShift Origin)这样的额外组件。所有这些都是开源的,它们帮助你运行容器,这些容器是内嵌应用程序的极简 Linux 镜像。
|
||||
|
||||
因为 OpenShift 和 OKD 不需要 OpenStack,这就构成了我对云世界的下一个视野级别。
|
||||
|
||||
### 开放平台
|
||||
|
||||
你并不总是可以选择你的云正在运行的堆栈。你的云可能运行的是 Azure、AWS,或者类似的东西,而不是 OpenStack。
|
||||
|
||||
这些就是云世界的“二进制碎片”。你对它们如何工作,或者为什么工作一无所知;你只知道你的云存在,并且有一个文件系统,一个网络堆栈,等等。
|
||||
|
||||
就像桌面计算一样,你可以在获得的服务器上运行一个“操作系统”。言下之意,有一种观点认为 OpenStack 本质上就是云计算的操作系统。然而,通常情况下,用户直接交互的是 OpenShift。
|
||||
|
||||
OpenShift 是一个你可以使用 Podman 和 Kubernetes 管理容器和 <ruby>容器荚<rt>Pod</rt></ruby> 的开源“桌面”或工作区。它让你在云上运行应用程序,就像你在笔记本电脑上启动一个应用一样。
|
||||
|
||||
### 开放标准
|
||||
|
||||
最后,同样重要的一点是,有些情况下你在选择云服务供应商上没有什么选择。你被放在一个运行着专有“内核”、专有“操作系统”的平台上,你能影响的只剩下你在那个环境里运行什么。
|
||||
|
||||
但掌握开源的力量,你就能建立你自己的平台。你可以选择在容器内部使用的组件。你可以,而且应该,围绕开源工具设计你的工作环境,因为这样一来,如果你有机会更换服务供应商,你可以将你的所有工作迁移到新的供应商那里。
|
||||
|
||||
这可能需要你自行实现一些在你当前受限(非开源)平台上已经内置的功能。例如,你的云供应商可能会用一个包含在他们平台“免费”提供的 API 管理系统或持续集成/持续交付(CI/CD)管道来吸引你,这需要你有清醒的认识。当一个非开放的应用被免费提供时,通常会以其他形式带来一些成本。其中一种成本是,一旦你开始在它的基础上构建,你会更加不愿意迁移,因为你会离开你已建立的一切。
|
||||
|
||||
你应当为自己重建这些封闭“特性”,并将其转化为开源服务。在容器中运行 [Jenkins][4] 和 [APIMan][5]。找出你的云提供商声称用专有代码解决的问题,然后使用开源解决方案来确保,当你离开寻找开放的供应商时,你可以迁移你已经构建的系统。
|
||||
|
||||
### 开源计算
|
||||
|
||||
对于太多的人来说,云计算是一个开源居于次要地位的领域。实际上,开源在云上的重要性与它在你的个人电脑和驱动互联网的服务器上同样重要。
|
||||
|
||||
寻找开源的云服务。
|
||||
|
||||
当你受困于无法获取源代码的环境时,就肩负起在你的云内使用开源软件的责任吧。
|
||||
|
||||
*(题图:DA/9dc5a9d0-d664-492f-890a-b437ce39c4d6)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/cloud-service-providers-open
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/bus-cloud.png
|
||||
[2]: https://opensource.com/resources/what-is-openstack
|
||||
[3]: https://cloud.redhat.com/?intcmp=7013a000002qLH8AAM
|
||||
[4]: https://opensource.com/article/19/9/intro-building-cicd-pipelines-jenkins
|
||||
[5]: https://www.apiman.io/latest/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/17/223915neao8gei208poo8c.jpg
|
||||
@@ -0,0 +1,72 @@
|
||||
[#]: subject: "My open source journey with C from a neurodiverse perspective"
|
||||
[#]: via: "https://opensource.com/article/22/5/my-journey-c-neurodiverse-perspective"
|
||||
[#]: author: "Rikard Grossman-Nielsen https://opensource.com/users/rikardgn"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "CanYellow"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16454-1.html"
|
||||
|
||||
从神经多样性视角看待我在 C 语言上的开源之旅
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 我了解到,如果你能找到适合你的方法,不管老师和其他学生怎么说,你都可以学到任何你感兴趣的开源技能。
|
||||
|
||||
我生于 1982 年,以人类的年岁计算,这只过去了 40 年(在写这篇文章的时候)。然而就计算机发展而言,那已经是很久以前了。十岁的时候,我得到了我的第一台电脑,一台 Commodare 64 计算机。后来,我买了一台 Amiga,到了13岁的时候,我买了一台 “IBM 兼容” 机(那时,大家都这么称呼它)。
|
||||
|
||||
高中的时候,我用图形计算器做了很多基本的编程。高二的时候,我学习了基本的 C 语言编程,然后到了高三,我开始做更高级的 C 语言编程,开始应用库、指针和图形界面。
|
||||
|
||||
### 我从编程学生成为老师的旅程
|
||||
|
||||
在我的大学时代,我学习了 Java,所以 [Java 成为了我的主要语言][2]。我还为一种叫做个人数据助理(PDA)的设备编写了一些 C# 语言的程序,这是现代智能手机的前身。因为 Java 语言是面向对象的、跨平台的,并且使得 GUI 编程变得容易,我想以后我的大部分编程工作都会用 Java 来完成。
|
||||
|
||||
在大学里,我也发现自己有教学的天赋,所以我帮助别人编程,而当我选修计算机科学时,他们也帮助我学习数学。在大学后期,我选修了一些 C 语言编程的课程,目的是学习基本的嵌入式编程和测量仪器的控制。
|
||||
|
||||
30 岁之后,我用 C 语言作为教学工具,教高中生学习用 C 语言编程。我还用 [Fritzing][3] 教高中生如何编写 Arduino 程序。我对 C 语言编程的兴趣在去年再次被唤醒,当时我找到了一份工作,帮助大学生学习计算机科目中的差异。
|
||||
|
||||
### 我如何接触 C 语言和其他语言进行编程
|
||||
|
||||
每个人学习的方式都不一样。作为一个患有 <ruby>阿斯伯格综合症<rt>Asperger's</rt></ruby> 和多动症(ADHD)的 <ruby>神经多样性<rt>neurodiverse</rt></ruby> 人士,我的学习过程有时与其他人很不一样。当然,每个人都有不同的学习风格,尽管神经多样性人士可能比其他人更喜欢某种学习风格。
|
||||
|
||||
我倾向于用图片和文字来思考。就我个人而言,我需要一步一步地解码事物,一步一步地理解它们。这使得 C 语言适合我的学习风格。当我学习代码的时候,我通过学习观察一行行的代码,比如我面前的 `# include <stdio.h>` ,逐渐将代码合并到我的大脑中。根据我在互联网上获取的对其他神经多样性人群的描述,他们中的一些人似乎也有这种学习风格。我们“内化代码”。
|
||||
|
||||
有些自闭症人士在记忆大段代码方面比我强得多,但过程似乎是一样的。在理解诸如结构、指针、指针的指针、矩阵和向量之类的概念时,用图片来思考是很有帮助的,比如在编程教程和书籍中可以找到的那些。
|
||||
|
||||
我喜欢使用 C 语言来理解工作是如何在较低的级别上完成的,例如 [文件输入和输出(I/O)][4]、网络编程等等。这并不意味着我不喜欢处理字符串操作或创建数组等任务的库。我也喜欢用 Java 语言创建数组和向量的简单性。然而,对于创建用户界面,尽管我已经在 C 语言中看过这样的代码,但是我更喜欢使用图形化编辑器,比如 Netbeans 和类似的编辑器。
|
||||
|
||||
### 我理想中用于创建应用程序的 C 语言 GUI 开源工具
|
||||
|
||||
如果我想象一个理想的用 C 语言创建 GUI 的开源工具,它将类似于 [Netbeans][5],例如,通过拖放来创建 GTK 接口。还可以在按钮上绑定 C 语言函数,等等,来使它们执行操作。也许有这样一个工具。我承认我没怎么仔细查找过。
|
||||
|
||||
### 为什么我鼓励年轻的神经多样性的人学习 C语言
|
||||
|
||||
[游戏行业][6] 是一个很大的产业。一些研究表明,神经多样性的孩子可能比其他孩子更专注于游戏。我会告诉一个神经多样性的高中生或大学生,如果你学习 C 语言,你可能会学到一些基础知识,例如,为显卡编写高效的驱动程序,或者编写高效的文件 I/O 例程来优化他们最喜欢的游戏。我还要诚实地说,学习需要时间和精力,但是值得付出努力。一旦你学会了它,你就可以更好地控制硬件一类的东西。
|
||||
|
||||
对于学习 C 语言,我建议一个神经多样性的孩子安装一个初学者友好的 Linux 发行版,然后在网上找到一些教程。我还建议一步一步地分解事物,并给它们绘制图表,例如,指针。我这样做是为了更好地理解这个概念,这对我很有效。
|
||||
|
||||
最后,这就是它的意义所在: 不管老师和其他学生怎么说,找到一种适合你的学习方法,用它来学习你感兴趣的开源技能。这是可以做到的,任何人都可以做到。
|
||||
|
||||
*(题图:DA/f0d98968-4c13-4395-8414-3690bc20b0ae)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/my-journey-c-neurodiverse-perspective
|
||||
|
||||
作者:[Rikard Grossman-Nielsen][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[CanYellow](https://github.com/CanYellow)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/rikardgn
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/images/life/computer_code_programming_laptop_0.jpg
|
||||
[2]: https://opensource.com/article/20/12/learn-java
|
||||
[3]: https://fritzing.org
|
||||
[4]: https://opensource.com/article/21/3/file-io-c
|
||||
[5]: https://opensource.com/article/20/12/netbeans
|
||||
[6]: https://opensource.com/tags/gaming
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/09/104136g8fvixs7xsky72ks.jpg
|
||||
@@ -0,0 +1,95 @@
|
||||
[#]: subject: "Open source events: 4 goals to set and how to measure them"
|
||||
[#]: via: "https://opensource.com/article/22/9/measure-success-your-open-source-event"
|
||||
[#]: author: "Shaun McCance https://opensource.com/users/shaunm"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16434-1.html"
|
||||
|
||||
如何为举办开源活动设定目标并衡量它们
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 通过定义目标并创建指标,衡量你的社区活动的成效。
|
||||
|
||||
活动是保持开源社区健康的重要组成部分。一个正面的活动体验可以激励当前的贡献者,并吸引新的参与者。但你如何判断自己的活动是否成功呢?
|
||||
|
||||
为了维护所涉及社区的健康,我们 CHAOSS (<ruby>社区健康分析开源软件<rt>Community Health Analytics Open Source Software</rt></ruby>)的 [应用生态系统工作组][2] 已经针对我们的活动考虑了这个问题。CHAOSS 应用生态系统包括一些针对 Linux 平台开发应用的项目。虽然现在主要由 GNOME 和 KDE 社区主导,但并不由它们定义。就当前而言,应用生态系统主要是由志愿者驱动的,他们是围绕自由软件的原则组织起来的。我们在此分享的工作是我们 2020 年 11 月 [针对开源活动的成功指标][3] 文章的更新。
|
||||
|
||||
我们遵循“目标-问题-指标”的方法论。首先,我们确定个人或组织可能设定的几个目标。然后,我们找出实现这些目标所需要回答的问题。最后,我们对每个问题设计可以提供答案的可量化指标。对于活动组织者,我们设定了四个目标。
|
||||
|
||||
### 目标 1:保留并吸引贡献者
|
||||
|
||||
贡献者是任何开源项目或生态的命脉,而活动则是贡献者体验中的核心。它们为吸引新贡献者提供了机会,同时也能够建立和巩固与现有贡献者的关系。活动应着眼于创造一个和谐而积极的氛围,以便与项目、生态和社区建立深远的关系。
|
||||
|
||||
我们需要考虑的一个问题是,参加活动的人在社区停留的时长是多久。如果活动的价值在于加强维持贡献者的关系,我们应当有办法去测量这个效果。要回答这个问题,需要对贡献和活动参与的长期数据进行分析。值得庆幸的是,许多项目已经拥有这些历史数据。
|
||||
|
||||
另一个问题是,活动参加者在我们的开源项目中扮演的是什么角色。活动通常都很专业化,可能并不能吸引那些想在 [非代码角色][4] 中贡献的人,如设计、文档编写和市场营销。如果项目能够跟踪非代码贡献,尽管这通常很有挑战性,你就可以对其与活动参与者名单进行对应。这些信息可以帮助活动组织者策划能吸引更广泛参与者群体的活动。
|
||||
|
||||
### 目标 2:举办有参与度的活动
|
||||
|
||||
活动不仅仅是演讲。它们为社区成员集结起来提供了空间。如果成员之间没有进行交流,那么这次活动就失去了其存在的价值。这也反映在所谓的走廊交谈中,即人们在走廊或会议日程安排之外进行的交流。一些会议甚至为那些没有打算参加任何环节,但希望在走廊里与他人交流的人减价售票。我们需要解决的问题是,如何衡量一个活动在推动参与者之间的交流上的成效。
|
||||
|
||||
要衡量会议时间的参与度,我们可以计算在问答环节中提出的问题数量。虽然这个指标直接受每个演讲者的影响,但活动组织者可以采取行动来鼓励问答环节的参与度。例如,活动组织者可以使用他们的早晨主题演讲来鼓励所有人通过提问来表示对演讲者的赞赏。
|
||||
|
||||
我们也考虑了在走廊交谈中的参与情况。一种衡量方法是观察人们在非会议时间的行为。另一种方法是在活动结束后的调查中询问参与者的非会议时间的体验。
|
||||
|
||||
最后,我们考虑了在虚拟空间的参与情况。一种衡量方法是通过计算在社交媒体上使用活动标签或者来源于我们知道正在参加活动的人发出的信息数量。另一种可能性,无论在线还是现场,都可以设置一种表情符,参与者只需单击即可反映对会议环节、主题演讲和整个会议体验的反应。
|
||||
|
||||
### 目标 3:深入了解公司的贡献
|
||||
|
||||
企业和其他机构对活动,甚至社区活动的贡献是极其重要的。他们可能提供赞助、派遣员工去帮助组织,或者只是派员工去参加活动。确保公司在他们的贡献中找到价值是很重要的,但我们必须以不排斥社区贡献的方式来做这件事。我们研究了公司对社区活动的期望,以及我们可以通过何种方式的衡量来提高公司的贡献。
|
||||
|
||||
有些开源活动被认为比其他活动更具有公司味,所以你可能会问,有多少比例的参与者是被他们的雇主派遣去参加的,而不是作为志愿者参加的。有时,这种差异体现在门票定价上。否则,这是一个可以在注册调查中轻松问到的问题。虽然这些信息很有用,但这并不是一个完美的指标,因为付费的开源贡献者通常会在他们的工作职责之外参加活动。
|
||||
|
||||
我们还考虑了几个指标,比如哪些公司参加活动,除了派遣员工(例如,金钱赞助活动),公司在做什么,以及公司是否会重复参与。认识到这一点对培养长期关系很重要。
|
||||
|
||||
最后,我们考虑了具有相似范畴的活动的竞争格局。公司在活动上的预算有限。尽管我们喜欢类似的活动,但他们都从同一池子里的潜在赞助商中吸引人。了解哪些其他活动正在寻求赞助可以帮助组织者更好地区分他们自己的活动。
|
||||
|
||||
### 目标 4:关注多元化和技能差距
|
||||
|
||||
由全球各地的人们构建和发展起来的国际社区,这些人来自多种多样的背景,是开源项目的一个重要组成部分。这些社区贡献他们的想法,为共同的目标合作,帮助项目扩大和开拓新的方向。
|
||||
|
||||
面对面活动对于项目和组织来说是一个独特的机会,可以让他们的贡献者聚集在一起,让他们交流并分享各种多元的经验,进而推动创新,以不同的视角促进增长。这也是一个培养和强化共享文化的机会,重点在于增加多元化和包容性。这些指标应该能衡量活动对于培养这种多元性,以及在社区中填补技能缺口的贡献有多大。
|
||||
|
||||
我们首先考虑我们在活动中有哪些技能培训,以及这些培训包含多广泛的技能。技能培训可以包括教程,动手实践的工作坊,黑客马拉松,或者其他很多形式。我们在编码之外的技能上有技能培训吗?有很多对开源项目有价值的技能和角色,比如组织活动所需要的技能。
|
||||
|
||||
然后,有助于看看我们在我们的社区内需要哪些技能,而哪些技能又是缺失的。项目领导和参与培训的人通常是获取此类信息的良好来源。通过将我们拥有的技能培训与社区需要的技能进行比较,我们可以更好地设计未来活动的培训项目。
|
||||
|
||||
### 参与其中
|
||||
|
||||
CHAOSS 应用生态系统工作组对与活动组织者共同细化并实施指标表示感兴趣。KDE 和 GNOME 活动的组织者已经讨论了怎样改变他们的活动以更好地捕捉到这些指标。我们为活动组织者的工作也 [以 PDF 形式提供][7]。
|
||||
|
||||
CHAOSS 应用生态系统工作组还挑战了定义开源软件应用生态系统内的市场营销和通信功能指标。朝向这个目标的第一步是和 KDE 和 GNOME 扮演这个角色的人们进行的一次对话。这次对话可以在 [CHAOSScast Episode #31: Marketing Metrics for OSS Foundations and Projects][8] 中找到。我们将从这次对话中得到的学习经验转化为目标-问题-指标,如上述对活动组织者指标的描述。
|
||||
|
||||
在我们对推广和通信团队的工作之后,我们计划解决财务团队、社区经理、发布经理、跨项目协调人和导师的指标。我们的工作才刚刚开始,我们欢迎反馈和新的贡献者。
|
||||
|
||||
你被邀请参与 CHAOSS 应用生态系统工作组的工作。你可以在我们的 [GitHub 页面][9] 上找到更多的信息。
|
||||
|
||||
*(题图:MJ/187d7b91-9f02-47a2-a433-ea5adbbe1ac6)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/9/measure-success-your-open-source-event
|
||||
|
||||
作者:[Shaun McCance][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/shaunm
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/team_global_people_gis_location.png
|
||||
[2]: https://github.com/chaoss/wg-app-ecosystem
|
||||
[3]: https://opensource.com/article/20/11/chaoss-open-source-events
|
||||
[4]: https://opensource.com/article/22/8/non-code-contribution-powers-open-source
|
||||
[5]: https://opensource.com/article/22/6/attract-contributors-open-source-project
|
||||
[6]: https://opensource.com/article/19/4/ways-support-sustain-open-source
|
||||
[7]: https://github.com/chaoss/wg-app-ecosystem/blob/main/Metrics%20for%20OSS%20Event%20Organizers%20-%20CHAOSS%20App%20Ecosystem%20(Oct%202021).pdf
|
||||
[8]: https://podcast.chaoss.community/31
|
||||
[9]: https://github.com/chaoss/wg-app-ecosystem
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/02/120138aq5dddcsdsnnf8n8.png
|
||||
149
published/202312/20221024.4 ⭐️⭐️⭐️ A PWA is the web browser.md
Normal file
149
published/202312/20221024.4 ⭐️⭐️⭐️ A PWA is the web browser.md
Normal file
@@ -0,0 +1,149 @@
|
||||
[#]: subject: "A PWA is the web browser"
|
||||
[#]: via: "https://opensource.com/article/22/10/pwa-web-browser"
|
||||
[#]: author: "Alex Borsody https://opensource.com/users/alexborsody"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16487-1.html"
|
||||
|
||||
PWA:浏览器的新范式
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 尽管渐进式网络应用(PWA)还在起步阶段,它们却已经影响着我们使用网络的方式。
|
||||
|
||||
<ruby>渐进式网络应用<rt>Progressive Web App</rt></ruby>(PWA),借助现代网络技术,提供能赶超任何移动应用的用户体验。而正是积极进取的开源社区以及谷歌、微软等科技巨头,助推着 PWA 的发展,试图冲破应用程序之间的鸿沟。
|
||||
|
||||
其实,PWA 就是在网络浏览器中运行你的程序。因为谷歌 Play Store 和苹果 App Store 事实上二分天下,所以重点就是谷歌 Chrome 和苹果 Safari(分别基于开源的 Chromium 和 WebKit 构建)。
|
||||
|
||||
关于创建桌面应用的内容不在本文展开,如果你对此感兴趣,可以参考 [Electron][1]。
|
||||
|
||||
PWA 的构建方式和任何其他网站或网络应用没有两样。它们使用最新的移动技术,并且采用用户体验的最佳实践。PWA 还可以将浏览器与原生代码相结合以优化体验。
|
||||
|
||||
如果你在搜索引擎中输入 “什么是 PWA”,你可能得到一个概括性的回答,像是“PWA 的设计上高速、稳定、吸引人,可以离线工作,还可以安装到设备的主屏幕上。”虽然这个答案部分正确,但却仅仅涵盖了 PWA 所能达成和正在发展成的事物表面部分。
|
||||
|
||||
### 下面的这些并非 PWA
|
||||
|
||||
下面列出的是跨平台应用框架,它们可以让你能从单一代码库开发应用,但并未采用浏览器作为它们的平台。
|
||||
|
||||
- Flutter
|
||||
- React Native
|
||||
|
||||
采用 Flutter,你可能会用到 Dart 语言,此语言可以编译出 iOS、安卓和网页应用。而 React Native 同样可以对 JavaScript 进行后端编译。
|
||||
|
||||
### PWA 的定义是什么?
|
||||
|
||||
根据最初的定义,一个 PWA 必须满足以下三个要求:
|
||||
|
||||
- **服务工作线程:** 提供离线功能。
|
||||
- **网络清单:** JSON 标记用于配置主屏幕和应用图标。
|
||||
- **安全性:** 强制使用 HTTPS,因为服务工作线程在后台运行。
|
||||
|
||||
这些组件使你能通过 [谷歌 Lighthouse PWA 审核][2],并在你的评分上得到绿色检查标记。
|
||||
|
||||
![谷歌 Lighthouse 得分,包括性能,便捷性,最佳实践,SEO 和 PWA][3]
|
||||
|
||||
只要满足这些要求,Chrome 的“添加到主页”提示就会自动启用。
|
||||
|
||||
PWA Builder(由微软提供的免费服务)具有出色的用户界面,可以用于构建 PWA 和可视化基本要求。请见以下基于 developers.google.com 的示例。你可以在这个 [链接][4] 预览此功能,这是由我在 [上一篇文章][6] 中讨论的 [PWA 模块][5] 提供。
|
||||
|
||||
![显示服务工作线程的谷歌开发者界面][7]
|
||||
|
||||
![显示清单的谷歌开发者界面][8]
|
||||
|
||||
PWA 的基本要求通过服务工作线程实现了离线行为,`manifest.json` 文件则使得在安卓上添加“添加至主页”行为成为可能,这样你的网站会作为图标添加到主屏幕上,并以无浏览器的 Chrome(全屏模式)以带应用启动页的方式打开。这些是 PWA 的最低要求,除了离线缓存带来的性能提升,它基本上给人一种网站就是应用的感觉。这其实是一种用户心理的转变,从只把浏览器看作“网站”的工具,逐渐认识到它其实是一个应用平台。谷歌似乎趋向于推动这种观点,为发展更多的功能、性能和用户体验/用户界面的提升扫清了道路,这样才能真正提供“像应用一样的体验”。
|
||||
|
||||
深入的说,PWA 实际上是一系列浏览器技术以及网络开发技巧和工具的集合,使网站更像“应用”。我把这些内容分解到了以下几个类别。
|
||||
|
||||
#### 提供增强的“应用般”体验
|
||||
|
||||
- 在移动设备上的用户体验/用户界面体验优化
|
||||
- HTML/CSS/Javascript
|
||||
- 更接近原生设备的访问以及强大的网络功能
|
||||
- 更快速流畅的性能表现
|
||||
|
||||
#### 当前的 PWA:超越最初定义的可能性
|
||||
|
||||
以下是对于前述三个体验优化方向的详细阐述。
|
||||
|
||||
##### 用户体验/用户界面的改进
|
||||
|
||||
用户体验/用户界面设计和视觉问题解决对于让你的网站更像应用至关重要,这可能表现在动画效果、输入/字体大小、滚动问题,以及其他 CSS 错误的细节之处。重视前端开发团队至关重要,因为他们可以打造出这样的用户体验。在设计和用户体验的广泛领域内,我们可以通过一些 Web 文档建构的核心元素(HTML/JSS/JS)实现增强型特征,例如:
|
||||
|
||||
- [Hotwire Turbo][9]:这是一个利用线上 HTML,只通过 AJAX 或 WebSockets 更新你网页有变动的部分的开源框架。它为了实现 SPA 那样的性能优化,仅用到了部分 JavaScript。对于你的单体应用或模版渲染系统,这种途径最佳,不需要多费周折去解耦你的前后端。
|
||||
- 专门的移动 SPA 框架:市场上有一些可以为你的网站带来类应用用户体验的解耦式框架。Onsen UI 和 Framework 7 就是两个可帮你创建快速、反应灵敏的网站用户界面的优秀工具。当然,你未必必须依靠这些框架,如前所述,有力的前端团队通过应用最新的、类似移动设备设计技巧就能打造出你向往的 UI 设计。
|
||||
|
||||
[这个幻灯片][10] 详细讲述了应如何在你的 PWA 中保持 HTML/CSS/JS 的最新状态。
|
||||
|
||||
##### Web 的能力
|
||||
|
||||
Chromium 团队持续在改进浏览器体验方面努力不懈,你可以在 [Project Fugu][11] 中追踪他们在这个全方位网络功能改进项目的进展。WebKit 即持续致力于优化其浏览器体验和能力。
|
||||
|
||||
Swift API 还可以与 WKWebView 进行交互,以增强原生体验。
|
||||
|
||||
谷歌提供了一项名为 Bubblewrap 的服务,与 Trusted Web Activity(TWA)共同工作。它的作用仅是将你的基于 PWA 的网站包装在一个原生的 APK 包中,从而可以将其提交到应用商店。这就是我之前提到的关于安卓的 PWA Builder 链接的工作方式。在我之前的文章里,你可以了解更多关于 WKWebView 和 TWA 的信息。
|
||||
|
||||
##### 速度和性能
|
||||
|
||||
改进你的应用性能的方法多得数不清。你可以先从 [谷歌 PageSpeed tools][12] 进行检查。
|
||||
|
||||
#### 使用 PWA 的各种奖励:
|
||||
|
||||
- Lighthouse 得分和 SEO 的提升。
|
||||
- 统一的代码库。
|
||||
- 顺滑无阻的测试过程。
|
||||
- 对开发周期即时反馈。
|
||||
- 使用了管理型的 PaaS Web 部署流程。
|
||||
- Web 技术的学习和使用面向广大开发者。
|
||||
- 唯一一种可以提供完善网络体验的跨平台开发解决方案。
|
||||
- 自由发挥设计,不受限于跨平台框架的 UI 组件束缚。
|
||||
- 即使网络连接状况不佳,也能触达用户。
|
||||
|
||||
当然,使用 PWA 也还有一些问题需要考虑:
|
||||
|
||||
- **功能可能有限**:与原生设备使用体验相比,PWA 还有所逊色,但浏览器正在大步赶超过来。你可以查阅 [Thomas Steiner][13] 对 Project Fugu 如何弥补应用空白的论点,或者搜索 “[What web can do][14]” 查看你的浏览器能做什么。通常,你的 PWA 项目有很大可能是大部分不会因为功能/能力受限而耗尽资源的应用。
|
||||
- **标准化欠缺**:Thomas Steiner 在文章中也提及了 “PWA 标准” 的问题,目前还使我们一头雾水。这也造成 PWA 主题的混淆,使开发者在追求“心有戚戚焉”的突破瞬间时颇感困扰。缺乏明确的定义,使得 PWA 的推动力度降低,且导致营销或管理层因为无法定义 PWA,所以也就不会主动提出需要 PWA。
|
||||
- **iOS App Store 的问题**:目前的 App Store 并未列出 PWA,于是找到 PWA 就比找到原生应用困难。但这并非绝境,你依旧可以让你的网络应用提供比原生应用更棒的体验。做的好的话,你甚至能获得苹果公司的真心赞赏,因为最重要的评价标准就是提供良好的移动体验。曾经在 PWA 成为术语之前,就在原生 iOS 应用中运用 WKWebView 的 Ionic,在他们的论坛上 [分享了有趣的见解][15]。只要你懂行,便不会有任何问题。在 [我以前在 Opensource.com 上的文章][6] 的“网络应用如何进入应用市场”部分,你能找到更多内容。
|
||||
- **某些情况下的安全问题**:浏览器采用 cookie 作为认证,这种早在浏览器诞生时就已经使用的方法,可能并不适合你的项目。其中,浏览器提供了出色的密码管理,并一直在研发和引入其他认证方法,例如 [Webauthn][16]。而 [关联域][17] 中的使用提供了更多的安全层。
|
||||
|
||||
相比其他方式,我认为“网络正在崭露头角”,在未来的发展中,随着网络的新功能不断涌现,当前的缺点将逐渐被减弱。我不认为原生开发会消失,只是 WebView 和原生代码之间的集成会更加无缝。
|
||||
|
||||
### 结语
|
||||
|
||||
虽然 PWA 还在早期开发阶段,但它们有潜力彻底改变我们使用网络的方式。每天我都会看到新的网站在挑战 PWA 能做到什么。不管管理层是否知道他们正在建立一个 PWA,我经常会发现网络应用和开发团队如何扩展网络技术的使用或者选择一个优化良好的移动网站而不是原生应用,这都让我感到惊讶。
|
||||
|
||||
*(题图:DA/649961e9-b67b-487c-ba5f-c6df5f923bfb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/10/pwa-web-browser
|
||||
|
||||
作者:[Alex Borsody][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/alexborsody
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.electronjs.org/
|
||||
[2]: https://web.dev/lighthouse-pwa/
|
||||
[3]: https://opensource.com/sites/default/files/2022-10/GoogleLighthouseScore.jpg
|
||||
[4]: https://ctrl.carbonpay.io/user/login
|
||||
[5]: https://www.drupal.org/project/pwa
|
||||
[6]: https://opensource.com/article/22/6/drupal-pwa
|
||||
[7]: https://opensource.com/sites/default/files/2022-10/GoogleServiceWorkers.jpg
|
||||
[8]: https://opensource.com/sites/default/files/2022-10/GoogleManifest.jpg
|
||||
[9]: https://hotwired.dev/
|
||||
[10]: https://docs.google.com/presentation/d/1D7-H7om4Ul6nFeIX2x1oSpKCvC7LRUP3uh0r7jM3IVs/edit#slide=id.g126166aeb51_2_271
|
||||
[11]: https://developer.chrome.com/blog/fugu-status/
|
||||
[12]: https://developers.google.com/speed
|
||||
[13]: https://devm.io/javascript/project-fugu-interview-steiner-168988
|
||||
[14]: https://whatwebcando.today/
|
||||
[15]: https://forum.ionicframework.com/search?q=minimum%20functionality
|
||||
[16]: https://webauthn.io/
|
||||
[17]: https://developer.apple.com/documentation/xcode/supporting-associated-domains
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/18/235741apvgb4cks4444b2k.jpg
|
||||
@@ -0,0 +1,658 @@
|
||||
[#]: subject: "Build your own SaaS on Linux with Vely"
|
||||
[#]: via: "https://opensource.com/article/22/11/build-your-own-saas-vely"
|
||||
[#]: author: "Sergio Mijatovic https://opensource.com/users/vely"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Drwhooooo"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16462-1.html"
|
||||
|
||||
利用 Vely 在 Linux 构建你自己的 SaaS
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Vely 可让你在网络应用程序中利用 C 语言的强大功能。
|
||||
|
||||
[Vely][1] 将 C 语言的高性能和低内存占用与 PHP 等语言的易用性和安全性相结合。作为自由开源软件,它以 GPLv3 和 LGPL 3 授权,所以你甚至可以用它来构建商业软件。
|
||||
|
||||
### 利用 Vely 构建 SaaS
|
||||
|
||||
你可以使用 Vely 创建一个多租户网络应用程序,它可以作为软件即服务模式(SaaS)在互联网上运行。每个用户都有一个完全独立的数据空间。
|
||||
|
||||
在这个网络应用程序示例中,用户可以注册一个笔记本服务来创建笔记,然后查看和删除它们。它仅用了 7 个源文件,310 行代码,就展示了如何集成多项技术:
|
||||
|
||||
- MariaDB
|
||||
- 网络浏览器
|
||||
- Apache
|
||||
- Unix 套接字
|
||||
|
||||
#### 运作原理
|
||||
|
||||
以下是从用户的角度来看应用程序是如何工作的。下图是代码演示。
|
||||
|
||||
该应用允许用户通过指定电子邮件地址和密码创建新的登录名。你可以用任何你喜欢的方式设置它们,例如运用 CSS:
|
||||
|
||||
![创建一个用户账户][2]
|
||||
|
||||
验证用户的电子邮件:
|
||||
|
||||
![验证用户的电子邮件地址][3]
|
||||
|
||||
每个用户使用自己独有的用户名和密码登录:
|
||||
|
||||
![用户登录][4]
|
||||
|
||||
一旦登录,用户就可以添加笔记:
|
||||
|
||||
![用户可以添加笔记][5]
|
||||
|
||||
用户可以获取笔记列表:
|
||||
|
||||
![用户列举笔记][6]
|
||||
|
||||
删除笔记之前,应用会申请确认信息:
|
||||
|
||||
![删除笔记之前,应用会申请确认信息][7]
|
||||
|
||||
用户确认后,笔记被删除:
|
||||
|
||||
![用户确认后,笔记被删除][8]
|
||||
|
||||
#### 设置先决条件
|
||||
|
||||
遵照 [Vely.dev][9] 上的安装指示。这是一个使用 DNF、APT、Pacman 或者 Zypper 等标准工具包的快速流程。
|
||||
|
||||
由于它们都是这个范例的一部分,你必须安装 Apache 作为网络服务器,安装 MariaDB 作为数据库。
|
||||
|
||||
安装 Vely 后,如使用 Vim,打开里面的“语法高亮显示”:
|
||||
|
||||
```
|
||||
vv -m
|
||||
```
|
||||
|
||||
#### 获取源代码
|
||||
|
||||
这个演示 SaaS 应用程序的源代码是 Vely 安装的一部分。为每个应用程序创建一个单独的源代码目录不失为一个好主意(而且你可以按自己喜好命名)。在这种情况下,解包源代码会帮你完成这些工作:
|
||||
|
||||
```
|
||||
$ tar xvf $(vv -o)/examples/multitenant_SaaS.tar.gz
|
||||
$ cd multitenant_SaaS
|
||||
```
|
||||
|
||||
默认情况下,该应用程序以 `multitenant_SaaS` 命名,但你可以将其命名为任何内容(如果这么做,其他每个地方你都需要改一下)。
|
||||
|
||||
### 创建应用程序
|
||||
|
||||
第一步是创建一个应用程序。使用 Vely 的 `vf` 工具就可以轻松完成:
|
||||
|
||||
```
|
||||
$ sudo vf -i-u $(whoami) multitenant_SaaS
|
||||
```
|
||||
|
||||
这个命令创建了一个新的应用程序主目录(`/var/lib/vv/multitenant_SaaS`),并帮你执行应用程序设置。通常,这意味着在该主目录中创建各种子目录并分配权限。在这种情况下,只有当前用户(`whoami` 的结果)拥有目录,具有 `0700` 权限,这确保了其他人没有访问文件的权限。
|
||||
|
||||
### 创建数据库
|
||||
|
||||
在你键入任何代码之前,你需要一个能够存储该应用程序所用信息的空间。首先,创建一个名为 `db_multitenant_SaaS` 的 MariaDB 数据库,由用户名为 `vely` 的用户所有,密码为 `your_password` 。你可以修改刚才提到的任何值,但得记住,在这个示例里,你需要将包含这些内容的每个地方都得修改一遍。
|
||||
|
||||
在 MySQL 中以 root 身份登录:
|
||||
|
||||
```
|
||||
create database if not exists db_multitenant_SaaS;
|
||||
create user if not exists vely identified by 'your_password';
|
||||
grant create,alter,drop,select,insert,delete,update on db_multitenant_SaaS.* to vely;
|
||||
```
|
||||
|
||||
然后在数据库内创建数据库对象(表,记录等等):
|
||||
|
||||
```
|
||||
use db_multitenant_SaaS;
|
||||
source setup.sql;
|
||||
exit
|
||||
```
|
||||
|
||||
### 将 Vely 连接至数据库
|
||||
|
||||
为了让 Vely 知晓你数据库的位置以及如何登录进去,创建一个名为 `db_multitenant_SaaS` 的数据库配置文件。(该名称用于在源代码中的数据库声明,所以如果你改了它,确保在它存在的每个地方都改一遍。)
|
||||
|
||||
Vely 使用原生的 MariaDB 数据库连接,因此你可以指定给定的数据库所能允许的任何选项:
|
||||
|
||||
```
|
||||
$ echo '[client]
|
||||
user=vely
|
||||
password=your_password
|
||||
database=db_multitenant_SaaS
|
||||
protocol=TCP
|
||||
host=127.0.0.1
|
||||
port=3306' > db_multitenant_SaaS
|
||||
```
|
||||
|
||||
### 构建应用程序
|
||||
|
||||
使用 `vv` 工具构建应用程序,利用 `--db` 选项指定 MariaDB 数据库和数据库配置文件:
|
||||
|
||||
```
|
||||
$ vv -q--db=mariadb:db_multitenant_SaaS
|
||||
```
|
||||
|
||||
### 启用应用服务器
|
||||
|
||||
启动你的网络应用程序的服务器,需要使用 `vf` FastCGI 进程管理器。应用程序服务器使用 Unix 套接字与网络服务器(创建反向代理)通信:
|
||||
|
||||
```
|
||||
$ vf -w3 multitenant_SaaS
|
||||
```
|
||||
|
||||
这么做会启用三个守护进程,为接收到的请求提供服务。你也可以启动一个自适应服务器,它会增加进程的数量从而服务更多的请求,并在不需要他们时减少进程的数量:
|
||||
|
||||
```
|
||||
$ vf multitenant_SaaS
|
||||
```
|
||||
|
||||
请参阅 `vf` 了解更多选项,以帮助你实现最佳性能。
|
||||
|
||||
当你需要停止你的应用程序服务器,使用 `-m quit` 选项:
|
||||
|
||||
```
|
||||
$ vf -m quit multitenant_SaaS
|
||||
```
|
||||
|
||||
### 创建网络服务器
|
||||
|
||||
这是一个网络应用程序,那么应用程序就得需要一个网络服务器。该示例通过一个 Unix 套接字监听器使用 Apache。
|
||||
|
||||
#### 1、设置 Apache
|
||||
|
||||
将 Apache 配置为一个反向代理,并将你的应用程序与之连接,你需要启用 FastCGI 代理支持,这通常使用 `proxy` 和 `proxy_fcgi` 模块。
|
||||
|
||||
对于 Fedora 系统(或者其它的,比如 Arch)来说,通过在 Apache 配置文件 `/etc/httpd/conf/httpd.conf` 中添加(或取消注释)适当的 `LoadModule` 指令,就可启用 `proxy` 和 `proxy_fcgi` 模块。
|
||||
|
||||
以下指令适用于 Debian,Ubuntu 以及类似的系统,启用 `proxy` 和 `proxy_fcgi` 模块:
|
||||
|
||||
```
|
||||
$ sudo a2enmod proxy
|
||||
$ sudo a2enmod proxy_fcgi
|
||||
```
|
||||
|
||||
以下指令适用于 OpenSUSE,将这几行添加在 `/etc/apache2/httpd.conf` 结尾处:
|
||||
|
||||
```
|
||||
LoadModule proxy_module modules/mod_proxy.so
|
||||
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
|
||||
```
|
||||
|
||||
#### 2、配置 Apache
|
||||
|
||||
现在你必须将代理信息添加在 Apache 的配置文件中:
|
||||
|
||||
```
|
||||
ProxyPass "/multitenant_SaaS" unix:///var/lib/vv/multitenant_SaaS/sock/sock|fcgi://localhost/multitenant_SaaS
|
||||
```
|
||||
|
||||
你的配置文件的位置可能会有所不同,这取决于不同的 Linux 发行版:
|
||||
|
||||
- Fedora、CentOS、Mageia 和 Arch: `/etc/httpd/conf/httpd.conf`
|
||||
- Debian、Ubuntu、Mint: `/etc/apache2/apache2.conf`
|
||||
- OpenSUSE:`/etc/apache2/httpd.conf`
|
||||
|
||||
#### 3、重新启动
|
||||
|
||||
最后,重启 Apache。在 Fedora 和类似系统,还有 Arch Linux 是如下指令:
|
||||
|
||||
```
|
||||
$ sudo systemctl restart httpd
|
||||
```
|
||||
|
||||
在 Debian 和基于 Debian 的系统,还有 OpenSUSE 是如下指令:
|
||||
|
||||
```
|
||||
$ sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### 设置本地邮箱
|
||||
|
||||
这个示例中,电子邮件是其功能的一部分。如果你的服务器已经可以发送电子邮件了,你可以跳过这一条。此外,你可以使用本地邮箱(`myuser@localhost`)来测试它。要做到这一点,需安装 Sendmail。
|
||||
|
||||
在 Fedora 和类似系统中是如下指令:
|
||||
|
||||
```
|
||||
$ sudo dnf installsendmail
|
||||
$ sudo systemctl start sendmail
|
||||
```
|
||||
|
||||
而在 Debian 和类似系统(如 Ubuntu):
|
||||
|
||||
```
|
||||
$ sudo apt installsendmail
|
||||
$ sudo systemctl start sendmail
|
||||
```
|
||||
|
||||
当应用程序向本地用户发送电子邮件,比如说 `OS_user@localhost`,你就可以通过查看 `/var/mail/` 处(即所谓“邮件池”)来确认电子邮件是否被发送。
|
||||
|
||||
### 从浏览器访问应用服务器
|
||||
|
||||
假设你在本地运行该应用,可以通过使用 `http://127.0.0.1/multitenant_SaaS?req=notes&action=begin` 域名从你的网络服务器访问你的应用服务器。如果你在互联网上的在线服务器运行该程序,你可能就需要调整防火墙设置以允许 HTTP 通信。
|
||||
|
||||
### 源代码
|
||||
|
||||
该应用程序示例包含 7 个源文件。你可以自行回顾代码(记住,这些文件只有 310 行代码),下面是每个文件的概述。
|
||||
|
||||
#### SQL 设置(setup.sql)
|
||||
|
||||
创建的两个表:
|
||||
|
||||
- `users`:每个用户的信息。在 `users` 表中,每个用户都有自己唯一的 ID (`userId` 列),以及其他信息,如电子邮件地址和该地址是否通过了验证。还有一个哈希密码。实际的密码永远不会存储在纯文本(或其他形式)中,单向哈希用于检查密码。
|
||||
- `notes`:用户输入的笔记。`notes` 表包含了所有的笔记,每个笔记都有一个 `userId` 列,表示哪个用户拥有它们。`userId` 列的值与 `users` 表中的同名列匹配。这样,每个笔记显然都属于单个用户。
|
||||
|
||||
该文件内容如下:
|
||||
|
||||
```
|
||||
create table if not exists notes (dateOf datetime, noteId bigint auto_increment primary key, userId bigint, note varchar(1000));
|
||||
create table if not exists users (userId bigint auto_increment primary key, email varchar(100), hashed_pwd varchar(100), verified smallint, verify_token varchar(30), session varchar(100));
|
||||
create unique index if not exists users1 on users (email);
|
||||
```
|
||||
|
||||
#### 运行时数据(login.h)
|
||||
|
||||
为了正确地显示登录、注册和注销链接,你需要一些在应用程序中任何地方都可以使用的标志。此外,应用程序使用 cookie 来维护会话,因此它需要在任何地方都可用,例如,验证会话是否有效。发送到应用程序的每个请求都以这种方式进行确认。只有带有可验证 cookie 的请求是允许的。
|
||||
|
||||
所以要做到这种效果,你需要有一个 `global_request_data` 类型的 `reqdata`(请求数据),其中包含 `sess_userId`(用户的 ID)以及 `sess_id`(用户目前的会话 ID)。此外,还有一些不言自明的标志,可以帮助渲染页面:
|
||||
|
||||
```
|
||||
#ifndef _VV_LOGIN
|
||||
#define _VV_LOGIN
|
||||
|
||||
typedef struct s_reqdata {
|
||||
bool displayed_logout; // true 则显示登出连接
|
||||
bool is_logged_in; // true 则会话已验证登录
|
||||
char *sess_userId; // 目前会话的用户 ID
|
||||
char *sess_id; // 会话 ID
|
||||
} reqdata;
|
||||
|
||||
void login_or_signup ();
|
||||
|
||||
#endif
|
||||
```
|
||||
|
||||
#### 会话检查和会话数据(_before.vely)
|
||||
|
||||
Vely 里有一个 <ruby>请求前处理程序<rt>before_request handler</rt></ruby> 的概念。你写的代码会在其它处理请求的代码之前执行的。要达到这个目的,你只需要将这样的代码写在名为 `_before.vely` 的文件中,然后剩余的部分将会自动处理。
|
||||
|
||||
SaaS 应用程序所作的任何事情,例如处理发送至应用程序的请求,必须验证其安全性。这样,应用程序就能知晓调用方是否有执行操作所需要的权限。
|
||||
|
||||
在这里,通过请求前处理程序进行权限检查。这样,无论其他代码如何处理请求,都已经掌握了会话信息。
|
||||
|
||||
为保持会话数据(比如会话 ID 和用户 ID)在你代码中的任何地方都可用,你可以使用 `global_request_data`。它只是一个指向内存的通用指针(`void*`),任何处理请求的代码都可以访问它。这非常适合处理会话,如下所示:
|
||||
|
||||
```
|
||||
#include "vely.h"
|
||||
#include "login.h"
|
||||
|
||||
// _before() 是一个请求前处理程序。
|
||||
// 它总是在处理请求的其他代码之前执行。
|
||||
// 对于任何类型的请求范围设置或数据初始化,它都是一个很好的位置。
|
||||
void _before() {
|
||||
// 输出 HTTP 请求头
|
||||
out-header default
|
||||
reqdata *rd; // 这是全局请求数据,见 login.h
|
||||
// 为全局请求数据分配内存,
|
||||
// 将在请求结束时自动释放
|
||||
new-mem rd size sizeof(reqdata)
|
||||
// 初始化标志
|
||||
rd->displayed_logout = false;
|
||||
rd->is_logged_in = false;
|
||||
// 将我们创建的数据设置为全局请求数据,
|
||||
// 可以从任何处理请求的代码中访问
|
||||
set-req data rd
|
||||
// 检查会话是否存在(基于来自客户端的 cookie)
|
||||
// 这在任何其他请求处理代码之前执行,
|
||||
// 使其更容易准备好会话信息
|
||||
_check_session ();
|
||||
}
|
||||
```
|
||||
|
||||
#### 检查会话是否有效(_check_session.vely)
|
||||
|
||||
多租户 SaaS 应用程序中最重要的任务之一就是通过检查用户是否登录来(尽快)检查会话是否有效。这是通过从客户端(例如网络浏览器)获取会话 ID 和用户 ID 的 cookie,并将它们与存储会话的数据库进行比较来实现的:
|
||||
|
||||
```
|
||||
#include "vely.h"
|
||||
#include "login.h"
|
||||
|
||||
|
||||
// 检查会话是否有效
|
||||
void _check_session () {
|
||||
// 获取全局请求数据
|
||||
reqdata *rd;
|
||||
get-req data to rd
|
||||
// 自用户浏览器获取 cookies
|
||||
get-cookie rd->sess_userId="sess_userId"
|
||||
get-cookie rd->sess_id="sess_id"
|
||||
if (rd->sess_id[0] != 0) {
|
||||
// 检查给定用户 ID 下的会话 ID 是否正确
|
||||
char *email;
|
||||
run-query @db_multitenant_SaaS = "select email from users where userId='%s' and session='%s'" output email : rd->sess_userId, rd->sess_id row-count define rcount
|
||||
query-result email to email
|
||||
end-query
|
||||
if (rcount == 1) {
|
||||
// 如果正确,设置登录标志
|
||||
rd->is_logged_in = true;
|
||||
// 如果登出链接不显示,则显示它
|
||||
if (rd->displayed_logout == false) {
|
||||
@Hi <<p-out email>>! <a href="https://opensource.com/?req=login&action=logout">Logout</a><br/>
|
||||
rd->displayed_logout = true;
|
||||
}
|
||||
} else rd->is_logged_in = false;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 注册、登录、登出(login.vely)
|
||||
|
||||
任何多租户系统的基础便是具有用户注册\登录和登出的功能。通常情况下,注册包括验证电子邮件地址;不止于此,同一电子邮件地址会作为一个用户名。这里就是这种情况。
|
||||
|
||||
这里实现了几个执行该功能所必须的子请求:
|
||||
|
||||
- 注册新用户时,显示 HTML 表单以收集信息。它的 URL 请求签名是 `req=login&action=newuser`。
|
||||
- 作为对注册表单的响应,创建一个新用户。URL 请求的签名是 `req=login&action=createuser`。输入参数(`input-param`)信号获取 `email` 和 `pwd` 的 POST 表单字段。密码值是单向散列,电子邮件验证令牌是一个随机的 5 位数字。这些被插入到 `users` 表中,创建一个新用户。系统会发送一封验证邮件,并提示用户阅读邮件并输入代码。
|
||||
- 通过输入发送到该电子邮件的验证码来验证电子邮件。URL 请求的签名是 `req=login&action=verify`。
|
||||
- 显示一个登录表单,让用户登录。URL 请求的签名是 `req=login`(例如,`action` 为空)。
|
||||
- 通过验证电子邮件地址(用户名)和密码登录。URL 请求的签名是 `req=login&action=login`。
|
||||
- 应用户要求登出。URL 请求的签名是 `req=login&action=logout`。
|
||||
- 应用程序的登录页。URL 请求的签名是 `req=login&action=begin`。
|
||||
- 如果用户当前已登录,转到应用程序的登录页面。
|
||||
|
||||
可以看看下面这些例子:
|
||||
|
||||
```
|
||||
#include "vely.h"
|
||||
#include "login.h"
|
||||
|
||||
// 处理云端多租户应用程序的会话维护、登录、注销、会话验证
|
||||
void login () {
|
||||
// 获取 URL 的输入参数 `action`
|
||||
input-param action
|
||||
|
||||
// 获取全局请求数据,我们在其中记录会话信息,所以它很方便
|
||||
reqdata *rd;
|
||||
get-req data to rd
|
||||
|
||||
// 如果会话已经建立,我们不会
|
||||
// 继续到应用程序主页的唯一原因是我们正在登出
|
||||
if (rd->is_logged_in) {
|
||||
if (strcmp(action, "logout")) {
|
||||
_show_home();
|
||||
exit-request
|
||||
}
|
||||
}
|
||||
|
||||
// 应用程序页面启动。显示登录或注册的链接,
|
||||
// 并显示适当的主屏幕
|
||||
if (!strcmp (action, "begin")) {
|
||||
_show_home();
|
||||
exit-request
|
||||
|
||||
// 开始创建新用户。询问电子邮件和密码,
|
||||
// 然后提交此表单时创建用户。
|
||||
} else if (!strcmp (action, "newuser")) {
|
||||
@Create New User<hr/>
|
||||
@<form action="https://opensource.com/?req=login" method="POST">
|
||||
@<input name="action" type="hidden" value="createuser">
|
||||
@<input name="email" type="text" value="" size="50" maxlength="50" required autofocus placeholder="Email">
|
||||
@<input name="pwd" type="password" value="" size="50" maxlength="50" required placeholder="Password">
|
||||
@<input type="submit" value="Sign Up">
|
||||
@</form>
|
||||
|
||||
// 验证用户发送到电子邮件的代码。代码必须匹配,从而验证电子邮件地址
|
||||
} else if (!strcmp (action, "verify")) {
|
||||
input-param code
|
||||
input-param email
|
||||
// 获取基于电子邮件的验证令牌
|
||||
run-query @db_multitenant_SaaS = "select verify_token from users where email='%s'" output db_verify : email
|
||||
query-result db_verify to define db_verify
|
||||
// 将数据库中记录的令牌与用户提供的令牌进行比较
|
||||
if (!strcmp (code, db_verify)) {
|
||||
@Your email has been verifed. Please <a href="https://opensource.com/?req=login">Login</a>.
|
||||
// 如果匹配,更新用户信息以表明已验证。
|
||||
run-query @db_multitenant_SaaS no-loop = "update users set verified=1 where email='%s'" : email
|
||||
exit-request
|
||||
}
|
||||
end-query
|
||||
@Could not verify the code. Please try <a href="https://opensource.com/?req=login">again</a>.
|
||||
exit-request
|
||||
|
||||
// 创建用户 —— 当用户使用电子邮件和密码提交表单以创建用户时运行
|
||||
} else if (!strcmp (action, "createuser")) {
|
||||
input-param email
|
||||
input-param pwd
|
||||
// 创建散列(单向)密码
|
||||
hash-string pwd to define hashed_pwd
|
||||
// 生成随机的 5 位数字字符串验证代码
|
||||
random-string to define verify length 5 number
|
||||
// 创建用户:插入电子邮件、哈希密码、验证令牌。当前验证状态为 0,或未验证
|
||||
begin-transaction @db_multitenant_SaaS
|
||||
run-query @db_multitenant_SaaS no-loop = "insert into users (email, hashed_pwd, verified, verify_token, session) values ('%s', '%s', '0', '%s', '')" : email, hashed_pwd, verify affected-rows define arows error define err on-error-continue
|
||||
if (strcmp (err, "0") || arows != 1) {
|
||||
// 如果不能添加用户,则可能该用户不存在。不管怎样,我们都无法继续。
|
||||
login_or_signup();
|
||||
@User with this email already exists.
|
||||
rollback-transaction @db_multitenant_SaaS
|
||||
} else {
|
||||
// 创建带有验证码的电子邮件并将其发送给用户
|
||||
write-string define msg
|
||||
@From: vely@vely.dev
|
||||
@To: <<p-out email>>
|
||||
@Subject: verify your account
|
||||
@
|
||||
@Your verification code is: <<p-out verify>>
|
||||
end-write-string
|
||||
exec-program "/usr/sbin/sendmail" args "-i", "-t" input msg status define st
|
||||
if (st != 0) {
|
||||
@Could not send email to <<p-out email>>, code is <<p-out verify>>
|
||||
rollback-transaction @db_multitenant_SaaS
|
||||
exit-request
|
||||
}
|
||||
commit-transaction @db_multitenant_SaaS
|
||||
// 通知用户查看邮件并输入验证码
|
||||
@Please check your email and enter verification code here:
|
||||
@<form action="https://opensource.com/?req=login" method="POST">
|
||||
@<input name="action" type="hidden" value="verify" size="50" maxlength="50">
|
||||
@<input name="email" type="hidden" value="<<p-out email>>">
|
||||
@<input name="code" type="text" value="" size="50" maxlength="50" required autofocus placeholder="Verification code">
|
||||
@<button type="submit">Verify</button>
|
||||
@</form>
|
||||
}
|
||||
|
||||
// 这里在登录用户登出时运行
|
||||
} else if (!strcmp (action, "logout")) {
|
||||
// 更新用户表以清除会话,即没有该用户登录
|
||||
if (rd->is_logged_in) {
|
||||
run-query @db_multitenant_SaaS = "update users set session='' where userId='%s'" : rd->sess_userId no-loop affected-rows define arows
|
||||
if (arows == 1) {
|
||||
rd->is_logged_in = false; // 提示用户未登录
|
||||
@You have been logged out.<hr/>
|
||||
}
|
||||
}
|
||||
_show_home();
|
||||
|
||||
// 登录:当用户输入用户名和密码时运行
|
||||
} else if (!strcmp (action, "login")) {
|
||||
input-param pwd
|
||||
input-param email
|
||||
// 创建单向散列,目的是与用户表进行比较 —— 密码**永远不会**被记录
|
||||
hash-string pwd to define hashed_pwd
|
||||
// 为会话 ID 创建一个随机的 30 位长的字符串
|
||||
random-string to rd->sess_id length 30
|
||||
// 检查用户名和哈希密码是否匹配
|
||||
run-query @db_multitenant_SaaS = "select userId from users where email='%s' and hashed_pwd='%s'" output sess_userId : email, hashed_pwd
|
||||
query-result sess_userId to rd->sess_userId
|
||||
// 如果匹配,使用会话 ID 更新用户表
|
||||
run-query @db_multitenant_SaaS no-loop = "update users set session='%s' where userId='%s'" : rd->sess_id, rd->sess_userId affected-rows define arows
|
||||
if (arows != 1) {
|
||||
@Could not create a session. Please try again. <<.login_or_signup();>> <hr/>
|
||||
exit-request
|
||||
}
|
||||
// 设置“用户 ID”和“会话 ID”为 cookie。用户的浏览器将在每个请求中返回这些信息
|
||||
set-cookie "sess_userId" = rd->sess_userId
|
||||
set-cookie "sess_id" = rd->sess_id
|
||||
// 显示主页,确保会话是正确的,并设置标志
|
||||
_check_session();
|
||||
_show_home();
|
||||
exit-request
|
||||
end-query
|
||||
@Email or password are not correct. <<.login_or_signup();>><hr/>
|
||||
|
||||
// 登录界面,要求用户输入用户名和密码
|
||||
} else if (!strcmp (action, "")) {
|
||||
login_or_signup();
|
||||
@Please Login:<hr/>
|
||||
@<form action="https://opensource.com/?req=login" method="POST">
|
||||
@<input name="action" type="hidden" value="login" size="50" maxlength="50">
|
||||
@<input name="email" type="text" value="" size="50" maxlength="50" required autofocus placeholder="Email">
|
||||
@<input name="pwd" type="password" value="" size="50" maxlength="50" required placeholder="Password">
|
||||
@<button type="submit">Go</button>
|
||||
@</form>
|
||||
}
|
||||
}
|
||||
|
||||
// 显示登录或注册链接
|
||||
void login_or_signup() {
|
||||
@<a href="https://opensource.com/?req=login">Login</a> & & <a href="https://opensource.com/?req=login&action=newuser">Sign Up</a><hr/>
|
||||
}
|
||||
```
|
||||
|
||||
#### 通用应用程序(_show_home.vely)
|
||||
|
||||
借助本教程,你可以创建你想要的任何多租户 SaaS 应用程序。上面的多租户处理模块(`login.vely`)调用 `_show_home()` 函数,它可以容纳你的任何代码。这个示例代码展示了笔记应用程序,但它可以是任何内容。`_show_home()` 函数可以调用你想要的任何代码,它是一个通用的多租户应用程序插件:
|
||||
|
||||
```
|
||||
#include "vely.h"
|
||||
|
||||
void _show_home() {
|
||||
notes();
|
||||
exit-request
|
||||
}
|
||||
```
|
||||
|
||||
#### 笔记应用程序(notes.vely)
|
||||
|
||||
该应用程序能够添加、列举以及删除任何给定的笔记:
|
||||
|
||||
```
|
||||
#include "vely.h"
|
||||
#include "login.h"
|
||||
|
||||
// 多租户云中的笔记应用程序
|
||||
void notes () {
|
||||
// 获取全局请求数据
|
||||
reqdata *rd;
|
||||
get-req data to rd
|
||||
// 如果会话有效,显示登录或注册
|
||||
if (!rd->is_logged_in) {
|
||||
login_or_signup();
|
||||
}
|
||||
// 问候用户
|
||||
@<h1>Welcome to Notes!</h1><hr/>
|
||||
// 如果没有登出,退出 —— 这里确保对用户身份的安全验证
|
||||
if (!rd->is_logged_in) {
|
||||
exit-request
|
||||
}
|
||||
// 获取 URL 参数,告诉笔记要做什么
|
||||
input-param subreq
|
||||
// 显示笔记能够做什么操作(添加或列举笔记)
|
||||
@<a href="https://opensource.com/?req=notes&subreq=add">Add Note</a> <a href="https://opensource.com/?req=notes&subreq=list">List Notes</a><hr/>
|
||||
|
||||
// 列举该用户的所有笔记
|
||||
if (!strcmp (subreq, "list")) {
|
||||
// **只**选取该用户的笔记
|
||||
run-query @db_multitenant_SaaS = "select dateOf, note, noteId from notes where userId='%s' order by dateOf desc" : rd->sess_userId output dateOf, note, noteId
|
||||
query-result dateOf to define dateOf
|
||||
query-result note to define note
|
||||
query-result noteId to define noteId
|
||||
// 使用快速缓存正则表达式将新行更改为<br/>
|
||||
match-regex "\n" in note replace-with "<br/>\n" result define with_breaks status define st cache
|
||||
if (st == 0) with_breaks = note; // 什么都没有发现/替换,只用原来的
|
||||
// 显示笔记
|
||||
@Date: <<p-out dateOf>> (<a href="https://opensource.com/?req=notes&subreq=delete_note_ask¬e_id=%3C%3Cp-out%20noteId%3E%3E">delete note</a>)<br/>
|
||||
@Note: <<p-out with_breaks>><br/>
|
||||
@<hr/>
|
||||
end-query
|
||||
}
|
||||
|
||||
// 要求删除笔记
|
||||
else if (!strcmp (subreq, "delete_note_ask")) {
|
||||
input-param note_id
|
||||
@Are you sure you want to delete a note? Use Back button to go back, or <a href="https://opensource.com/?req=notes&subreq=delete_note¬e_id=%3C%3Cp-out%20note_id%3E%3E">delete note now</a>.
|
||||
}
|
||||
|
||||
// 删除笔记
|
||||
else if (!strcmp (subreq, "delete_note")) {
|
||||
input-param note_id
|
||||
// 删除笔记
|
||||
run-query @db_multitenant_SaaS = "delete from notes where noteId='%s' and userId='%s'" : note_id, rd->sess_userId affected-rows define arows no-loop error define errnote
|
||||
// 告知用户状态
|
||||
if (arows == 1) {
|
||||
@Note deleted
|
||||
} else {
|
||||
@Could not delete note (<<p-out errnote>>)
|
||||
}
|
||||
}
|
||||
|
||||
// 添加笔记
|
||||
else if (!strcmp (subreq, "add_note")) {
|
||||
// 从 note 表单中获取 URL POST 数据
|
||||
input-param note
|
||||
// 在该用户的 ID 下插入笔记
|
||||
run-query @db_multitenant_SaaS = "insert into notes (dateOf, userId, note) values (now(), '%s', '%s')" : rd->sess_userId, note affected-rows define arows no-loop error define errnote
|
||||
// 告知用户状态
|
||||
if (arows == 1) {
|
||||
@Note added
|
||||
} else {
|
||||
@Could not add note (<<p-out errnote>>)
|
||||
}
|
||||
}
|
||||
|
||||
// 显示一个 HTML 表单来收集笔记,并将其发送回这里(使用 subreq="add_note" URL 参数)
|
||||
else if (!strcmp (subreq, "add")) {
|
||||
@Add New Note
|
||||
@<form action="https://opensource.com/?req=notes" method="POST">
|
||||
@<input name="subreq" type="hidden" value="add_note">
|
||||
@<textarea name="note" rows="5" cols="50" required autofocus placeholder="Enter Note"></textarea>
|
||||
@<button type="submit">Create</button>
|
||||
@</form>
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 具有 C 性能的 SaaS
|
||||
|
||||
Vely 语言使得 C 语言在你的网络应用程序中得到充分利用这件事成为可能。多租户 SaaS 应用程序便是从中受益的一个典型用例。
|
||||
|
||||
看一看参考代码示例,写一写代码,然后试试 Vely。
|
||||
|
||||
*(题图:DA/126624c8-1a47-481b-b149-92273e8e0f4f)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/11/build-your-own-saas-vely
|
||||
|
||||
作者:[Sergio Mijatovic][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Drwhooooo](https://github.com/Drwhooooo)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/vely
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/article/22/5/write-c-appplications-vely-linux
|
||||
[2]: https://opensource.com/sites/default/files/2022-10/1createuser.png
|
||||
[3]: https://opensource.com/sites/default/files/2022-10/2verifyemail.png
|
||||
[4]: https://opensource.com/sites/default/files/2022-10/3login.png
|
||||
[5]: https://opensource.com/sites/default/files/2022-10/4addnote.png
|
||||
[6]: https://opensource.com/sites/default/files/2022-10/5listnotes.png
|
||||
[7]: https://opensource.com/sites/default/files/2022-10/6confirmdelete.png
|
||||
[8]: https://opensource.com/sites/default/files/2022-10/7notedeleted.png
|
||||
[9]: https://vely.dev/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/12/110902myyfcm3hdmwqv3zy.jpg
|
||||
105
published/202312/20230102 AI- An Introduction to Probability.md
Normal file
105
published/202312/20230102 AI- An Introduction to Probability.md
Normal file
@@ -0,0 +1,105 @@
|
||||
[#]: subject: "AI: An Introduction to Probability"
|
||||
[#]: via: "https://www.opensourceforu.com/2023/01/ai-an-introduction-to-probability/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16485-1.html"
|
||||
|
||||
人工智能教程(四):概率论入门
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
在本系列的 [上一篇文章](https://linux.cn/article-16436-1.html) 中,我们进一步讨论了矩阵和线性代数,并学习了用 JupyterLab 来运行 Python 代码。在本系列的第四篇文章中,我们将开始学习 TensorFlow,这是一个非常强大的人工智能和机器学习库。我们也会简要介绍一些其它有用的库。稍后,我们将讨论概率、理论以及代码。和往常一样,我们先讨论一些能拓宽我们对人工智能的理解的话题。
|
||||
|
||||
到目前为止,我们只是从技术方面讨论人工智能。随着越来越多的人工智能产品投入使用,现在是时候分析人工智能的社会影响了。想象一个找工作的场景,如果你的求职申请由人来处理,在申请被拒绝时,你可以从他们那里得到反馈,比如被拒的理由。如果你的求职申请由人工智能程序处理,当你的申请被拒绝时,你不能要求该人工智能软件系统提供反馈。在这种情况下,你甚至不能确定你的申请被拒绝是否确实是仅基于事实的决定。这明确地告诉我们,从长远来看,我们需要的不仅仅是魔法般的结果,还需要人工智能具有 <ruby>责任<rt>accountability</rt></ruby> 和 <ruby>保证<rt>guarantee</rt></ruby>。(LCTT 译注:责任主要指确保系统的决策过程是透明的、可解释的,并且对系统的行为负责。保证是指对于系统性能指标和行为的一种承诺或者预期。)目前有很多试图回答这些问题的研究。
|
||||
|
||||
人工智能的应用也会引发许多道德和伦理上的问题。我们不必等到强人工智能(也被称为 <ruby>通用人工智能<rt>artificial general intelligence</rt></ruby> —— AGI)出现才研究它的社会影响。我们可以通过思想实验来探究人工智能的影响。想象你在一个雨夜你驾车行驶在有发夹完的道路上,突然你眼前有人横穿马路,你的反应是什么?如果你突然刹车或转向,你自己的生命将处于极大的危险之中。但如果你不这样做,过马路的人恐怕凶多吉少。因为我们人类具有自我牺牲的特质,在决策的瞬间,即使是最自私的人也可能决定救行人。但我们如何教会人工智能系统模仿这种行为呢?毕竟从纯粹的逻辑来看,自我牺牲是一个非常糟糕的选择。
|
||||
|
||||
同样的场景下,如果汽车是由人工智能软件在驾驶会发生什么呢?既然你是汽车的主人,那么人工智能软件理应把你的安全放在首位,它甚至全不顾其他乘客的安全。很容易看出,如果世界上所有的汽车都由这样的软件控制的话将导致彻底的混乱。现在,如果进一步假设乘坐自动驾驶汽车的乘客身患绝症。那么对于一个数学机器来说,为了行人牺牲乘客是合乎逻辑的。但对于我们这些有血有肉的人却不见得如此。你可以花点时间思考一下其它场景,注重逻辑的机器和热血的人类都会做出什么样的决策。
|
||||
|
||||
有很多书籍和文章在讨论人工智能全面运作后的政治、社会和伦理方面的问题。但对于我们这些普通人和计算机工程师来说,读所有的书都是不必要的。然而,由于人工智能的社会意义如此重要,我们也不能轻易搁置这个问题。为了了解人工智能的社会政治方面,我建议你通过几部电影来理解人工智能(强人工智能)如何影响我们所有人。<ruby>斯坦利·库布里克<rt>Stanley Kubrick</rt></ruby>的杰作《<ruby>2001:太空漫游<rt>2001: A Space Odyssey</rt></ruby>》是最早描绘超级智能生物如何俯视我们人类的电影之一。这部电影中人工智能认为人类是世界最大的威胁,并决定毁灭人类。事实上,有相当多的电影都在探索这种情节。由伟大的艺术大师<ruby>史蒂文·斯皮尔伯格<rt>Steven Spielberg</rt></ruby>亲自执导的《<ruby>人工智能<rt>Artificial Intelligence</rt></ruby>》,探讨了人工智能机器如何与人类互动。另一部名为《<ruby>机械姬<rt>Ex Machina</rt></ruby>》的电影详细阐述了这一思路,讲述了具有人工智能的机器。在我看来这些都是了解人工智能的影响必看的电影。
|
||||
|
||||
最后思考一下,试想如果马路上的汽车使用来自制造商的不同的自动驾驶规则和人工智能,这将导致彻底的混乱。
|
||||
|
||||
### TensorFlow 入门
|
||||
|
||||
TensorFlow 是由 <ruby>谷歌大脑<rt>Google Brain</rt></ruby> 团队开发的一个自由开源的库,使用 Apache 2.0 许可证。TensorFlow 是开发人工智能和机器学习程序的重量级的库。除了 Python 之外,TensorFlow 还提供 C++、Java、JavaScript 等编程语言的接口。在我们进一步讨论之前,有必要解释一下 <ruby>张量<rt>tensor</rt></ruby> 是什么。如果你熟悉物理学,张量这个词对你来说可能并不陌生。但如果你不知道张量是什么也不用担心,现阶段把它看作多维数组就行了。当然,这是一种过度简化的理解。TensorFlow 可以在 NumPy 提供的多维数组之上运行。
|
||||
|
||||
首先,我们要在 JupyterLab 中安装 TensorFlow。TensorFlow 有 GPU 版本和 CPU 版本两种安装类型可以选择。这主要取决于你的系统是否有合适的 GPU。GPU 是一种利用并行处理来加快图像处理速度的电路。它被广泛用在游戏和设计领域,在开发人工智能和机器学习程序时也是必不可少的硬件。但一个不太好的消息是 TensorFlow 只兼容英伟达的 GPU。此外,你需要在系统中安装一个称为 CUDA(<ruby>计算统一设备架构<rt>compute unified device architecture</rt></ruby>)的并行计算平台。如果你的系统满足这些要求,那么在 JupyterLab 上执行命令 `pip install tensorflow-gpu` 来安装 GPU 版本的 TensorFlow。如果你系统的 GPU 配置无法满足要求,当你尝试使用 TensorFlow 时,会得到如下错误消息:“CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected”。此时使用 `pip uninstall tensorflow-gpu` 卸载 GPU 版本的 TensorFlow。然后执行命令 `pip install tensorflow` 安装 CPU 版本的 TensorFlow。现在 TensorFlow 就准备就绪了。请注意,目前我们将讨论限制在 CPU 和 TensorFlow 上。
|
||||
|
||||
![图 1:第一个使用 TensorFlow 的 Python 脚本][1]
|
||||
|
||||
现在,让我们运行第一个由 TensorFlow 驱动的 Python 代码。图 1 显示了一个简单的 Python 脚本及其在 JupyterLab 上执行时的输出。前两行代码将库 NumPy 和 TensorFlow 导入到 Python 脚本中。顺便一提,如果你想在 Jupyter Notebook 单元中显示行号,单击菜单 “<ruby>查看<rt>View</rt></ruby> > <ruby>显示行号<rt>Show Line Numbers</rt></ruby>”。第 3 行使用 NumPy 创建了一个名为 `arr` 的数组,其中包含三个元素。第 4 行代码将数组 `arr` 的每个元素乘 3,将结果存储在一个名为 `ten` 的变量中。第 5 行和第 6 行分别打印变量 `arr` 和 `ten` 的类型。从代码的输出中可以看到,`arr` 和 `ten` 的类型是不同的。第 7 行打印变量 `ten` 的值。注意,`ten` 的形状与数组 `arr` 的形状是相同的。 数据类型 `int64` 在本例中用于表示整数。这使得本例中 NumPy 和 TensorFlow 数据类型之间的无缝转换成为可能。
|
||||
|
||||
TensorFlow 支持很多操作和运算。随着处理的数据量的增加,这些操作会变得越来越复杂。TensorFlow 支持常见的算术运算,比如乘法、减法、除法、幂运算、模运算等。如果参与运算的是列表或元组,TensorFlow 会逐元素执行该操作。
|
||||
|
||||
![图 2:TensorFlow 中的逐元素操作][2]
|
||||
|
||||
TensorFlow 还支持逻辑运算、关系运算和位运算。这里的操作也是按元素执行的。图 2 显示了执行这些按元素操作的 Python 脚本。第 1 行代码从列表创建一个张量,并将其存储在变量 `t1` 中。TensorFlow 的函数 `constant()` 用于从 Python 对象(如列表、元组等)创建张量。类似地,第 2 行创建了另一个张量 `t2`。第 3 行和第 4 行都是执行逐元素求幂并打印输出。从图 2 中可以清楚地看出,该求幂的结果是相同的。第 5 行代码比较张量 `t1` 和 `t2` 的元素并打印结果。输出中的 `[True True False]` 分别是对应 3>2、4>3 和 2>6 的结果。第 6 行的输出与之类似。
|
||||
|
||||
![图 3:TensorFlow 矩阵乘法][3]
|
||||
|
||||
图 3 展示了 TensorFlow 处理矩阵的例子。第 1 行和第 3 行分别构造两个矩阵 `x` 和 `y`,第 2 行和第 4 行分别打印矩阵 `x` 和 `y`的形状。代码的输出显示 `x` 的形状为 `(3,3)`,`y` 的形状为 `(3,)`。从本系列前面介绍的矩阵知识,我们知道这两个矩阵是不能相乘的。
|
||||
|
||||
因此,在第 5 行中将矩阵 `y` 增加了一个维度。在第 6 行,再次打印矩阵 `y` 的形状,输出结果为 `(3,1)`。现在矩阵 `x` 和 `y` 可以相乘了。第 7 行中,将矩阵相乘并打印输出。注意,类似的操作也可以在张量上执行,即使张量的维数很高,TensorFlow 也可以很好地扩展。在本系列的后续文章中,我们将更多地了解 TensorFlow 支持的数据类型和其他复杂操作。
|
||||
|
||||
既然介绍了 TensorFlow,我想我也应该提一下 Keras。它为 TensorFlow 提供 Python 接口。在后续的文章中,我们将专门介绍 Keras。
|
||||
|
||||
我们如何利用非英伟达 GPU 的能力呢?有许多功能强大的软件包可以做到这一点。比如 PyOpenCL,一个在 Python 中编写并行程序的框架。它让我们可以使用 OpenCL(<ruby>开放计算语言<rt>open computing language</rt></ruby>)。OpenCL 可以与 AMD、Arm、英伟达等厂商的 GPU 进行交互。当然还有其他选择,比如 Numba。它是一种JIT 编译器,可用在代码执行期间将 Python 代码编译为机器码。如果 GPU 可用,Numba 允许代码使用的 GPU 能力。图 4 是展示了使用 Numba 的 Python 代码。
|
||||
|
||||
我们可以看到函数 `fun()` 具有允许并行化的特征。从图 4 中可以看到,代码在不使用和使用 Numba 的情况下的答案是相同的。但是我们可以看到所花费的执行时间是不同的。当使用 Numba 并行化代码时,只花费了不到一半的时间。此外随着问题规模的增加,并行化和非并行化版本所花费的时间之间的差距也将增加。
|
||||
|
||||
![图 4:使用 Numba 进行并行化][4]
|
||||
|
||||
### SymPy 入门
|
||||
|
||||
SymPy 是一个用于符号计算的 Python 库。通过图 5 中的例子,让我们试着理解什么是符号计算。它使用 SymPy 提供的函数 `Integral()`来求积分。图 5 也显示了这个符号计算的输出。注意,SciPy 提供的 `integrate()` 函数返回数值计算结果,而 SymPy 的 `Integral()` 函数能提供精确的符号结果表达式。人工智能和机器学习程序开发中会用到一些统计学操作,SymPy 在执行这些操作时非常有用。
|
||||
|
||||
![图 5:符号计算的例子][5]
|
||||
|
||||
在本系列的下一篇文章中,我们将讨论 Theano。Theano 是一个 Python 库和优化编译器,用于计算数学表达式。
|
||||
|
||||
### 概率论入门
|
||||
|
||||
现在是概率论出场的时候了,它是人工智能和机器学习的另一个重要话题。对概率论的详细讨论超出了本系列的范围。我强烈建议在继续阅读之前,先通过维基百科上关于“概率”、“贝叶斯定理”和“标准差”的文章了解一些重要的术语和概念,如概率、独立事件、互斥事件、条件概率、贝叶斯定理、均值、标准差等。学习完这些后,你将能够轻松理解后面关于概率的讨论。
|
||||
|
||||
我们从概率分布开始讲起。根据维基百科的说法,“概率分布是一个数学函数,它能给出一个实验中不同的可能结果发生的概率”。现在,让我们试着理解什么是概率分布函数。最著名的概率分布函数是正态分布,通常也称为高斯分布(以伟大的数学家高斯的名字命名)。正态分布函数的图像是一条钟形曲线。图 6 是一个钟形曲线的例子。钟形曲线的确切形状取决于均值和标准差。让我们试着通过分析一种自然现象来理解钟形曲线。从网上可以查到,中国男性的平均身高约为1.7米。在我们周围的到多数男性的身高都非常接近这个数字。你看到一个身高低于1.4米或高于2米的男人的可能性很小。如果记录 100 万人的身高,然后以横轴为身高,纵轴为该身高的人数,绘制统计结果,你会发现绘制出的图像近似为钟形曲线,其中只有一些轻微的倾斜和弯曲。因此,正态分布很容易地捕捉到自然现象的概率特征。
|
||||
|
||||
![图 6:钟形曲线(图像来源:维基百科)][6]
|
||||
|
||||
现在,我们来看一个使用正态分布的例子。图 7 的代码中我们使用 NumPy 的正态分布的函数 `normal()`,然后使用 Matplotlib 进行绘图。从第 3 行我们可以看到样本大小为 1000。第 4 行绘制一个包含 1000 个 <ruby>桶<rt>bin</rt></ruby> 的直方图。但是图 7 的钟形曲线与图 6 中看到的钟形曲线相差很大。究其原因是我们的样本数量只有 1000。样本量应该足够大才能获得更清晰的图像。将第 3 行代码替换为 `sample = normal(size=100000000)`,行并再次执行程序。图 8 显示了一条更好的钟形曲线。这一次,我们的样本大小为 100,000,000,钟形曲线与图 6 所示非常相似。正态分布和钟形曲线只是开始。在下一篇文章中,我们将讨论可以概括其他事件和自然现象的概率分布函数。下一次,我们还将更正式地讨论这个主题。
|
||||
|
||||
![图 7:绘制钟形曲线][7]
|
||||
|
||||
本篇的内容就到此结束了。在下一篇文章中,我们将继续探索概率和统计中的一些概念。我们还将安装和使用 Anaconda,这是一个用于科学计算的 Python 发行版,对于开发人工智能、机器学习和数据科学程序特别有用。如前所述,我们还将熟悉另一个名为 Theano 的 Python 库,它在人工智能和机器学习领域被大量使用。
|
||||
|
||||
![图 8:更好的钟形曲线][8]
|
||||
|
||||
|
||||
*(题图:DA/2a8d805a-01d3-4039-b96c-74766491e264)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2023/01/ai-an-introduction-to-probability/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-1-Our-first-Python-script-using-TensorFlow.png
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-2-Element-wise-operation-in-TensorFlow-1-590x234.png
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-3-Matrix-multiplication-with-TensorFlow-590x347.png
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-4-Parallelization-with-Numba-590x523.png
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-5-An-example-for-symbolic-calculation-590x233.png
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-6-A-bell-Curve-Courtesy-Wikipedia-1-590x295.png
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-7-Plotting-a-bell-curve.png
|
||||
[8]: https://www.opensourceforu.com/wp-content/uploads/2022/09/Figure-8-A-better-bell-curve-2-590x344.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/18/134407yjeszs8lflwhtlwu.jpg
|
||||
@@ -0,0 +1,159 @@
|
||||
[#]: subject: "Using Postfix DNS SRV record resolution feature"
|
||||
[#]: via: "https://fedoramagazine.org/using-postfix-dns-srv-record-resolution-feature/"
|
||||
[#]: author: "Tomáš Korbař https://fedoramagazine.org/author/tkorbar/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16474-1.html"
|
||||
|
||||
利用 DNS SRV 记录为 Postfix 提供负载平衡
|
||||
====
|
||||
|
||||
![][0]
|
||||
|
||||
2011 年 3 月,苹果公司提出 [RFC 6186][4],描述了如何利用域名系统服务(DNS SRV)记录来查找电子邮件的提交以及访问服务。现在 Postfix 从 3.8.0 版本开始支持 RFC 中提出的设计。这个新增功能让你可以使用 DNS SRV 记录进行负载分配和自动配置。
|
||||
|
||||
### DNS SRV 记录的形态
|
||||
|
||||
DNS SRV 记录定义在 [RFC 2782][5] 中,它指定在区域文件中,并且包含了服务名称、传输协议规范、优先级、权重、端口,以及提供该服务的主机。
|
||||
|
||||
```
|
||||
_submission._tcp SRV 5 10 50 bruce.my-domain.com.
|
||||
```
|
||||
|
||||
字段 | 值 | 意义
|
||||
---|---|---
|
||||
服务名称 | `submission` | 服务名为 submission
|
||||
传输协议规范 | `tcp` | 本服务使用 TCP 协议
|
||||
优先级 | `5` | 服务器优先级设为 5(数值越小,优先级越高)
|
||||
权重 | `10` | 服务器应承担的负载部分
|
||||
端口 | `50` | 服务器监听连接的端口
|
||||
目标 |` bruce.my-domain.com.` | 提供此服务的服务器名称
|
||||
|
||||
*记录解释*
|
||||
|
||||
### 服务器选择算法
|
||||
|
||||
客户端应该按照 [RFC 2782][5] 中描述的方式解析 SRV 记录。这意味着,首先尝试联系拥有最高优先级(最小的优先级数字)的服务器。如果该服务器无回应,那么重试联系拥有同样或者更低优先级的下一台服务器。当有多台服务器拥有同样优先级的时候,应随机选择其中一台,但是必须确保选择记录的概率符合下列公式:
|
||||
|
||||
![][6]
|
||||
|
||||
其中 `i` 是 SRV 记录的标识,`k` 是具有相同优先级的 SRV 记录的数量。
|
||||
|
||||
在现实中,这意味着如果你有两台服务器,其中一台的处理能力是另一台的三倍,那么你应该给第一台服务器的权重赋于另一台三倍的值。这样就能保证更强大的服务器会接收到大约 75% 的客户端请求,而另一台接收大约 25% 的请求。
|
||||
|
||||
这些原则使得 SRV 记录能够同时作为客户端自动配置及在服务器之间分配工作负载的工具。
|
||||
|
||||
看看以下这个记录的例子:
|
||||
|
||||
```
|
||||
_submission._tcp SRV 0 0 2525 server-one
|
||||
_submission._tcp SRV 1 75 2625 server-two
|
||||
_submission._tcp SRV 1 25 2625 server-three
|
||||
```
|
||||
|
||||
这里 `server-one` 总是会被首选来进行联系。如果 `server-one` 无回应,客户端就会将剩下优先级为 1 的两个记录顺序打乱,生成一个从 0 到 100 的随机数,如果第一条记录的运行总和大于或者等于这个随机数,它就会尝试去联系这个记录。否则,客户端会倒序联系所有服务器。注意,客户端会向它优先成功连接的服务器发送请求。
|
||||
|
||||
### 示例配置
|
||||
|
||||
请考虑以下这种情况。你想为大量的电脑配置 Postfix,使其通过公司的邮件服务器利用 SRV 记录转发外部电邮。为了达到这个目标,你需要在每台电脑的 Postfix 中配置 `relayhost` 参数,即邮件用户代理(MUA)。如果将 `relayhost` 参数的值设置为 `$mydomain`,你的机器将开始为你的域名查找 MX 记录,并尝试按照它们的优先级顺序发送邮件。这种方法虽然有效,但是可能会遇到负载平衡问题。Postfix 会使用优先级最高的服务器,直到其变为无响应才会联系其他备用服务器。此外,如果你在环境中使用了动态分配的端口,你无法指明哪个端口正在被特定的服务器使用。使用 SRV 记录,你可以应对这些挑战,并在需要改变服务器端口的时候维持服务器的平滑运行。
|
||||
|
||||
#### 区域文件
|
||||
|
||||
为了使得 DNS 服务器提供信息给客户端,可以参考以下使用服务器 `server-one`、`server-two`、`server-three` 作为中继,并把服务器 `server-four` 配置为接收测试邮件的区域文件示例。
|
||||
|
||||
```
|
||||
$TTL 3600
|
||||
@ IN SOA example-domain.com. root.example-domain.com. (
|
||||
1571655122 ; 区域文件的序列号
|
||||
1200 ; 刷新时间
|
||||
180 ; 发生问题时的重试时间
|
||||
1209600 ; 过期时间
|
||||
10800 ) ; 查询失败时的最大缓存时间
|
||||
;
|
||||
IN NS ns1
|
||||
IN A 192.168.2.0
|
||||
;
|
||||
ns1 IN A 192.168.2.2
|
||||
server-one IN A 192.168.2.4
|
||||
server-two IN A 192.168.2.5
|
||||
server-three IN A 192.168.2.6
|
||||
server-four IN A 192.168.2.7
|
||||
_submission._tcp SRV 0 0 2525 server-one
|
||||
_submission._tcp SRV 1 50 2625 server-two
|
||||
_submission._tcp SRV 1 50 2625 server-three
|
||||
@ MX 0 server-four
|
||||
```
|
||||
|
||||
#### Postfix MUA 配置
|
||||
|
||||
设置客户端机器去查找 SRV 记录:
|
||||
|
||||
```
|
||||
use_srv_lookup = submission
|
||||
relayhost = example-domain.com:submission
|
||||
```
|
||||
|
||||
通过这个配置,你的客户端机器上的 Postfix 实例会联络到 `example-domain` 的 DNS 服务器,然后获取邮件提交的 SRV 记录。在这个例子中,`server-one` 有最高的优先级,Postfix 会先试图连接它。然后,Postfix 随机的选择剩下的两个服务器其中一个去尝试连接。这个配置确保了大约有 50% 的机会会优先联系到服务器一。注意,SRV 记录的权重值并不等同于百分比。你也可以用 1 和 1 这样的值达到同样的目标。
|
||||
|
||||
同时,Postfix 也知道 `server-one` 在监听 2525 端口,而 `server-two` 在监听 2625 端口。如果你正在缓存检索到的 DNS 记录,并且你动态改变 SRV 记录,那么设置一个低的生存时间(TTL)对你的记录是很重要的。
|
||||
|
||||
#### 整套设置
|
||||
|
||||
![][7]
|
||||
|
||||
你可以通过下面的方式尝试这个配置,包含 podman 和在此处提供的 compose 文件:
|
||||
|
||||
```
|
||||
$ git clone https://github.com/TomasKorbar/srv_article
|
||||
$ cd srv_article/environment
|
||||
$ podman-compose up
|
||||
$ podman exec -it article_client /bin/bash
|
||||
root@client # ./senddummy.sh
|
||||
root@client # exit
|
||||
```
|
||||
|
||||
完成配置之后,你可以检查日志,查看邮件是否经过 `server-one` 并最终投递到 `server-four`。
|
||||
|
||||
```
|
||||
$ podman stop article_server1
|
||||
$ podman exec -it article_client /bin/bash
|
||||
root@client # ./senddummy.sh
|
||||
root@client # ./senddummy.sh
|
||||
root@client # ./senddummy.sh
|
||||
root@client # ./senddummy.sh
|
||||
root@client # ./senddummy.sh
|
||||
root@client # ./senddummy.sh
|
||||
root@client # exit
|
||||
```
|
||||
|
||||
现在 `server-one` 已经关闭了,这六封邮件将会由 `server-two` 或者 `server-three` 中转发出去。
|
||||
|
||||
仔细看一下 Dockerfiles 以更深地理解这个配置。
|
||||
|
||||
通过执行:`$ podman-compose down` 完成示例的操作。
|
||||
|
||||
*(题图:DA/241079fe-58d6-4dc6-8801-f0fd19dfd64b)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/using-postfix-dns-srv-record-resolution-feature/
|
||||
|
||||
作者:[Tomáš Korbař][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/tkorbar/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/06/DNS_SRV_resolution-816x345.jpg
|
||||
[2]: https://unsplash.com/ja/@scottrodgerson?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/server-routing?orientation=landscape&utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: https://www.ietf.org/rfc/rfc6186.txt
|
||||
[5]: https://www.ietf.org/rfc/rfc2782.txt
|
||||
[6]: https://fedoramagazine.org/wp-content/uploads/2023/06/probability_equation.png
|
||||
[7]: https://fedoramagazine.org/wp-content/uploads/2023/06/srv_article.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/15/173522hpze31p331ppljrj.jpg
|
||||
@@ -0,0 +1,194 @@
|
||||
[#]: subject: "AI: A Few More Useful Python Libraries"
|
||||
[#]: via: "https://www.opensourceforu.com/2023/07/ai-a-few-more-useful-python-libraries/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16436-1.html"
|
||||
|
||||
人工智能教程(三):更多有用的 Python 库
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
在本系列的 [上一篇文章](https://linux.cn/article-16399-1.html) 中,我们回顾了人工智能的历史,然后详细地讨论了矩阵。在本系列的第三篇文章中,我们将了解更多的矩阵操作,同时再介绍几个人工智能 Python 库。
|
||||
|
||||
在进入主题之前,我们先讨论几个人工智能和机器学习中常用的重要术语。<ruby>人工神经网络<rt>artificial neural network</rt></ruby>(通常简称为 <ruby>神经网络<rt>neural network</rt></ruby>,NN)是机器学习和深度学习的核心。顾名思义,它是受人脑的生物神经网络启发而设计的计算模型。本文中我没有插入神经网络模型的图片,因为在互联网上很容易找到它们。我相信任何对人工智能感兴趣的人应该都见过它们,左边是输入层,中间是一个或多个隐藏层,右边是输出层。各层之间的边上的 <ruby>权重<rt>weight</rt></ruby> 会随着训练不断变化。它是机器学习和深度学习应用成功的关键。
|
||||
|
||||
<ruby>监督学习<rt>supervised learning</rt></ruby> 和 <ruby>无监督学习<rt>unsupervised learning</rt></ruby> 是两个重要的机器学习模型。从长远来看,任何立志于从事人工智能或机器学习领域工作的人都需要学习它们,并了解实现它们的各种技术。这里我认为有必要简单说明两种模型之间的区别了。假设有两个人分别叫 A 和 B,他们要把苹果和橘子分成两组。他们从未见过苹果或橘子。他们都通过 100 张苹果和橘子的图片来学习这两种水果的特征(这个过程称为模型的训练)。不过 A 还有照片中哪些是苹果哪些是橘子的额外信息(这个额外信息称为标签)。这里 A 就像是一个监督学习模型,B 就像是无监督学习模型。你认为在是识别苹果和橘子的任务上,谁的效果更好呢?大多数人可能会认为 A 的效果更好。但是根据机器学习的理论,情况并非总是如此。如果这 100 张照片中只有 5 张是苹果,其它都是橘子呢?那么 A 可能根本就不熟悉苹果的特征。或者如果部分标签是错误的呢?在这些情况下,B 的表现可能比 A 更好。
|
||||
|
||||
在实际的机器学习应用中会发生这样的情况吗?是的!训练模型用的数据集可能是不充分的或者不完整的。这是两种模型都仍然在人工智能和机器学习领域蓬勃发展的众多原因之一。在后续文章中,我们将更正式地讨论它们。下面我们开始学习使用 JupyterLab,它是一个用于开发人工智能程序的强大工具。
|
||||
|
||||
### JupyterLab 入门
|
||||
|
||||
在本系列的前几篇文章中,为了简单起见,我们一直使用 Linux 终端运行 Python 代码。现在要介绍另一个强大的人工智能工具——JupyterLab。在本系列的第一篇文章中,我们对比了几个候选项,最终决定使用 JupyterLab。它比 Jupyter Notebook 功能更强大,为我们预装了许多库和包,并且易于团队协作。还有一些其它原因,我们将在后续适时探讨它们。
|
||||
|
||||
在本系列的第一篇文章中,我们已经学习了如何安装 JupyterLab。假设你已经按文中的步骤安装好了 JupyterLab,使用 `jupyter lab` 或 `jupyter-lab` 命令在会默认浏览器(如 Mozilla Firefox、谷歌 Chrome 等)中打开 JupyterLab。(LCTT 译注:没有安装 JupyterLab 也不要紧,你可以先 [在线试用 JupyterLab](https://jupyter.org/try-jupyter/lab/))图 1 是在浏览器中打开的 JupyterLab 启动器的局部截图。JupyterLab 使用一个名为 IPython(交互式 Python)的 Python 控制台。注意,IPython 其实可以独立使用,在 Linux 终端运行 `ipython` 命令就可以启动它。
|
||||
|
||||
![图 1:JupyterLab 启动器][1]
|
||||
|
||||
现阶段我们使用 JupyterLab 中的 Jupyter Notebook 功能。点击图 1 中用绿框标记的按钮,打开 Jupyter Notebook。这时可能会要求你选择内核。如果你按照本系列第一篇的步骤安装 JupyterLab,那么唯一的可选项就是 Python 3(ipykernel)。请注意,你还可以在 JupyterLab 中安装其它编程语言的内核,比如 C++、R、MATLAB、Julia 等。事实上 Jupyter 的内核相当丰富,你可以访问 [Jupyter 内核清单](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels) 了解更多信息。
|
||||
|
||||
![图 2:Jupyter Notebook 窗口][2]
|
||||
|
||||
下面我们快速了解一下 Jupyter Notebook 的使用。图 2 显示的是一个在浏览器中打开的 Jupyter Notebook 窗口。从浏览器标签页的标题可以看出,Jupyter Notebook 打开的文件的扩展名是 `.ipynb`。
|
||||
|
||||
在图 2 处可以看到有三个选项,它们表示 Jupyter Notebook 中可以使用的三种类型的单元。“Code”(绿色框) 表示代码单元,它是用来执行代码的。“Markdown” 单元可用于输入说明性的文本。如果你是一名计算机培训师,可以用代码单元和 Markdown 单元来创建交互式代码和解释性文本,然后分享给你的学员。“Raw”(红色框)表示原始数据单元,其中的内容不会被格式化或转换。
|
||||
|
||||
和在终端中不同,在 Jupyter Notebook 中你可以编辑并重新运行代码,这在处理简单的拼写错误时特别方便。图 3 是在 Jupyter Notebook 中执行 Python 代码的截图。
|
||||
|
||||
![图 3:在 Jupyter Notebook 中执行 Python 代码][3]
|
||||
|
||||
要在执行代码单元中的代码,先选中该单元格,然后点击蓝框标记的按钮。图 3 中用红框标记的是 Markdown 单元,用绿框标记的是代码单元,用黄框标记的执行代码的输出。在这个例子中,Python 代码输出的是 π 的值。
|
||||
|
||||
前面提到,JupyterLab 默认安装了许多库和包,我们不用自己安装了。你可以使用 `import` 命令将这些库导入到代码中。使用 `!pip freeze` 命令可以列出 JupyterLab 中目前可用的所有库和包。如果有库或包没有安装,大多数情况下都可以通过 `pip install <全小写的库或者包的名称>` 来安装它们。例如安装 TensorFlow 的命令是 `pip install tensorflow`。如果后面有库的安装命令不遵循这个格式,我会进行特别说明。随着本系列的继续,我们还会看到 Jupyter Notebook 和 JupyterLab 更多强大的功能。
|
||||
|
||||
### 复杂的矩阵运算
|
||||
|
||||
通过下面的代码,我们来了解一些更复杂的矩阵运算或操作。为了节省空间,我没有展示代码的输出。
|
||||
|
||||
```
|
||||
import numpy as np
|
||||
A = np.arr ay([[1,2,3],[4,5,6],[7,8,88]])
|
||||
B = np.arr ay([[1,2,3],[4,5,6],[4,5,6]])
|
||||
print(A.T)
|
||||
print(A.T.T)
|
||||
print(np.trace(A))
|
||||
print(np.linalg.det(A))
|
||||
C = np.linalg.inv(A)
|
||||
print(C)
|
||||
print(A@C)
|
||||
```
|
||||
|
||||
下面我逐行来解释这些代码:
|
||||
|
||||
1. 导入 NumPy 包。
|
||||
2. 创建矩阵 `A`。
|
||||
3. 创建矩阵 `B`。
|
||||
4. 打印矩阵 `A` 的<ruby>转置<rt>transpose</rt></ruby>。通过比较矩阵 `A` 与 `A` 的转置,你用该可以大致理解转置操作到底做了什么。
|
||||
5. 打印 `A` 的转置的转置。可以看到它和矩阵 `A` 是相同的。这又提示了转置操作的含义。
|
||||
6. 打印矩阵 `A` 的 <ruby>迹<rt>trace</rt></ruby>。迹是矩阵的对角线(也称为主对角线)元素的和。矩阵 `A` 的主对角线元素是 1、5 和 88,所以输出的值是 94。
|
||||
7. 打印 `A` 的<ruby>行列式<rt>determinant</rt></ruby>。当执行代码的结果是 -237.00000000000009(在你的电脑中可能略有区别)。因为行列式不为 0,所以称 A 为<ruby>非奇异矩阵<rt>non-singular matrix</rt></ruby>。
|
||||
8. 将矩阵 `A` 的<ruby>逆<rt>inverse</rt></ruby> 保存到矩阵 `C` 中。
|
||||
9. 打印矩阵 `C`。
|
||||
10. 打印矩阵 `A` 和 `C` 的乘积。仔细观察,你会看到乘积是一个<ruby>单位矩阵<rt>identity matrix</rt></ruby>,也就是一个所有对角线元素都为 1,所有其它元素都为 0 的矩阵。请注意,输出中打印出的不是精确的 1 和 0。在我得到的答案中,有像 -3.81639165e-17 这样的数字。这是浮点数的科学记数法,表示 -3.81639165 × 10<sup>-17</sup>, 即小数的 -0.0000000000000000381639165,它非常接近于零。同样输出中的其它数字也会有这种情况。我强烈建议你了解计算机是怎样表示浮点数的,这对你会有很大帮助。
|
||||
|
||||
根据第一篇文章中的惯例,可以将代码分成基本 Python 代码和人工智能代码。在这个例子中,除了第 1 行和第 9 行之外的所有代码行都可以被看作是人工智能代码。
|
||||
|
||||
现在将第 4 行到第 10 行的操作应用到矩阵 B 上。从第 4 行到第 6 行代码的输出没有什么特别之处。然而运行第 7 行时,矩阵 `B` 的行列式为 0,因此它被称为<ruby>奇异矩阵<rt>singular matrix</rt></ruby>。运行第 8 行代码会给产生一个错误,因为只有非奇异矩阵才存在逆矩阵。你可以尝试对本系列前一篇文章中的 8 个矩阵都应用相同的操作。通过观察输出,你会发现矩阵的行列式和求逆运算只适用于方阵。
|
||||
|
||||
方阵就是行数和列数相等的矩阵。在上面的例子中我只是展示了对矩阵执行各种操作,并没有解释它们背后的理论。如果你不知道或忘记了矩阵的转置、逆、行列式等知识的话,你最好自己学习它们。同时你也应该了解一下不同类型的矩阵,比如单位矩阵、对角矩阵、三角矩阵、对称矩阵、斜对称矩阵。维基百科上的相关文章是不错的入门。
|
||||
|
||||
现在让我们来学习<ruby>矩阵分解<rt>matrix decomposition</rt></ruby>,它是更复杂的矩阵操作。矩阵分解与整数的因子分解类似,就是把一个矩阵被写成其它矩阵的乘积。下面我通过图 4 中整数分解的例子来解释矩阵分解的必要性。代码单元开头的 `%time` 是 Jupyter Notebook 的<ruby>魔法命令<rt>magic command</rt></ruby>,它会打印代码运行所花费的时间。`**` 是 Python 的幂运算符。基本的代数知识告诉我们,变量 a 和 b 的值都等于 (6869 x 7873)<sup>100</sup>。但图 4 显示计算变量 b 的速度要快得多。事实上,随着底数和指数的增大,执行时间的减少会越来越明显。
|
||||
|
||||
![图 4:Python 代码的执行耗时][4]
|
||||
|
||||
在几乎所有的矩阵分解技术技术中,原始矩阵都会被写成更稀疏的矩阵的乘积。<ruby>稀疏矩阵<rt>sparse matrix</rt></ruby>是指有很多元素值为零的矩阵。在分解后,我们可以处理稀疏矩阵,而不是原始的具有大量非零元素的<ruby>密集矩阵<rt>dense matrix</rt></ruby>。在本文中将介绍三种矩阵分解技术——LUP 分解、<ruby>特征分解<rt>eigen decomposition</rt></ruby>和<ruby>奇异值分解<rt>singular value decomposition</rt></ruby>(SVD)。
|
||||
|
||||
为了执行矩阵分解,我们需要另一个强大的 Python 库,SciPy。SciPy 是基于 NumPy 库的科学计算库,它提供了线性代数、积分、微分、优化等方面的函数。首先,让我们讨论 LUP 分解。任何方阵都能进行 LUP 分解。LUP 分解有一种变体,称为 LU 分解。但并不是所有方阵都能 LU 分解。因此这里我们只讨论 LUP 分解。
|
||||
|
||||
在 LUP 分解中,矩阵 A 被写成三个矩阵 L、U 和 P 的乘积。其中 L 是一个<ruby>下三角矩阵<rt>lower triangular matrix</rt></ruby>,它是主对角线以上的所有元素都为零的方阵。U 是一个<ruby>上三角矩阵<rt>upper triangular matrix</rt></ruby>,它是主对角线以下所有元素为零的方阵。P 是一个<ruby>排列矩阵<rt>permutation matrix</rt></ruby>。这是一个方阵,它的每一行和每一列中都有一个元素为 1,其它元素的值都是 0。
|
||||
|
||||
现在看下面的 LUP 分解的代码。
|
||||
|
||||
```
|
||||
import numpy as np
|
||||
import scipy as sp
|
||||
A=np.array([[11,22,33],[44,55,66],[77,88,888]])
|
||||
P, L, U = sp.linalg.lu(A)
|
||||
print(P)
|
||||
print(L)
|
||||
print(U)
|
||||
print(P@L@U)
|
||||
```
|
||||
|
||||
图 5 显示了代码的输出。第 1 行和第 2 行导入 NumPy 和 SciPy 包。在第 3 行创建矩阵 `A`。请记住,我们在本节中会一直使用矩阵 `A`。第 4 行将矩阵 `A` 分解为三个矩阵——`P`、`L` 和 `U`。第 5 行到第 7 行打印矩阵 `P`、`L` 和 `U`。从图 5 中可以清楚地看出,`P` 是一个置换矩阵,`L` 是一个下三角矩阵,`U` 是一个上三角矩阵。最后在第 8 行将这三个矩阵相乘并打印乘积矩阵。从图 5 可以看到乘积矩阵 `P@L@U` 等于原始矩阵 `A`,满足矩阵分解的性质。此外,图 5 也验证了矩阵 `L`、`U` 和 `P` 比矩阵 `A` 更稀疏。
|
||||
|
||||
![图 5:用 SciPy 进行 LUP 分解][5]
|
||||
|
||||
下面我们讨论特征分解,它是将一个方阵是用它的<ruby>特征值<rt>eigenvalue</rt></ruby>和<ruby>特征向量<rt>eigenvector</rt></ruby>来表示。用 Python 计算特征值和特征向量很容易。关于特征值和特征向量的理论解释超出了本文的讨论范围,如果你不知道它们是什么,我建议你通过维基百科等先了解它们,以便对正在执行的操作有一个清晰的概念。图 6 中是特征分解的代码。
|
||||
|
||||
![图6:用 SciPy 进行特征分解][6]
|
||||
|
||||
在图 6 中,第 1 行计算特征值和特征向量。第 2 行和第 3 行输出它们。注意,使用 NumPy 也能获得类似的效果,`Lambda, Q = np.linalg.eig(A)`。这也告诉我们 NumPy 和 SciPy 的功能之间有一些重叠。第 4 行重建了原始矩阵 A。第 4 行中的代码片段 `np.diag(Lambda)` 是将特征值转换为对角矩阵(记为 `Λ`)。对角矩阵是主对角线以外的所有元素都为 0 的矩阵。第 4 行的代码片段 `sp.linalg.inv(Q)` 是求 `Q` 的逆矩阵(记为 Q<sup>-1</sup>)。最后,将三个矩阵 `Q`、`Λ`、`Q`<sup>-1</sup> 相乘得到原始矩阵 `A`。也就是在特征分解中 `A=QΛQ`<sup>-1</sup>。
|
||||
|
||||
图 6 还显示了执行的代码的输出。红框标记的是特征值,用绿框标记的是特征向量,重构的矩阵 A 用蓝框标记。你可能会感到奇怪,输出中像 11.+0.j 这样的数字是什么呢?其中的 j 是虚数单位。11.+0.j 其实就是 11.0+0.0j,即整数 11 的复数形式。
|
||||
|
||||
现在让我们来看奇异值分解(SVD),它是特征分解的推广。图 7 显示了 SVD 的代码和输出。第 1 行将矩阵 `A` 分解为三个矩阵 `U`、`S` 和 `V`。第 2 行中的代码片段 `np.diag(S)` 将 `S` 转换为对角矩阵。最后,将这三个矩阵相乘重建原始矩阵 `A`。奇异值分解的优点是它可以对角化非方阵。但非方阵的奇异值分解的代码稍微复杂一些,我们暂时不在这里讨论它。
|
||||
|
||||
![图 7:用 SciPy 进行 奇异值分解][7]
|
||||
|
||||
### 其它人工智能和机器学习的 Python 库
|
||||
|
||||
当谈到人工智能时,普通人最先想到的场景可能就是电影《终结者》里机器人通过视觉识别一个人。<ruby>计算机视觉<rt>computer vision</rt></ruby>是人工智能和机器学习技术被应用得最广泛的领域之一。下面我将介绍两个计算机视觉相关的库:OpenCV 和 Matplotlib。OpenCV 是一个主要用于实时计算机视觉的库,它由 C 和 C++ 开发。C++ 是 OpenCV 的主要接口,它通过 OpenCV-Python 向用户提供 Python 接口。Matplotlib 是基于 Python 的绘图库。我曾在 OSFY 上的一篇早期 [文章](https://www.opensourceforu.com/2018/05/scientific-graphics-visualisation-an-introduction-to-matplotlib) 中详细介绍了 Matplotlib 的使用。
|
||||
|
||||
前面我一直在强调矩阵的重要性,现在我用一个实际的例子来加以说明。图 8 展示了在 Jupyter Notebook 中使用 Matplotlib 读取和显示图像的代码和输出。如果你没有安装 Matplotlib,使用 `pip install matplotlib` 命令安装 Matplotlib。
|
||||
|
||||
![图 8:用 Matplotlib 读取和显示图像][8]
|
||||
|
||||
在图 8 中,第 1 行和第 2 行从 Matplotlib 导入了一些函数。注意你可以从库中导入单个函数或包,而不用导入整个库。这两行是基本的 Python 代码。第 3 行从我的计算机中读取标题为 `OSFY-Logo.jpg` 的图像。我从 OSFY 门户网站的首页下载了这张图片。此图像高 80 像素,宽 270 像素。第 4 行和第 5 行在 Jupyter Notebook 窗口中显示图像。请注意图像下方用红框标记的两行代码,它的输出告诉我们变量 `image` 实际上是一个 NumPy 数组。具体来说,它是一个 80 x 270 x 3 的三维数组。
|
||||
|
||||
数组尺寸中的 80 x 270 就是图片的大小,这一点很容易理解。但是第三维度表示什么呢?这是因计算机像通常用 RGB 颜色模型来存储的彩色图。它有三层,分别用于表示红绿蓝三种原色。我相信你还记得学生时代的实验,把原色混合成不同的颜色。例如,红色和绿色混合在一起会得到黄色。在 RGB 模型中,每种颜色的亮度用 0 到 255 的数字表示。0 表示最暗,255 表示最亮。因此值为 `(255,255,255)` 的像素表示纯白色。
|
||||
|
||||
现在,执行代码 `print(image)`, Jupyter Notebook 会将整个数组的一部分部分打印出来。你可以看到数组的开头有许多 255。这是什么原因呢?如果你仔细看 OSFY 的图标会发现,图标的边缘有很多白色区域,因此一开始就印了很多 255。顺便说一句,你还可以了解一下其他颜色模型,如 CMY、CMYK、HSV 等。
|
||||
|
||||
现在我们反过来从一个数组创建一幅图像。首先看图 9 中所示的代码。它展示了如何生成两个 3 x 3 的随机矩阵,它的元素是 0 到 255 之间的随机值。注意,虽然相同的代码执行了两次,但生成的结果是不同的。这是通过调用 NumPy 的伪随机数生成器函数 `randint` 实现的。实际上,我中彩票的几率都比这两个矩阵完全相等的几率大得多。
|
||||
|
||||
![图 8:两个随机矩阵][9]
|
||||
|
||||
接下来我们要生成一个形状为 512 x 512 x 3 的三维数组,然后将它转换为图像。为此我们将用到 OpenCV。注意,安装 OpenCV 命令是 `pip install opencv-python`。看下面的代码:
|
||||
|
||||
```
|
||||
import cv2
|
||||
img = np.random.randint(0, 256, size=(512, 512, 3))
|
||||
cv2.imwrite('img.jpg', img)
|
||||
```
|
||||
|
||||
第 1 行导入库 OpenCV。注意导入语句是 `import cv2`,这与大多数其他包的导入不同。第 3 行将矩阵 img 转换为名为 `img.jpg` 的图像。图 10 显示了由 OpenCV 生成的图像。在系统中运行这段代码,将图像将被保存在 Jupyter Notebook 的同一目录下。如果你查看这张图片的属性,你会看到它的高度是 512 像素,宽度是 512 像素。通过这些例子,很容易看出,任何处理计算机视觉任务的人工智能和机器学习程序使用了大量的数组、向量、矩阵以及线性代数中的思想。这也是本系列用大量篇幅介绍数组、向量和矩阵的原因。
|
||||
|
||||
![图 10:OpenCV 生成的图像][10]
|
||||
|
||||
最后,考虑下面显示的代码。`image.jpg` 输出图像会是什么样子?我给你两个提示。函数 `zeros` 在第 4 行和第 5 行创建了两个 512 x 512 的数组,其中绿色和蓝色填充了零。第 7 行到第 9 行用来自数组 `red`、`green` 和 `blue` 的值填充三维数组 `img1`。
|
||||
|
||||
```
|
||||
import numpy as np
|
||||
import cv2
|
||||
red = np.random.randint(0, 256, size=(512, 512))
|
||||
green = np.zeros([512, 512], dtype=np.uint8)
|
||||
blue = np.zeros([512, 512], dtype=np.uint8)
|
||||
img1 = np.zeros([512,512,3], dtype=np.uint8)
|
||||
img1[:,:,0] = blue
|
||||
img1[:,:,1] = green
|
||||
img1[:,:,2] = red
|
||||
cv2.imwrite(‘image.jpg’, img1)
|
||||
```
|
||||
|
||||
本期的内容就到此结束了。在下一篇文章中,我们将开始简单地学习<ruby>张量<rt>tensor</rt></ruby>,然后安装和使用 TensorFlow。TensorFlow 是人工智能和机器学习领域的重要参与者。之后,我们将暂时放下矩阵、向量和线性代数,开始学习概率论。概率论跟线性代数一样是人工智能的重要基石。
|
||||
|
||||
*(题图:MJ/ec8e9a02-ae13-4924-b6cb-74ef96ab8af9)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2023/07/ai-a-few-more-useful-python-libraries/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-1-The-launcher-of-the-JupyterLab-590x499.png
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-2-Jupyter-Notebook-window.png
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-3-Python-code-executed-in-Jupyter-Notebook.png
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-4-Execution-time-of-a-Python-code-350x301.png
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-5-LUP-decomposition-with-SciPy-1-350x186.png
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-6-Eigendecomposition-with-SciPy-350x175.png
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-7-Singular-value-decomposition-with-SciPy-350x168.png
|
||||
[8]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-8-Reading-and-displaying-an-image-with-Matplotlib--350x278.png
|
||||
[9]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-9-Two-matrices-with-random-entries-350x161.png
|
||||
[10]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-10-The-image-generated-by-OpenCV-350x366.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/02/214131dn96f43yff43w5fw.png
|
||||
479
published/202312/20231101 Confusing git terminology.md
Normal file
479
published/202312/20231101 Confusing git terminology.md
Normal file
@@ -0,0 +1,479 @@
|
||||
[#]: subject: "Confusing git terminology"
|
||||
[#]: via: "https://jvns.ca/blog/2023/11/01/confusing-git-terminology/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16451-1.html"
|
||||
|
||||
解读那些令人困惑 Git 术语
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
我正在一步步解释 Git 的方方面面。在使用 Git 近 15 年后,我已经非常习惯于 Git 的特性,很容易忘记它令人困惑的地方。
|
||||
|
||||
因此,我在 [Mastodon][1] 上进行了调查:
|
||||
|
||||
> 你有觉得哪些 Git 术语很让人困惑吗?我计划写篇博客,来解读 Git 中一些奇怪的术语,如:“分离的 HEAD 状态”,“快速前移”,“索引/暂存区/已暂存”,“比 `origin/main` 提前 1 个提交”等等。
|
||||
|
||||
我收到了许多有洞见的答案,我在这里试图概述其中的一部分。下面是这些术语的列表:
|
||||
|
||||
* HEAD 和 “heads”
|
||||
* “分离的 `HEAD` 状态”
|
||||
* 在合并或变基时的 “ours” 和 “theirs”
|
||||
* “你的分支已经与 'origin/main' 同步”
|
||||
* `HEAD^`、`HEAD~`、`HEAD^^`、`HEAD~~`、`HEAD^2`、`HEAD~2`
|
||||
* `..` 和 `...`
|
||||
* “可以快速前移”
|
||||
* “引用”、“符号引用”
|
||||
* refspecs
|
||||
* “tree-ish”
|
||||
* “索引”、“暂存的”、“已缓存的”
|
||||
* “重置”、“还原”、“恢复”
|
||||
* “未跟踪的文件”、“追踪远程分支”、“跟踪远程分支”
|
||||
* 检出
|
||||
* reflog
|
||||
* 合并、变基和遴选
|
||||
* `rebase –onto`
|
||||
* 提交
|
||||
* 更多复杂的术语
|
||||
|
||||
我已经尽力讲解了这些术语,但它们几乎覆盖了 Git 的每一个主要特性,这对一篇博客而言显然过于繁重,所以在某些地方可能会有一些粗糙。
|
||||
|
||||
### `HEAD` 和 “heads”
|
||||
|
||||
有些人表示他们对 `HEAD` 和 `refs/heads/main` 这些术语感到困惑,因为听起来像是一些复杂的技术内部实现。
|
||||
|
||||
以下是一个快速概述:
|
||||
|
||||
* “heads” 就是 “分支”。在 Git 内部,分支存储在一个名为 `.git/refs/heads` 的目录中。(从技术上讲,[官方 Git 术语表][21] 中明确表示分支是所有的提交,而 head 只是最近的提交,但这只是同一事物的两种不同思考方式)
|
||||
* `HEAD` 是当前的分支,它被存储在 `.git/HEAD` 中。
|
||||
|
||||
我认为,“head 是一个分支,`HEAD` 是当前的分支” 或许是 Git 中最奇怪的术语选择,但已经设定好了,想要更清晰的命名方案已经为时已晚,我们继续。
|
||||
|
||||
“HEAD 是当前的分支” 有一些重要的例外情况,我们将在下面讨论。
|
||||
|
||||
### “分离的 HEAD 状态”
|
||||
|
||||
你可能已经看到过这条信息:
|
||||
|
||||
```
|
||||
$ git checkout v0.1
|
||||
You are in 'detached HEAD' state. You can look around, make experimental
|
||||
changes and commit them, and you can discard any commits you make in this
|
||||
state without impacting any branches by switching back to a branch.
|
||||
|
||||
[...]
|
||||
```
|
||||
|
||||
(消息译文:你处于 “分离 HEAD” 的状态。你可以四处看看,进行试验性的更改并提交,你可以通过切换回一个分支来丢弃这个状态下做出的任何提交。)
|
||||
|
||||
这条信息的实质是:
|
||||
|
||||
* 在 Git 中,通常你有一个已经检出的 “当前分支”,例如 `main`。
|
||||
* 存放当前分支的地方被称为 `HEAD`。
|
||||
* 你做出的任何新提交都会被添加到你的当前分支,如果你运行 `git merge other_branch`,这也会影响你的当前分支。
|
||||
* 但是,`HEAD` 不一定**必须**是一个分支!它也可以是一个提交 ID。
|
||||
* Git 会称这种状态(`HEAD` 是提交 ID 而不是分支)为 “分离的 `HEAD` 状态”
|
||||
* 例如,你可以通过检出一个标签来进入分离的 `HEAD` 状态,因为标签不是分支
|
||||
* 如果你没有当前分支,一系列事情就断链了:
|
||||
* `git pull` 根本就无法工作(因为它的全部目的就是更新你的当前分支)
|
||||
* 除非以特殊方式使用 `git push`,否则它也无法工作
|
||||
* `git commit`、`git merge`、`git rebase` 和 `git cherry-pick` 仍然可以工作,但它们会留下“孤儿”提交,这些提交没有连接到任何分支,因此找到这些提交会很困难
|
||||
* 你可以通过创建一个新的分支或切换到一个现有的分支来退出分离的 `HEAD` 状态
|
||||
|
||||
### 在合并或变基中的 “ours” 和 “theirs”
|
||||
|
||||
遇到合并冲突时,你可以运行 `git checkout --ours file.txt` 来选择 “ours” 版本中的 `file.txt`。但问题是,什么是 “ours”,什么是 “theirs” 呢?
|
||||
|
||||
我总感觉此类术语混淆不清,也因此从未用过 `git checkout --ours`,但我还是查找相关资料试图理清。
|
||||
|
||||
在合并的过程中,这是如何运作的:当前分支是 “ours”,你要合并进来的分支是 “theirs”,这样看来似乎很合理。
|
||||
|
||||
```
|
||||
$ git checkout merge-into-ours # 当前分支是 “ours”
|
||||
$ git merge from-theirs # 我们正要合并的分支是 “theirs”
|
||||
```
|
||||
|
||||
而在变基的过程中就刚好相反 —— 当前分支是 “theirs”,我们正在变基到的目标分支是 “ours”,如下:
|
||||
|
||||
```
|
||||
$ git checkout theirs # 当前分支是 “theirs”
|
||||
$ git rebase ours # 我们正在变基到的目标分支是 “ours”
|
||||
```
|
||||
|
||||
我以为之所以会如此,因为在操作过程中,`git rebase main` 其实是将当前分支合并到 `main` (它类似于 `git checkout main; git merge current_branch`),尽管如此我仍然觉得此类术语会造成混淆。
|
||||
|
||||
[这个精巧的小网站][22] 对 “ours” 和 “theirs” 的术语进行了解释。
|
||||
|
||||
人们也提到,VSCode 将 “ours”/“theirs” 称作 “当前的更改”/“收到的更改”,同样会引起混淆。
|
||||
|
||||
### “你的分支已经与 `origin/main` 同步”
|
||||
|
||||
此信息貌似很直白 —— 你的 `main` 分支已经与源端同步!
|
||||
|
||||
但它实际上有些误导。可能会让你以为这意味着你的 `main` 分支已经是最新的,其实不然。它**真正的**含义是 —— 如果你最后一次运行 `git fetch` 或 `git pull` 是五天前,那么你的 `main` 分支就是与五天前的所有更改同步。
|
||||
|
||||
因此,如果你没有意识到这一点,它对你的安全感其实是一种误导。
|
||||
|
||||
我认为 Git 理论上可以给出一个更有用的信息,像是“与五天前上一次获取的源端 `main` 是同步的”,因为最新一次获取的时间是在 reflog 中记录的,但它没有这么做。
|
||||
|
||||
### `HEAD^`、`HEAD~`、`HEAD^^`、`HEAD~~`、`HEAD^2`、`HEAD~2`
|
||||
|
||||
我早就清楚 `HEAD^` 代表前一次提交,但我很长一段时间都困惑于 `HEAD~` 和 `HEAD^` 之间的区别。
|
||||
|
||||
我查询资料,得到了如下的对应关系:
|
||||
|
||||
* `HEAD^` 和 `HEAD~` 是同一件事情(指向前 1 个提交)
|
||||
* `HEAD^^^`、`HEAD~~~` 和 `HEAD~3` 是同一件事情(指向前 3 个提交)
|
||||
* `HEAD^3` 指向提交的第三个父提交,它与 `HEAD~3` 是不同的
|
||||
|
||||
这看起来有些奇怪,为什么 `HEAD~` 和 `HEAD^` 是同一个概念?以及,“第三个父提交”是什么?难道就是父提交的父提交的父提交?(剧透:并非如此)让我们一起深入探讨一下!
|
||||
|
||||
大部分提交只有一个父提交。但是合并提交有多个父提交 - 因为它们合并了两个或更多的提交。在 Git 中,`HEAD^` 意味着 “HEAD 提交的父提交”。但是如果 `HEAD` 是一个合并提交,那 `HEAD^` 又代表怎么回事呢?
|
||||
|
||||
答案是,`HEAD^` 指向的是合并提交的**第一个**父提交,`HEAD^2` 是第二个父提交,`HEAD^3` 是第三个父提交,等等。
|
||||
|
||||
但我猜他们也需要一个方式来表示“前三个提交”,所以 `HEAD^3` 是当前提交的第三个父提交(如果当前提交是一个合并提交,可能会有很多父提交),而 `HEAD~3` 是父提交的父提交的父提交。
|
||||
|
||||
我想,从我们之前对合并提交 “ours”/“theirs” 的讨论来看,`HEAD^` 是 “ours”,`HEAD^2` 是 “theirs”。
|
||||
|
||||
### `..` 和 `...`
|
||||
|
||||
这是两个命令:
|
||||
|
||||
- `git log main..test`
|
||||
- `git log main...test`
|
||||
|
||||
我从没用过 `..` 和 `...` 这两个命令,所以我得查一下 [man git-range-diff][23]。我的理解是比如这样一个情况:
|
||||
|
||||
```
|
||||
A - B main
|
||||
\
|
||||
C - D test
|
||||
```
|
||||
|
||||
- `main..test` 对应的是提交 C 和 D
|
||||
- `test..main` 对应的是提交 B
|
||||
- `main...test` 对应的是提交 B,C,和 D
|
||||
|
||||
更有挑战的是,`git diff` 显然也支持 `..` 和 `...`,但它们在 `git log` 中的意思完全不同?我的理解如下:
|
||||
|
||||
- `git log test..main` 显示在 `main` 而不在 `test` 的更改,但是 `git log test...main` 则会显示 _两边_ 的改动。
|
||||
- `git diff test..main` 显示 `test` 变动 _和_ `main` 变动(它比较 `B` 和 `D`),而 `git diff test...main` 会比较 `A` 和 `D`(它只会给你显示一边的差异)。
|
||||
|
||||
有关这个的更多讨论可以参考 [这篇博客文章][24]。
|
||||
|
||||
### “可以快速前移”
|
||||
|
||||
在 `git status` 中,我们会经常遇到如下的信息:
|
||||
|
||||
```
|
||||
$ git status
|
||||
On branch main
|
||||
Your branch is behind 'origin/main' by 2 commits, and can be fast-forwarded.
|
||||
(use "git pull" to update your local branch)
|
||||
```
|
||||
|
||||
(消息译文:你现在处于 `main` 分支上。你的分支比 `origin/main` 分支落后了 2 个提交,可以进行快速前进。 (使用 `git pull` 命令可以更新你的本地分支))
|
||||
|
||||
但“快速前移” 到底是何意?本质上,它在告诉我们这两个分支基本如下图所示(最新的提交在右侧):
|
||||
|
||||
```
|
||||
main: A - B - C
|
||||
origin/main: A - B - C - D - E
|
||||
```
|
||||
|
||||
或者,从另一个角度理解就是:
|
||||
|
||||
```
|
||||
A - B - C - D - E (origin/main)
|
||||
|
|
||||
main
|
||||
```
|
||||
|
||||
这里,`origin/main` 仅仅多出了 2 个 `main` 不存在的提交,因此我们可以轻松地让 `main` 更新至最新 —— 我们所需要做的就是添加上那 2 个提交。事实上,这几乎不可能出错 —— 不存在合并冲突。快速前进式合并是个非常棒的事情!这是合并两个分支最简单的方式。
|
||||
|
||||
运行完 `git pull` 之后,你会得到如下状态:
|
||||
|
||||
```
|
||||
main: A - B - C - D - E
|
||||
origin/main: A - B - C - D - E
|
||||
```
|
||||
|
||||
下面这个例子展示了一种**不能**快速前进的状态。
|
||||
|
||||
```
|
||||
A - B - C - X (main)
|
||||
|
|
||||
- - D - E (origin/main)
|
||||
```
|
||||
|
||||
此时,`main` 分支上有一个 `origin/main` 分支上无的提交(`X`),所以无法执行快速前移。在此种情况,`git status` 就会如此显示:
|
||||
|
||||
```
|
||||
$ git status
|
||||
Your branch and 'origin/main' have diverged,
|
||||
and have 1 and 2 different commits each, respectively.
|
||||
```
|
||||
|
||||
(你的分支和 `origin/main` 分支已经产生了分歧,其中各有 1 个和 2 个不同的提交。)
|
||||
|
||||
### “引用”、“符号引用”
|
||||
|
||||
在使用 Git 时,“引用” 一词可能会使人混淆。实际上,Git 中被称为 “引用” 的实例至少有三种:
|
||||
|
||||
* 分支和标签,例如 `main` 和 `v0.2`
|
||||
* `HEAD`,代表当前活跃的分支
|
||||
* 诸如 `HEAD^^^` 这样的表达式,Git 会将其解析成一个提交 ID。确切说,这可能并非 “引用”,我想 Git [将其称作][25] “版本参数”,但我个人并未使用过这个术语。
|
||||
|
||||
个人而言,“符号引用” 这个术语颇为奇特,因为我觉得我只使用过 `HEAD`(即当前分支)作为符号引用。而 `HEAD` 在 Git 中占据核心位置,多数 Git 核心命令的行为都基于 `HEAD` 的值,因此我不太确定将其泛化成一个概念的实际意义。
|
||||
|
||||
### refspecs
|
||||
|
||||
在 `.git/config` 配置 Git 远程仓库时,你可能会看到这样的代码 `+refs/heads/main:refs/remotes/origin/main` 。
|
||||
|
||||
```
|
||||
[remote "origin"]
|
||||
url = git@github.com:jvns/pandas-cookbook
|
||||
fetch = +refs/heads/main:refs/remotes/origin/main
|
||||
```
|
||||
|
||||
我对这段代码的含义并不十分清楚,我通常只是在使用 `git clone` 或 `git remote add` 配置远程仓库时采用默认配置,并没有动机去深究或改变。
|
||||
|
||||
### “tree-ish”
|
||||
|
||||
在 `git checkout` 的手册页中,我们可以看到:
|
||||
|
||||
```
|
||||
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>...
|
||||
```
|
||||
|
||||
那么这里的 `tree-ish` 是什么意思呢?其实当你执行 `git checkout THING .` 时,`THING` 可以是以下的任一种:
|
||||
|
||||
* 一个提交 ID(如 `182cd3f`)
|
||||
* 对一个提交 ID 的引用(如 `main` 或 `HEAD^^` 或 `v0.3.2`)
|
||||
* 一个位于提交内的子目录(如 `main:./docs`)
|
||||
* 可能就这些?
|
||||
|
||||
对我个人来说,“提交内的目录”这个功能我从未使用过,从我的视角看,`tree-ish` 可以解读为“提交或对提交的引用”。
|
||||
|
||||
### “索引”、“暂存”、“缓存”
|
||||
|
||||
这些术语都指向的是同一样东西(文件 `.git/index`,当你执行 `git add` 时,你的变动会在这里被暂存):
|
||||
|
||||
* `git diff --cached`
|
||||
* `git rm --cached`
|
||||
* `git diff --staged`
|
||||
* 文件 `.git/index`
|
||||
|
||||
尽管它们都是指向同一个文件,但在实际使用中,这些术语的应用方式有所不同:
|
||||
|
||||
* 很显然,`--index` 和 `--cached` 并不总是表示同一种意思。我自己从未使用 `--index`,所以具体细节我就不展开讨论了,但是你可以在 Junio Hamano(Git 的主管维护者)[的博客文章][26] 中找到详细解释。
|
||||
* “索引” 会包含未跟踪的文件(我猜可能是对性能的考虑),但你通常不会把未跟踪的文件考虑在“暂存区”内。
|
||||
|
||||
### “重置”、“还原”、“恢复”
|
||||
|
||||
许多人提到,“<ruby>重置<rt>reset</rt></ruby>”、“<ruby>还原<rt>revert</rt></ruby>” 和 “<ruby>恢复<rt>restore</rt></ruby>” 这三个词非常相似,易使人混淆。
|
||||
|
||||
我认为这部分的困惑来自以下原因:
|
||||
|
||||
* `git reset --hard` 和 `git restore .` 单独使用时,基本上达到的效果是一样的。然而,`git reset --hard COMMIT` 和 `git restore --source COMMIT .` 相互之间是完全不同的。
|
||||
* 相应的手册页没有给出特别有帮助的描述:
|
||||
* `git reset`: “重置当前 `HEAD` 到指定的状态”
|
||||
* `git revert`: “还原某些现有的提交”
|
||||
* `git restore`: “恢复工作树文件”
|
||||
|
||||
虽然这些简短的描述为你详细说明了哪个名词受到了影响(“当前 `HEAD`”,“某些提交”,“工作树文件”),但它们都预设了你已经知道在这种语境中,“重置”、“还原”和“恢复”的准确含义。
|
||||
|
||||
以下是对它们各自功能的简要说明:
|
||||
|
||||
* 重置 —— `git revert COMMIT`: 在你当前的分支上,创建一个新的提交,该提交是 `COMMIT` 的“反向”操作(如果 `COMMIT` 添加了 3 行,那么新的提交就会删除这 3 行)。
|
||||
* 还原 —— `git reset --hard COMMIT`: 强行将当前分支回退到 `COMMIT` 所在的状态,抹去自 `COMMIT` 以来的所有更改。这是一个高风险的操作。
|
||||
* 恢复 —— `git restore --source=COMMIT PATH`: 将 `PATH` 中的所有文件回退到 `COMMIT` 当时的状态,而不扰乱其他文件或提交历史。
|
||||
|
||||
### “未跟踪的文件”、“远程跟踪分支”、“跟踪远程分支”
|
||||
|
||||
在 Git 中,“跟踪” 这个词以三种相关但不同的方式使用:
|
||||
|
||||
* “<ruby>未跟踪的文件<rt>Untracked files</rt></ruby>”:在 `git status` 命令的输出中可以看到。这里,“未跟踪” 意味着这些文件不受 Git 管理,不会被计入提交。
|
||||
* “<ruby>远程跟踪分支<rt>remote tracking branch</rt></ruby>” 例如 `origin/main`。此处的“远程跟踪分支”是一个本地引用,旨在记住上次执行 `git pull` 或 `git fetch` 时,远程 `origin` 上 `main` 分支的状态。
|
||||
* 我们经常看到类似 “分支 `foo` 被设置为跟踪 `origin` 上的远程分支 `bar` ”这样的提示。
|
||||
|
||||
即使“未跟踪的文件”和“远程跟踪分支”都用到了“跟踪”这个词,但是它们所在的上下文完全不同,所以没有太多混淆。但是,对于以下两种方式的“跟踪”使用,我觉得可能会产生些许困扰:
|
||||
|
||||
* `main` 是一个跟踪远程的分支
|
||||
* `origin/main` 是一个远程跟踪分支
|
||||
|
||||
然而,在 Git 中,“跟踪远程的分支” 和 “远程跟踪分支” 是不同的事物,理解它们之间的区别非常关键!下面是对这两者区别的一个简单概述:
|
||||
|
||||
* `main` 是一个分支。你可以在它上面做提交,进行合并等操作。在 `.git/config` 中,它通常被配置为 “追踪” 远程的 `main` 分支,这样你就可以用 `git pull` 和 `git push` 来同步和上传更改。
|
||||
* `origin/main` 则并不是一个分支,而是一个“远程跟踪分支”,这并不是一种真正的分支(这有些抱歉)。你**不能**在此基础上做提交。只有通过运行 `git pull` 或 `git fetch` 获取远程 `main` 的最新状态,才能更新它。
|
||||
|
||||
我以前没有深入思考过这种模糊的地方,但我认为很容易看出为什么它会让人感到困惑。
|
||||
|
||||
### 签出
|
||||
|
||||
签出做了两个完全无关的事情:
|
||||
|
||||
* `git checkout BRANCH` 用于切换分支
|
||||
* `git checkout file.txt` 用于撤销对 `file.txt` 的未暂存修改
|
||||
|
||||
这是众所周知的混淆点,因此 Git 实际上已经将这两个功能分离到了 `git switch` 和 `git restore`(尽管你还是可以使用 `checkout`,就像我一样,在不愿丢弃 15 年对 `git checkout` 肌肉记忆的情况下)。
|
||||
|
||||
再者,即使用了 15 年,我仍然记不住 `git checkout main file.txt` 用于从 `main` 分支恢复 `file.txt` 版本的命令参数。
|
||||
|
||||
我觉得有时你可能需要在 `checkout` 命令后面加上`--`,帮助区分哪个参数是分支名,哪个是路径,但我并未这么使用过,也不确定何时需要这样做。
|
||||
|
||||
### 参考日志(reflog)
|
||||
|
||||
有很多人把 `reflog` 读作 `re-flog`,而不是 `ref-log`。由于本文已经足够长,我这里不会深入讨论参考日志,但值得注意的是:
|
||||
|
||||
* 在 Git 中,“参考” 是一个泛指分支、标签和 `HEAD` 的术语
|
||||
* 参考日志(“reflog”)则为你提供了一个参考历次记录的历史追踪
|
||||
* 它是从一些极端困境中拯救出来的利器,比如说你不小心删除了重要的分支
|
||||
* 我觉得参考日志是 Git 用户界面中最难懂的部分,我总是试图避免使用它。
|
||||
|
||||
### 合并 vs 变基 vs 遴选
|
||||
|
||||
有许多人提及他们常常对于合并和变基的区别感到迷惑,并且不理解变基中的“<ruby>基<rt>base</rt></ruby>”指的是什么。
|
||||
|
||||
我会在这里尽量简要的进行描述,但是这些一句话的解释最终可能并不那么明了,因为每个人使用合并和变基创建工作流程时的方式差别挺大,要真正理解合并和变基,你必须理解工作流程。此外,有图示会更好理解。不过这个话题可能需要一篇独立的博客文章来完整讨论,所以我不打算深入这个问题。
|
||||
|
||||
* 合并会创建一个新的提交,用来融合两个分支
|
||||
* 变基则会逐个地把当前分支上的提交复制到目标分支
|
||||
* 遴选跟变基类似,但是语法完全不同(一个显著的差异是变基是从当前分支复制提交,而遴选则会把提交复制到当前分支)
|
||||
|
||||
### `rebase --onto`
|
||||
|
||||
在 `git rebase` 中,存在一个被称为 `--onto` 的选项。这一直让我感到困惑,因为 `git rebase main` 的核心功能就是将当前分支变基**到** `main` 运行上。那么,额外的 `--onto` 参数又是怎么回事呢?
|
||||
|
||||
我进行了一番查找,`--onto` 显然解决了一个我几乎没有或者说从未遇到过的问题,但我还是会记录下我对它的理解。
|
||||
|
||||
```
|
||||
A - B - C (main)
|
||||
\
|
||||
D - E - F - G (mybranch)
|
||||
|
|
||||
otherbranch
|
||||
```
|
||||
|
||||
设想一下,出于某种原因,我只想把提交 `F` 和 `G` 变基到 `main` 上。我相信这应该是某些 Git 工作流中会经常遇到的场景。
|
||||
|
||||
显然,你可以运行 `git rebase --onto main otherbranch mybranch` 来完成这个操作。对我来说,在这个语法中记住 3 个不同的分支名顺序似乎是不可能的(三个分支名,对我来说实在太多了),但由于我从很多人那里听说过,我想它一定有它的用途。
|
||||
|
||||
### 提交
|
||||
|
||||
有人提到他们对 Git 中的提交作为一词双义(既作为动词也作为名词)的用法感到困惑。
|
||||
|
||||
例如:
|
||||
|
||||
* 动词:“别忘了经常提交”
|
||||
* 名词:“`main` 分支上最新的提交”
|
||||
|
||||
我觉得大多数人应该能很快适应这个双关的用法,但是在 SQL 数据库中的“提交”用法与 Git 是有所不同,我认为在 SQL 数据库中,“提交”只是作为一个动词(你使用 `COMMIT` 来结束一个事务),并不作为名词。
|
||||
|
||||
此外,在 Git 中,你可以从以下三个不同的角度去考虑一个 Git 提交:
|
||||
|
||||
1. 表示当前每个文件状态的**快照**
|
||||
2. 与父提交的**差异**
|
||||
3. 记录所有先前提交的**历史**
|
||||
|
||||
这些理解都是不错的:不同的命令在所有的这些情况下都会使用提交。例如,`git show` 将提交视为一个差异,`git log` 把提交看作是历史,`git restore` 则将提交理解为一个快照。
|
||||
|
||||
然而,Git 的术语并无太多助于你理解一个给定的命令正在如何使用提交。
|
||||
|
||||
### 更多令人困惑的术语
|
||||
|
||||
以下是更多让人觉得混淆的术语。我对许多这些术语的意思并不十分清楚。
|
||||
|
||||
我自己也不是很理解的东西:
|
||||
|
||||
* `git pickaxe` (也许这是 `git log -S` 和 `git log -G`,它们用于搜索以前提交的差异?)
|
||||
* 子模块(我知道的全部就是它们并不以我想要的方向工作)
|
||||
* Git 稀疏检出中的 “cone mode” (没有任何关于这个的概念,但有人提到过)
|
||||
|
||||
人们提及觉得混淆,但我在这篇已经 3000 字的文章中略过的东西:
|
||||
|
||||
* blob、tree
|
||||
* “合并” 的方向
|
||||
* “origin”、“upstream”,“downstream”
|
||||
* `push` 和 `pull` 并不是对立面
|
||||
* `fetch` 和 `pull` 的关系(pull = fetch + merge)
|
||||
* git porcelain
|
||||
* 子树
|
||||
* 工作树
|
||||
* 暂存
|
||||
* “master” 或者 “main” (听起来它在 Git 内部有特殊含义,但其实并没有)
|
||||
* 何时需要使用 `origin main`(如 `git push origin main`)vs `origin/main`
|
||||
|
||||
人们提及感到困惑的 Github 术语:
|
||||
|
||||
* “<ruby>拉取请求<rt>pull request</rt></ruby>” (与 Gitlab 中的 “<ruby>合并请求<rt>merge request</rt></ruby>” 相比,人们似乎认为后者更清晰)
|
||||
* “压扁并合并” 和 “变基并合并” 的作用 (在昨天我从未听说过 `git merge --squash`,我一直以为 “压扁并合并” 是 Github 的特殊功能)
|
||||
|
||||
### 确实是 “每个 Git 术语”
|
||||
|
||||
我惊讶地发现,几乎 Git 的每个其他核心特性都被至少一人提及为某种方式中的困惑。我对听到更多我错过的混淆的 Git 术语的例子也有兴趣。
|
||||
|
||||
关于这个,有另一篇很棒的 2012 年的文章叫做《[最困惑的 Git 术语][27]》。它更多的讨论的是 Git 术语与 CVS 和 Subversion 术语的关联。
|
||||
|
||||
如果我要选出我觉得最令人困惑的 3 个 Git 术语,我现在会选:
|
||||
|
||||
* `head` 是一个分支,`HEAD` 是当前分支
|
||||
* “远程跟踪分支” 和 “跟踪远程的分支” 是不同的事物
|
||||
* “索引”、“暂存的”、“已缓存的” 全部指的同一件事
|
||||
|
||||
### 就这样了!
|
||||
|
||||
在写这些的过程中,我学到了不少东西。我了解到了一些新的关于Git的事实,但更重要的是,现在我对于别人说Git的所有功能和特性都引起困惑有了更深的理解。
|
||||
|
||||
许多问题我之前根本没考虑过,比如我从来没有意识到,在讨论分支时,“跟踪”这个词的用法是多么地特别。
|
||||
|
||||
另外,尽管我已经尽力做到准确无误,但由于我涉猎到了一些我从未深入探讨过的Git的角落,所以可能还是出现了一些错误。
|
||||
|
||||
*(题图:DALL-E/A/e1e5b964-5f32-41bb-811e-8978fb8556d4)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2023/11/01/confusing-git-terminology/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://social.jvns.ca/@b0rk/111330564535454510
|
||||
[2]: tmp.MK9dzkPKFA#head-and-heads
|
||||
[3]: tmp.MK9dzkPKFA#detached-head-state
|
||||
[4]: tmp.MK9dzkPKFA#ours-and-theirs-while-merging-or-rebasing
|
||||
[5]: tmp.MK9dzkPKFA#your-branch-is-up-to-date-with-origin-main
|
||||
[6]: tmp.MK9dzkPKFA#head-head-head-head-head-2-head-2
|
||||
[7]: tmp.MK9dzkPKFA#and
|
||||
[8]: tmp.MK9dzkPKFA#can-be-fast-forwarded
|
||||
[9]: tmp.MK9dzkPKFA#reference-symbolic-reference
|
||||
[10]: tmp.MK9dzkPKFA#refspecs
|
||||
[11]: tmp.MK9dzkPKFA#tree-ish
|
||||
[12]: tmp.MK9dzkPKFA#index-staged-cached
|
||||
[13]: tmp.MK9dzkPKFA#reset-revert-restore
|
||||
[14]: tmp.MK9dzkPKFA#untracked-files-remote-tracking-branch-track-remote-branch
|
||||
[15]: tmp.MK9dzkPKFA#checkout
|
||||
[16]: tmp.MK9dzkPKFA#reflog
|
||||
[17]: tmp.MK9dzkPKFA#merge-vs-rebase-vs-cherry-pick
|
||||
[18]: tmp.MK9dzkPKFA#rebase-onto
|
||||
[19]: tmp.MK9dzkPKFA#commit
|
||||
[20]: tmp.MK9dzkPKFA#more-confusing-terms
|
||||
[21]: https://git-scm.com/docs/gitglossary
|
||||
[22]: https://nitaym.github.io/ourstheirs/
|
||||
[23]: https://git-scm.com/docs/git-range-diff
|
||||
[24]: https://matthew-brett.github.io/pydagogue/pain_in_dots.html
|
||||
[25]: https://git-scm.com/docs/revisions
|
||||
[26]: https://gitster.livejournal.com/39629.html
|
||||
[27]: https://longair.net/blog/2012/05/07/the-most-confusing-git-terminology/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/07/200630j90z4xz7tttgztr9.jpg
|
||||
@@ -0,0 +1,85 @@
|
||||
[#]: subject: "An Interesting CMS With Version Control is Now Open-Source!"
|
||||
[#]: via: "https://news.itsfoss.com/tinacms-open-source/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16431-1.html"
|
||||
|
||||
一个有趣的带有版本控制的 CMS 现已开源!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 欢迎这个项目的加入,使我们的开源世界更加丰富。
|
||||
|
||||
最近,TinaCMS 通过**宣布已经彻底实现开源**,使**自我托管变得更加便捷**,从而成为了 [开源 CMS][1] 俱乐部的新成员。
|
||||
|
||||
如果你对此还不太了解,那么简单介绍一下,CMS(内容管理系统)是一种便捷的管理网站内容的工具,其中著名的系统有 WordPress、Ghost 和 Joomla 等。
|
||||
|
||||
就 [TinaCMS][2] 而言,它是一款集成了 Git 版本控制的 [无头 CMS][3],重点是代码优先和完全类型化。像 Unity 这样的知名公司就使用它来维持其文档的更新。🤯
|
||||
|
||||
那我们现在就来深入了解一下 TinaCMS。
|
||||
|
||||
### TinaCMS:可以期待什么?
|
||||
|
||||
![][5]
|
||||
|
||||
在第一次发布自托管 TinaCMS 后端的工作基础上,开发者们现已经使 TinaCMS 全面开源并在 [Apache 2.0 许可][6] 下全面可用。
|
||||
|
||||
早些时候,**自托管后端是在“源码可用”许可下提供的**。但是,正如我们过去所看到的,它在某些情况下可能会受到限制。更新后的许可证现在应该更准确地反映 TinaCMS 的开源性质。
|
||||
|
||||
TinaCMS 的 James O'Halloran 还补充道:
|
||||
|
||||
> 尽管这是一个非常宽松的许可证,我们依然希望开发者在基于 TinaCMS 构建应用的过程中能感到舒心,无需担心他们会遇到极限。
|
||||
|
||||
如果你问我,给开发者更多的权力就是最好的!😄
|
||||
|
||||
你是否对**布署你自己的 TinaCMS 实例**产生了兴趣?
|
||||
|
||||
如果你准备尝试,那么有两个主要的方式可以进行 TinaCMS 的自托管。
|
||||
|
||||
首先是一种更为直接的方法,开发者们也为这种方法展示了一个样例。这种方式是通过 [GitHub][8] 和 [Vercel][9] 实现的,可以在短短几分钟内完成部署。
|
||||
|
||||
你自己可以试试看。👇
|
||||
|
||||
> 📋 你可以在 [GitHub][10] 上访问这个自托管演示。
|
||||
|
||||
另一种方式是**在其它平台上部署**,**自托管的 TinaCMS 版本并不依赖于 Vercel**,而是能够与 [TinaCMS 支持的任何框架][11] 配合使用。
|
||||
|
||||
你只需**确保你的平台支持 express 请求处理程序**,以便后端 API 能够正常运行。
|
||||
|
||||
有关部署的更多信息,我建议你访问 [官方文档][12]。
|
||||
|
||||
你还可以通过官方 [公告博客][13] 进行更深入的了解。
|
||||
|
||||
💬 今年有很多项目都进行了开源。那么你认为接下来哪些项目应该开源呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/tinacms-open-source/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/open-source-cms/
|
||||
[2]: https://tina.io/
|
||||
[3]: https://en.wikipedia.org/wiki/Headless_content_management_system
|
||||
[4]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/11/TinaCMS.png
|
||||
[6]: https://www.apache.org/licenses/LICENSE-2.0
|
||||
[7]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[8]: https://github.com/
|
||||
[9]: https://vercel.com/
|
||||
[10]: https://github.com/tinacms/tina-self-hosted-demo
|
||||
[11]: https://tina.io/docs/integration/frameworks/
|
||||
[12]: https://tina.io/docs/self-hosted/overview/
|
||||
[13]: https://tina.io/blog/Tinacms-is-now-fully-open-source/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/01/081252h5yi8hhtkfffy7w8.jpg
|
||||
@@ -0,0 +1,106 @@
|
||||
[#]: subject: "AUR Helper Paru 2.0 Upgrade is Here With Features for Power Users"
|
||||
[#]: via: "https://news.itsfoss.com/aur-helper-paru-2-0/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16433-1.html"
|
||||
|
||||
Paru 2.0 版本升级,为高级用户带来了新特性
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 经过了一段时间的等待,Paru 2.0 版本终于发布了。
|
||||
|
||||
如果你不熟悉 Paru,它其实是一个 [AUR 帮助程序][1],可以自动完成手动构建 [PKGBUILD][2] 的过程,方便在 Arch Linux 中安装软件包。
|
||||
|
||||
现新版 Paru 2.0 正式发布,此次更新中包含了一些重要的改进。
|
||||
|
||||
不过在深入了解之前,你需要确保自己知道如何解决在使用 AUR 帮助程序构建软件包时可能遇到的问题。如果你刚接触 Linux,我们建议你坚持使用你熟悉的包管理器。
|
||||
|
||||
### 🆕 Paru 2.0: 有什么新变化?
|
||||
|
||||
![][3]
|
||||
|
||||
Paru 2.0 版本是一次重大更新,目标是带来一些主要的改变,尤其是为了满足高级用户的需求。
|
||||
|
||||
该版本距离上个重大版本的发布已经过去了一年多。开发者表示由于时间不足,需要完成的改变还有很多。
|
||||
|
||||
由于很长一段时间没有发布版本,所以开发者提到了这个版本的很多内容都没有经过严格的测试,可能随后会发布 .1 补丁。
|
||||
|
||||
现在,我们来看看 Paru 2.0 版本的重要改进点。
|
||||
|
||||
首先,现在你可以把非 AUR 的 `PKGBUILD` 集成到构建引擎中。你可以在你的 `paru.conf` 中加入其他的 pkgbuild 仓库,具体命令如下:
|
||||
|
||||
```
|
||||
[repo_name]
|
||||
Url = https://path/to/git/repo
|
||||
```
|
||||
|
||||
然后运行下列命令,同步这个新加入的仓库:
|
||||
|
||||
```
|
||||
paru -Sy --pkgbuilds
|
||||
```
|
||||
|
||||
此外,你还可以指定一个本地路径,指向你的本地 pkgbuild 仓库。
|
||||
|
||||
这些新加入的仓库比 AUR 具有优先级,并且它们还允许包含 AUR 的依赖项。
|
||||
|
||||
而新加入的另一项特性就是一个名为 `.` 的新的自动 pkgbuild 仓库,这个新的仓库在 `paru.conf` 中是无法看到的。
|
||||
|
||||
这个新的特性允许执行 `paru -S ./foo` 命令,其中 `foo` 是当前目录下的某个包的名字。
|
||||
|
||||
这样你就能在同一个目录中管理一系列相互依赖的 pkgbuild,通过上面的命令,你可以构建其中任何一个pkgbuild。
|
||||
|
||||
当你开始构建它们时,Paru 将会自动解决和构建该路径下的 pkgbuild 包的依赖问题。
|
||||
|
||||
#### 🛠️ 其他的改变和优化
|
||||
|
||||
除了上述的改变,本次更新还带来了其他一些变动:
|
||||
|
||||
* 修复了在运行 `paru -Sc` 时没有 sudo 的问题。
|
||||
* 日期现在会显示为你的系统的本地时区。
|
||||
* 改进了搜索功能,现在默认是启用状态。
|
||||
* 在最后的 Paru 确认后,无需再额外对 pacman 确认安装。
|
||||
* `--chroot` 现在无需本地的仓库,当然,如果有的话它会工作得更好。
|
||||
|
||||
对于这个版本的更深入的了解,你可以参阅 [发布说明][4]。
|
||||
|
||||
### 📥 获取 Paru 2.0
|
||||
|
||||
如果你是从 AUR 安装的 Paru,你可以直接在 AUR 中升级到 2.0 版本。但如果你是自己构建的 Paru ,那可以试试使用 `-U` 命令进行更新,或者重新构建一次。
|
||||
|
||||
如果你是第一次安装 Paru ,你可以前往其 [GitHub 仓库][5] ,按照里面的安装说明操作就可以了。
|
||||
|
||||
> **[Paru 2.0(GitHub)][4]**
|
||||
|
||||
如果你想要了解更多关于 Paru 的信息,或者想学习如何安装 Paru,我强烈建议你浏览我们关于 [Paru AUR 帮助程序][6] 的文章:
|
||||
|
||||
> **[Paru - 基于 Yay 的 AUR 助手和 Pacman 封装器][6]**
|
||||
|
||||
💬 Arch 用户,你对这次的 Paru 版本升级感到兴奋吗?分享一下你的想法吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/aur-helper-paru-2-0/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://wiki.archlinux.org/title/AUR_helpers
|
||||
[2]: https://wiki.archlinux.org/title/PKGBUILD
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/Paru_2.0.png
|
||||
[4]: https://github.com/Morganamilo/paru/releases/tag/v2.0.0
|
||||
[5]: https://github.com/Morganamilo/paru/
|
||||
[6]: https://itsfoss.com/paru-aur-helper/
|
||||
[7]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/01/224300e5sire0nczj55sc8.jpg
|
||||
148
published/202312/20231129 Change Keyboard Layout in Ubuntu.md
Normal file
148
published/202312/20231129 Change Keyboard Layout in Ubuntu.md
Normal file
@@ -0,0 +1,148 @@
|
||||
[#]: subject: "Change Keyboard Layout in Ubuntu"
|
||||
[#]: via: "https://itsfoss.com/ubuntu-change-keyboard/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16442-1.html"
|
||||
|
||||
在 Ubuntu 中更改键盘布局
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在 Ubuntu 中拥有多个键盘布局并在它们之间切换非常简单。下面就教你怎么做。
|
||||
|
||||
当 [你安装Ubuntu][1] 时,你可以选择键盘布局。你可能已经默认选择了美国英语布局,现在你想将其更改为英国英语、印度英语或你选择的任何其他键盘布局。
|
||||
|
||||
好在你可以在同一个 Ubuntu 系统中拥有多种键盘布局。这是相当方便的。
|
||||
|
||||
在本教程中,你将学习:
|
||||
|
||||
* 在 Ubuntu 桌面中添加新的键盘布局
|
||||
* 在可用键盘布局之间切换
|
||||
* 删除额外的键盘布局
|
||||
* 改变键盘布局的命令行方法
|
||||
|
||||
### 步骤 1:添加新的键盘布局
|
||||
|
||||
要更改键盘布局,你需要先在系统上启用另一个键盘布局。
|
||||
|
||||
进入系统设置。按 Ubuntu 中的 `Super` 键(Windows 键)并搜索“Setting”。
|
||||
|
||||
![][2]
|
||||
|
||||
在系统设置中,在左侧边栏中查找 <ruby>键盘<rt>Keyboard</rt></ruby>。选择后,你应该会在 <ruby>输入源<rt>Input Sources</rt></ruby> 下看到添加新键盘布局的选项。单击 “+” 号。
|
||||
|
||||
![Add new keyboard layout][3]
|
||||
|
||||
你将看到一些键盘选项,但如果单击三个点,你可以获得更多选项。你可以在此处滚动浏览或搜索。
|
||||
|
||||
![There are more keyboard layouts available][4]
|
||||
|
||||
单击你想要的键盘布局。请记住,所选的键盘布局可能有子布局。
|
||||
|
||||
例如,当我单击**英语(印度)**时,它会向我显示从丹麦到加纳等的一些英语键盘布局。在这里,我选择了**英语(印度,卢比)**键盘。这是将要添加的键盘布局。
|
||||
|
||||
![][5]
|
||||
|
||||
你将在“输入源”下看到新添加的键盘布局。
|
||||
|
||||
![][6]
|
||||
|
||||
这与我之前在 [Ubuntu 中添加印地语键盘布局][7] 时使用的方法相同。
|
||||
|
||||
### 步骤 2:切换键盘布局
|
||||
|
||||
这样,你就成功添加了另一个键盘布局。但它没有被使用。你必须在可用的输入源之间切换。
|
||||
|
||||
有两种方法可以做到这一点。
|
||||
|
||||
#### 方法 1:同时使用 Super+Space 键
|
||||
|
||||
切换键盘布局的更快方法是 [使用键盘快捷键][8] ,同时按 `Super` 键(Windows 键)和空格键。它将立即显示所有启用的键盘布局。
|
||||
|
||||
![][9]
|
||||
|
||||
你可以在按住 `Super` 键的同时多次按空格键在可用选项之间移动。
|
||||
|
||||
#### 方法 2:使用鼠标切换键盘布局
|
||||
|
||||
记住所有这些键盘快捷键并不容易,这是可以理解的。
|
||||
|
||||
当你在系统上启用多个键盘布局时,你会注意到键盘布局名称显示在面板的右上角。单击它,你将看到在布局之间切换的选项或查看所选的键盘布局。
|
||||
|
||||
![Switch between keyboard layouts][10]
|
||||
|
||||
### 额外提示:删除额外的键盘布局
|
||||
|
||||
不喜欢系统中的多个键盘布局? 不用担心。你可以轻松删除它们。
|
||||
|
||||
如你之前所见,再次进入键盘设置。单击你选择的键盘旁边的三个垂直点符号。你应该在这里看到删除选项。
|
||||
|
||||
![][11]
|
||||
|
||||
### 使用命令行更改键盘布局(不推荐)
|
||||
|
||||
如果你是桌面用户,我强烈推荐上面讨论的图形方法。
|
||||
|
||||
如果你在服务器上并且必须使用其他键盘布局,则可以选择命令行。
|
||||
|
||||
现在,有多种方法可以更改 Linux 中的键盘布局。但对于 Ubuntu,我更喜欢 [dpkg][12] 方式。
|
||||
|
||||
```
|
||||
sudo dpkg-reconfigure keyboard-configuration
|
||||
```
|
||||
|
||||
输入你的密码,你将在终端中看到:
|
||||
|
||||
![][13]
|
||||
|
||||
要在此 TUI(终端用户界面)中导航,请使用箭头键在可用选项之间移动。**使用 `Tab` 键转至 “OK” 或 “Cancel” 选项**。当你位于其中之一时,请按回车键确认你的选择。
|
||||
|
||||
选择你选择的国家/地区,然后你可以选择键盘布局。
|
||||
|
||||
![][14]
|
||||
|
||||
添加附加键盘后,系统会要求你分配键盘快捷键以在它们之间进行切换。
|
||||
|
||||
![][15]
|
||||
|
||||
你也可以将新键盘布局设置为系统中的默认布局和唯一布局。不过,如果你在不相似的语言之间执行此操作,这可能会存在风险。我的意思是,如果你使用英语美国键盘(物理)并将布局切换为匈牙利语,则你将无法使用所有按键。
|
||||
|
||||
之后你会看到几个屏幕。
|
||||
|
||||
如果你对新的键盘布局不满意,可以再次键入相同的命令,然后重新配置布局。
|
||||
|
||||
*(题图:MJ/f03362cf-72d0-4003-b334-44c533e113a0)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/ubuntu-change-keyboard/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/install-ubuntu/
|
||||
[2]: https://itsfoss.com/content/images/2023/11/start-system-settings-ubuntu-1.png
|
||||
[3]: https://itsfoss.com/content/images/2023/11/adding-new-keyboard-layout-ubuntu-1.png
|
||||
[4]: https://itsfoss.com/content/images/2023/11/adding-keyboard-layout-1-1.png
|
||||
[5]: https://itsfoss.com/content/images/2023/11/new-keyboard-layout-added-ubuntu-1.png
|
||||
[6]: https://itsfoss.com/content/images/2023/11/multiple-keyboards-ubuntu.png
|
||||
[7]: https://itsfoss.com/type-indian-languages-ubuntu/
|
||||
[8]: https://itsfoss.com/ubuntu-shortcuts/
|
||||
[9]: https://itsfoss.com/content/images/2023/11/switch-keyboard-layout-using-keyboard-shortcut-in-ubuntu.png
|
||||
[10]: https://itsfoss.com/content/images/2023/11/switching-keyboard-layout-ubuntu-1.png
|
||||
[11]: https://itsfoss.com/content/images/2023/11/remove-additional-keyboard-layout-ubuntu-1.png
|
||||
[12]: https://wiki.debian.org/dpkg
|
||||
[13]: https://itsfoss.com/content/images/2023/11/changing-keyboard-layout-ubuntu-command-line.png
|
||||
[14]: https://itsfoss.com/content/images/2023/11/adding-keyboard-ubuntu-command-line-1.png
|
||||
[15]: https://itsfoss.com/content/images/2023/11/keyboard-switch-option.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/05/160115uz3s3y093fak0za9.png
|
||||
@@ -0,0 +1,125 @@
|
||||
[#]: subject: "PeerTube Gets Better Features Than YouTube With Version 6 Release"
|
||||
[#]: via: "https://news.itsfoss.com/peertube-v6/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16460-1.html"
|
||||
|
||||
PeerTube 发布第 6 版,获得比 YouTube 更好的功能
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 去中心化开源平台 PeerTube 大升级,这是一个很好的 YouTube 替代品。
|
||||
|
||||
曾经想过让你的视频平台摆脱大型科技公司的控制吗?
|
||||
|
||||
嗯,对于许多人来说,PeerTube 是一个相当不错的选择,因为它具有**开源和自托管的性质**。由 [Framasoft][1] 开发,开发人员一直忙于定期向 PeerTube 添加新功能。
|
||||
|
||||
当然,作为一个去中心化平台,它可能无法为你提供与 YouTube 相同的用户体验(或质量)。然而,它是 [最好的去中心化开源平台][2] 之一。
|
||||
|
||||
这次,他们推出了一个新版本,即 **PeerTube V6**,并承诺将进行大量改进。
|
||||
请允许我带你了解这些。
|
||||
|
||||
### 🆕 PeerTube V6:有什么新内容?
|
||||
|
||||
![The PeerTube Mascot for V6.][3]
|
||||
|
||||
PeerTube V6 版本是一个主要版本,根据从用户那里收到的反馈,**引入了社区最需要的一些功能**。
|
||||
|
||||
一些**关键亮点**包括:
|
||||
|
||||
* 视频章节
|
||||
* 视频故事板
|
||||
* 替换上传的视频
|
||||
* 视频密码保护
|
||||
|
||||
#### 视频章节
|
||||
|
||||
![][4]
|
||||
|
||||
你现在可以**向视频添加章节**以指定视频的不同部分。这是一个非常方便的小功能,**增强了观看者的体验**,使他们能够看到视频的内容。
|
||||
|
||||
正如你在上面看到的,在章节设置了特定的标题和时间码后,会出现标记将进度条分为不同的部分。
|
||||
|
||||
#### 视频故事板
|
||||
|
||||
![][5]
|
||||
|
||||
V6 版本带来的另一个功能是**能够通过将鼠标悬停在进度条上或拖动进度条来预览视频**。
|
||||
|
||||
这也被称为“故事板”功能,它在大多数流行的视频流平台上都有,现在 PeerTube 也拥有它。
|
||||
|
||||
### 替换上传的视频
|
||||
|
||||
![][6]
|
||||
|
||||
有时会发生错误,错误编辑的视频会呈现给观众。幸运的是,有了 PeerTube V6,这一切都成为了过去。
|
||||
|
||||
用户现在只需点击几下即可选择**重新上传视频以替换旧视频**。这样做时,URL、标题、信息、统计数据和评论将保持不变。
|
||||
|
||||
但是,此功能必须由 PeerTube 实例的管理员启用才能工作。被替换的视频将被贴上“视频重新上传”标签。
|
||||
|
||||
#### 视频密码保护
|
||||
|
||||
![][7]
|
||||
|
||||
你现在可以决定**为视频设置密码**以限制访问或分发专有内容。
|
||||
|
||||
管理员和开发人员可以通过 PeerTube 的内部 **REST API** 获得更大的灵活性,他们可以**设置和存储任意数量的密码**,从而更轻松地授予/撤销对视频的访问权限。
|
||||
|
||||
#### 🛠️ 其他更改和改进
|
||||
|
||||
除了上述亮点之外,还有一些值得注意的改进:
|
||||
|
||||
* 更好的远程运行管理。
|
||||
* SEO 和视频链接共享已得到改进。
|
||||
* 针对辅助功能和键盘导航的各种修复。
|
||||
* 视频播放器已得到改进,播放新视频时不再重新加载并保存当前播放器设置。
|
||||
|
||||
你可以通过官方的 [发行说明][9] 和 [公告博客][10] 了解更多信息。
|
||||
|
||||
### 📥 获取 PeerTube V6
|
||||
|
||||
你可以前往[官方网站][11]开始使用 PeerTube V6。
|
||||
|
||||
> **[PeerTube][11]**
|
||||
|
||||
**对于现有用户**,你可以按照 [官方文档][12] 升级你的 PeerTube。
|
||||
|
||||
看到谷歌越来越 [积极][13] 地将 YouTube 平台货币化,我们很高兴看到像 PeerTube 这样的由社区驱动平台依然存在。
|
||||
|
||||
💬 PeerTube 正在成为一个不错的 YouTube 替代品,你觉得怎么样?
|
||||
|
||||
*(题图:DA/117fe978-0b8e-4183-b580-72fea7938b02)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/peertube-v6/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://framasoft.org/en/
|
||||
[2]: https://itsfoss.com/mainstream-social-media-alternaives/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/PeerTube_V6_a.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/11/PeerTube_V6_b.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/11/PeerTube_V6_c.jpg
|
||||
[6]: https://news.itsfoss.com/content/images/2023/11/PeerTube_V6_d.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/11/PeerTube_V6_e.png
|
||||
[8]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[9]: https://github.com/Chocobozzz/PeerTube/releases/tag/v6.0.0
|
||||
[10]: https://joinpeertube.org/news/release-6.0
|
||||
[11]: https://joinpeertube.org/
|
||||
[12]: https://docs.joinpeertube.org/install/any-os
|
||||
[13]: https://news.itsfoss.com/youtube-firefox/
|
||||
[14]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/11/162052hxs4n36n8881x46s.png
|
||||
@@ -0,0 +1,80 @@
|
||||
[#]: subject: "Cinnamon 6.0 Release Debuts Experimental Wayland Support!"
|
||||
[#]: via: "https://news.itsfoss.com/cinnamon-6-0-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16439-1.html"
|
||||
|
||||
Cinnamon 6.0 首次推出实验性 Wayland 支持!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Cinnamon 6.0 与 Wayland 会话听起来很有趣!
|
||||
|
||||
[Cinnamon 成为出色的 Linux 桌面环境][1] 有很多原因,Linux 社区喜爱 [Linux Mint][2] 部分归功于它。
|
||||
|
||||
它提供的用户体验和 [定制 Cinnamon Desktop 的各种方法][3] 吸引了用户。
|
||||
|
||||
现在,这个桌面环境升级了,Cinnamon 6.0 来了。那么,让我们来看看吧。
|
||||
|
||||
### Cinnamon 6.0:可以期待什么? 🤔
|
||||
|
||||
![Cinnamon 6.0 on Wayland][4]
|
||||
|
||||
Cinnamon 6.0 的一大亮点就是**Wayland**。这项功能 [酝酿][5] 已久,现在作为**实验支持**出现。
|
||||
|
||||
从 Linux Mint 21.3 开始,你可以从登录屏幕切换到 Wayland 会话。
|
||||
|
||||
除了人们可能期望从 Wayland 获得的通常的细节之外,似乎还有**对分数缩放的实验性支持**,这一点从该版本的“添加缩放监视器帧缓冲区”提交中可以明显看出。
|
||||
|
||||
不过,开发人员已澄清,**Wayland 尚未取代 Cinnamon 上的 X11**。因为他们对 Wayland 的实现有其局限性,甚至缺乏一些功能。
|
||||
|
||||
但是,这只是一个起点,开发人员预计 **Wayland 支持将在 2026 年之前完全准备就绪**,也就是 Linux Mint 23.x 预计发布的时间。
|
||||
|
||||
> 📋 你可以从登录屏幕在默认 Xorg 会话或 Wayland 会话之间切换。
|
||||
|
||||
继续,此版本还有其他更改!
|
||||
|
||||
例如**修复电源小程序电池状态**、**X11 的改进**、**支持 AVIF 图像**、**通知屏幕的新选项**、**颜色选择器支持截图工具**等等。
|
||||
|
||||
你可以浏览 [变更日志][6] 以了解有关 Cinnamon 6.0 的技术改进的更多信息。发布公告发布后,我们将在此处链接。
|
||||
|
||||
有趣的是,许多 Linux 发行版(比如 elementary OS)都在努力将默认设置过渡到 Wayland。
|
||||
|
||||
但是,Cinnamon 的开发人员正在采取一种相当谨慎的方法,以确保在 Cinnamon 默认切换到 Wayland 之前,他们的 Wayland 实现已经完全就绪。
|
||||
|
||||
### 📥 获取 Cinnamon 6.0
|
||||
|
||||
好吧,如果你想在 Linux Mint 上运行它,则必须等到今年晚些时候,**Linux Mint 21.3 “Virginia”** 发布,其中包含 Cinnamon 6。
|
||||
|
||||
对于那些等不及的人,你可以从官方 [GitHub 仓库][8] 下载源代码 tarball,并手动安装。
|
||||
|
||||
> **[Cinnamon 6.0(源代码)][8]**
|
||||
|
||||
💬 你对 Cinnamon 6 提供的功能感到兴奋吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/cinnamon-6-0-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/why-cinnamon/
|
||||
[2]: https://linuxmint.com/
|
||||
[3]: https://itsfoss.com/customize-cinnamon-desktop/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/11/Cinnamon_6.0_Wayland.png
|
||||
[5]: https://blog.linuxmint.com/?p=4591
|
||||
[6]: https://github.com/linuxmint/cinnamon/commit/448a1fc6753079916b8bf036aeb40b049652b72e
|
||||
[7]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[8]: https://github.com/linuxmint/cinnamon/releases/tag/6.0.0
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/04/164511pkgkgjku6m26mfvv.jpg
|
||||
@@ -0,0 +1,132 @@
|
||||
[#]: subject: "Fedora Linux Flatpak cool apps to try for December"
|
||||
[#]: via: "https://fedoramagazine.org/fedora-linux-flatpak-cool-apps-to-try-for-december/"
|
||||
[#]: author: "Eduard Lucena https://fedoramagazine.org/author/x3mboy/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16457-1.html"
|
||||
|
||||
在 Fedora Linux 上值得尝试的酷炫 Flatpak 应用(12 月)
|
||||
======
|
||||
|
||||
![Daimar Steiner 摄][1]
|
||||
|
||||
本文介绍了 Flathub 中可用的项目以及安装说明。
|
||||
|
||||
[Flathub][2] 就是为所有 Linux 发行版提供应用程序的平台,其由 Flatpak 支持,确保 Flathub 上的应用能在绝大多数 Linux 发行版上运行。
|
||||
|
||||
请参阅 [Flatpak 入门][3],并按照 [flatpak 网站][4]的指南激活 Flathub 作为你的 Flatpak 供应商。
|
||||
|
||||
### Live Captions
|
||||
|
||||
Live Captions 是一款为 Linux 桌面提供实时自动字幕的应用。目前仅提供英语。其他语言可能会产生乱码或错误的语音翻译。
|
||||
|
||||
主要特性:
|
||||
|
||||
* 使用友好的界面
|
||||
* 基于深度学习,为本地桌面/麦克风音频添加字幕
|
||||
* 不需要 API 密钥、不依赖专有服务/组件、无追踪、无数据收集、不使用互联网权限
|
||||
* 支持调整字幕字体、字体大小,以及进行大小写转换
|
||||
* 不确定的文本会显示为暗色(此功能可进行设置)。
|
||||
|
||||
老实说,直到最近有人推荐我才知道这个应用,我感到非常惊讶。这对于有听力问题的人来说确实很有帮助。正如此类软件的常见情况,模型需要培训,而项目通常需要反馈。
|
||||
|
||||
Live Captions 需要良好的硬件才能正常运行,但不需要专业的 GPU。
|
||||
|
||||
该项目被标记为安全,因为它不需要特殊许可:
|
||||
|
||||
![][5]
|
||||
|
||||
你可以通过单击网站上的安装按钮或手动使用以下命令来安装 “Live Caption”:
|
||||
|
||||
```
|
||||
flatpak install flathub net.sapples.LiveCaptions
|
||||
```
|
||||
|
||||
### Pencil2D
|
||||
|
||||
[Pencil2D][6] 是一个 2D 动画创建程序,可让你使用位图和矢量图形轻松创建手绘图形。
|
||||
|
||||
主要特性:
|
||||
|
||||
* 轻量设计
|
||||
* 支持光栅和矢量图
|
||||
* 跨平台兼容
|
||||
* 自由开源
|
||||
|
||||
请注意,该项目被标记为“潜在不安全”,因为它可以访问你的文件系统:
|
||||
|
||||
![][7]
|
||||
|
||||
你可以通过单击网站上的安装按钮或手动使用以下命令来安装 “Pencil2D”:
|
||||
|
||||
```
|
||||
flatpak install flathub org.pencil2d.Pencil2D
|
||||
```
|
||||
|
||||
**Pencil2D 也在 Fedora 的仓库中以 RPM 形式提供**
|
||||
|
||||
### Frog
|
||||
|
||||
[Frog][8] 是一款应用,它可以帮助你从图片、网站、视频和二维码中提取文本。
|
||||
|
||||
主要特性:
|
||||
|
||||
* 提取二维码和条形码:能够快速捕获、提取并转译二维码和条形码。
|
||||
* 你可以直接拖放图像到 Frog 窗口中提取文本,无需进行截图。
|
||||
* 支持大量语言:Frog 支持多种语言,甚至包括那些它以前不支持的语言。
|
||||
* 隐私:Frog 使用门户网站尊重你的隐私
|
||||
|
||||
请注意,该项目被标记为“潜在不安全”,因为它可以访问你的主文件夹:
|
||||
|
||||
![][9]
|
||||
|
||||
你可以通过单击网站上的安装按钮或手动使用以下命令来安装 “Frog”:
|
||||
|
||||
```
|
||||
flatpak install flathub com.github.tenderowl.frog
|
||||
```
|
||||
|
||||
### PDF Arranger
|
||||
|
||||
[PDF Arranger][10] 是一个小型应用,它可以帮助用户使用交互式直观的图形界面合并或拆分 PDF 文档并旋转、裁剪和重新排列其页面。
|
||||
|
||||
其简明的界面和易于使用的功能都非常出色。
|
||||
|
||||
请注意,该项目被标记为“潜在不安全”,因为它可以访问你的文件系统:
|
||||
|
||||
![][11]
|
||||
|
||||
你可以通过单击网站上的安装按钮或使用以下命令手动安装 “PDF Arranger”:
|
||||
|
||||
```
|
||||
flatpak install flathub com.github.jeromerobert.pdfarranger
|
||||
```
|
||||
|
||||
**PDF Arranger 也在 Fedora 的仓库中以 RPM 形式提供。**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/fedora-linux-flatpak-cool-apps-to-try-for-december/
|
||||
|
||||
作者:[Eduard Lucena][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/x3mboy/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/11/Flatpak_feature_im_Dec-23-816x345.jpg
|
||||
[2]: https://flathub.org
|
||||
[3]: https://fedoramagazine.org/getting-started-flatpak/
|
||||
[4]: https://flatpak.org/setup/Fedora
|
||||
[5]: https://fedoramagazine.org/wp-content/uploads/2023/10/image-2.png
|
||||
[6]: https://flathub.org/apps/org.pencil2d.Pencil2D
|
||||
[7]: https://fedoramagazine.org/wp-content/uploads/2023/11/image.png
|
||||
[8]: https://flathub.org/apps/com.github.tenderowl.frog
|
||||
[9]: https://fedoramagazine.org/wp-content/uploads/2023/11/image-1.png
|
||||
[10]: https://flathub.org/apps/com.github.jeromerobert.pdfarranger
|
||||
[11]: https://fedoramagazine.org/wp-content/uploads/2023/11/image-2.png
|
||||
@@ -0,0 +1,137 @@
|
||||
[#]: subject: "Godot 4.2 Released: Taking The Open-Source Game Engine Up a Notch"
|
||||
[#]: via: "https://news.itsfoss.com/godot-4-2/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16447-1.html"
|
||||
|
||||
Godot 4.2 发布:让开源游戏引擎更上一层楼
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Godot 的又一次更新,其中包含了一些有用的更改,以更接近 Unreal、Unity 等专有引擎。
|
||||
|
||||
[Godot][1],社区最喜欢的 Unreal 和 Unity 等专有游戏引擎的替代品,有一个新的重大更新!
|
||||
|
||||
**Godot 4.2** “闪亮登场”,全面更新大量内容。它继续沿着 [Godot 4.0 版本][2] 铺平的道路,并在此基础上进行构建。
|
||||
|
||||
拿上你的饮料,让我来重点介绍一下这次发布的优点。☕
|
||||
|
||||
### Godot 4.2:有什么新内容?
|
||||
|
||||
Godot 4.2 版本有很多新东西。但是,我们将关注**关键亮点**:
|
||||
|
||||
* Linux 上的官方 ARM 支持
|
||||
* 编辑器改进
|
||||
* 更多版本控制友好
|
||||
* 增强的图块地图
|
||||
* 多人游戏/网络的改进
|
||||
* 更好的导航系统
|
||||
|
||||
#### Linux 上的官方 ARM 支持
|
||||
|
||||
尽管可以在 Linux 上为基于 ARM 的设备手动构建 Godot,但**从来没有针对 Linux 的官方 ARM 构建**。
|
||||
|
||||
然而,随着 Godot 4.2 的发布,这种情况发生了变化。他们在下载页面上提供了 **32 位和 64 位版本的 Godot for ARM**。
|
||||
|
||||
请记住,这是**一项实验性工作**,因此可能会出现错误和问题。
|
||||
|
||||
#### 编辑器改进
|
||||
|
||||
![][5]
|
||||
|
||||
Godot 的编辑器方面有很多改进。
|
||||
|
||||
如上面的截图所示,第一个是代码编辑器中的新添加项,名为“<ruby>创建代码区域<rt>Create Code Region</rt></ruby>”。它允许你**将脚本分解为命名块**,然后可以将其最小化以减少混乱。
|
||||
|
||||
![][6]
|
||||
|
||||
Godot 的另一个新功能是**能够在编辑器视口中单独扩展方框图形的每一侧**。以前,这仅限于中心点和对称范围。
|
||||
|
||||
![][7]
|
||||
|
||||
**项目管理器也进行了更新**,改进了一般项目导入工作流程,并重新排列了按钮。
|
||||
|
||||
#### 更多版本控制友好
|
||||
|
||||
Godot 4.2 修复了在“就绪”期间更改场景或重命名节点会导致崩溃的问题,还修复了与重命名/移动文件相关的各种问题。
|
||||
|
||||
开发人员还补充道:
|
||||
|
||||
> 此外,场景中资源 ID 偶尔更改的一些情况已得到解决([GH-65011][8])。仍有改进的空间,但这已经使 4.2 的版本控制更加友好。
|
||||
|
||||
#### 增强的图块地图
|
||||
|
||||
![][9]
|
||||
|
||||
除了 Godot 的**图块/图块地图系统**的主要性能优化之外,还有一项新功能允许你在将图块/图块图案放置在任何地方时**旋转或翻转它们**。
|
||||
|
||||
#### 多人游戏/网络的改进
|
||||
|
||||
此版本还具有**高级多人游戏系统的改进**。“MultiplayerSynchronizer” 节点现在支持同步变换组件、子资源属性和其他类型的索引数据。
|
||||
|
||||
还有**针对拒绝服务漏洞的安全修复**,该漏洞之前在 Godot 4.0.4 RC1 版本中已披露。
|
||||
|
||||
> 📋 开发人员建议用户升级到 Godot 4.0.4、4.1.2 或 4.2 以避免出现问题。
|
||||
|
||||
#### 更好的导航系统
|
||||
|
||||
![][10]
|
||||
|
||||
Godot 4.2 带来了 **2D 导航网格烘焙**,它可以处理物理体、网格实例、普通多边形等。
|
||||
|
||||
此外,**添加了对 2D 和 3D 导航网格烘焙的多线程支持**,以提高性能并减少卡顿。
|
||||
|
||||
#### 🛠️ 其他更改和改进
|
||||
|
||||
还有许多其他值得注意的变化:
|
||||
|
||||
* 改进了 [GDExtension][11] 系统。
|
||||
* 支持 AMD 的 [FSR 2.2][12] 技术。
|
||||
* 图形构建节点的**重大修改**。
|
||||
* **适用于 Linux、Windows 和 macOS 的原生文件选择**对话框。
|
||||
* 现在可以为附加组件和资产**指定不同的安装文件夹**。
|
||||
* **修复了 Steam 输入问题**,该问题导致某些游戏手柄事件被处理两次。
|
||||
|
||||
有关此版本的更多详细信息,你可以通过 [官方发行说明][13] 了解。
|
||||
|
||||
### 📥 下载Godot 4.2
|
||||
|
||||
前往 [官方网站][14] 获取 Linux 版 Godot 的最新版本。对于其他软件包,你还可以参考其 [GitHub 仓库][15]。
|
||||
|
||||
> [Godot 4.2(GitHub)][15]
|
||||
|
||||
💬 你对此版本有何看法? 已经试过这个精彩的开源游戏引擎了吗? 在评论中告诉我们!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/godot-4-2/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://godotengine.org/
|
||||
[2]: https://news.itsfoss.com/godot-4-0-release/
|
||||
[3]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/12/Godot_4.2_a.jpg
|
||||
[6]: https://news.itsfoss.com/content/images/2023/12/Godot_4.2_b.jpg
|
||||
[7]: https://news.itsfoss.com/content/images/2023/12/Godot_4.2_c.jpg
|
||||
[8]: https://github.com/godotengine/godot/pull/65011
|
||||
[9]: https://news.itsfoss.com/content/images/2023/12/Godot_4.2_d.jpg
|
||||
[10]: https://news.itsfoss.com/content/images/2023/12/Godot_4.2_e.jpg
|
||||
[11]: https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html
|
||||
[12]: https://community.amd.com/t5/gaming/amd-fidelityfx-super-resolution-2-2-racing-into-more-games-and/ba-p/563910
|
||||
[13]: https://godotengine.org/article/godot-4-2-arrives-in-style/
|
||||
[14]: https://godotengine.org/download/linux/
|
||||
[15]: https://github.com/godotengine/godot/releases/tag/4.2-stable
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/06/162357bjz99b66jpnbqy6p.jpg
|
||||
@@ -0,0 +1,72 @@
|
||||
[#]: subject: "Open-Source Webmail Roundcube Joins Nextcloud"
|
||||
[#]: via: "https://news.itsfoss.com/nextcloud-roundcube/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16437-1.html"
|
||||
|
||||
开源网页邮箱服务 Roundcube 加入 Nextcloud
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Roundcube 现在正与 Nextcloud 合作以迎接未来。
|
||||
|
||||
Roundcube,作为最好的 [开源网页邮箱服务][1] 之一,决定与 [Nextcloud][2] 合作,后者是一个倍受欢迎的开源协作平台,以其协作工具套件而知名。
|
||||
|
||||
**电子邮件的重要性与日俱增** ,而谷歌和微软等公司正试图垄断市场,这一联手合作的决定显得颇有战略意义。
|
||||
|
||||
让我来详细介绍一下。
|
||||
|
||||
### Roundcube 的新家
|
||||
|
||||
![][3]
|
||||
|
||||
这就是 Nextcloud 的 CEO,Frank Karlitschek,关于此次合作的描述:
|
||||
|
||||
> 未来,**Nextcloud 将提供必要的资源**,比如 **项目托管** 、**引入人才的投资** 、**帮助开发**,以及围绕 Roundcube **培育社区**。
|
||||
|
||||
最重要的是,[Roundcube][4] **不会取代** [Nextcloud Mail][5];它们将作为独立的网页邮箱解决方案并存。
|
||||
|
||||
Frank 强调 Roundcube 是一个被许多人使用的重要的开源项目,而 Nextcloud Mail 是**一款强大的邮箱客户端**,但是没有合并它们的计划。
|
||||
|
||||
你可能会好奇,**为什么会发生这个变化?**
|
||||
|
||||
嗯,Roundcube 的创始人和维护者 Thomas Brüderli **作出了退出的决定**。当被问到原因时,他如此回答:
|
||||
|
||||
> 自从孩子出生后,我如何安排我非工作的时间的关注力显然转向了家庭生活,因此我逐渐停止了贡献,也对项目的新动态失去了跟踪。
|
||||
>
|
||||
> Roundcube 项目需要一个更好,更专注的领导,因此是时候让我退后,放手了。
|
||||
|
||||
许多人都能理解这种情况,很高兴看到 Thomas 将他心爱的项目交给了能够维持它发展的人。
|
||||
|
||||
我必须说,**我对这个消息感到惊讶**,作为多年来一直在工作场所使用 Roundcube 作为网页邮箱的用户,我亲眼见证了它自 2018 年以来的成长与变迁。
|
||||
|
||||
我很高兴这个项目得到了它应得的关注和关怀。
|
||||
|
||||
此外,我建议你浏览一下 [官方博客][6] 以及链接在其中的采访,以了解更多关于此次合并的信息。
|
||||
|
||||
💬 你怎么看?这将如何影响未来的运作?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/nextcloud-roundcube/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/open-source-web-based-email-clients/
|
||||
[2]: https://nextcloud.com/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/12/Roundcube-Nextcloud.png
|
||||
[4]: https://roundcube.net/
|
||||
[5]: https://apps.nextcloud.com/apps/mail
|
||||
[6]: https://nextcloud.com/blog/open-source-email-pioneer-roundcube-comes-aboard-nextcloud/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/02/223230wr7y7ag3gug37jyt.jpg
|
||||
@@ -0,0 +1,153 @@
|
||||
[#]: subject: "A Sleek-Looking Linux App to Manage Your Personal Finance"
|
||||
[#]: via: "https://news.itsfoss.com/denaro/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "GlassFoxowo-Dev"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16449-1.html"
|
||||
|
||||
一款外观时尚的用于管理个人财务的 Linux 应用
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Linux桌面的完美应用,用于轻松管理财务!
|
||||
|
||||
个人财务如果管理得当,对于财务状况大有裨益。许多人意识到这一点后,开始采取积极措施来保持财务状况良好。
|
||||
|
||||
由于这一点,**我们最近看到了个人财务管理应用的崛起**,这些应用凭借提供的功能已经引起了广泛关注。
|
||||
|
||||
但是,**许多现有的应用都是专有的**,这导致人们对于他们的财务数据可能如何处理产生了不确定性,尤其是如果它们同步到云中。
|
||||
|
||||
幸运的是,**我们有一些出色的开源选择**。通过这次初步了解,我们将看到其中一款,“**Denaro**”,**一款适用于Linux的个人财务管理应用**。
|
||||
|
||||
### Denaro:概览 ⭐
|
||||
|
||||
![][1]
|
||||
|
||||
用 C# 编写的 Denaro 是**一款整洁的小应用,可轻松管理你的财务**。它是**完全开源**的,依赖社区的贡献来推动其发展。
|
||||
|
||||
其中一些**关键功能**包括:
|
||||
|
||||
* 轻松筛选交易
|
||||
* 导入/导出功能
|
||||
* 多账户支持
|
||||
|
||||
#### 初次印象 👨💻
|
||||
|
||||
我使用 Flathub 商店提供的可用包安装了 Denaro ,它**与我搭载 GNOME 42 的系统集成良好**。
|
||||
|
||||
**该应用程序是以 GNOME 为基础设计的**,并针对默认的 Adwaita 主题进行了优化。
|
||||
|
||||
第一次启动时,我被问候了“下午好!”并提供了创建新账户或打开现有账户的选项。
|
||||
|
||||
> 📋 请注意,账户是存储在本地的,而不是在任何云服务上。
|
||||
|
||||
![][2]
|
||||
|
||||
我选择创建一个新账户,然后我看到了**快速设置向导**。
|
||||
|
||||
![][3]
|
||||
|
||||
我输入了账户名称,并将位置设置为“<ruby>文档<rt>Documents</rt></ruby>”,我没有添加密码,但如果你想更好地保护信息,密码也是可选用的。 🧐
|
||||
|
||||
![][4]
|
||||
|
||||
设置完所有这些后,我可以**选择账户类型**,我可以选择 <ruby>支票<rt>Checking</rt></ruby>、<ruby>储蓄<rt>Savings</rt></ruby> 和 <ruby>商业<rt>Business</rt></ruby>,我选择了储蓄。
|
||||
|
||||
我还可以**设置默认交易类型**,并**设置交易提醒阈值**。
|
||||
|
||||
![][5]
|
||||
|
||||
Denaro 很好地读取了我系统的信息,**自动将货币设置为印度卢比(INR)的 ₹**。
|
||||
|
||||
![][6]
|
||||
|
||||
然后,我继续填充 Denaro 的一些重要交易,并通过**创建新组**将它们分组,如下所示。
|
||||
|
||||
你可以通过单击侧栏中“<ruby>+ 新建<rt>+ New</rt></ruby>”按钮旁边的“<ruby>分组<rt>Groups</rt></ruby>”标题来访问它。你还可以为其**提供描述**和**标记颜色**!
|
||||
|
||||
![][7]
|
||||
|
||||
完成分组后,我开始**在 Denaro 中输入一些重要的交易**。
|
||||
|
||||
我设置了 <ruby>金额<rt>Amount</rt></ruby>,选择了交易类型(<ruby>收入<rt>Income</rt></ruby>/<ruby>支出<rt>Expense</rt></ruby>),设置了 <ruby>日期<rt>Date</rt></ruby> 和 <ruby>重复间隔<rt>Repeat Interval</rt></ruby>,以便它自动记账,因为那是固定费用。
|
||||
|
||||
接下来,我将其添加到一个组中,如下所示。燃油费用进入了“旅行”组。
|
||||
|
||||
![][8]
|
||||
|
||||
该应用还为你提供了**向交易添加注释并上传收据的选项**。如果你问我,这是一个不错的功能。
|
||||
|
||||
![][9]
|
||||
|
||||
在完成数据输入后,我看到了**一个主屏幕**,其中充满了我输入的所有交易,中间有**有用的可视化图表**(下文更多介绍)。
|
||||
|
||||
我可以通过取消选中特定的类别和组来排序信息,甚至可以使用**提供的搜索栏**搜索特定的交易。
|
||||
|
||||
如果你想知道;**如何添加新交易?**
|
||||
|
||||
你看到下面那个大大的蓝色按钮,上面写着“<ruby>+ 新建<rt>+ New</rt></ruby>”,你可以使用它来创建新交易。
|
||||
|
||||
![猫税/分期付款是我从不轻视的费用。 🐱][10]
|
||||
|
||||
至于**数据如何可视化**,Denaro 展示了**四种不同的可视化视图**,包括一个图表、一个图形和两个饼图。
|
||||
|
||||
![][11]
|
||||
|
||||
Denaro 还具有**多账户功能**,你可以创建多个账户,甚至可以使用“<ruby>转账<rt>Transfer</rt></ruby>”功能**在它们之间转移资金**。
|
||||
|
||||
通过单击“<ruby>操作<rt>Actions</rt></ruby>”按钮并单击“<ruby>转账<rt>Transfer Money</rt></ruby>”来访问它。
|
||||
|
||||
![][12]
|
||||
|
||||
引起我的另一个注意的是**Denaro 上的货币换算器**。它**列出了所有主要货币**,并有一个便捷的“切换”按钮来更改换算的目标。
|
||||
|
||||
![][13]
|
||||
|
||||
**总的来说,这是一个令人印象深刻的个人财务管理应用程序**。
|
||||
|
||||
从我的体验来看,**用户体验非常直观**,大多数用户应该能够轻松使用它。
|
||||
|
||||
### 📥 下载 Denaro
|
||||
|
||||
你可以从 [Flathub 商店][14]、[Snap Store][15] 和 [AUR][16] 获取 Denaro 的最新版本。
|
||||
|
||||
> **[Denaro(Flathub)][14]**
|
||||
|
||||
关于源代码,你可以访问其 [GitHub 仓库][17]。
|
||||
|
||||
💬 你是如何管理个人财务的?你喜欢使用像 Denaro 这样的应用程序吗?请在下方评论中告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/denaro/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[GlassFoxowo-Dev](https://github.com/GlassFoxowo-Dev)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/11/Denaro.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/11/Denaro_1.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/11/Denaro_2.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/11/Denaro_3.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/11/Denaro_4.png
|
||||
[6]: https://news.itsfoss.com/content/images/2023/11/Denaro_5.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/11/Denaro_6.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/11/Denaro_7.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/11/Denaro_8.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/11/Denaro_9.png
|
||||
[11]: https://news.itsfoss.com/content/images/2023/11/Denaro_10.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/11/Denaro_11.png
|
||||
[13]: https://news.itsfoss.com/content/images/2023/11/Denaro_12.png
|
||||
[14]: https://flathub.org/apps/org.nickvision.money
|
||||
[15]: https://snapcraft.io/denaro
|
||||
[16]: https://aur.archlinux.org/packages/denaro
|
||||
[17]: https://github.com/nickvisionapps/denaro
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/07/103124xo86aq504q6mkokg.jpg
|
||||
160
published/202312/20231203 5 Most Privacy Focused Web Browsers.md
Normal file
160
published/202312/20231203 5 Most Privacy Focused Web Browsers.md
Normal file
@@ -0,0 +1,160 @@
|
||||
[#]: subject: "5 Most Privacy Focused Web Browsers"
|
||||
[#]: via: "https://itsfoss.com/privacy-web-browsers/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16445-1.html"
|
||||
|
||||
注重隐私的五大网络浏览器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这是你可以试用的一些最佳的隐私友好型网络浏览器!
|
||||
|
||||
对大多数互联网用户来说,网络浏览器应用是他们最常接触的工具。不论其在桌面或移动设备上工作,无论平台如何,总会用到网络浏览器。
|
||||
|
||||
通过浏览器,我们可以访问云存储、银行服务、社交媒体、电商平台,以及无数其他服务。
|
||||
|
||||
因此,选择一个尊重隐私,并能提供安全网络体验的浏览器对你来说至关重要。
|
||||
|
||||
下面我将为你重点展示一些在你选择的任何设备上可以使用的、最佳的注重隐私的浏览器。
|
||||
|
||||
### LibreWolf
|
||||
|
||||
[LibreWolf][2] 是 Firefox 的一个分支版本,它开箱即用地提供了隐私增强功能。
|
||||
|
||||
LibreWolf 不只是一个配置稍有不同的 Firefox。它完全清除了所有的遥测、DRM 保护,并在安全方面进行了各种改进。
|
||||
|
||||
比如说,每当你关闭浏览器时,它会自动删除浏览和下载历史。此外,你也可以根据 [文档][3] 调整这种行为并根据自己的喜好进行自定义。
|
||||
|
||||
再者,你还能得到像 DuckDuckGo 和 Qwant 这样的 [隐私友好搜索引擎][4]。同时,uBlock Origin 的扩展功能在该浏览器中默认就开启了。
|
||||
|
||||
它不仅能提供私密和安全的体验,LibreWolf 还去掉了一些可能会分散用户注意力的 Firefox 元素,例如一个更清爽的新标签页和 Firefox 同步功能。
|
||||
|
||||
亮点:
|
||||
|
||||
* 这是专门为了隐私定制的版本
|
||||
* 可以根据需要调整定制选项
|
||||
* 默认禁用 Firefox Sync 同步功能
|
||||
* 仅支持桌面平台(Linux、Windows 和 macOS)
|
||||
|
||||
### Brave
|
||||
|
||||
[Brave][6] 是基于 Chromium 的知名版本。它以提供了飞快的网页用户体验而备受赞誉。
|
||||
|
||||
Brave 提供了大量以隐私为中心的设置,如:无需创建账户就能安全同步浏览器数据。该浏览器有效地阻止了跟踪器,给你带来了私密网络体验。
|
||||
|
||||
你还能获得一些附加功能,如奖励系统(用于选择性广告)和加密钱包。
|
||||
|
||||
虽然这个浏览器支持跨平台使用,但对于 Linux 系统,其安装过程与其他式有所不同。你可以参考我们的教程寻找帮助:
|
||||
|
||||
> **[在 Ubuntu 上安装 Brave 浏览器][6A]**
|
||||
|
||||
亮点:
|
||||
|
||||
* 快速的网页浏览体验
|
||||
* 与 Chrome 相似的用户体验
|
||||
* 提供安全的浏览器同步选项
|
||||
* 提供了额外的功能,如加密钱包等
|
||||
* 支持 Linux、安卓、iOS、Windows 和 macOS
|
||||
|
||||
### Firefox
|
||||
|
||||
[Mozilla Firefox][9] 是无数隐私爱好者的首选浏览器。
|
||||
|
||||
它有很多隐私保护功能,包括有阻止跟踪、设定不同 DNS 的能力。
|
||||
|
||||
Firefox 提供了独特的用户体验,整合了 νρη、电子邮件别名、Pocket 等实用功能,以及一个 Firefox 账户可以方便地同步所有你的浏览器数据。
|
||||
|
||||
使用 Firefox,你可以自定义用户界面,并通过 JavaScript 文件调整体验。如果你并不打算使用 Firefox,但仍希望提升隐私保护,你可以查看 GitHub 上的 [arkenfox 配置][10]。
|
||||
|
||||
如果你在 [Firefox 和 Brave][11] 之间感到困惑,我们的比较文章可以帮你深入了解、从而做出选择:
|
||||
|
||||
> **[Brave vs. Firefox:你的私人网络体验的终极浏览器选择][11]**
|
||||
|
||||
亮点:
|
||||
|
||||
* 考虑到可用性而设计出的以隐私为核心的功能
|
||||
* 整合了 Firefox 同步和 Pocket 功能
|
||||
* 支持 Linux、Windows、安卓、iOS 和 macOS 等平台
|
||||
|
||||
### Tor 浏览器
|
||||
|
||||
[Tor 浏览器][13] 是注重隐私的用户的最佳选择。
|
||||
|
||||
因为它基于 Firefox,所以你基本能获取同样的体验,同时进行了一些改动以更高级别提升安全特性和隐私。
|
||||
|
||||
与 LibreWolf 不同的是,Tor 浏览器让你能使用 [Tor 网络][14],这可能会影响你的网络体验,但对隐私方面的提升很大。你可以通过浏览 [洋葱网站][15] 来保证隐私。
|
||||
|
||||
如同 Brave,Tor 浏览器在 Linux 系统上的安装可能有点复杂。如果你是 Linux 用户,你可以参考我们的教程:
|
||||
|
||||
> **[在 Ubuntu 上安装 Tor 浏览器][7]**
|
||||
|
||||
亮点:
|
||||
|
||||
* 严格的隐私保护,尽管这可能降低可用性
|
||||
* 连接 Tor 网络
|
||||
* 支持 Linux、Windows、安卓 和 macOS 等平台
|
||||
|
||||
### Mullvad 浏览器
|
||||
|
||||
Mullvad 是最好的 [νρη 服务][17] 之一。[Mullvad 浏览器][18] 的开发是与 Tor 项目合作完成的,其特点是专门为使用 νρη 而非 Tor 网络而定制。
|
||||
|
||||
你也可以在 Mullvad 浏览器上结合使用其它的 νρη 服务。该浏览器内置了 uBlock Origin 和 NoScript 等扩展,提供他们所追求的私密体验。此外,浏览器并不支持 Firefox 同步。
|
||||
|
||||
虽然你不能移除这些扩展,但他们并不推荐你添加更多扩展。
|
||||
|
||||
亮点:
|
||||
|
||||
* 专为 νρη 使用而定制
|
||||
* 预先安装了不能被移除的扩展
|
||||
* 只支持桌面平台(Linux、Windows 和 macOS)
|
||||
|
||||
### 总结
|
||||
|
||||
随着网络的不断发展且需要处理各种问题,依赖于一个重视隐私的浏览器变得更加方便。
|
||||
|
||||
在上述提及的浏览器中,Firefox 和 Brave 是大多数人的首选。但如果你寻求更严格的保护和更多的配置,那么 LibreWolf 应该会符合你的需求。
|
||||
|
||||
当然,使用像 Tor 浏览器、LibreWolf 和 Mullvad 这样特别定制的浏览器,你将失去在移动设备上使用它们的灵活性。因此,你可以为你的智能手机选择一个单独的浏览器,或者选择一个支持你所有设备的浏览器。
|
||||
|
||||
💬 你最喜欢的是哪款注重隐私的网络浏览器呢?请在下方评论让我们知道!如果你对列表中的某些条目有异议,也可以优雅地表达你的看法。
|
||||
|
||||
*(题图:MJ/acc47c46-8923-482f-92f6-523516b2f450)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/privacy-web-browsers/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/12/librewolf.png
|
||||
[2]: https://librewolf.net/
|
||||
[3]: https://librewolf.net/docs/settings/
|
||||
[4]: https://itsfoss.com/privacy-search-engines/
|
||||
[5]: https://itsfoss.com/content/images/2023/12/brave.png
|
||||
[6]: https://brave.com/en-in/
|
||||
[6A]: https://itsfoss.com/brave-web-browser/
|
||||
[7]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[8]: https://itsfoss.com/content/images/2023/12/firefox.png
|
||||
[9]: https://www.mozilla.org/en-US/firefox/new/
|
||||
[10]: https://github.com/arkenfox/user.js
|
||||
[11]: https://linux.cn/article-13736-1.html
|
||||
[12]: https://itsfoss.com/content/images/2023/12/tor-browser.png
|
||||
[13]: https://www.torproject.org/download/
|
||||
[14]: https://itsfoss.com/tor-guide/
|
||||
[15]: https://en.wikipedia.org/wiki/List_of_Tor_onion_services
|
||||
[16]: https://itsfoss.com/content/images/2023/12/mullvad-browser.png
|
||||
[17]: https://itsfoss.com/best-vpn-linux/
|
||||
[18]: https://mullvad.net/en/browser
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/06/061704c88t0twgz0fo8o0b.png
|
||||
@@ -0,0 +1,181 @@
|
||||
[#]: subject: "A Web Application Firewall for Nginx"
|
||||
[#]: via: "https://fedoramagazine.org/a-web-application-firewall-for-nginx/"
|
||||
[#]: author: "Roman Gherta https://fedoramagazine.org/author/romangherta/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16479-1.html"
|
||||
|
||||
为 Nginx 配置 ModSecurity 网络应用防火墙
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 网络应用防火墙(WAF)是一种在应用层监控网络流量的应用程序。
|
||||
|
||||
[OSI(开放系统互联)][6] 是最常被网络相关讨论引用的网络流量框架之一。当数据包通过第 6 层(表示层)移动到第 7 层(应用层)时,它会进行解密或解码操作。这些操作可能会因异常解码和解释而产生漏洞,而这些漏洞可能被利用来打破标准应用上下文。注入就是这种漏洞的一种类型,而且因为传统的 [IDS/IPS][7] 设备无法应对这些威胁,所以其长时间以来一直是人们特别关注的问题。
|
||||
|
||||
### ModSecurity 简介
|
||||
|
||||
[ModSecurity][8] 本质上就是 <ruby>网络应用防火墙<rt>web application firewall</rt></ruby>(WAF)引擎。它与 Apache、IIS 和 Nginx 兼容,并由第三方公司维护。该防火墙会将一份规则列表与由 Web 服务器/代理提供的 HTTP 头流进行交叉引用。目前这个仓库已经被简化,只包含主要的 LibModSecurity 库。你可以直接在自己的服务器实现中调用这个库,或通过特定编程语言的封装进行调用。
|
||||
|
||||
其母公司的支持计划于 2024 年 7 月 1 日结束,之后这个项目将由开源社区维护。
|
||||
|
||||
### 安装 Nginx 连接器
|
||||
|
||||
[Nginx 连接器][9] 是一个 Nginx 动态模块,可以通过 Fedora 包 `nginx-mod-modsecurity` 进行安装。它依赖于 `libmodsecurity.so`,所以在这个使用场景中,这个包本身就是防火墙。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ sudo dnf install -y nginx nginx-mod-modsecurity
|
||||
[user@fedora ~]$ rpm -qR nginx-mod-modsecurity
|
||||
config(nginx-mod-modsecurity) = 1.0.3-3.fc38
|
||||
libc.so.6(GLIBC_2.4)(64bit)
|
||||
libmodsecurity.so.3()(64bit)
|
||||
nginx(abi) = 1.24.0
|
||||
nginx-filesystem
|
||||
...
|
||||
```
|
||||
|
||||
安装完成后,你会见到连接器在 `/etc/nginx` 中添加了一些重要的文件。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ rpm -ql nginx-mod-modsecurity
|
||||
/etc/nginx/modsecurity.conf # waf 配置
|
||||
/etc/nginx/nginx.conf.modsecurity # nginx 示例配置
|
||||
/usr/lib64/nginx/modules/ngx_http_modsecurity_module.so
|
||||
/usr/share/nginx/modules/mod-modsecurity.conf
|
||||
/usr/share/doc/nginx-mod-modsecurity/README.md
|
||||
...
|
||||
```
|
||||
|
||||
通过提供一些额外的配置指令,连接器对 Nginx 进行了扩展。下面的部分将演示 `nginx.conf.modsecurity` 文件中一些示例指令。指令的完整列表可以在 `README.md` 文件或项目的 GitHub 页面找到。
|
||||
|
||||
### 启动网络应用防火墙
|
||||
|
||||
`nginx.conf.modsecurity` 是我们将要运行的 Nginx 配置。解开如下所示的 *modsecurity* 行注释:
|
||||
|
||||
```
|
||||
[user@fedora ~]$ sudo sed -i 's/#modsec/modsec/g' /etc/nginx/nginx.conf.modsecurity
|
||||
[user@fedora ~]$ grep -C2 modsecurity /etc/nginx/nginx.conf.modsecurity
|
||||
# 如有需要,启用 ModSecurity WAF
|
||||
modsecurity on;
|
||||
# 如有需要,加载 ModSecurity CRS
|
||||
modsecurity_rules_file /etc/nginx/modsecurity.conf;
|
||||
```
|
||||
|
||||
在 shell 中启动服务器并查看日志,确保在 `modsecurity.conf` 加载了七个默认规则。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ sudo nginx -c /etc/nginx/nginx.conf.modsecurity
|
||||
[user@fedora ~]$ head /var/log/nginx/error.log
|
||||
2023/10/21 23:55:09 [notice] 46218#46218: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/7/0)
|
||||
2023/10/21 23:55:09 [notice] 46218#46218: using the "epoll" event method
|
||||
2023/10/21 23:55:09 [notice] 46218#46218: nginx/1.24.0
|
||||
2023/10/21 23:55:09 [notice] 46218#46218: OS: Linux 6.5.7-200.fc38.x86_64
|
||||
```
|
||||
|
||||
通过发送一些不符合 `Content-Type` 头格式的数据来测试默认规则。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ curl -X POST http://localhost -H "Content-Type: application/json" --data "<xml></xml>"
|
||||
[user@fedora ~]$ tail /var/log/modsec_audit.log
|
||||
...
|
||||
---rH5bFain---H--
|
||||
ModSecurity: Warning. Matched "Operator `Eq' with parameter `0' against variable `REQBODY_ERROR' (Value: `1' ) [file "/etc/nginx/modsecurity.conf"] [line "75"] [id "200002"] [rev ""] [msg "Failed to parse request body."] [data "JSON parsing error: lexical error: invalid char in json text.\n"] [severity "2"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "10.0.2.100"] [uri "/"] [unique_id "169795900388.487044"] [ref "v121,1"]
|
||||
```
|
||||
|
||||
### 用 OWASP 核心规则集扩展你的网络应用防火墙
|
||||
|
||||
默认的 Nginx 连接器带有七条规则。OWASP [Core Rule Set v3.3.5][10] 则更为详尽,涵盖了许多场景。
|
||||
|
||||
复制并提取规则的存档。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ curl -fSL https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz --output /tmp/v3.3.5.tar.gz
|
||||
[user@fedora ~]$ sudo tar -C /etc/nginx -xvf /tmp/v3.3.5.tar.gz
|
||||
[user@fedora ~]$ tree -L 1 /etc/nginx/
|
||||
/etc/nginx/
|
||||
├── conf.d
|
||||
├── default.d
|
||||
├── modsecurity.conf # waf 配置
|
||||
├── nginx.conf
|
||||
├── nginx.conf.modsecurity # nginx 启用 waf
|
||||
├── coreruleset-3.3.5
|
||||
├ ├── rules # 规则目录
|
||||
├ ...
|
||||
├ ...
|
||||
```
|
||||
|
||||
现在,你在 Nginx 配置文件夹中有了一个包含所有当前 OWASP 规则的 `rules` 目录。接下来,让 Nginx 知道这些规则。以下操作指南来源于 OWASP [INSTALL][11] 文件。
|
||||
|
||||
创建一个 `crs.conf` 文件,并在全局网络应用防火墙配置文件( `modsecurity.conf` )中包含所有相关的配置文件。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ sudo cp /etc/nginx/coreruleset-3.3.5/crs-setup.conf.example /etc/nginx/coreruleset-3.3.5/crs.conf
|
||||
[user@fedora ~]$ echo -e "\nInclude /etc/nginx/coreruleset-3.3.5/crs.conf" | sudo tee -a /etc/nginx/modsecurity.conf
|
||||
[user@fedora ~]$ echo -e "\nInclude /etc/nginx/coreruleset-3.3.5/rules/*.conf" | sudo tee -a /etc/nginx/modsecurity.conf
|
||||
[user@fedora ~]$ tail /etc/nginx/modsecurity.conf
|
||||
Include /etc/nginx/coreruleset-3.3.5/crs.conf
|
||||
Include /etc/nginx/coreruleset-3.3.5/rules/*.conf
|
||||
```
|
||||
|
||||
根据文档,包含这些文件的顺序很重要。上面的 `tee` 的命令将新的 `Include` 行放在了 `modsecurity.conf` 文件的末尾。现在,用这个新配置重启 Nginx。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ sudo nginx -s stop && sudo nginx -c /etc/nginx/nginx.conf.modsecurity
|
||||
[user@fedora ~]$ tail /var/log/nginx/error.log
|
||||
2023/10/22 10:53:23 [notice] 202#202: exit
|
||||
2023/10/22 10:53:50 [notice] 230#230: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/921/0)
|
||||
2023/10/22 10:53:50 [notice] 230#230: using the "epoll" event method
|
||||
2023/10/22 10:53:50 [notice] 230#230: nginx/1.24.0
|
||||
2023/10/22 10:53:50 [notice] 230#230: OS: Linux 6.5.7-200.fc38.x86_64
|
||||
2023/10/22 10:53:50 [notice] 230#230: getrlimit(RLIMIT_NOFILE): 524288:524288
|
||||
2023/10/22 10:53:50 [notice] 231#231: start worker processes
|
||||
```
|
||||
|
||||
注意,Nginx 成功加载了 921 条规则。还需要做一些测试来确保规则实际上是被网络应用防火墙检查过的。这里再次引用 `INSTALL` 文件中的 “Testing the Installation” 片段。
|
||||
|
||||
```
|
||||
[user@fedora ~]$ curl 'http://localhost/?param=''><script>alert(1);</script>'
|
||||
[user@fedora ~]$ tail /var/log/modsec_audit.log
|
||||
...
|
||||
---8NSpdnLe---H--
|
||||
ModSecurity: Warning. detected XSS using libinjection. [file "/etc/nginx/coreruleset-3.3.5/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "38"] [id "941100"] [rev ""] [msg "XSS Attack Detected via libinjection"] [data "Matched Data: XSS data found within ARGS:param: ><script>alert(1);</script>"] [severity "2"] [ver "OWASP_CRS/3.3.5"]
|
||||
...
|
||||
```
|
||||
|
||||
### 结论
|
||||
|
||||
本文演示了如何为 Nginx 服务器配置网络应用防火墙。这个部署使用了标准规则和 OWASP Core Rule Set v3.3.5。演示的防火墙在**检测模式**中运行并记录不寻常的行为。将防火墙运行在**防御模式**要对 `modsecurity.conf` 进行更多改动。请参考 [ModSecurity Reference Manual v3.x][12] 获取如何启用防御模式和更多信息。
|
||||
|
||||
祝你好运。
|
||||
|
||||
*(题图:DA/7ec85bc4-b209-4fc6-9275-8f7d1430f6ca)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/a-web-application-firewall-for-nginx/
|
||||
|
||||
作者:[Roman Gherta][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/romangherta/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/11/waf-nginx-816x345.jpg
|
||||
[2]: https://unsplash.com/@neonbrand?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[3]: https://unsplash.com/photos/red-bricks-wall-XEsx2NVpqWY?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[4]: https://unsplash.com/@cullansmith?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[5]: https://unsplash.com/photos/red-fire-digital-wallpaper-BdTtvBRhOng?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash
|
||||
[6]: https://osi-model.com/
|
||||
[7]: https://en.wikipedia.org/wiki/Intrusion_detection_system
|
||||
[8]: https://github.com/SpiderLabs/ModSecurity
|
||||
[9]: https://github.com/SpiderLabs/ModSecurity-nginx
|
||||
[10]: https://github.com/coreruleset/coreruleset/tree/v3.3.5/rules
|
||||
[11]: https://github.com/coreruleset/coreruleset/blob/v3.3.5/INSTALL
|
||||
[12]: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v3.x)
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/16/092516o1kqhzphvhh4h1hl.jpg
|
||||
@@ -0,0 +1,265 @@
|
||||
[#]: subject: "7 Sudo Tips and Tweaks for Linux Users"
|
||||
[#]: via: "https://itsfoss.com/sudo-tips/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16472-1.html"
|
||||
|
||||
Linux 用户的 7 个 Sudo 技巧和改进
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 用这些技巧释放 sudo 的力量 💪
|
||||
|
||||
你应该熟悉 sudo 吧?肯定有过使用的经验。
|
||||
|
||||
对多数 Linux 用户来说,`sudo` 就像一个神器,赋予了他们作为 root 用户执行任意命令或切换到 root 用户身份的能力。
|
||||
|
||||
其实这只掌握了一半的真相。`sudo` 绝非仅仅只是一条命令,**`sudo` 是一款你可以根据需求和偏好去定制的工具**。
|
||||
|
||||
Ubuntu、Debian 以及其他的发行版在默认的配置下,赋予了 `sudo` 以 root 用户的身份执行任意命令的权限。这让很多用户误以为 `sudo` 就像一个魔法开关,瞬间可以获取到 root 权限。
|
||||
|
||||
**比如说,系统管理员可以设置成只有属于特定的 `dev` 组的部分用户才能用 `sudo` 来执行 `nginx` 命令。这些用户将无法用 `sudo` 执行任何其他命令或切换到 root 用户。**
|
||||
|
||||
如果你对此感到惊讶,那很可能是你一直在使用 `sudo`,但对其底层的工作原理并没有太多了解。
|
||||
|
||||
在这个教程中,我并不会解释 `sudo` 是如何运作的,这个主题我会在另一天讲解。
|
||||
|
||||
在这篇文章中,你将看到 `sudo` 的不同特性可以如何被调试和改进。有些可能真的很有用,有些可能完全没什么帮助,但是挺有趣。
|
||||
|
||||
> 🚧 请不要随意去尝试所有提到的改进。如果处理不慎,你可能会遭遇无法运行 `sudo` 的混乱状态。在大多数情况下,平静阅读并知道这些就好。如果你决定尝试一些改进步骤,[请先备份你的系统设置][1],这样在需要的时候能把事情恢复到正常。
|
||||
|
||||
### 1、编辑 sudo 配置时,请始终使用 visudo
|
||||
|
||||
`sudo` 命令是通过 `/etc/sudoers` 文件进行配置的。
|
||||
|
||||
虽然你可以用你最喜欢的 [终端文本编辑器][2] 编辑这个文件,比如 Micro、NeoVim 等,但你**千万不要**这么做。
|
||||
|
||||
为什么这么说呢?因为该文件中的任何语法错误都会让你的系统出问题,导致 `sudo` 无法工作。这可能会使得你的 Linux 系统无法正常使用。
|
||||
|
||||
你只需要这样使用即可:
|
||||
|
||||
```
|
||||
sudo visudo
|
||||
```
|
||||
|
||||
传统上,`visudo` 命令会在 Vi 编辑器中打开 `/etc/sudoers` 文件。如果你用的是 Ubuntu,那么会在 Nano 中打开。
|
||||
|
||||
![][3]
|
||||
|
||||
这么做的好处在于,**visudo 会在你试图保存更改时执行语法检查**。这能确保你不会因为语法错误而误改 `sudo` 配置。
|
||||
|
||||
![visudo 在保存到 sudoers 文件的变更前检查语法][4]
|
||||
|
||||
好了!现在你可以看看 `sudo` 配置的一些改变。
|
||||
|
||||
> 💡 我建议你备份 `/etc/sudoers` 文件(`sudo cp /etc/sudoers /etc/sudoers.bak`)。这样,如果你不确定你做了哪些更改,或者你想恢复到默认的 sudo 配置,那你可以从备份文件中复制。
|
||||
|
||||
### 2、输入 sudo 密码时显示星号
|
||||
|
||||
我们的这种输入行为是从 UNIX 系统中继承下来的。当你在终端输入 `sudo` 密码时,屏幕上不会有任何显示。这种缺乏反馈的现象,往往让新的 Linux 用户怀疑自己的系统已经卡住了。
|
||||
|
||||
人们常说,这是一项安全功能。或许在上个世纪是这样,但我个人觉得我们没有必要继续这样下去。
|
||||
|
||||
不过,一些发行版,如 Linux Mint,已经对 `sudo` 进行了优化,当你输入密码时会显示星号。
|
||||
|
||||
这样的方式更符合我们的日常经验。
|
||||
|
||||
如果想让 `sudo` 输入密码时显示星号,运行 `sudo visudo` 并找到以下行:
|
||||
|
||||
```
|
||||
Defaults env_reset
|
||||
```
|
||||
|
||||
然后将其更改为:
|
||||
|
||||
```
|
||||
Defaults env_reset,pwfeedback
|
||||
```
|
||||
|
||||
![][5]
|
||||
|
||||
> 💡 在某些发行版中,比如 Arch,你可能找不到 `Defaults env_reset` 这一行。如果这样的话,只需新增一行 `Defaults env_reset, pwfeedback` 就可以了。
|
||||
|
||||
现在,当 `sudo` 需要你输入密码时,你会看到输入的密码变成了星号。
|
||||
|
||||
![][6]
|
||||
|
||||
> ✋ 如果你注意到即使密码正确也无法通过一些图形化应用,如软件中心,那就该撤销这项更改。一些较旧的论坛帖子曾提到过此类问题,虽然我自己还未遇到过。
|
||||
|
||||
### 3、增加 sudo 密码超时时限
|
||||
|
||||
当你首次使用 `sudo` 时,它会要求输入密码。但在随后相当一段时间里,你使用 `sudo` 执行命令就无需再次输入密码。
|
||||
|
||||
我们将这个时间间隔称为 `sudo` 密码超时 (暂且称为 SPT,这是我刚刚编的说法,请不要真的这样称呼 😁)。
|
||||
|
||||
不同的发行版有不同的超时时间。可能是 5 分钟,也可能是 15 分钟。
|
||||
|
||||
你可以根据自己的喜好来改变这个设置,设定一个新的 `sudo` 密码超时时限。
|
||||
|
||||
像你之前看到的,编辑 `sudoers` 文件,找到含有 `Defaults env_reset` 的行,并在此行添加 `timestamp_timeout=XX`,使其变成如下形式:
|
||||
|
||||
```
|
||||
Defaults env_reset, timestamp_timeout=XX
|
||||
```
|
||||
|
||||
其中 `XX` 是以分钟为单位的超时时长。
|
||||
|
||||
如果你还有其他参数,例如你在上一节中看到的星号反馈,它们都可以在一行中组合起来:
|
||||
|
||||
```
|
||||
Defaults env_reset, timestamp_timeout=XX, pwfeedback
|
||||
```
|
||||
|
||||
> 💡 同样地,你还可以控制密码重试的次数上限。使用 `passwd_tries=N` 来修改用户可以输入错误密码的次数。
|
||||
|
||||
### 4、在不输入密码的情况下使用 sudo
|
||||
|
||||
行!你已经增加了 `sudo` 密码超时时限(或者称之为 SPT。哇塞!你还在坚持这个叫法 😛)。
|
||||
|
||||
这样很好。我的意思是,毕竟没人愿意每几分钟就输入一次密码。
|
||||
|
||||
扩大超时时限是一方面,另一方面则是尽可能不去使用它。
|
||||
|
||||
是的,你没听错。你就是可以在无需输入密码的情况下使用 `sudo`。
|
||||
|
||||
从安全角度来看,这听起来似乎很冒险,对吧?的确如此,但在某些实际情况下,你确实会更青睐无密码的 `sudo`。
|
||||
|
||||
例如,如果你需要远程管理多台 Linux 服务器,并为了避免总是使用 root,你在这些服务器上创建了一些 `sudo` 用户。辛酸的是,你会有太多的密码。而你又不想对所有的服务器使用同一的 `sudo` 密码。
|
||||
|
||||
在这种情况下,你可以仅设置基于密钥的 SSH 访问方式,并允许使用无需密码的 `sudo`。这样,只有获得授权的用户才能访问远程服务器,也不用再记住 `sudo` 密码。
|
||||
|
||||
我在 [DigitalOcean][7] 上部署的测试服务器上就采用了这种方法,用来测试开源工具和服务。
|
||||
|
||||
好处是这可以按用户进行设置。使用以下命令打开 `/etc/sudoers` 文件进行编辑:
|
||||
|
||||
```
|
||||
sudo visudo
|
||||
```
|
||||
|
||||
然后添加如下行:
|
||||
|
||||
```
|
||||
user_name ALL=(ALL) NOPASSWD:ALL
|
||||
```
|
||||
|
||||
当然,你需要将上面行中的 `user_name` 替换为实际的用户名。
|
||||
|
||||
保存文件后,你就可以享受无密码的 `sudo` 生活了。
|
||||
|
||||
### 5、配置独立的 sudo 日志文件
|
||||
|
||||
查阅 syslog 或 journal 日志,我们可以找到关于 `sudo` 的所有条目,但若需要单独针对 `sudo` 的记录,可以专门创建一个自定义的日志文件。例如,选择 `/var/sudo.log` 文件来存储日志。这个新的日志文件无需手动创建,如果不存在,系统会自动生成。
|
||||
|
||||
编辑 `/etc/sudoers` 文件,采用 `visudo` 命令,并在其中添加以下内容:
|
||||
|
||||
```
|
||||
Defaults logfile="/var/log/sudo.log"
|
||||
```
|
||||
|
||||
保存该文件后,便可以在其中查看哪些命令在何时、由哪位用户通过 `sudo` 运行了。
|
||||
|
||||
![][8]
|
||||
|
||||
### 6、限制特定用户组使用 sudo 执行特定命令
|
||||
|
||||
这是一种高级解决方案,系统管理员在需要跨部门共享服务器的多用户环境中会使用。
|
||||
|
||||
开发者可能会需要以 root 权限运行 Web 服务器或其他程序,但全权给予他们 `sudo` 权限会带来安全风险。我建议在群组级别进行此项操作。例如,创建命名为 `coders` 的群组,并允许它们运行在 `/var/www` 和 `/opt/bin/coders` 目录下的命令(或可执行文件),以及 [inxi 命令][9](路径是 `/usr/bin/inxi` 的二进制文件)。这是一个假想情景,实际操作请谨慎对待。
|
||||
|
||||
接下来,用 `sudo visudo` 编辑 sudoer 文件,再添加以下行:
|
||||
|
||||
```
|
||||
%coders ALL=(ALL:ALL) /var/www,/opt/bin/coders,/usr/bin/inxi
|
||||
```
|
||||
|
||||
如有需要,可以添加 `NOPASSWD` 参数,这样允许使用 `sudo` 运行的命令就不再需要密码了。
|
||||
|
||||
关于 `ALL=(ALL:ALL)` 的详细解读,我们将会在其他文章中进行讲解,毕竟这篇文章已经解释的内容足够多了。
|
||||
|
||||
### 7、检查用户的 sudo 权限
|
||||
|
||||
好吧,这是个小提示,而不是系统调优技巧。
|
||||
|
||||
如何确认一个用户是否具有 `sudo` 权限呢?可能有人会说,查看他们是否是 `sudo` 组的成员。但这并不一定准确,因为有些发行版用的是 `wheel` 代替 `sudo` 分组。
|
||||
|
||||
更佳的方法是利用 `sudo` 内建的功能,看看用户具有哪种 `sudo` 权限:
|
||||
|
||||
```
|
||||
sudo -l -U user_name
|
||||
```
|
||||
|
||||
这将显示出用户具有执行部分命令或所有命令的 `sudo` 权限。
|
||||
|
||||
![][10]
|
||||
|
||||
如你所见,我拥有自定义日志文件、密码反馈以及执行所有命令的 `sudo` 权限。
|
||||
|
||||
如果一个用户完全没有 `sudo` 权限,你将看到如下提示:
|
||||
|
||||
```
|
||||
User prakash is not allowed to run sudo on this-that-server.
|
||||
```
|
||||
|
||||
### 🎁 附加内容:输错 sudo 密码时,让系统“侮辱”你
|
||||
|
||||
这是个我在文章开头提到的“无用”小调整。
|
||||
|
||||
我想你在使用 `sudo` 时肯定曾误输过密码,对吧?
|
||||
|
||||
这个小技巧就是,在你每次输错密码时,[让 sudo 抛出随机的“侮辱”][11]。
|
||||
|
||||
用 `sudo visudo` 修改 `sudo` 配置文件,然后添加以下行:
|
||||
|
||||
```
|
||||
Defaults insults
|
||||
```
|
||||
|
||||
修改后,你可以故意输错密码,测试新的设置。
|
||||
|
||||
![][12]
|
||||
|
||||
你可能在想,谁会喜欢被侮辱呢?**只有粉丝**可以以直白的方式告诉你 😇
|
||||
|
||||
### 你是如何运用 sudo 的?
|
||||
|
||||
![][13]
|
||||
|
||||
我知道定制化的可能性无穷无尽,但其实,一般的 Linux 用户并不会去自定义 `sudo`。
|
||||
|
||||
尽管如此,我还是热衷于与你分享这些因为你可能会发现一些新奇且实用的东西。
|
||||
|
||||
💬 那么,你有发现什么新的东西吗?请在评论区告诉我。你有一些秘密的 `sudo` 技巧欢迎和大家分享!
|
||||
|
||||
*(题图:DA/a12900e5-e197-455e-adfc-0b52e4305b91)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/sudo-tips/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/backup-restore-linux-timeshift/
|
||||
[2]: https://itsfoss.com/command-line-text-editors-linux/
|
||||
[3]: https://itsfoss.com/content/images/2023/02/save-file-in-nano-editor.png
|
||||
[4]: https://itsfoss.com/content/images/2023/12/visudo-syntax-validation.png
|
||||
[5]: https://itsfoss.com/content/images/2023/12/sudo-password-feedback.png
|
||||
[6]: https://itsfoss.com/content/images/2023/12/sudo-password-with-asterisk-display.png
|
||||
[7]: https://digitalocean.pxf.io/JzK74r
|
||||
[8]: https://itsfoss.com/content/images/2023/12/sudo-log-file.png
|
||||
[9]: https://itsfoss.com/inxi-system-info-linux/
|
||||
[10]: https://itsfoss.com/content/images/2023/12/check-sudo-access.png
|
||||
[11]: https://itsfoss.com/sudo-insult-linux/
|
||||
[12]: https://itsfoss.com/content/images/2023/12/sudo-insults.png
|
||||
[13]: https://itsfoss.com/content/images/2023/12/sudo-meme.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/14/232352wzxtu2pp6dxg4ou4.jpg
|
||||
@@ -0,0 +1,111 @@
|
||||
[#]: subject: "Zorin OS 17 is Redefining the Visual Experience in a Linux Distro"
|
||||
[#]: via: "https://news.itsfoss.com/zorin-os-17-beta/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16456-1.html"
|
||||
|
||||
Zorin OS 17 正在重新定义 Linux 发行版的视觉体验
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这款即将推出的 Zorin OS 17 能为你带来什么样的视觉盛宴?你有何感想?
|
||||
|
||||
作为公认 [最美的 Linux 发行版][1] 之一,Zorin OS 的下一轮升级近在眼前。
|
||||
|
||||
在正式推出之前,他们已经公开了 Zorin 17 的各项新功能和首个测试版的发布时间。
|
||||
|
||||
那么,让我们一起来探索 Zorin 17 的新增内容吧。
|
||||
|
||||
### Zorin OS 17:最好的部分
|
||||
|
||||
![][3]
|
||||
|
||||
Zorin OS 17 将成为一个主要版本,它是**一个长期支持版本**(直到 2027 年 6 月),并且包含许多令人兴奋的新改进。
|
||||
|
||||
据开发人员称,Zorin OS 17 的设计初衷是为他们提供“**迄今为止最卓越且最精致的计算体验**”,而且这一说法似乎有理有据。
|
||||
|
||||
比如,Zorin OS 17 引入了“空间桌面”的设计理念,用以提升用户对于桌面活动的认知。
|
||||
|
||||
![][4]
|
||||
|
||||
在 Zorin OS 17 的测试版中,展现出了新颖的 “桌面立方体” 效果,用户可以通过富有深度感的 3D 立方视角在工作区之间切换。它运用了视差效果,使应用窗口呈现出独特的悬浮感。
|
||||
|
||||
![][5]
|
||||
|
||||
此外,还引入了全新的 “空间窗口切换器”,以整洁的 3D 切换效果替代了标准的平面 / 2D 的 `Alt+Tab` 和 `Super+Tab` 窗口切换。
|
||||
|
||||
在我看来,这些看起来确实不错。然而,这些效果可能不是每个人都喜欢,好在**默认情况下这些“空间特性”是不启用的**。
|
||||
|
||||
尽管如此,这确实是大胆的一步。Linux 发行版引入了更多的视觉交互特性,这实在不常见。鉴于 Zorin OS 原本就是颜值出众的发行版,新的多任务处理流程和空间桌面无疑将其视觉体验提升了一个档次。
|
||||
|
||||
macOS 用户或 Windows 用户可能不喜欢典型的 Linux 发行版用户界面,他们可能会考虑尝试使用 Zorin OS 的可视化方法来使用 Linux。
|
||||
|
||||
虽然这可能并不是科技突破,但我坚信,它对于把视觉体验视为优先的大量用户来说,其改变是实实在在的。
|
||||
|
||||
与此同时,Zorin OS 依然保持了骄人的核心优势——“**赋予用户对自己体验的掌控**”。看得出,他们将这些视觉元素融入进去,并使得计算体验充满了乐趣。
|
||||
|
||||
你必须从 Zorin <ruby>外观<rt>Appearance</rt></ruby> 设置下的新“<ruby>效果<rt>Effects</rt></ruby>”部分手动启用这些功能。
|
||||
|
||||
然后是**高级窗口平铺体验**,这是社区最需要的功能之一。
|
||||
|
||||
![][6]
|
||||
|
||||
现在,你可以轻松实现窗口在屏幕四分之一角落的平铺,甚至可以用键盘快捷键调整窗口在屏幕上的排布。这使得无痛的多任务处理变得**触手可及**。
|
||||
|
||||
甚至**软件商店也进行了改进**,速度更快,并采用了新设计和更新的主页,以非常直观的方式列出了应用。**应用详细信息页面也得到了改进**,以显示更大的截图和新信息。
|
||||
|
||||
![][7]
|
||||
|
||||
同样,引入了**新的快速设置菜单**,使你可以方便地访问重要设置,并且**允许你使用新的电源模式选项(性能/平衡)调整系统性能**。电源模式应该对笔记本电脑用户有帮助。
|
||||
|
||||
![][8]
|
||||
|
||||
开发人员还展示了**一种新的截图和屏幕录制**工具,如果你使用过 GNOME 的原生工具,那用这个工具会让你感觉非常得心应手。
|
||||
|
||||
他们还提到了**两种新的桌面布局**,一种是**类似 ChromeOS** 布局,另一种是**类似 GNOME 2** 布局。
|
||||
|
||||
![ChromeOS-like layout][9]
|
||||
|
||||
这些布局将在 Zorin OS 17 Pro 发布时提供。
|
||||
|
||||
总的来说,看到 Zorin OS 在追求的高质量用户体验,这的确是 Linux 发行版中少有的。这应当能让 Zorin 在众多发行版中脱颖而出,并有可能吸引更多的 Windows 和 macOS 用户尝试 Linux。
|
||||
|
||||
有关即将发布的 Zorin OS 17 版本的更多详细信息,你可以参考 [官方博客][10]。
|
||||
|
||||
最后,**你有兴趣提前一睹为快吗?**
|
||||
|
||||
> 📋 你现在就可以从 [官方网站][11] 下载 **Zorin OS 17 Core Beta**。请记住,**不建议用于生产/日常使用**。
|
||||
|
||||
> **[Zorin OS 17 Core Beta][11]**
|
||||
|
||||
💬 你对 Zorin 17 的发布感到兴奋吗? 请在下面告诉我们!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/zorin-os-17-beta/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/beautiful-linux-distributions/
|
||||
[2]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/12/ZorinOS_17_beta_1.jpg
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/ZorinOS_17_beta_2a.gif
|
||||
[5]: https://news.itsfoss.com/content/images/2023/12/ZorinOS_17_beta_2b.jpg
|
||||
[6]: https://news.itsfoss.com/content/images/2023/12/ZorinOS_17_beta_3.jpg
|
||||
[7]: https://news.itsfoss.com/content/images/2023/12/ZorinOS_17_beta_4.jpg
|
||||
[8]: https://news.itsfoss.com/content/images/2023/12/ZorinOS_17_beta_5.jpg
|
||||
[9]: https://news.itsfoss.com/content/images/2023/12/layout-chromeos.jpg
|
||||
[10]: https://blog.zorin.com/2023/12/04/a-sneak-peek-at-zorin-os-17/
|
||||
[11]: https://zorin.com/os/download/17/core/beta/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/10/170214ld64ok6iptu4puor.jpg
|
||||
@@ -0,0 +1,93 @@
|
||||
[#]: subject: "'AI Alliance' for Open Innovation Formed By IBM and Meta With Intel, AMD, and More"
|
||||
[#]: via: "https://news.itsfoss.com/ai-alliance/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16477-1.html"
|
||||
|
||||
IBM 和 Meta 与英特尔、AMD 等公司组建开放式创新“AI 联盟”
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这样的联盟应该可以防止一家公司主宰人工智能进步。你怎么认为?
|
||||
|
||||
2023 年对于人工智能来说是非常重要的一年,随着这一年的结束,我们仍然看到新的发展。其中最新的一个是由 IBM、Meta 和 50 多个其他**合作者组成的**专注于人工智能的联盟。
|
||||
|
||||
他们甚至还有一个简洁的名字,恰如其分地称为 “<ruby>[AI 联盟][1]<rt>The AI Alliance</rt></ruby>”😊。
|
||||
|
||||
那么,让我们深入了解他们计划实现什么目标。
|
||||
|
||||
![][2]
|
||||
|
||||
**正在发生的事情:** 由 [IBM][3] 和 [Meta][4] 发起,**AI 联盟是一组来自不同垂直领域的组织**,其中包括**初创企业**、**知名公司**、**政府**、**研究人员**,甚至**著名的教育机构**,都专注于一个重点。
|
||||
|
||||
> 支持人工智能领域的开放创新和开放科学。
|
||||
|
||||
这个以人工智能为中心的联盟的所有成员**将通过成为开放社区的一部分来相互协作**,该社区允许开发人员和研究人员在人工智能领域进一步“_负责任的创新_”。
|
||||
|
||||
**预期结果:** 根据人工智能联盟为启动项目制定的目标。他们打算建立**一个由基准、评估标准、工具和其他资源组成的框架**,以“在全球范围内负责任地开发和使用人工智能系统”。
|
||||
|
||||
这将还包括**创建经过审计的安全、安保和信任工具目录**,以进一步增强该联盟下项目的安全性。
|
||||
|
||||
此外,他们还计划通过**推动一组多样化的模型**进一步采用 [开放基础模型][5],这些模型将专注于 *多语言*、*多模式* 和 *以科学为中心*。
|
||||
|
||||
你可能想知道:**联盟的其他成员是谁?**
|
||||
|
||||
嗯,正如我之前提到的,**人工智能联盟**有超过 50 个组织。一些**最值得注意的**包括:
|
||||
|
||||
* AMD
|
||||
* 英特尔
|
||||
* 甲骨文
|
||||
* 欧洲核子研究中心
|
||||
* Hugging Face
|
||||
* 耶鲁大学
|
||||
* 印度理工学院孟买分校
|
||||
|
||||
甚至 [Linux 基金会][6] 也加入了这个联盟。Linux 基金会执行董事 [Jim Zemlin][7] 提到:
|
||||
|
||||
> 人工智能联盟是提供开放共享的软件、数据和其他对于开发透明、先进和值得信赖的人工智能至关重要的资产的过程中的另一个里程碑。
|
||||
>
|
||||
> 开放协作流程和开放治理对于这些努力至关重要,并与我们的 [PyTorch 基金会][8]、[LF AI 和数据基金会][9]、[云原生计算基金会][10] 合作 ,我们期待参与并协助该联盟,为人工智能生态系统的基本要素提供一个中立的家园。
|
||||
|
||||
听起来确实不错,但人工智能联盟成员之间的合作会产生什么样的结果,只有时间才能证明。
|
||||
|
||||
想要了解更多关于这个联盟的目标的细节,或者了解创始成员的信息,可以浏览 [官方博客][11]。
|
||||
|
||||
### 总结
|
||||
|
||||
最近一段时间,我们看到**人工智能方案的实施大幅增加**,甚至出现**有关此类工具使用受版权保护的数据的诉讼**。
|
||||
|
||||
我还注意到这个联盟中**缺少了一些著名的名字**:**谷歌**、**OpenAI** 和 **微软** 等公司不属于其中。当然,他们对以人工智能为中心的方案有单独的议程,我们不能指望它是开放的。
|
||||
|
||||
然而,与这样的合作伙伴结成的联盟听起来像是迫切需要推动开源人工智能,以确保人工智能的进步不只是由一家或几家公司主导。
|
||||
|
||||
💬你觉得怎么样? 人工智能联盟会起作用吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ai-alliance/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://thealliance.ai/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/12/The_AI_Alliance.png
|
||||
[3]: https://www.ibm.com/
|
||||
[4]: https://meta.com/
|
||||
[5]: https://en.wikipedia.org/wiki/Foundation_models
|
||||
[6]: https://www.linuxfoundation.org/
|
||||
[7]: https://www.linkedin.com/in/zemlin
|
||||
[8]: https://pytorch.org/
|
||||
[9]: https://lfaidata.foundation/
|
||||
[10]: https://www.cncf.io/
|
||||
[11]: https://thealliance.ai/news
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/16/075033xlo3z0230k2q7wlm.jpg
|
||||
@@ -0,0 +1,109 @@
|
||||
[#]: subject: "Kali Linux 2023.4 Release Adds Raspberry Pi 5 Support With GNOME 45"
|
||||
[#]: via: "https://news.itsfoss.com/kali-linux-2023-4-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16463-1.html"
|
||||
|
||||
Kali Linux 2023.4 发布:首度支持树莓派 5,并搭载 GNOME 45
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 2023 年最后的 Kali Linux 更新已经来临。
|
||||
|
||||
作为众所周知的专注于网络安全的 Linux 发行版,Kali Linux 推出了新版本 **Kali Linux 2023.4**,其中带有一些重大更新。
|
||||
|
||||
这一新版距离 [Kali 2023.3 版本][2] 发布不过数月,让我们一起探讨一下此次更新都带来了哪些内容。
|
||||
|
||||
### 🆕 Kali Linux 2023.4: 新增了什么?
|
||||
|
||||
作为 **2023 年度 Kali 的压轴版本**,Kali Linux 2023.4 专注于提供一些新的平台选项,以及它们基础架构的一些更新。
|
||||
|
||||
几个**关键亮点**包括:
|
||||
|
||||
* 支持树莓派 5
|
||||
* 集成 GNOME 45
|
||||
* Vagrant 中加入了对 Hyper-V 的支持
|
||||
|
||||
#### 支持树莓派 5
|
||||
|
||||
Kali Linux 2023.4 版本已经支持 [树莓派 5][5] 单板计算机。
|
||||
|
||||
你既可以 **手动构建镜像**,也可以下载新提供的 [专用镜像][6],甚至可以使用 [Raspberry Pi Imager][7] 软件自动处理。
|
||||
|
||||
开发者也提到,[Nexmon][8] **支持的内置 Wi-Fi 芯片上尚不能使用**,他们建议用户使用外部设备进行模式监控或帧注入。
|
||||
|
||||
#### 集成 GNOME 45
|
||||
|
||||
Kali Linux 2023.4 版本引入了全新的 [GNOME 45][10]。你可以尝试使用**全新的药丸形工作区切换器**,**更优化的系统设置**,以及**新的或已更新的核心应用程序**,等等。
|
||||
|
||||
Kali Linux 团队也进行了**自定义的调整**,以进一步改善用户体验。他们采用了**改进的 Nautilus 搜索功能**,在许多应用中**实现了全高侧边栏**,并且还**更新了多种主题**。
|
||||
|
||||
#### Vagrant 中的 Hyper-V 支持
|
||||
|
||||
Kali Linux 的 [Vagrant 版本][12] 现在含有一个 Hyper-V 环境。如果你对此不熟悉,[Vagrant][13] 是一个开源的 [Docker 替代方案][14],可以帮助你构建和管理便携式的虚拟机环境。
|
||||
|
||||
#### 🛠️ 其他改变与提升
|
||||
|
||||
除了上述的特点外,还有一些其他显著的变化:
|
||||
|
||||
* 在日本和塞尔维亚设置了**新的下载镜像**。
|
||||
* 启用 [Mirrorbits][15] 来进行 Kali 的**镜像重定向**。
|
||||
* 在 [AWS][16] 和 [Azure][17] 市场上提供了新的 **Kali Linux ARM64/AMD64 版本**。
|
||||
* 在网络仓库中添加了**大量新的工具**。
|
||||
|
||||
你可以查阅官方 [发布博客][18],获取更多信息。
|
||||
|
||||
### 📥 如何获取 Kali Linux 2023.4
|
||||
|
||||
你可以在 [官方网站][19] 下载到 Kali Linux 2023.4 版本。
|
||||
|
||||
> **[Kali Linux 2023.4][20]**
|
||||
|
||||
**对于现有的用户**,可以通过运行下述命令来升级到最新版本:
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt full-upgrade
|
||||
```
|
||||
|
||||
💬 期待尝试这个版本的新特性吗?欢迎在下方分享你的感受!
|
||||
|
||||
*(题图:DA/a3379b67-99cc-4962-a8f2-cc46b831255c)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/kali-linux-2023-4-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/linux-hacking-penetration-testing/
|
||||
[2]: https://news.itsfoss.com/kali-linux-2023-3-release/
|
||||
[3]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Kali_Linux_2023.4.png
|
||||
[5]: https://news.itsfoss.com/raspberry-pi-5/
|
||||
[6]: https://www.kali.org/get-kali/#kali-arm
|
||||
[7]: https://www.raspberrypi.com/software/
|
||||
[8]: https://github.com/seemoo-lab/nexmon
|
||||
[9]: https://news.itsfoss.com/content/images/2023/12/Kali_Linux_2023.4_b.png
|
||||
[10]: https://news.itsfoss.com/gnome-45-release/
|
||||
[11]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[12]: https://app.vagrantup.com/kalilinux/boxes/rolling
|
||||
[13]: https://www.vagrantup.com/
|
||||
[14]: https://linuxhandbook.com/docker-alternatives/
|
||||
[15]: https://github.com/etix/mirrorbits
|
||||
[16]: https://aws.amazon.com/marketplace/pp/prodview-fznsw3f7mq7to
|
||||
[17]: https://azuremarketplace.microsoft.com/en/marketplace/apps/kali-linux.kali?tab=overview
|
||||
[18]: https://www.kali.org/blog/kali-linux-2023-4-release/
|
||||
[19]: https://www.kali.org/get-kali/
|
||||
[20]: https://www.kali.org/get-kali/#kali-platforms
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/12/122407yafs8zefffdf8xa9.jpg
|
||||
@@ -0,0 +1,90 @@
|
||||
[#]: subject: "Armbian 23.11 Release Supports New Boards And Adds New OS Builds"
|
||||
[#]: via: "https://news.itsfoss.com/armbian-23-11-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16468-1.html"
|
||||
|
||||
Armbian 23.11 版本全新上线
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Armbian 最新版本提供了优化的新硬件支持和构建体验。
|
||||
|
||||
在众多 [单板计算机][1](SBC)爱好者心中,首选的往往是 [Armbian][2] —— 这是一款 [轻量级 Linux 发行版][3],它能在多种配置下运行,提供了高度可扩展的用户体验。
|
||||
|
||||
Armbian **提供两种不同的配置**,一种基于精简版的 Debian 基础,另一种基于轻量级的 Ubuntu 基础。
|
||||
|
||||
几天以前,**Armbian 23.11** 版本正式发布,带来了诸多更新和改进。以下,让我们一同探索这些新变化。
|
||||
|
||||
### Armbian 23.11 “Topi” 版本:有什么新特性呢?
|
||||
|
||||
![][4]
|
||||
|
||||
Armbian 23.11 版本(代号“_Topi_”)被开发者赞誉为 “_颇有特色_”的版本,它体现出了 Armbian **历经十年磨砺铸就的成果**,已经成为了 **SBC 爱好者的优选之选**。
|
||||
|
||||
下面,我们将着重看看这次版本更新的**重点亮点**:
|
||||
|
||||
首先,为了更好地体现板卡的可靠性和提供更好的帮助,**Armbian 的支持政策层次做出了调整**。这些调整分为三个层次:
|
||||
|
||||
* **标准支持**,板卡将获得全面且持续的支持。
|
||||
* **阶段支持**,针对正在接受支持验证的板卡提供。
|
||||
* **社区维护**,这个层次的板卡依赖更广大的社区共同维护。
|
||||
|
||||
在这次策略调整之下,**四款全新的开发板被加入到标准支持等级**,这四款开发板分别是:[Khadas VIM1S][5]、[Khadas VIM4][6]、[Texas Instruments TDA4VM][7] 和小米 Pad 5 Pro。
|
||||
|
||||
此外,像 NanoPi [R6S][8]/[R6C][9],[Mekotronics R58X-Pro][10],[Inovato Quadra][11] 和 [Tanix TX6][12] 这样的板卡也获得了支持。
|
||||
|
||||
从用户体验角度来看,**所有桌面上的显示管理器都经过了修复**,此次更新包括为 [Rockchip RK3588][13] 加入了主流内核,并**实验性支持 HDMI 和 EDK2/UEFI**。
|
||||
|
||||
另外,Armbian **最新版的边缘内核现已支持 [Linux 内核 6.6][14]**,并增加了全新的 Armbian 壁纸。此外还有一些 bug 修复,帮助**优化对现有开发板的硬件支持**,**解决显示输出问题**和**处理多个内核的编译问题**等。
|
||||
|
||||
你可以通过 [官方博客][15] 深入了解本次发布的更多细节。
|
||||
|
||||
### 📥 下载 Armbian 23.11
|
||||
|
||||
在 [官方网站][16] 上,你就可以下载到 Armbian 23.11 版本。此外,开发者新推出了**两款全新的日常构建**版本,一个是基于 [Ubuntu Mantic Minotaur][17],另一个则是 **Debian Trixie。
|
||||
|
||||
> **[Armbian 23.11][16]**
|
||||
|
||||
**对于已有的 Armbian 用户**,你可以按照 [官方文档][18] 的步骤升级到 Armbian 23.11 版本。
|
||||
|
||||
💬 你会尝试这个新发布的版本么?告诉我们你的回应吧!
|
||||
|
||||
*(题图:DA/3504891d-51ba-482b-bacc-1430d9c70bff)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/armbian-23-11-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/Single-board_computer
|
||||
[2]: https://www.armbian.com/
|
||||
[3]: https://itsfoss.com/lightweight-linux-beginners/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Armbian.png
|
||||
[5]: https://www.khadas.com/vim1s
|
||||
[6]: https://www.khadas.com/vim4
|
||||
[7]: https://www.ti.com/tool/SK-TDA4VM
|
||||
[8]: https://www.friendlyelec.com/index.php?route=product%2Fproduct&product_id=289
|
||||
[9]: https://www.friendlyelec.com/index.php?route=product%2Fproduct&product_id=291
|
||||
[10]: https://www.mekotronics.com/h-pd-55.html
|
||||
[11]: https://inovato.com/products/quadra
|
||||
[12]: https://www.tanix-box.com/project-view/tanix-tx6-android-tv-box-allwinner-h6-dual-wifi-6k-alice-ux/
|
||||
[13]: https://www.rock-chips.com/a/en/products/RK35_Series/2022/0926/1660.html
|
||||
[14]: https://news.itsfoss.com/linux-kernel-6-6-release/
|
||||
[15]: https://www.armbian.com/newsflash/armbian-23-11-topi/
|
||||
[16]: https://www.armbian.com/download/
|
||||
[17]: https://news.itsfoss.com/ubuntu-23-10-release/
|
||||
[18]: https://docs.armbian.com/User-Guide_Getting-Started/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/13/201627ojbuy44jsjocsnsj.jpg
|
||||
@@ -0,0 +1,76 @@
|
||||
[#]: subject: "The Blue Screen of Death Comes to Linux, Thanks to Systemd"
|
||||
[#]: via: "https://news.itsfoss.com/bsod-linux/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16453-1.html"
|
||||
|
||||
Linux 用户也将被蓝屏死机的恐怖所支配!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 现在,蓝屏死机的恐怖也将笼罩在 Linux 用户头上。
|
||||
|
||||
多年来,“<ruby>蓝屏死机<rt>Blue-Screen-Of-Death</rt></ruby>”(BSOD)已经成了 Windows 操作系统的代名词,一旦系统出现重大错误,Windows 就会展示蓝色的错误页面。
|
||||
|
||||
我自己也常常遇到一些看似随机的问题,这些问题会导致 Windows 蓝屏死机。有时候,显示的错误代码能提供一些帮助,但更多的时候,它们只是让我更加感到困惑。
|
||||
|
||||
而现在,随着 systemd v255 的发布,我们也将在 Linux 上见到这个熟悉的“朋友”。让我带你了解一下:
|
||||
|
||||
![一个模拟的蓝屏死机页面(并非 Linux 上可能出现的样子)][1]
|
||||
|
||||
发生的事情:systemd 开始加入一个称为 `systemd-bsod` 的**新实验性组件**。依据 [提交记录][2],它**用于显示与引发系统启动失败相关的蓝屏错误消息**。
|
||||
|
||||
类似于 Windows,**这个功能还会展示一个二维码**,用户可以扫描获取到故障相关的信息。
|
||||
|
||||
> 📋 只有在错误级别达到 `LOG_EMERG` 时,才会显示错误信息。
|
||||
|
||||
**这很重要吗?**
|
||||
|
||||
当然重要。因为,对于装备了 systemd 的 Linux 发行版在发生崩溃或拒绝启动的情况下,**它展示错误代码的方式**过于令人费解,**尤其对于新手来说**。
|
||||
|
||||
有了蓝屏死机系统后,用户用不着还要在各大论坛和文章里寻求解答。他们现在的问题解决方式将更加直观,更贴近他们的习惯。
|
||||
|
||||
考虑到大部分 [热门的 Linux 发行版][3] 都基于 systemd,这个改变应该会受到许多用户的欢迎。
|
||||
|
||||
关于 **systemd 255 版本的其它改变**,这里有一些主要的亮点:
|
||||
|
||||
* 针对启动服务的方法进行了**全面的重构**。
|
||||
* `seccomp` 已开始支持 **64 位龙架构** 微处理器架构。
|
||||
* 对 **System V 服务脚本** 的支持已被取消,未来版本将完全移除此项支持。
|
||||
* 如果在执行重启操作时发现 `/run/nextroot/` 目录下存在新的根文件系统,`systemctl` 将会自动执行 `soft-reboot` 操作。
|
||||
* 改善了在 systemd 上对 **TPM2 支持** 的众多方面。
|
||||
|
||||
我强烈建议你查看 [官方的更新日志][4],了解更多关于新的 systemd 版本的信息。这个新版本将于 **2024 年上半年** 出现在许多即将发布的 Linux 发行版中。
|
||||
|
||||
尽管我们中的许多人都熟知那个围绕 systemd 已经酝酿多时的 [争议][5],我仍然很好奇,当蓝屏死机的功能未来不久推出时,会引起怎样的反响。
|
||||
|
||||
有一点可以肯定,我们一定会开怀大笑,因为将有一大堆 Linux 蓝屏死机的段子图片问世 😆
|
||||
|
||||
💬 我迫不及待地想看 Linux 蓝屏死机的段子图片,你呢?
|
||||
|
||||
*(题图:DA/18062133-604c-41e6-b234-67c58d0770a5)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/bsod-linux/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/12/Linux_BSOD.png
|
||||
[2]: https://github.com/systemd/systemd/commit/fc7eb1325bd297634568528fb934698a68855121
|
||||
[3]: https://itsfoss.com/best-linux-distributions/
|
||||
[4]: https://github.com/systemd/systemd/releases/tag/v255
|
||||
[5]: https://itsfoss.com/systemd-init/
|
||||
[6]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/09/091822kuzxjl2zxbeblrbz.jpg
|
||||
@@ -0,0 +1,177 @@
|
||||
[#]: subject: "Jami: A Versatile Open-Source Distributed Communication App"
|
||||
[#]: via: "https://itsfoss.com/jami/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16471-1.html"
|
||||
|
||||
Jami:一款多功能开源分布式通讯应用
|
||||
=======
|
||||
|
||||
![][0]
|
||||
|
||||
> 下面将引导你安装和使用 Jami,让你对其工作原理和你能从中获取的内容有更深入的理解。
|
||||
|
||||
不管你是为了联系亲爱的人,还是为了职业需求与同事/团队沟通,一个安全的通讯平台都是大家的需求。[Jami][1] 就是其中一款通讯平台,利用**分布式网络**来实现视频通话、文件分享、聊天等功能全都不经过服务器。
|
||||
|
||||
这个工具完全免费且开源,具有多样的功能。
|
||||
|
||||
然而,它的表现如何呢?用户体验会好么?使用体验能像其他已有的专有平台那么流畅么?或者,你能在手机上使用吗?
|
||||
|
||||
在这篇文章里,我们将仔细研究 Jami。我们试用了一下以助你作出更明智的决定。
|
||||
|
||||
### Jami 的特性
|
||||
|
||||
![][2]
|
||||
|
||||
对很多用户来说,体验的好坏取决于功能的全面性。
|
||||
|
||||
所以,在深入研究 Jami 之前,让我概述一下,你可以期待从它得到什么样的功能:
|
||||
|
||||
* 即时发送消息
|
||||
* 群聊
|
||||
* 视频会议
|
||||
* 音频通话
|
||||
* 音频和视频信息
|
||||
* 屏幕共享
|
||||
* 文件分享
|
||||
* 增强功能的扩展
|
||||
* 作为 SIP(会话启动协议)客户端
|
||||
|
||||
看起来,Jami 是一款在考虑分布式解决方案时值得考虑的全能选项。
|
||||
|
||||
听上去挺刺激的,对吧?
|
||||
|
||||
那我们现在就来细看一下,看看它是如何工作的,以及我们能从中获得什么。
|
||||
|
||||
### 使用 Jami 的入门步骤
|
||||
|
||||
![在 Ubuntu 22.04 LTS 上通过 deb 包安装 Jami][3]
|
||||
|
||||
在你的系统上安装 Jami 是相当简单的。
|
||||
|
||||
你可以直接从它的网站下载最新的官方版本,或者直接在你的包管理器中(对于 Linux)搜索它。
|
||||
|
||||
它可以跨平台使用,包括:Linux、Windows、macOS、安卓和 iOS。
|
||||
|
||||
对于安卓用户,你可以在 Play Store 或 F-Droid 中安装。至本文撰写之时,Jami 支持所有最新和最棒的操作系统版本,所以,从这个层面上看,它的维护工作做得相当好。
|
||||
|
||||
在安装完成之后,就开始了注册过程。不像其他一些平台,它并不需要任何私人信息,只需要你创建一个你喜欢的独特用户名。
|
||||
|
||||
完成之后,你只需要把这个用户名与其他用户分享,就可以开始对话了。你也可以展现出 QR 码让其他人连接你。就是这么简单。
|
||||
|
||||
![][4]
|
||||
|
||||
在注册时,你可以选择加密你的帐户,以在设备上保护它,并自定义显示名。
|
||||
|
||||
### 使用 Jami 作为通讯平台
|
||||
|
||||
![][5]
|
||||
|
||||
使用这类平台时,我们的首要关心点通常是发送 / 接收消息的响应速度,以及语音 / 视频通话的质量。
|
||||
|
||||
好消息是:**使用体验快捷顺畅**。不管你是要发送一个视频信息,进行一个音频通话,还是发送文本,Jami 都像你想象的一样响应灵敏。
|
||||
|
||||
当我们谈及 **用户界面**,每个人的看法可能都会不同。我发现它的用户界面简明扼要,干净利落。
|
||||
|
||||
![][6]
|
||||
|
||||
然而,当你调窄应用窗口的宽度时,事情可能会有所不同。它失去了适应较小尺寸的能力,忽视了重要的元素,甚至难以顺畅地访问设置,这降低了使用体验。
|
||||
|
||||
![][7]
|
||||
|
||||
不要误会,你仍可以正常导航至所有选项。然而,体验感会显得有些生硬。
|
||||
|
||||
当把 Jami 的窗口缩小时,我点击了“<ruby>设置<rt>Settings</rt></ruby>”,结果直接进入了“<ruby>账户管理<rt>Manage Account</rt></ruby>”选项,而没有给我任何下拉菜单,也没有为我打开“<ruby>账户<rt>Accounts</rt></ruby>”/“<ruby>一般<rt>General</rt></ruby>”或“<ruby>音频/视频<rt>Audio/Video</rt></ruby>”部分。
|
||||
|
||||
假设我想要进入“音频/视频”设置,我就会进入账户设置。接下来,我需要再次导航到其他设置。这并不是一个让人感到方便的体验。
|
||||
|
||||
如果你不会经常调小 Jami 的窗口,或者你更喜欢大一点的窗口,那么你应该不会遇到此类问题。总结一下,如果你希望所有东西都有现代化的设计风格,那它可能会有些失望。
|
||||
|
||||
当你第一次发送/接收文本或通话时,会被视作一次邀请。一旦你接受了邀请,用户就会出现在你的会话列表中。
|
||||
|
||||
发送短信,添加新朋友的体验是无缝连接的,我没有遇到任何问题。
|
||||
|
||||
![][8]
|
||||
|
||||
> 📋 在撰写本文时进行的最新版本测试中,我无法关闭捐款消息。我答复的同事也遇到这个问题。
|
||||
|
||||
在信息中,你会有标记“正在输入中”的提示,你也可以回复一个特定的消息,用一个表情符号做出反应,附加文件,或发送语音或者视频消息。
|
||||
|
||||
这些消息都可以被编辑和删除。
|
||||
|
||||
![][9]
|
||||
|
||||
上面的对话截图是一个通过选择多个用户创建的群聊。
|
||||
|
||||
这样,当你创建这样的群聊时,一个新的邀请会被发送到用户那里,这是好的(不是强制他们加入群聊)。如果他们接受了邀请,他们就能加入你创建的群聊。
|
||||
|
||||
默认情况下,创建群组的设备将会默认承载群组内的任何音频 / 视频通话。
|
||||
|
||||
如果你连接的账户有多个设备,你可以选择你想要作为主机的那个设备。
|
||||
|
||||
通话体验有些不尽人意,具体来说,音频通话体验十分出色,音频清晰。
|
||||
|
||||
![][10]
|
||||
|
||||
然而,视频通话的音频方面就有些令人失望。
|
||||
|
||||
当然了,用直连的方式,视频质量会严重依赖网络连接,然而,和网络连接相比,我们得到的质量并没有那么好。(主机是我,网速是 200 Mbps)。
|
||||
|
||||
![][11]
|
||||
|
||||
视频质量可能是由于优化不佳或网络不佳导致的,但是,双方的音频并不清晰,音量在整个通话中都在上下波动。
|
||||
|
||||
虽然我的一些同事能分享他们的屏幕,但是在带有 AMD Radeon 集成 GPU 的 Ubuntu 22.04 LTS 上,应用崩溃了。
|
||||
|
||||
![][12]
|
||||
|
||||
默认情况下,你无法添加绿幕效果,这和一些专有的视频通话应用不同。然而,你可以安装扩展增加此类功能。
|
||||
|
||||
![][13]
|
||||
|
||||
另外,为了增强你的体验,你可以调整通话设置,包括自动接听电话,将你的账户作为接入点,切换正在输入中的指示等。
|
||||
|
||||
### 总结
|
||||
|
||||
如果 Jami 能在现代化用户界面这方面投入更多努力,那么它应该能成为像微软 Teams、Slack 和 Zoom 这样的应用的热门选择。
|
||||
|
||||
当然了,因为 P2P 连接原因,视频质量可能不如其他专有选项那么稳定。但在音频通话、视频/音频信息、文字输入、文件发送等方面你应该不会有任何问题,同时享受私密的通讯体验。
|
||||
|
||||
总的来说,Jami 为你提供了所有基本的需求,在一个更快的体验上提供了基本的用户界面。
|
||||
|
||||
> **[探究 Jami][1]**
|
||||
|
||||
它可能不能给你最好的用户体验,但是考虑到它在分布式网络连接、开源应用和隐私保护方面的优势,对于注重隐私的用户来说,它仍是个极好的选择。
|
||||
|
||||
*(题图:DA/26649e6b-a4b6-4591-a5c1-ecac982529a9)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/jami/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://jami.net/
|
||||
[2]: https://itsfoss.com/content/images/2023/12/Screenshot-from-2023-12-05-16-20-33.png
|
||||
[3]: https://itsfoss.com/content/images/2023/12/jami-install-ubuntu.png
|
||||
[4]: https://itsfoss.com/content/images/2023/12/jami-signup.png
|
||||
[5]: https://itsfoss.com/content/images/2023/12/jami-main-screen.png
|
||||
[6]: https://itsfoss.com/content/images/2023/12/jami-settings.png
|
||||
[7]: https://itsfoss.com/content/images/2023/12/jami-small-screen.png
|
||||
[8]: https://itsfoss.com/content/images/2023/12/jami-conversations-text.png
|
||||
[9]: https://itsfoss.com/content/images/2023/12/jami-conversation-with-file.png
|
||||
[10]: https://itsfoss.com/content/images/2023/12/jami-audio-call.png
|
||||
[11]: https://itsfoss.com/content/images/2023/12/jami-video-call.png
|
||||
[12]: https://itsfoss.com/content/images/2023/12/jami-calling.png
|
||||
[13]: https://itsfoss.com/content/images/2023/12/jami-extensions.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/14/090829o4hi8hi7844z4w88.jpg
|
||||
@@ -0,0 +1,102 @@
|
||||
[#]: subject: "Linux Mint 21.3 Beta Will Let You Try Cinnamon 6.0 Now!"
|
||||
[#]: via: "https://news.itsfoss.com/linux-mint-21-3-beta/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16466-1.html"
|
||||
|
||||
立即体验 Linux Mint 21.3 Beta 和 Cinnamon 6.0!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Linux Mint 21.3 beta 版发布啦!
|
||||
|
||||
Linux Mint 无疑最好的 [基于 Ubuntu 的 Linux 发行版][1] 之一。由于其社区为导向的处理方式,许多 Linux 社区的成员更倾向于它,而不是 Ubuntu。
|
||||
|
||||
在未来几周中,我们将看到 **Linux Mint 21.3** 的发布。然而,在此之前,我们先来一探究竟,看看这个长期支持版本将带来的内容。
|
||||
|
||||
就让我们一起瞧瞧吧!
|
||||
|
||||
> 🚧 注意!该 beta 版本仅用于测试。稳定版本将很快发布。
|
||||
|
||||
### Linux Mint 21.3 Beta 提供了什么新特性呢?🤔
|
||||
|
||||
![][2]
|
||||
|
||||
Linux Mint 21.3 的 beta 版本搭载了 [Linux 内核 5.15][3],以及 [Ubuntu 22.04][4],并带来多项新特性。一些 **重要亮点** 包括:
|
||||
|
||||
* Cinnamon 6.0 的加入
|
||||
* 应用程序的升级
|
||||
* 全新的墙纸
|
||||
|
||||
#### Cinnamon 6.0 的加入
|
||||
|
||||
![][5]
|
||||
|
||||
Linux Mint 21.3 Beta 版特别新引进了一直备受期待的 [Cinnamon 6.0][6],该版本具有 **对 Wayland 的实验性支持**,**对 X11 的多项改进**,以及 **对 AVIF 图片格式的支持**。
|
||||
|
||||
令我眼前一亮的是一个全新的附加功能(Cinnamon 将这些称为 “_spices_”),名为 “<ruby>动作<rt>Actions</rt></ruby>”。它以前被视为 “<ruby>Nemo 动作<rt>Nemo Actions</rt></ruby>”,而且功能主要局限于文件管理器。
|
||||
|
||||
然而,如上图所示,**这个新的 spice 可以让你安装扩展软件,以增强整体的 Cinnamon 桌面体验**,而不仅仅是对文件管理器进行微调。
|
||||
|
||||
此外,**这篇文章中的所有截图** 都是在 Wayland 会话中完成的,我所看到的表现,**Wayland 会话看起来相当不错**。尽管我认为开发人员还需要更多时间来完善它。
|
||||
|
||||
#### 应用程序的升级
|
||||
|
||||
![][8]
|
||||
|
||||
提到应用程序,**Warpinator 现给予用户通过输入 IP 地址或在移动设备上扫描二维码手动连接其他设备的能力**。
|
||||
|
||||
**备份工具也得到了更新**,它现在有了一个带有专用 “<ruby>关于<rt>About</rt></ruby>” 对话框的标题栏。
|
||||
|
||||
连 **Hypnotix**,这款电视观看应用,也**更新了一些新特性**。
|
||||
|
||||
你现在**可以设定自己喜爱的频道**,它们会被整合在一起,而不考虑电视提供商的情况。你还能**创建新的频道**,通过输入可直播的 URL 来变成定制的电视频道。
|
||||
|
||||
#### 新的壁纸
|
||||
|
||||
![][9]
|
||||
|
||||
总得来说,该 **Linux Mint 21.3 beta 版性中带有一些设计独特的壁纸**,这些都是各位贡献者的杰作。
|
||||
|
||||
如果想了解更多细节,你可以参考 [beta 版本发布公告][10]。
|
||||
|
||||
### 📥 下载 Linux Mint 21.3 Beta 版
|
||||
|
||||
如果你迫不及待想尝试稳定版,你可以从 Linux Mint 的 [官方索引][11](torrent)下载 Linux Mint 21.3 Beta 的 Cinnamon 版本 ISO。
|
||||
|
||||
只需搜索 “linuxmint-21.3-cinnamon-64bit-beta.iso.torrent”。
|
||||
|
||||
> **[Linux Mint 21.3 Beta][11]**
|
||||
|
||||
💬 我对接下来的 Linux Mint 21.3 发布倍感兴奋,你呢?
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/linux-mint-21-3-beta/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-ubuntu-based-linux-distros/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/12/Linux_Mint_23.1_a.jpg
|
||||
[3]: https://news.itsfoss.com/linux-kernel-5-15-release/
|
||||
[4]: https://news.itsfoss.com/ubuntu-22-04-release/
|
||||
[5]: https://news.itsfoss.com/content/images/2023/12/Linux_Mint_23.1_b.jpg
|
||||
[6]: https://news.itsfoss.com/cinnamon-6-0-release/
|
||||
[7]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/12/Linux_Mint_23.1_c.jpg
|
||||
[9]: https://news.itsfoss.com/content/images/2023/12/Linux_Mint_23.1_d.png
|
||||
[10]: https://blog.linuxmint.com/?p=4611
|
||||
[11]: https://linuxmint.com/torrents/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/13/065108u9w10vgy3z490j01.jpg
|
||||
@@ -0,0 +1,151 @@
|
||||
[#]: subject: "Bored With Bash? Change the Default Shell in Linux"
|
||||
[#]: via: "https://itsfoss.com/linux-change-default-shell/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16469-1.html"
|
||||
|
||||
对 Bash 感到厌倦?教你如何在 Linux 中更改默认 Shell
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
Bash 并不是唯一可供选择的 Shell。还存在数量众多的 Shell,它们都有一些独特的特性,例如 Zsh、Fish、Ksh 和 [Xonsh][1]。
|
||||
|
||||
在你的系统中,你可以同时安装多个 Shell。
|
||||
|
||||
要想将另一个 Shell 设为默认值,你可以按照以下方式使用 chsh 命令:
|
||||
|
||||
```
|
||||
chsh -s path_to_binary_of_shell
|
||||
```
|
||||
|
||||
如需找到 Shell 的二进制路径,你可以查看 `/etc/shells` 文件的内容。另外,你也可使用以下自动获取所需 Shell 二进制路径的命令:
|
||||
|
||||
```
|
||||
chsh -s $(which new_shell)
|
||||
```
|
||||
|
||||
接下来,让我们详细了解一下如何确定并更改 Shell。
|
||||
|
||||
### 我现在用的是哪个 Shell?
|
||||
|
||||
有很多方法可以帮你找出当前使用的是哪个 Shell,虽然专家可能会辩论这些方法的准确度。
|
||||
|
||||
最常用的,也是最简单的方式是:
|
||||
|
||||
```
|
||||
echo $0
|
||||
```
|
||||
|
||||
[$0 是一个特别的 Shell 变量][2],这可以获取你正在使用的 Shell 或 Shell 脚本的名称(如果你在脚本中使用了它)。
|
||||
|
||||
![][3]
|
||||
|
||||
你还可以使用下面的命令检查进程:
|
||||
|
||||
```
|
||||
ps -p $
|
||||
```
|
||||
|
||||
其中,`$` 代表的是当前进程 / Shell 的进程 ID。
|
||||
|
||||
![][4]
|
||||
|
||||
### 如何安装另一个 Shell?
|
||||
|
||||
和其他软件包一样,大部分知名 Shell,例如 [Fish][5] 和 Zsh,都可以直接从你的发行版软件仓库中下载安装。新的,相对小众的 Shell,例如 Xonsh,可能就需要不同的安装步骤了。你可以在它们的项目网页上找到具体的安装指南。
|
||||
|
||||
比如,你想 [在 Ubuntu 上安装 Zsh][6],那么可以使用以下命令:
|
||||
|
||||
```
|
||||
sudo apt install zsh
|
||||
|
||||
```
|
||||
|
||||
### 如何更改当前的 Shell?
|
||||
|
||||
假设你已经安装了另一个 Shell,那么我们来看一看如何切换过去。
|
||||
|
||||
实际上,你只需要输入新 Shell 的名称即可。比方说,你想切换到 Zsh,那就输入:
|
||||
|
||||
```
|
||||
zsh
|
||||
```
|
||||
|
||||
若要退出当前的 Shell,只需输入 `exit` 即可,你会回到你的默认 Shell。
|
||||
|
||||
### 如何查看默认的 Shell 是哪个?
|
||||
|
||||
有一个 `SHELL` 的环境变量,它可以告诉你当前账户的默认 Shell 是哪个:
|
||||
|
||||
```
|
||||
echo $SHELL
|
||||
```
|
||||
|
||||
举个例子,我切换到了 Zsh。此时,当前 Shell 显示的信息是 `zsh`,而默认 Shell 依然显示为 `bash`:
|
||||
|
||||
![][7]
|
||||
|
||||
这说明更改 Shell 并不会改变默认的 Shell。也就是说,下次你再次登录到该终端或系统,你还会返回到旧的默认 Shell,而不是新的 Shell。
|
||||
|
||||
### 如何知道系统中可用的 Shell 有哪些?
|
||||
|
||||
你可以通过查看 `/etc/shells` 文件,来了解系统中具有哪些可用的 Shell:
|
||||
|
||||
```
|
||||
cat /etc/shells
|
||||
```
|
||||
|
||||
下面就是我当前系统中所有可用的 Shell:
|
||||
|
||||
![][8]
|
||||
|
||||
### 如何更改默认的 Shell?
|
||||
|
||||
`/etc/shells` 文件的内容显示了所有可用 Shell 的二进制文件位置。你需要将它与 chsh 命令一起使用。
|
||||
|
||||
假设我想让 Zsh 成为默认的 Shell,我可以输入:
|
||||
|
||||
```
|
||||
chsh -s /usr/bin/zsh
|
||||
```
|
||||
|
||||
更改后,**你需要重新登入**才能看到变化。
|
||||
|
||||
请注意,以上操作只会更改当前用户的默认 Shell。如果你是管理员,并且想更改其他用户的默认 Shell,那么你可以使用以下命令:
|
||||
|
||||
```
|
||||
sudo chsh -s /usr/bin/zsh other_username
|
||||
```
|
||||
|
||||
### 结论
|
||||
|
||||
Linux 的一大特色就是,用户可以自主选择。你完全可以根据自己的需要进行更改。这就是另一个例子,你不必局限于发行版提供的默认 Shell 的选择。你很欢迎自选一款 Shell,让你的工作变得更顺手。最后,祝你使用愉快 😄
|
||||
|
||||
*(题图:DA/cf9b865d-2b98-4ada-88df-de1d1839aba1)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linux-change-default-shell/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/xonsh-shell/
|
||||
[2]: https://linuxhandbook.com/bash-dollar-0/
|
||||
[3]: https://itsfoss.com/content/images/2023/12/check-default-shell.png
|
||||
[4]: https://itsfoss.com/content/images/2023/12/check-current-shell.png
|
||||
[5]: https://fishshell.com/
|
||||
[6]: https://itsfoss.com/zsh-ubuntu/
|
||||
[7]: https://itsfoss.com/content/images/2023/12/current-shell-default-shell-1.png
|
||||
[8]: https://itsfoss.com/content/images/2023/12/available-shells-1.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/13/220515mvmrhk1efhh8fq17.jpg
|
||||
@@ -0,0 +1,108 @@
|
||||
[#]: subject: "Celeste: A Multi-Cloud Open-Source GUI File Sync Client in Rust"
|
||||
[#]: via: "https://news.itsfoss.com/celeste/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16492-1.html"
|
||||
|
||||
Celeste:Rust 开发的多云端开源 GUI 文件同步客户端
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 一个简单而优雅的 GUI 同步客户端,提供双向同步。
|
||||
|
||||
当谈到与云文件同步时,我们有 [Insync][1]、[FreeFileSync][2] 等选项,以及 [rclone][3] 等几个命令行工具。
|
||||
|
||||
无论哪种情况,你也可以使用云存储提供商的同步客户端(如果他们有适用于 Linux 或任何其他平台的同步客户端)。但是,这并不是与多个云存储服务同步内容的最佳方式。
|
||||
|
||||
Insync 是一款付费工具,而 FreeFileSync 或 rclone 对于 Linux 新用户来说可能是一种难以接受的选择。。
|
||||
|
||||
Celeste,一个简单的 GUI 同步客户端,支持多个云提供商。
|
||||
|
||||
> 📋 该应用正在积极开发中。目前它可能没有足够的功能和贡献者。欢迎你探索并帮助该项目。
|
||||
|
||||
### 适用于 Linux 的基于 Rust 的同步客户端
|
||||
|
||||
![][4]
|
||||
|
||||
Celeste 是一款用 Rust 编写的应用,可确保你获得快速的体验。它在底层利用 rclone 来可靠地将数据与云同步。
|
||||
|
||||
与某些现有选项不同,它没有为你提供很多选择。虽然一些用户可能会发现它有所欠缺,但其他用户可能会发现它是他们一直想要的简单工具。
|
||||
|
||||
Celeste 仅支持双向同步,目前没有其他同步方式。
|
||||
|
||||
如果你想要单向同步(云到本地,或本地到云),那么这不适合你。
|
||||
|
||||
该工具的工作机制很简单。你只需从列表中添加云提供商,或添加任何 WebDAV 服务器。
|
||||
|
||||
默认选项包括:**Google Drive、Dropbox、Proton Drive、pCloud、ownCloud、** 和 **Nextcloud**。
|
||||
|
||||
![][5]
|
||||
|
||||
你可以自定义该工具的服务器名称,然后点击“<ruby>登录<rt>Log in</rt></ruby>”开始授权过程。pCloud 的情况如下:
|
||||
|
||||
![][6]
|
||||
|
||||
当你授权应用访问云文件,它会提示你设置本地文件夹和云之间的同步。
|
||||
|
||||
![][7]
|
||||
|
||||
如果还没有正斜杠(`/`) 符号,那么只需输入它即可,它应该开始以下拉样式列出你拥有的远程文件夹。
|
||||
|
||||
> 💡 这将是双向同步。因此,你的云文件将被下载到远程文件夹(如果有)。同步后,从云中删除的任何内容都不会从本地文件夹中消失。而且,你从系统中删除的任何内容都将从云中删除。
|
||||
|
||||
**此同步过程定期发生。** 我没有找到强制启动或停止同步的方法。如果此应用的未来版本中提供类似的选项,它应该会有所帮助。
|
||||
|
||||
![][8]
|
||||
|
||||
在大多数情况下,每当本地/远程中发生文件更改时,同步都会确保你能够尽快访问最新的更改。
|
||||
|
||||
有一次,很长一段时间没有同步,所以我不得不重新启动应用来修复它。
|
||||
|
||||
不幸的是,如果云提供商的令牌过期,该应用不能很好地处理错误,并且你必须重新授权和重新同步。
|
||||
|
||||
![][9]
|
||||
|
||||
它会显示错误,但没有使用 GUI 刷新令牌的选项。我不想尝试命令行方式,因为这违背了 GUI 工具的目的。
|
||||
|
||||
因此,你可以选择再次重新添加相同的同步服务器,重新进行所有授权和同步。这就是目前的解决方案。
|
||||
|
||||
### 总结
|
||||
|
||||
Celeste 似乎是一个非常有用且简单的 GUI 同步客户端。
|
||||
|
||||
尽管它缺乏某些功能,但用户体验对于它已经提供的功能来说还是很好的。
|
||||
|
||||
考虑到它是一个相当新的应用,有更多的贡献者和用户尝试它,Celeste 可以凭借其坚实的基础发展成更多的东西。
|
||||
|
||||
你觉得 Celeste 怎么样? 在下面的评论中分享你的想法。
|
||||
|
||||
*(题图:DA/48cf6b8e-8f5a-46e4-a7c1-50fe1cfd068f)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/celeste/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/insync-linux-review/
|
||||
[2]: https://itsfoss.com/freefilesync/
|
||||
[3]: https://itsfoss.com/use-onedrive-linux-rclone/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/celeste.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/12/celeste-options.png
|
||||
[6]: https://news.itsfoss.com/content/images/2023/12/celeste-pcloud.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/12/celeste-sync-location.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/12/celeste-gui-sync-check.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/12/celeste-dropbox-error.png
|
||||
[10]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/20/210937s96kbwwycd71ciiu.jpg
|
||||
@@ -0,0 +1,102 @@
|
||||
[#]: subject: "Geekbench ML Benchmark App Adds Linux Desktop Support"
|
||||
[#]: via: "https://news.itsfoss.com/geekbench-ml-benchmark-app/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16499-1.html"
|
||||
|
||||
Geekbench ML Benchmark 应用添加了 Linux 桌面支持
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 测试你的机器的 ML 工作负载能力!
|
||||
|
||||
在这一年里,我们看到了 [新的人工智能联盟][1] 的成立,以及一些人对 [人工智能模型的开源定义][2] 的质疑,但我们仍然看到了大量的新发展。
|
||||
|
||||
其中一项进展就是人工智能基准测试领域,流行的 Geekbench ML 在其最新版本中做了一些非常酷的事情。
|
||||
|
||||
**正在发生的事情:** 在 [最近的公告][3] 中,[Primate Labs][4] 宣布发布 **Geekbench ML 0.6** ,并提供**一份早期的圣诞礼物,以支持 Linux。**
|
||||
|
||||
此版本的 Geekbench ML 作为**预览版本**发布,现已可用于 **Linux**、**Windows** 和 **macOS**。
|
||||
|
||||
**可以期望什么:**好吧,对于初学者来说,你可以**期望所有平台上的基准测试体验都是相同的**,因为它们都使用相同的模型和数据集。
|
||||
|
||||
顺便说一下,由于**实施了新的框架**,Geekbeench 的内部版本 [TensorFlow Lite][5] 也得到了升级,因此这些功能得到了改进。
|
||||
|
||||
他们还在 Geekbench ML 0.6 版本中添加了**三种新类型的工作负载**:
|
||||
|
||||
* **深度估计**,这是一项有助于模拟常见相机软件效果的工作。
|
||||
* **风格转移**,该工作负载将模拟生成式人工智能如何在常见用例中发挥作用,如复制照片风格以创建不同的照片。
|
||||
* **图像超分辨率**,该工作负载将模拟人工智能驱动的图像增强。
|
||||
|
||||
但是,有一件重要的事情需要注意。**对于 Linux,Geekbench ML 0.6 没有图形用户界面(GUI)**,用户只能使用命令行工具。稍后会详细介绍。
|
||||
|
||||
因此,尽管我们距离计划于 2024 年某个时候发布的 **Geekbench ML 1.0 版本还有一段距离**,但这是一个不错的版本,但也存在一些问题。但是,我很高兴看到他们为 Linux 提供了一个移植。
|
||||
|
||||
就我们的主题而言,你想在 Linux 系统上运行 Geekbench ML 吗?**
|
||||
|
||||
### 运行 Geekbench ML Benchmark 的方法
|
||||
|
||||
首先,你必须从 Geekbench 网站(链接如下)下载 _tar.gz_ 文件。
|
||||
|
||||
此后,解压它,在同一目录中打开终端窗口,然后运行以下命令:
|
||||
|
||||
```
|
||||
./banff
|
||||
```
|
||||
|
||||
> 📋 在运行基准测试之前,请确保你有可用的互联网连接。
|
||||
|
||||
![][6]
|
||||
|
||||
然后它应该开始运行基准测试,你将看到正在实时运行的模型和数据集。
|
||||
|
||||
![][7]
|
||||
|
||||
基准测试完成后,将显示确认提示,引导你在线查看基准测试结果。
|
||||
|
||||
![][8]
|
||||
|
||||
你可以在 [Geekbench 浏览器][9] 上查看我的基准测试结果,我承认这并不起眼,但这是我的系统的微不足道的分数😄。
|
||||
|
||||
要在 Linux 上运行 Geekbench ML,开发人员建议满足以下**系统要求**:
|
||||
|
||||
* **CPU:** AMD 或英特尔
|
||||
* **内存:** 至少 2 GB
|
||||
* **操作系统:** Ubuntu 18.04 LTS(64 位)或更高版本
|
||||
|
||||
你可以从 [官方网站][10] 获取 _tar.gz_,只需解压即可开始。
|
||||
|
||||
> **[Geekbench ML][10]**
|
||||
|
||||
💬 我真的希望他们在未来的 Linux 版 Geekbench ML 中添加 GUI。你怎么认为?
|
||||
|
||||
*(题图:DA/08ae5808-f406-4a05-a30c-f1d1d36f7c35)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/geekbench-ml-benchmark-app/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/ai-alliance/
|
||||
[2]: https://news.itsfoss.com/open-source-definition-ai/
|
||||
[3]: https://www.geekbench.com/blog/2023/12/geekbench-ml-06/
|
||||
[4]: https://www.primatelabs.com/
|
||||
[5]: https://www.tensorflow.org/lite/guide
|
||||
[6]: https://news.itsfoss.com/content/images/2023/12/Geekbench_ML_0.6.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/12/Geekbench_ML_0.6_Output-1.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/12/Geekbench_ML_0.6_Output_2.png
|
||||
[9]: https://browser.geekbench.com/ml/v0/inference/328997
|
||||
[10]: https://www.geekbench.com/ml/download/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/23/152017zamgjxoqjxxaxxaq.jpg
|
||||
@@ -0,0 +1,96 @@
|
||||
[#]: subject: "Ardour 8.2 Release Adds A Nifty New Feature for Digital Music Creators"
|
||||
[#]: via: "https://news.itsfoss.com/ardour-8-2-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16486-1.html"
|
||||
|
||||
Ardour 8.2 为数字音乐创作者增加了一项新功能
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Ardour 的最新更新包添加了一些有用的功能和急需的修复。
|
||||
|
||||
Ardor 是数字音频工作站(DAW)用户中非常流行的开源选择,它拥有大量工具,允许音频专业人士执行一系列与音频相关的任务。
|
||||
|
||||
作为 **Ardour 8.x 系列的延续**,开发人员推出了新版本 **Ardour 8.2**。那么,让我们深入了解此版本,看看提供了什么。
|
||||
|
||||
### 🆕 Ardour 8.2:有什么新变化?
|
||||
|
||||
![][2]
|
||||
|
||||
开发人员表示,此次更新“没有什么惊人之处”,它的目的是完成支持新 [Novation][3] 设备的待定工作、修复一些错误和进行一些改进。
|
||||
|
||||
**主要亮点**包括:
|
||||
|
||||
* 专用无频闪选项
|
||||
* 支持更新设备
|
||||
* 音符叠加功能
|
||||
|
||||
#### 专用无频闪选项
|
||||
|
||||
作为一项新的用户偏好设置,它**将禁用 Ardour 图形用户界面(GUI)上的所有闪烁元素**。这对**那些对此类视觉刺激敏感的用户来说大有帮助**。
|
||||
|
||||
因此,时钟、按钮和仪表之类的东西将停止运行、闪烁或移动。
|
||||
|
||||
#### 对 Novation 设备的支持
|
||||
|
||||
![][4]
|
||||
|
||||
Ardour 8.2 版本还完成了对所有当前一代(MK3)Novation [Launchpad 系列][5] 设备的支持。这包括 **Launchpad X**、**Mini** 和 **Pro**。
|
||||
|
||||
开发人员遵循 Launchpad X 的用户手册来实现支持,并且还使 Launchpad Mini 表现相似,使用类似的布局,没有 X 型号上的额外按钮。
|
||||
|
||||
#### 音符叠加功能
|
||||
|
||||
受到最近推出的 [Ableton Live 12][6] 的启发,Ardor 的开发人员推出了**新的音符叠加功能,可让你将音符拆分和连接在一起**,以获得更高级的 MIDI 编辑体验。
|
||||
|
||||
#### 🛠️ 其他变化
|
||||
|
||||
至于其余的,还有一些其他值得注意的变化:
|
||||
|
||||
* 添加了对 [Solid State Logic UF8][7] 的支持。
|
||||
* 能够**清除 LV2 插件**扫描信息。
|
||||
* 录音机视图中添加了新的**静音按钮**。
|
||||
* 改进了**标记列表显示**,使其更加高效和有序。
|
||||
* **新的 Lua 脚本**,用于反转 MIDI 音符/区域,并使用标记对 _mixer-scenes_ 进行排序。
|
||||
|
||||
你也可以通过官方[发行说明][8]了解更多信息。
|
||||
|
||||
### 📥 下载 Ardour 8.2
|
||||
|
||||
新版本适用于 **Linux**、**Windows** 和 **macOS**。从[官方网站][9]获取你选择的包。
|
||||
|
||||
> **[Ardour][9]**
|
||||
|
||||
你还可以查看其 [GitHub 仓库][10]的源代码。
|
||||
|
||||
💬 你对新增的新增功能有何看法? 请在下面告诉我们!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ardour-8-2-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/12/Ardour_8.2_a.png
|
||||
[3]: https://novationmusic.com/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Ardour_8.2_b-1.png
|
||||
[5]: https://novationmusic.com/categories/midi-controllers/grid
|
||||
[6]: https://www.ableton.com/en/live/all-new-features/
|
||||
[7]: https://solidstatelogic.com/products/uf8
|
||||
[8]: https://ardour.org/whatsnew.html
|
||||
[9]: https://community.ardour.org/download
|
||||
[10]: https://github.com/Ardour/ardour
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/18/211518rnvb1btht22avfoa.jpg
|
||||
@@ -0,0 +1,119 @@
|
||||
[#]: subject: "Blast from the Past: DG/UX UNIX Operating System"
|
||||
[#]: via: "https://itsfoss.com/dg-ux-os/"
|
||||
[#]: author: "Bill Dyer https://itsfoss.com/author/bill/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16481-1.html"
|
||||
|
||||
重温过去:DG/UX UNIX 操作系统
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 和我一起重温怀旧时光,回顾我使用 DG/UX UNIX 操作系统和数据通用公司的 AViiON 工作站和服务器的经历。
|
||||
|
||||
我尝试寻找一些我以前使用过的旧操作系统 [DG/UX][1] 的信息。遗憾的是,关于它的信息已经不多了。这个小型操作系统深得我心,虽然我知道我的经历不会改写历史,但我还是愿意记录下我与之相关的经验,传承历史。
|
||||
|
||||
这款 [Unix][3] [操作系统][4] 由 <ruby>[数据通用公司][2]<rt>Data General</rt></ruby> 开发,主要服务于 [Eclipse MV][5] 迷你计算机系列以及随后的 [AViiON][6] 工作站和服务器。我并未在 Eclipse 系统上工作过,我的工作主要在 AViiON 系统上进行。这些系统坚固得就像坦克,使用起来也异常简洁。
|
||||
|
||||
![Data General AV/4000 | Picture copyright WolfeDen.org][7]
|
||||
|
||||
### 操作系统概述
|
||||
|
||||
我在 1990 年代中期开始接触 DG/UX,当时它已经存在了一段时间。DG/UX 1 在 1985 年 3 月发布,是基于 [UNIX System V][8] Release 2,且融入了 [4.1BSD][9] 的优秀特性构建的。几年后,DG/UX 3.10 就添加了 [TCP/IP][10] 网络、[NFS][11] 和 [X Window System][12]。记得 [CDE][13] 吗?
|
||||
|
||||
![CDE (Common Desktop Environment)][14]
|
||||
|
||||
DG/UX 4 在 1988 年发布(这个“4”在后面让我非常困扰...),此版本是系统的一次重大设计革新,基于 [System V Release 3][16]。同时,其文件系统可以通过逻辑磁盘设施跨越多个磁盘。
|
||||
|
||||
DG/UX 5.4 版本的改变非常有意义,这也是我开始使用的版本。这个版本将传统的 Unix 文件缓冲区缓存替换为了统一的、按需分页的虚拟内存管理。
|
||||
|
||||
该操作系统比其他一些 Unix 变体更强大,例如,它内置了完整的 [C][17] 语言编译器。我们同时还有一支 [COBOL][18] 程序员团队,不过我记得 COBOL 是作为插件使用的。现在,虽然大家都觉得 C 语言编译器是理所当然的存在,但在那个时代,它是一份无比珍贵的礼物。我编写过许多为管理任务服务的脚本,同时我还为特定的工作需求编写了几个 C 程序。
|
||||
|
||||
这款操作系统体积小巧,简单易用。System V 和加入的 BSD 工具是完美的结合,可以说,这是最优秀的两全其美的产物。不论是安装还是升级,都非常的简便,并且对内存或者处理器资源的需求也非常低。
|
||||
|
||||
内置在系统中的 [卷管理器][19] 简单但功能强大。基本上所有的磁盘管理都可以在线上完成,无需将文件系统切换为离线状态。在一个保险/风险管理工作环境中,这一特性是非常重要的。我们可以扩容、迁移、进行镜像或者缩容,这些功能也可以对交换区进行操作,在不中断系统运行的条件下原地迁移磁盘存储。
|
||||
|
||||
### 机器
|
||||
|
||||
我曾接触过的 AViiON 机器分两种类型:一种是 AV300 [pizza box][20] 工作站,另一种是配有 [CLARiiON][21] 磁盘阵列的 AV9500 服务器。
|
||||
|
||||
![Data General AViiON AV/300D came in Pizza Box style | Picture Credit Pizza Box Computer][22]
|
||||
|
||||
在 AViiON 中,DG/UX 支持使用 [多处理器][23]。在一个保险/风险管理工作环境中,这是一项很大的优势,因为并不是所有的 Unix 包都支持这个功能。此外,DG/UX 还能无缝地与 CLARiiON 阵列配合工作。
|
||||
|
||||
有了像 CLARiiON 这样的 RAID,为特定账户配置空间非常容易。但一个以前的管理员在创造账户时总是会选择“使用第一个可用空间”。很快我们碰到了一些问题,比如:一个单独的查询就会点亮全部 125 个磁盘上的指示灯 —— 一个账户的数据分布着整个阵列设备。
|
||||
|
||||
![By Michael Moll - photo taken by Michael Moll, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=512844][24]
|
||||
|
||||
当我成为主管理员后,我就着手修复这个问题,把一个阵列指定给一些较大的帐户,小帐户分组到两个阵列上。整个修复过程花了我一个星期的晚班时间,但是 DG/UX 让重排文件到指定阵列的整个过程变得异常轻松。
|
||||
|
||||
RAID 本身也异常稳定。在某个时期,我们使用过 IBM 1GB 的磁盘。这些硬盘的内部机构有时候会卡住,能让它们回复正常工作的唯一方法就是把他们取出来,在地板上像旋转陀螺那样旋转(没错,我是认真的!)。偶尔,磁盘可能彻底报废,无法再转动。现在,RAID 会在阵列内复制每个磁盘的数据,因此数据仍旧存在,尽管效率将受到影响。有一次,我不得不从另一台计算机上“借用”一个磁盘,让一个阵列能够维持运行,直到我们得到替代品。当天,CLARiiON 的表现极为出色,我们并不想再继续这样冒险,因此我们决定替换所有磁盘,而 DG/UX 的备份/恢复工具使这项工作毫无障碍的进行。
|
||||
|
||||
### 技术支持
|
||||
|
||||
关于技术支持并没有太多可以讲的,因为它真的很棒。我从未在技术支持上遇到过问题,每个问题都得到了礼貌、准确的回答,如今这点已经很少见了。
|
||||
|
||||
你还记得我前面提到的那个“4”吗?就是那个后来让我感到困扰的数字?我曾经因此而拨打技术支持电话。在 1995 年,我收到了操作系统升级的磁带,但我们那时正在运行的是 5.4 版本。我见到 4.10 版本的磁带时非常惊讶,我原以为这是个错误,我被寄给了错误的磁带,我并不想将系统降级。
|
||||
|
||||
事实证明,我收到的是正确的磁带。那个“4”是为了向 System V Release **4** 版本致敬。我有时还会觉得这很奇怪 — 升级一个操作系统,却让版本号降低。下面是一些版本的列表说明:
|
||||
|
||||
1. DG/UX 5.4 - 3.00 - 1994 年 1 月
|
||||
2. DG/UX 5.4 - 3.10 - 1994 年 7 月
|
||||
3. DG/UX 5.4 - 4.00 - 1995 年 1 月
|
||||
4. DG/UX - **4.10** - 1995 年 8 月
|
||||
5. DG/UX - **4.11** - 1995 年 12 月
|
||||
|
||||
### DG/UX 和 AViiON 的结束
|
||||
|
||||
我在 1995 年底离开了这个岗位,但听说在世纪之交 [EMC][25] 收购了数据通用公司,以便能够获得 CLARiiON 阵列和软件。考虑到 CLARiiON 的稳定性,这个决定我认为是理解的。据我记得,EMC 在收购后的几年内还在支持 DG/UX 操作系统和 AViiON,然后就停止支持了。我内心希望他们能一直保留这个操作系统,但那个时候,Unix 世界已经被像 [IBM][26]、[Sun Microsystems][27] 和 [HP][28] 这些大公司主导,同时还有像 [Linux][29] 这样的新兴力量在逐渐崭露头角。
|
||||
|
||||
数据通用公司和 DG/UX 无疑是拥有一段美好历史的。它们的卓越支持和操作系统是今天绝难比拟的。我特别喜欢那个操作系统,它也是一款绝对值得被铭记的操作系统。
|
||||
|
||||
*(题图:DA/e651f994-3695-4bfd-89cc-c6b7b1ad0309)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/dg-ux-os/
|
||||
|
||||
作者:[Bill Dyer][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/bill/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://archive.org/details/installing_the_dgux_system
|
||||
[2]: https://en.wikipedia.org/wiki/Data_General
|
||||
[3]: https://en.wikipedia.org/wiki/Unix
|
||||
[4]: https://en.wikipedia.org/wiki/Operating_system
|
||||
[5]: https://en.wikipedia.org/wiki/Eclipse_MV
|
||||
[6]: https://en.wikipedia.org/wiki/Aviion
|
||||
[7]: https://itsfoss.com/content/images/2023/12/data-general-avion.jpg
|
||||
[8]: https://en.wikipedia.org/wiki/UNIX_System_V
|
||||
[9]: https://en.wikipedia.org/wiki/BSD
|
||||
[10]: https://en.wikipedia.org/wiki/TCP/IP
|
||||
[11]: https://en.wikipedia.org/wiki/Network_File_System
|
||||
[12]: https://en.wikipedia.org/wiki/X_Window_System
|
||||
[13]: https://itsfoss.com/common-desktop-environment/
|
||||
[14]: https://itsfoss.com/content/images/wordpress/2021/12/cde_desktop-4.jpg
|
||||
[15]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[16]: https://en.wikipedia.org/wiki/System_V_Release_3
|
||||
[17]: https://en.wikipedia.org/wiki/C_(programming_language)
|
||||
[18]: https://en.wikipedia.org/wiki/COBOL
|
||||
[19]: https://en.wikipedia.org/wiki/Logical_volume_management
|
||||
[20]: https://en.wikipedia.org/wiki/Pizza_box_form_factor
|
||||
[21]: https://en.wikipedia.org/wiki/Clariion
|
||||
[22]: https://itsfoss.com/content/images/2023/12/aviion-av300-front--1-.jpg
|
||||
[23]: https://en.wikipedia.org/wiki/Multiprocessor
|
||||
[24]: https://itsfoss.com/content/images/2023/12/EMC_Clariion_CX500.jpg
|
||||
[25]: https://en.wikipedia.org/wiki/EMC_Corporation
|
||||
[26]: https://en.wikipedia.org/wiki/IBM
|
||||
[27]: https://en.wikipedia.org/wiki/Sun_Microsystems
|
||||
[28]: https://en.wikipedia.org/wiki/Hewlett-Packard
|
||||
[29]: https://www.linux.com/what-is-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/17/083916hnnvzxs1tnmn7thn.jpg
|
||||
@@ -0,0 +1,108 @@
|
||||
[#]: subject: "Vivaldi 6.5 Releases With Future-Ready Features"
|
||||
[#]: via: "https://news.itsfoss.com/vivaldi-6-5-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16483-1.html"
|
||||
|
||||
Vivaldi 6.5 现已发布,展示面向未来的特性
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Vivaldi 6.5 是一个令人印象深刻的升级,必将助力提高生产效率,缩短工时!
|
||||
|
||||
Vivaldi,作为 Ubuntu 和各类 Linux 发行版的 [最佳网络浏览器][1] 之一,今年已经连续推出了众多重大升级,将其推升到了前所未有的高度。
|
||||
|
||||
作为今年的收官之作,**Vivaldi 6.5** 版本的发布承载了许多新特性和改进建议。
|
||||
|
||||
> 🚧 需要注意的是,Vivaldi 是非完全开源的解决方案,其用户界面部分属于闭源。
|
||||
|
||||
接下来让我们探索一下具体的内容。
|
||||
|
||||
### 🆕 Vivaldi 6.5:有何新进展?
|
||||
|
||||
作为年终的馈赠,Vivaldi 的这次发布有以下 **核心亮点** :
|
||||
|
||||
* 会话面板
|
||||
* 优化的工作区
|
||||
* 更强的同步性能
|
||||
|
||||
#### 会话面板
|
||||
|
||||
![][3]
|
||||
|
||||
Vivaldi 新增了一个 “<ruby>会话<rt>Sessions</rt></ruby>” 面板,允许你 **整理和存储来自任何窗口或工作区的标签**。你可以轻松地从新的侧栏管理,并在需要时重新打开它们。
|
||||
|
||||
你还可以编辑内容,重命名会话,甚至查看其下的标签。
|
||||
|
||||
更进一步的是,你还可以选择启用 “<ruby>自动会话备份<rt>Automatic Session Backup</rt></ruby>”,它将 **每小时自动创建一次备份,保留长达 30 天**。备份包括所有打开的标签的快照;你也可以进行手动保存。
|
||||
|
||||
#### 工作区自动化
|
||||
|
||||
![][4]
|
||||
|
||||
基于现有的工作区特性,**Vivaldi 6.5 实现了工作区的自动化**。当你用 URL 配置一个工作区规则后,尝试打开该链接的标签会自动转移至你选择的工作区。
|
||||
|
||||
如你在上图可以看到的,你只需要 **选择一个 URL** ,然后 **决定应用哪一规则** (有三个选项:“<ruby>包含<rt>contains</rt></ruby>”、“<ruby>是<rt>is</rt></ruby>”或“<ruby>始于<rt>starts with</rt></ruby>”)。至此,你只需要通过 “<ruby>在其中打开<rt>Open in</rt></ruby>” 选项来 **选择一个工作区**。
|
||||
|
||||
未来已经来临!😁
|
||||
|
||||
#### 同步性能升级
|
||||
|
||||
![][5]
|
||||
|
||||
此次发布达成了重要的里程碑之一,实现了 **跨平台浏览器历史记录的同步**。这使 Vivaldi 的同步特性更为完整,因为现在它已然能同步密码、书签、打开的标签、注释和阅读列表。
|
||||
|
||||
何况,**所有同步的数据在你所有的设备之间都实现了端到端的加密**。这是非常令人欣慰的,因为并非所有软件都有这样的实现。
|
||||
|
||||
此外,还有更多。
|
||||
|
||||
**来自任何你设备中的地址栏和 “<ruby>窗口<rt>Windows</rt></ruby>” 面板的同步标签现在是可搜索的**。在此次更新之前,你必须在标签栏点击云图标才能访问这些标签。
|
||||
|
||||
#### 🛠️ 另外的变动和改善
|
||||
|
||||
除了上述内容,还有很多其他的有益改动:
|
||||
|
||||
* 升级到 **Chromium 120.0.6099.121**。
|
||||
* 同步功能将 **不会同步敏感且未加密的数据**。
|
||||
* 修复了一些 **可能在各种网页上触发的随机崩溃**。
|
||||
* Vivaldi 的 **笔记面板** 增加了新的 “<ruby>添加到笔记选项<rt>Append to Note option</rt></ruby>”。
|
||||
* 修复了在打开欢迎屏幕时 **造成的 CPU 和 GPU 高耗能**。
|
||||
* 解决了在加载时 **窗口无法根据主题自适应** 的问题。
|
||||
|
||||
你也可以通过查阅 [发布公告][6] 来获取更多的发布详情。
|
||||
|
||||
### 📥 获取 Vivaldi 6.5
|
||||
|
||||
新版 Vivaldi 已对 **Linux**、**Windows** 以及 **macOS** 开放。你可以在 [官方网站][7] 获取。
|
||||
|
||||
> **[Vivaldi][7]**
|
||||
|
||||
💬 你对这次功能更新满意吗?还是你正在等待其他新功能的加入?
|
||||
|
||||
*(题图:DA/72f1b4a6-59dd-4098-8edf-ec4e28a5c1f5)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/vivaldi-6-5-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-browsers-ubuntu-linux/
|
||||
[2]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/12/Vivaldi_6.5_a.jpg
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Vivaldi_6.5_b.jpg
|
||||
[5]: https://news.itsfoss.com/content/images/2023/12/Vivaldi_6.5_c.jpg
|
||||
[6]: https://vivaldi.com/blog/vivaldi-on-desktop-6-5/
|
||||
[7]: https://vivaldi.com/download/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/17/231955hh7o5b5or35r7dsi.jpg
|
||||
@@ -0,0 +1,230 @@
|
||||
[#]: subject: "11 Fish Shell Features That Make it More Awesome Than Bash"
|
||||
[#]: via: "https://itsfoss.com/fish-shell-features/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16504-1.html"
|
||||
|
||||
让 Fish Shell 比 Bash 更好的 11 大特性
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 就算你是素食主义者或对海鲜有过敏反应,也值得试试 Fish :P
|
||||
|
||||
Bash 是使用最广泛的 Shell,Zsh 则是开发者圈里最受青睐的,但 Fish 往往被许多人忽视。
|
||||
|
||||
这绝非夸张之辞。Fish 的确是个备受忽视的 Shell,它对新手和资深的自由开源软件用户,都可能是极好的选择。
|
||||
|
||||
Fish 提供了一系列吸引人的功能,使其具有鲜明优势。这其中包括了从语法高亮到缩写(我个人最喜欢的部分),这里面充满了种种新奇。
|
||||
|
||||
下面,我要和大家分享一些我最青睐的 Fish Shell 特性。
|
||||
|
||||
### 1、语法高亮
|
||||
|
||||
在错误的命令被执行之前就识别出它们将大大节省你的时间,同时降低你的挫败感。
|
||||
|
||||
现代的许多代码编辑器都内置了语法高亮功能,而 Fish 不仅将此功能内置在了 Shell 中,而且对于 Linux 命令也同样有效。
|
||||
|
||||
命令有误?你会发现其被红色高亮。同样的,对于不符合上下文的参数和选项也是如此。
|
||||
|
||||
![错误高亮为红色][1]
|
||||
|
||||
### 2、自动建议
|
||||
|
||||
当你输入命令时,Fish Shell 会自动推荐命令,然后你可以按照提示,使用 `Tab` 键进行相应的补全操作。
|
||||
|
||||
![Fish 自动补全][2]
|
||||
|
||||
随着你的输入,建议会以灰色显示,使其更易于识别。如果整条建议都对你的胃口,你可以**按右箭头键来完成整个命令的补全**。
|
||||
|
||||
### 3、命令选项的交互式手册页
|
||||
|
||||
这是一个炫酷的功能,你可以交互性地参考手册页完成命令选项的填写。
|
||||
|
||||
首先,你需要先解析手册页,这可以通过以下命令来完成:
|
||||
|
||||
```
|
||||
fish_update_completions
|
||||
```
|
||||
|
||||
这会对手册页进行解析。
|
||||
|
||||
![手册页解析][3]
|
||||
|
||||
现在,如果你输入一个命令,添加连字符作为选项,然后按下 `Tab` 键,就能看到手册页给出的可能选项及其简短描述:
|
||||
|
||||
![Fish 手册页帮助][4]
|
||||
|
||||
你可以通过滚动一览这些选项,并在阅读了作用说明后,从弹出的分页器中进行选择。
|
||||
|
||||
要比直接输入 `command -h` 更便利一些对吧。
|
||||
|
||||
### 4、缩写优于别名
|
||||
|
||||
在 Fish 里,缩写的作用就如同文本扩展工具。你可以为一些常用的代码设置易于调用的缩写。
|
||||
|
||||
比如说,我把 `sch` 设为 `pacman -Ss` 的缩写,用以搜索软件包。
|
||||
|
||||
```
|
||||
abbr -a sch pacman -Ss
|
||||
```
|
||||
|
||||
于是,每次我输入 `sch` 并按空格键后,它就会被替换成 `pacman -Ss`。
|
||||
|
||||
![Fish Shell 缩写][5]
|
||||
|
||||
你甚至可以把它写入配置文件,让其成为永久设置。
|
||||
|
||||
> 💡 别名和缩写的关键区别在于,别名的工作是内部完成的,你看不到其背后真正运行的命令。而缩写不仅会展示实际的命令,而且会让它们在历史记录里也正确地出现。
|
||||
|
||||
### 5、丰富的基于 Web 的帮助
|
||||
|
||||
Linux 纯粹主义者常常依赖手册页来寻求命令帮助,而新一代的 Linux 用户则更多地依赖网络资源。
|
||||
|
||||
Fish 则结合了这两者优点,提供了详尽的“基于 Web 的帮助”功能,并且且易于使用,即便在无网络连接的情况下也同样可用,因为它是本地化存储的。
|
||||
|
||||
在运行 Fish Shell 时,仅需输入:
|
||||
|
||||
```
|
||||
help
|
||||
```
|
||||
|
||||
就可以在你的网络浏览器上打开帮助页面了。
|
||||
|
||||
![Fish Shell 网页帮助][6]
|
||||
|
||||
如今,你可以随时方便地查阅这份详细的文档。
|
||||
|
||||
### 6、基于 Web 的配置
|
||||
|
||||
没错,这是另一个“基于 Web”的功能。
|
||||
|
||||
要改变提示符颜色或其他配置,你不必在终端里编辑配置文件,相反地,你可以运行基于 Web 的配置。
|
||||
|
||||
在运行 Fish Shell 时,只需输入以下命令:
|
||||
|
||||
```
|
||||
fish_config
|
||||
```
|
||||
|
||||
这会打开你的浏览器,并显示出配置设置。
|
||||
|
||||
![Fish Shell 基于 Web 的配置][7]
|
||||
|
||||
在这里,你可以更改颜色,从现有列表中选择一个不同的提示符等等。
|
||||
|
||||
![提示符选择][8]
|
||||
|
||||
通过这种方式来改变配置更方便,对吗?
|
||||
|
||||
### 7、自动切换目录
|
||||
|
||||
如果你想切换到某个目录,你不需要输入 `cd` 命令。只需要键入该目录名称就行了。
|
||||
|
||||
例如,如果你位于主目录,并希望切换到 `Downloads` 目录,只需要输入 `Downloads`。输入过程中,它会进一步给出补全建议。
|
||||
|
||||
![自动 cd][9]
|
||||
|
||||
如果你正在某个特定目录中,想要跳转到一个完全不同的路径,则需要使用绝对路径。
|
||||
|
||||
### 8、更简洁的路径导航
|
||||
|
||||
如果你需要在浏览过的目录之间来回切换,没必要输入路径或使用 `cd ..` 等。只要**按 `ALT + ←` 或 `ALT + →`,分别向前和向后移动**就行了。
|
||||
|
||||
![目录导航][10]
|
||||
|
||||
或者,你可以键入 `cdh` 并按回车,这会呼出一个分页器界面,你可以使用对应的数字来回到你想去的目录。
|
||||
|
||||
![使用分页器导航][11]
|
||||
|
||||
### 9、交互式历史搜索
|
||||
|
||||
你可以在 Fish 中交互式地搜索某个特定的历史命令。做这个的时候,就使用我们熟悉的 `CTRL+R` 就行了。
|
||||
|
||||
这会呼出一个类似于分页器的界面,显示一个搜索提示。输入你想要查找的命令,就能看到搜索结果:
|
||||
|
||||
![交互式历史搜索][12]
|
||||
|
||||
### 10、全局变量
|
||||
|
||||
在 Fish Shell 中,如果你将一个变量设置为全局的,那么它将在重启 Shell 或者重启系统后仍然可用。
|
||||
|
||||
要设置一个全局变量,可以使用:
|
||||
|
||||
```
|
||||
set -U my_variable 10
|
||||
```
|
||||
|
||||
这时,`my_variable` 的值将会被设置为 10,即使系统重启后也不变。
|
||||
|
||||
是的,不需要将它们添加到你的 RC 或 profile 中。
|
||||
|
||||
### 11、隐私模式
|
||||
|
||||
Fish Shell 有一个隐私模式,该模式下输入的命令将不会被保存到历史记录或存储在硬盘上。
|
||||
|
||||
要进入隐私模式,使用命令:
|
||||
|
||||
```
|
||||
fish -P
|
||||
```
|
||||
|
||||
![Fish 隐私模式][13]
|
||||
|
||||
工作完成后,通过键入 `exit` 就可以退出隐私模式。
|
||||
|
||||
### Fish 还有更多你可以探索的
|
||||
|
||||
[Fish Shell][15] 提供了许多其他的用户友好特性,比如:
|
||||
|
||||
* 使用 `ALT+Enter` 实现简单的多行命令编辑
|
||||
* 切换 Emacs(默认)/Vim 键位绑定
|
||||
* 提供简洁明了的脚本编写语法
|
||||
|
||||
当然,你可以在其他 Shell 中通过一些努力实现大部分 Fish Shell 的特性,但默认启用这些特性可就完全是另一回事了。
|
||||
|
||||
Fish 可以帮助你在掌控开发环境的前提下,提高开发工作的效率。别把为 Fish Shell 编写脚本运行在 Bash 中,在多用户系统的共享环境中可能会引发 Shell 兼容性问题。
|
||||
|
||||
如果你喜欢这些特性,试试 Fish Shell 看看效果如何。也许你会将 Fish 设为 [你的默认 Shell][16]。
|
||||
|
||||
即使你不想在终端里看到 “Fish”,也许你会喜欢 ASCII 水族馆 😉
|
||||
|
||||
> **[在 Linux 终端利用 Asciiquarium 打造海底世界][14]**
|
||||
|
||||
💬 请在评论中分享你对 Fish Shell 的看法 😄
|
||||
|
||||
*(题图:DA/8522d28f-40ab-4eaa-b2b5-bc627f114224)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/fish-shell-features/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/12/Error-in-red-color.png
|
||||
[2]: https://itsfoss.com/content/images/2023/12/fish-auto-completion.svg
|
||||
[3]: https://itsfoss.com/content/images/2023/12/fish-update-completions.png
|
||||
[4]: https://itsfoss.com/content/images/2023/12/fish-man-page-completion.svg
|
||||
[5]: https://itsfoss.com/content/images/2023/12/fish-abbr-examples.svg
|
||||
[6]: https://itsfoss.com/content/images/2023/12/fish-web-help.png
|
||||
[7]: https://itsfoss.com/content/images/2023/12/fish-web-configuration.png
|
||||
[8]: https://itsfoss.com/content/images/2023/12/fish-various-prompts.png
|
||||
[9]: https://itsfoss.com/content/images/2023/12/fish-automatic-cd.svg
|
||||
[10]: https://itsfoss.com/content/images/2023/12/fish-navigation.svg
|
||||
[11]: https://itsfoss.com/content/images/2023/12/fish-navigation-cdh.svg
|
||||
[12]: https://itsfoss.com/content/images/2023/12/fish-interactive-history.svg
|
||||
[13]: https://itsfoss.com/content/images/2023/12/fish-private-mode.svg
|
||||
[14]: https://linux.cn/article-16354-1.html
|
||||
[15]: https://fishshell.com/
|
||||
[16]: https://itsfoss.com/linux-change-default-shell/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/25/183053z4974f7g0077az6i.jpg
|
||||
@@ -0,0 +1,76 @@
|
||||
[#]: subject: "Wow! Microsoft Windows AI Studio Needs Linux to Work"
|
||||
[#]: via: "https://news.itsfoss.com/microsoft-windows-ai-studio-linux/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16489-1.html"
|
||||
|
||||
哇!微软的 Windows AI Studio 需要依赖 Linux 才能运行
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 没有办法,微软热爱 Linux。
|
||||
|
||||
上个周末,我意外发现了微软推出的这款全新 AI 开发工具,这得归功于 [Windows Central][1] 的报道。这条新闻源自 Venn Stone 在 [Mastodon post][2] 中的一条信息:“_第一步?安装 Linux_”。
|
||||
|
||||
这个消息激发了我深挖此事的兴趣,结果发现,就在一个月前,微软已经在其 [开发者博客][3] 中婉转提到了这款名为 “**Windows AI Studio**” 的工具了。
|
||||
|
||||
接下来,让我们深入探索一下这件新鲜事。
|
||||
|
||||
> 📋 注意,Windows AI Studio 还在开发中,目前还不能提供全面的技术支持。
|
||||
|
||||
### Windows AI Studio:仅能在 Linux 上运行?
|
||||
|
||||
![][4]
|
||||
|
||||
严格来说,是的。你应该注意到,**微软悄然推出了其崭新的开发工具**,这款工具的主要目标是**方便开发者在本地开发生成型 AI 应用**。但是,这款工具**需要依赖 Windows 的 Linux 子系统(WSL),并必须安装 Ubuntu 18.4 或更高版本才能运行**。
|
||||
|
||||
由于目前这还是一个预览版本,并且已经被封装为一个 VS Code 扩展,所以它还需要**安装 VS Code**,而且当前**仅能在英伟达的 GPU 上运行**。🥲
|
||||
|
||||
据微软的未来规划,他们打算在 Windows AI Studio 中引入 [ORT][5]/[DML][6],以达到**更好的硬件兼容性**。
|
||||
|
||||
Windows AI Studio 还可以借助 [Azure AI Studio][7] 库中的开发工具以及其他例如 [Hugging Face][8] 的模型。
|
||||
|
||||
看到 Windows 需要依赖 Linux 总是一件振奋的事。😁
|
||||
|
||||
有很多开发者严重依赖 Windows,WSL 使他们能在 Linux 上开展工作变得容易,而 Windows AI Studio 这样的工具则进一步提升了他们的工作体验。
|
||||
|
||||
**想试一试吗?**
|
||||
|
||||
你可以从 [VS 市场][9] 获得 Windows Studio AI。请保证你已经**为 WSL 配置了 Ubuntu 18.4 或更高版本作为默认系统**。此外,还需要记得**使用一款性能良好的 NVIDIA GPU**。
|
||||
|
||||
> **[Windows AI Studio][9]**
|
||||
|
||||
**在市场列表中列出了所有重要的安装信息**,确保你已经仔细阅读过。另外,如想了解更多信息,你也可以访问其 [GitHub 仓库][10] 进行深入研究。
|
||||
|
||||
💬 你对此怎么看?
|
||||
|
||||
*(题图:DA/0310bdbe-0e97-48df-a0cf-4f55b0361b37)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/microsoft-windows-ai-studio-linux/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.windowscentral.com/software-apps/windows-11/hidden-windows-11-setting-suggests-youll-soon-be-able-to-uninstall-ai-components-from-the-os
|
||||
[2]: https://mast.linuxgamecast.com/@Venn/111577589308411637
|
||||
[3]: https://blogs.windows.com/windowsdeveloper/2023/11/15/elevating-the-developer-experience-on-windows-with-new-ai-tools-and-productivity-tools/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Windows_AI_Studio.png
|
||||
[5]: https://onnxruntime.ai/
|
||||
[6]: https://learn.microsoft.com/en-us/windows/ai/directml/dml-intro
|
||||
[7]: https://azure.microsoft.com/en-us/products/ai-studio
|
||||
[8]: https://huggingface.co/
|
||||
[9]: https://marketplace.visualstudio.com/items?itemName=ms-windows-ai-studio.windows-ai-studio
|
||||
[10]: https://github.com/microsoft/windows-ai-studio
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/19/230333a99wh9anm5fm5iw5.jpg
|
||||
@@ -0,0 +1,107 @@
|
||||
[#]: subject: "Broadcom Drops A Hammer on VMware Customers After Acquisition"
|
||||
[#]: via: "https://news.itsfoss.com/vmware-broadcom-subscription/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16493-1.html"
|
||||
|
||||
博通在收购 VMware 后重击客户
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> VMware 的客户可能对背后的改变意图感到不快。
|
||||
|
||||
博通最近以 610 亿美元的价格完成了对 VMware 的收购。
|
||||
|
||||
每次企业拥有权发生变更,其正负效应皆取决于具体情况。
|
||||
|
||||
遗憾的是,对于 VMware([最受欢迎的虚拟化解决方案][1] 之一),这无疑是坏消息。
|
||||
|
||||
### 简化许可证,还是在糖衣里的毒药?
|
||||
|
||||
在完成收购后,VMWare [宣布][2] 了将对许可证操作及针对 VMware 客户的支持周期进行改变的计划。
|
||||
|
||||
他们提及他们的目标是“简化”许可证,然而现实是,情况只是变得更糟。
|
||||
|
||||
怎么变糟的呢?就是通过采取**订阅制的许可证模型**与**弃用永久许可证**。
|
||||
|
||||
> 💡 永久许可证是一次性购买,在你想要使用此软件的期间内,你拥有使用权。如果需要新版本,你可以选择升级或更新。
|
||||
|
||||
因此,VMware 产品的永久许可证不再存在。你需要按需订阅他们的产品或服务。
|
||||
|
||||
在公告中,他们如此表示:
|
||||
|
||||
> VMware 一直努力转变为订阅模型已有一年多的时间,行业已将订阅作为云消费的标准模式。现在,我们的产品组合更加精简,订阅服务也愈发完善,任何产品或服务都只能通过订阅或期限许可证获得。从今天起,永久许可证和支持订阅的销售及续订将终止。
|
||||
|
||||
从他们的角度来看,购买订阅模式下,客户的投资将会获得更大的价值。
|
||||
|
||||
但我怀疑是否有人会同意这种观点。对于客户来说,一次性费用的购买计划对客户永远比基于订阅的计划更有价值。
|
||||
|
||||
你是否更喜欢 Adobe 的订阅制模式以使用 Adobe Premier Pro,或是更倾向于 Apple 的 Final Cut Pro 的一次性费用(假设你拥有 Apple 电脑)?🤔
|
||||
|
||||
我认为你们中的大多数人可能会选择一次性费用,VMware 的客户也不例外。
|
||||
|
||||
实际上,VMware 也承认了这个事实,他们在今年早些时候发布的一篇 [博客文章][3] 就是针对这个讨论:
|
||||
|
||||
> Perpetual On-prem 或永久许可证均配有辅以许可密钥和一个支持购买选项的 SnS。这是最为人们所熟知的模型。
|
||||
|
||||
这多少让人感到有些讽刺,对吧?
|
||||
|
||||
尽管有些客户可能能够应对这个变化,但**现有的客户可能对其永久许可证带来的好处的消失感到不安**。
|
||||
|
||||
没错,你没听错。
|
||||
|
||||
> 不,客户不能继续更新他们永久许可产品之后的 SnS 合同。博通将协助客户将其永久产品以优惠的价格升级为新的订阅产品。欲了解更多信息,客户可联系他们的 VMware 代表或合作伙伴。
|
||||
|
||||
**现有的客户仍可继续使用该软件。** 然而,对此的支持服务将会中止,除非他们选择升级或转为订阅制计划。
|
||||
|
||||
伴随着这些变化,VMware 云基础设施的产品线也进行了相应的调整:
|
||||
|
||||
* 订阅价格减半,增加了更高级的支持
|
||||
* 推出了新的 VMware vSphere Foundation,为中小型客户提供了一个企业级的平台。
|
||||
|
||||
为了确认这个变化影响到了哪些产品,我建议你浏览一下 [官方公告][2],他们在那里回答了更多针对客户的问题。
|
||||
|
||||
### 所以,博通正在利用这种情况吗?
|
||||
|
||||
我认为是这样。
|
||||
|
||||
他们在完成收购后马上实施更改,更积极地从 VMware 产品中获取收益。
|
||||
|
||||
我认为他们本可以为永久许可证持有者保留一些支持,或者继续允许那些不能用订阅模式证明他们的业务的合格客户使用。
|
||||
|
||||
然而,博通只是又一家让最终客户对收购结果感到不满的公司。或许他们可以尝试一下不一样的做法?
|
||||
|
||||
但现在,一切都来不及了。
|
||||
|
||||
现在,不满意的客户可以开始考虑一些开源的解决方案和替代产品,比如 [The Stack][8] 提及的 [Proxmox][6] 和 [Canonical 的 MicroCloud][7]。
|
||||
|
||||
💬 对于博通对 VMware 许可证的简化,你有什么看法呢?分享你的想法,期待下面有趣的讨论!
|
||||
|
||||
*(题图:DA/c0450aaa-d443-49c8-aa9d-1cd5cf664cd1)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/vmware-broadcom-subscription/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/virtualization-software-linux/
|
||||
[2]: https://news.vmware.com/company/vmware-by-broadcom-business-transformation
|
||||
[3]: https://octo.vmware.com/perpetual-term-or-saas/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[5]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[6]: https://www.proxmox.com/
|
||||
[7]: https://canonical.com/microcloud
|
||||
[8]: https://www.thestack.technology/broadcom-is-killing-off-vmware-perpetual-licences-sns/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/20/212630qjiljtawfkklrnvp.jpg
|
||||
@@ -0,0 +1,57 @@
|
||||
[#]: subject: "Introducing Fedora Asahi Remix 39"
|
||||
[#]: via: "https://fedoramagazine.org/introducing-fedora-asahi-remix-39/"
|
||||
[#]: author: "Neal Gompa https://fedoramagazine.org/author/ngompa/"
|
||||
[#]: author: "Davide Cavalca https://fedoramagazine.org/author/dcavalca/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16496-1.html"
|
||||
|
||||
支持苹果芯片的 Fedora Asahi Remix 39 发布
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
早在 8 月份,我们 [宣布][2] Fedora Linux 很快就会在<ruby>苹果芯片<rt>Apple Silicon</rt></ruby> Mac 上可用。我们在 Flock 上推出了 [Fedora Asahi Remix][3]。这个发行版与 [Fedora Asahi SIG][4] 和 [Asahi Linux][5] 项目密切合作开发的。
|
||||
|
||||
今天,我们很高兴地宣布 Fedora Asahi Remix 39 现已 [正式发布][6]!这个 Remix 版基于 Fedora Linux 39,通过广泛的平台和设备支持,在苹果芯片 Mac 上提供了出色的体验。它全面支持所有配备 M1 和 M2 芯片的 MacBook Air、MacBook Pro、Mac Mini、Mac Studio 和 iMac 系统。有关各个系统的详细信息,请参阅 Asahi Linux 网站上的 [特性矩阵][6]。
|
||||
|
||||
Fedora Asahi Remix 选定 KDE Plasma 作为我们的旗舰桌面版本,同时配备了一个基于 Calamares 的自定义初始设置向导。GNOME 变体同样可用,两种桌面变体都与 Fedora Linux 提供的功能相兼容。KDE 和 GNOME 都支持开箱即用的 Wayland,并利用 XWayland 来支持旧版 X11 应用程序。
|
||||
|
||||
Fedora Asahi 还附带非一致性 OpenGL 3.3 支持,包括 GPU 加速的几何着色器和变换反馈,以及世界上第一个也是唯一一个针对苹果芯片的 [经过认证的一致性 OpenGL ES 3.1][7] 实现。我们创新性地整合了 DSP 解决方案,得以即插即用支持高质量音频,不仅能呈现全方位的音效和动态范围,还不会对电池寿命产生影响。
|
||||
|
||||
Fedora Asahi Remix 还为服务器工作负载和其他类型的无头部署提供了 Fedora Server 变体。最后,我们为希望从头开始构建自己的体验的用户提供了一个最小的镜像。
|
||||
|
||||
你今天就可以按照我们的 [安装指南][8] 安装 Fedora Asahi Remix。我们还设有一个用于跟踪已知问题的 [问题跟踪器][9]、一个用于用户支持的 [Discourse 论坛][10] 和一个 [Matrix 聊天室][11]。
|
||||
|
||||
Fedora Asahi Remix 是我们多年合作的成果,我们希望你会喜欢在自己的系统上运行它。我们期待未来将支持扩展到更多设备和功能,并继续为苹果芯片 Mac 提供最佳的 Linux 体验。
|
||||
|
||||
*(题图:DA/9f052f85-4f66-445c-8a75-81a5c0221911)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/introducing-fedora-asahi-remix-39/
|
||||
|
||||
作者:[Neal Gompa][a1],[Davide Cavalca][a2]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a1]: https://fedoramagazine.org/author/ngompa/
|
||||
[a2]: https://fedoramagazine.org/author/dcavalca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/12/Fedora_Asahi_remix_39_intro-816x345.jpg
|
||||
[2]: https://fedoramagazine.org/coming-soon-fedora-for-apple-silicon-macs/
|
||||
[3]: https://fedora-asahi-remix.org/
|
||||
[4]: https://fedoraproject.org/wiki/SIGs/Asahi
|
||||
[5]: https://asahilinux.org/
|
||||
[6]: https://asahilinux.org/fedora/
|
||||
[7]: https://www.khronos.org/conformance/adopters/conformant-products/opengles#submission_1007
|
||||
[8]: https://docs.fedoraproject.org/en-US/fedora-asahi-remix/installation/
|
||||
[9]: https://pagure.io/fedora-asahi/remix-bugs/issues
|
||||
[10]: https://discussion.fedoraproject.org/c/neighbors/asahi/92
|
||||
[11]: https://matrix.to/#/#asahi:fedoraproject.org
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/22/144616gowqbsetb4jbqatw.jpg
|
||||
@@ -0,0 +1,132 @@
|
||||
[#]: subject: "Qubes OS 4.2 Releases With PipeWire Support And Refreshed Core Apps"
|
||||
[#]: via: "https://news.itsfoss.com/qubes-os-4-2-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16503-1.html"
|
||||
|
||||
Qubes OS 4.2 发布,支持 PipeWire 并更新了核心应用
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Qubes OS 4.2 更新改进了核心应用,还有更多好东西!
|
||||
|
||||
Qubes OS 最近发布了 4.2,带来了一些重要的改进。
|
||||
|
||||
首先介绍一下什么是什么是 Qubes OS?
|
||||
|
||||
嗯,Qubes OS 是对 Linux 发行版的有趣诠释。它与大多数发行版有很大不同,主打“**一个相对安全的操作系统**”。
|
||||
|
||||
它使用**安全隔离的隔间**,称为 “**qube**”,彼此保持独立。你可以有一个用于休闲网络浏览的 qube,处理电子邮件的 qube,以及处理银行业务的 qube;这些就是所谓的 “应用 qube”。
|
||||
|
||||
这些应用 qube 基于另一种称为“**模板**”的 qube,它通常运行一个 Linux 发行版,例如 Fedora 或 Debian。它与基于它的其他 qube 共享其根文件系统(所有程序和文件)。
|
||||
|
||||
因此,你可以在不同的 qube 上运行相同的应用。有关其架构的更多信息在 [此处][1]。
|
||||
|
||||
> 💡 Qubes OS 对系统资源的占用很大(需要比平常更多的 RAM)。
|
||||
|
||||
现在你已经了解了该发行版,让我重点介绍其最新版本的内容。
|
||||
|
||||
### 🆕 Qubes OS 4.2:有什么新变化?
|
||||
|
||||
![][2]
|
||||
|
||||
Qubes OS 4.2 基于**安全裸机管理程序 [Xen 4.17][3]**,并进行了一些精妙的改进,提高了整体性能和可用性。
|
||||
|
||||
一些**关键亮点**包括:
|
||||
|
||||
* Dom0 改用 Fedora 37
|
||||
* 核心应用做出改进
|
||||
* 模板升级
|
||||
* PipeWire 支持(待定)
|
||||
|
||||
#### Dom0 采用 Fedora 37
|
||||
|
||||
“dom0” qube 现在采用 Fedora 37,由 [Linux 内核 6.0][4] 提供支持,这应该使 Qubes OS 能够利用更新的硬件,例如英特尔第 13 代 Raptor Lake CPU。
|
||||
|
||||
“dom0” qube 基本上就是 “**管理 qube**”,用于管理整个操作系统。
|
||||
|
||||
与操作系统的其他部分一样,它的设计方式非常注重安全,因此没有网络连接,并且仅用于运行桌面环境和窗口管理器。
|
||||
|
||||
#### 核心应用改进
|
||||
|
||||
![][6]
|
||||
|
||||
我们看到的另一个重大变化是**一些 Qubes OS 核心应用完全重写了**,这是为了改善整体的用户体验。
|
||||
|
||||
你在上面看到的是**新的 Qubes OS 策略编辑器工具**,它有一个非常简洁的界面,包含所有必需的选项。
|
||||
|
||||
![][7]
|
||||
|
||||
此外,**Qubes OS 全局配置应用也进行了升级**,现在使用起来更加直观,同时将所有重要设置统一在一个平台上。
|
||||
|
||||
![][8]
|
||||
|
||||
最后,**Qubes OS 更新工具也进行了改造**,进行了一些细微的更改,使其更加用户友好。
|
||||
|
||||
#### 模板升级
|
||||
|
||||
内含的默认模板也已升级,默认的 **Debian 模板现在采用 Debian 12**,**Xfce 成为 Fedora 和 Debian 模板的默认桌面环境**。
|
||||
|
||||
#### PipeWire 支持
|
||||
|
||||
经过漫长的等待,Qubes OS 终于加入了处理音频/视频的 [PipeWire][9]。这应该会为整个操作系统带来**更好、更安全的媒体处理体验**。
|
||||
|
||||
#### 🛠️ 其他更改和改进
|
||||
|
||||
除此之外,还有一些值得注意的变化:
|
||||
|
||||
* 更好的**键盘布局切换**。
|
||||
* 对 **Qubes Builder v2** 的改进。
|
||||
* **Fedora 模板中支持 SELinux**。
|
||||
* 一个新的可选**自动剪贴板清除功能**。
|
||||
* 集成 [fwupd][10] 用于处理固件更新。
|
||||
|
||||
我建议你阅读 [发行说明][11],更深入地了解 Qubes OS 4.2 版本。
|
||||
|
||||
### 📥 下载 Qubes OS 4.2
|
||||
|
||||
你可以从 [官方网站][12] 获取此版本。请记住,Qubes OS 可以在裸机上正常工作,而不是在 [虚拟机][13] 上运行。
|
||||
|
||||
> **[Qubes OS 4.2][12]**
|
||||
|
||||
如果你是 Qubes OS 的新手,那么我建议你阅读 [官方文档][14] 以了解有关此发行版的更多信息。
|
||||
|
||||
**对于现有用户**,你可以按照官方 [升级指南][15] 从 Qubes OS 4.1 升级到 4.2。
|
||||
|
||||
💬 你会尝试一下这个版本吗? 请在下面告诉我们!
|
||||
|
||||
*(题图:DA/6236cc3e-114c-44af-bda5-9f65861087ee)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/qubes-os-4-2-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.qubes-os.org/doc/architecture/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/09/Qubes_OS_4.2.png
|
||||
[3]: https://xenproject.org/2022/12/14/xen-project-releases-version-4-17-with-enhanced-security-higher-performance-improved-embedded-static-configuration-and-speculative-mitigation-support/
|
||||
[4]: https://news.itsfoss.com/linux-6-0-release/
|
||||
[5]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[6]: https://news.itsfoss.com/content/images/2023/12/Qubes_OS_4.2_b.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/12/Qubes_OS_4.2_c.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/12/Qubes_OS_4.2_d.png
|
||||
[9]: https://pipewire.org/
|
||||
[10]: https://github.com/fwupd/fwupd
|
||||
[11]: https://www.qubes-os.org/doc/releases/4.2/release-notes/
|
||||
[12]: https://www.qubes-os.org/downloads/
|
||||
[13]: https://itsfoss.com/virtual-machine/
|
||||
[14]: https://www.qubes-os.org/doc/getting-started/
|
||||
[15]: https://www.qubes-os.org/doc/upgrade/4.2/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/25/174707pcd2jc6xababz0v2.jpg
|
||||
@@ -0,0 +1,98 @@
|
||||
[#]: subject: "Darktable 4.6 Release Improves Performance and Adds Nifty New Features"
|
||||
[#]: via: "https://news.itsfoss.com/darktable-4-6-0-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16506-1.html"
|
||||
|
||||
darktable 4.6 发布:提高了性能并添加了一些漂亮的新功能
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> darktable 4.6 更新看起来是一个出色的改进。
|
||||
|
||||
[darktable][1] 是一款流行的摄影和 RAW 图片处理应用,将自己定位为 “_摄影师的虚拟光桌和暗室_”。它可以让你组织所有文件,并以非破坏性的方式提供有用的工具来增强或冲印它们。
|
||||
|
||||
在最近的公告中,开发人员推出了 **darktable 4.6**。让我们看看它能提供什么。
|
||||
|
||||
### 🆕 darktable 4.6:有什么新变化?
|
||||
|
||||
![][2]
|
||||
|
||||
作为一个新功能版本,darktable 4.6 装满了功能。但在本文中,我们将仅关注**此版本的亮点**。
|
||||
|
||||
我们首先介绍 darktable 的**各种性能优化**。**JPEG 2000 和黑白 TIFF 图像的导出速度**得到了提高,色差模块在仅使用 CPU 的情况下**速度提高了约 10%**。
|
||||
|
||||
现在,当你启动 darktable 时,**OpenCL 会立即启动**,并不断显示有关其初始化进度的消息。还引入了 **OpenCL 代码路径**,用于使用嵌入式校正元数据进行镜头校正。
|
||||
|
||||
**它也对新的相机提供了支持**,比如说:
|
||||
|
||||
* 索尼 ZV-E1
|
||||
* 佳能 EOS Kiss F
|
||||
* 佳能 EOS Kiss X50
|
||||
* 佳能 EOS Kiss X90
|
||||
* 三星 EK-GN120
|
||||
* 富士 FinePix SL1000
|
||||
* 宾得 K-3 Mark III Monochrome
|
||||
|
||||
在**暗室视图**中平移/缩放时显示的低分辨率占位符图像现在已被更高质量的图像取代。还有**自动保存功能**,在暗室中编辑图像时(每 10 秒)**自动保存编辑历史**。
|
||||
|
||||
最后,**sigmoid 模块现在具有新的 “主色” 部分**,可用于调整具有棘手照明条件的图像的照明。开发人员表示,这可以让你创造出令人愉悦的日落、改善肤色等等。
|
||||
|
||||
> 📋 这只能与 sigmoid 的每通道模式一起使用,该模式还有一个 “_smooth_” 预设以简化操作。
|
||||
|
||||
#### 🛠️ 其他更改和改进
|
||||
|
||||
至于其余的,还有一些其他值得注意的变化:
|
||||
|
||||
* 导入 AVIF/HEIF 图像时支持**自动方向**。
|
||||
* 你现在可以对非 RAW 文件使用**高亮显示重建模块**。
|
||||
* **AVIF 导出**已更改,无损模式不再使用 YUV 转换。
|
||||
* PNG 文件现在尽可能包含 [CICP][3] 编码的颜色配置文件以及 ICC。
|
||||
* 你现在可以使用 LUT 3D 模块选择线性 [ProPhoto RGB 色彩空间][4]。
|
||||
|
||||
阅读官方 [发行说明][5] 以了解有关此版本的更多信息。
|
||||
|
||||
### 📥 下载 darktable 4.6
|
||||
|
||||
darktable 4.6 适用于 **Linux**、**Windows** 和 **macOS**。
|
||||
|
||||
你可以从 [Flathub 商店][6] 下载最新版本,也可以访问其 [GitHub 仓库][7] 和 [官方网站][1] 获取替代软件包。
|
||||
|
||||
> **[darktable(Flathub)][6]**
|
||||
|
||||
对于现有用户,他们可以从 4.4 版本进行更新而不会丢失所做的编辑,开发人员建议提前进行备份。你可以浏览 [官方文档][8] 了解更多信息。
|
||||
|
||||
我们还有一个 [在 Ubuntu 中安装最新的 darktable 的方便指南][9]。
|
||||
|
||||
💬 你对 darktable 4.6.0 的发布有何看法? 或者你更喜欢其他编辑器?
|
||||
|
||||
*(题图:DA/1600c099-3f36-4682-a258-b7c2086f2228)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/darktable-4-6-0-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.darktable.org/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/12/darktable_4.6.0.png
|
||||
[3]: https://en.wikipedia.org/wiki/Coding-independent_code_points
|
||||
[4]: https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space
|
||||
[5]: https://github.com/darktable-org/darktable/releases/tag/release-4.6.0
|
||||
[6]: https://flathub.org/apps/org.darktable.Darktable
|
||||
[7]: https://github.com/darktable-org/darktable
|
||||
[8]: https://www.darktable.org/resources/
|
||||
[9]: https://itsfoss.com/install-darktable-ubuntu/
|
||||
[10]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/26/145937ucq9q49q9cyq3q5a.jpg
|
||||
@@ -0,0 +1,117 @@
|
||||
[#]: subject: "Xplorer: Not Just a Pretty Open-Source File Manager!"
|
||||
[#]: via: "https://news.itsfoss.com/xplorer/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16521-1.html"
|
||||
|
||||
Xplorer:不仅仅是一个漂亮的开源文件管理器!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 想要换换口味,试试新的文件管理器吗?Xplorer 是一个值得关注的项目!
|
||||
|
||||
一个配备图形用户界面的操作系统最重要的部分之一就是它配备了什么样的文件管理器。这对许多人来说是一个决定成败的因素。
|
||||
|
||||
之所以如此,是因为**文件管理器允许用户轻松管理他们的文件和文件夹**,而无需在终端中运行命令来执行复制内容等基本任务。
|
||||
|
||||
通过这篇 [初体验][1],我将重点展示**这个跨平台文件管理器 Xplorer**,它看起来和感觉都非常现代。让我们开始吧!
|
||||
|
||||
> 🚧 该项目仍处于测试开发阶段。预计会出现错误和问题。
|
||||
|
||||
### Xplorer:概述 ⭐
|
||||
|
||||
![][2]
|
||||
|
||||
文件管理器由 [Tauri][3] 框架提供支持,使用 **Rust 作为后端**,使用 **TypeScript 作为前端**,为用户提供**独特的体验**。
|
||||
|
||||
它的一些**主要功能**包括:
|
||||
|
||||
* 跨平台
|
||||
* 高度可定制
|
||||
* 支持多个选项卡
|
||||
|
||||
#### 初步印象👨💻
|
||||
|
||||
我使用可用的 AppImage 包在配备 Ubuntu 的系统上启动了它。它启动得很顺利,迎接我的是一个漂亮的“主页”页面。
|
||||
|
||||
有一个侧边栏,其中所有常用的文件夹和位置都整齐地排列着,并带有别致的图标。
|
||||
|
||||
![][4]
|
||||
|
||||
然后我继续检查**多选项卡功能**,它的工作方式正如人们所期望的那样。从上下文(_右键单击_)菜单中,我可以在一个新选项卡中打开 “_Wallpapers_” 文件夹,我可以轻松切换到该文件夹。
|
||||
|
||||
![][5]
|
||||
|
||||
即使**检查文件/文件夹的属性**也不错,它向我展示了与其相关的重要信息,例如大小、文件路径、文件类型和重要日期/时间。
|
||||
|
||||
![][6]
|
||||
|
||||
这是我最喜欢的东西,它是**文件预览功能**,可以在打开文件之前显示文件的预览。有两种方法可以访问它,一种是右键单击文件并选择 “<ruby>预览<rt>Preview</rt></ruby>”,另一种是通过键盘快捷键:`Ctrl+O`。
|
||||
|
||||
此功能支持预览文件,例如**图像**、**文本**、**视频**、**markdown**,甚至**带有语法高亮的大多数编程语言**。
|
||||
|
||||
![][7]
|
||||
|
||||
你可以在一定程度上**调整 Xplorer 的外观**,可以选择切换应用主题、调整字体大小/窗口透明度、文件预览功能设置等。
|
||||
|
||||
你还可以**创建和使用自定义主题**,有关此内容的更多信息可以在 [官方文档][8] 中找到。
|
||||
|
||||
![][9]
|
||||
|
||||
在“<ruby>首选项<rt>Preference</rt></ruby>”菜单下还有**其他设置**,你可以对其进行调整,以获得真正属于自己的使用体验。它有处理隐藏文件、系统文件、更改鼠标点击行为等选项。
|
||||
|
||||
你可以从侧边栏底部的“<ruby>设置<rt>Settings</rt></ruby>”菜单访问这些和外观。
|
||||
|
||||
![][10]
|
||||
|
||||
从我使用过程中看到的情况来看,整体体验还不错。但是,也存在一些问题,例如右键单击后出现的上下文菜单。
|
||||
|
||||
当我尝试使用“<ruby>打开终端<rt>Open Terminal</rt></ruby>”选项时,它**拒绝在我的系统上启动终端模拟器**。
|
||||
|
||||
我承认,Xplorer 距离成为 [Linux 最佳文件管理器][11] 之一还有很长的路要走,但我认为,你可以为此做点什么。
|
||||
|
||||
> 💡 **Xplorer 项目需要一些贡献者**,如果你有兴趣,请访问其 [GitHub 仓库][12]。也许这个项目将不断发展,为我们提供出色的文件管理器体验!
|
||||
|
||||
### 📥 下载 Xplorer
|
||||
|
||||
Xplorer 适用于 **Linux**、**Windows**、**macOS**。你可以前往 [官方网站][14] 获取适合你选择的系统的最新软件包。
|
||||
|
||||
> **[Xplorer(GitHub)][15]**
|
||||
|
||||
💬 你对 Xplorer 有何看法? 更喜欢其他应用作为你的文件管理器么? 让我们知道!
|
||||
|
||||
*(题图:DA/6d8c02b5-b635-4dd0-8c00-2db00205f1d1)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/xplorer/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/tag/first-look/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/12/Xplorer_X.png
|
||||
[3]: https://tauri.app/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Xplorer_1.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/12/Xplorer_2.png
|
||||
[6]: https://news.itsfoss.com/content/images/2023/12/Xplorer_3.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/12/Xplorer_4.png
|
||||
[8]: https://xplorer.space/docs/Extensions/theme/
|
||||
[9]: https://news.itsfoss.com/content/images/2023/12/Xplorer_5-1.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/12/Xplorer_6-1.png
|
||||
[11]: https://itsfoss.com/file-managers-linux/
|
||||
[12]: https://github.com/kimlimjustin/xplorer
|
||||
[13]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[14]: https://xplorer.space/
|
||||
[15]: https://github.com/kimlimjustin/xplorer/releases
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/31/165146vugq6nfkk8ana7fz.jpg
|
||||
@@ -0,0 +1,157 @@
|
||||
[#]: subject: "8 Exciting Open Source Apps Linux Users Loved Exploring in 2023"
|
||||
[#]: via: "https://news.itsfoss.com/exciting-apps-2023/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16518-1.html"
|
||||
|
||||
2023 年 Linux 用户值得试试的 8 个开源应用
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 2023 年我们发掘出的那些被低估的精彩应用。
|
||||
|
||||
在 2023 年里,我们关注了各类应用、发行版和其他许多引人注目的开源项目。
|
||||
|
||||
对于开源爱好者或者 Linux 用户来说,尝试我们精选的应用程序是乐趣之一 。
|
||||
|
||||
这一年快要结束了,我希望你不要错过这些有着独到之处的应用。毕竟,你可能会发现,一款引人入胜的应用,可能就此成为你日常生活中不可或缺的一部分。
|
||||
|
||||
下面就是我强烈推荐你来一探究竟的应用:
|
||||
|
||||
### 1、Warp:安全的文件共享应用
|
||||
|
||||
![][1]
|
||||
|
||||
[Warp][2] 是一个基于 Rust 开发的开源文件分享应用,支持在 Linux、Windows 和安卓平台运行。
|
||||
|
||||
其工作流程简洁流畅,所有的通讯过程都经过加密。你需要一个传输码来授权或接收文件,避免了文件被他人无意中接收的风险。
|
||||
|
||||
你可以在我们的报道中了解更多关于它的相关内容:
|
||||
|
||||
> **[Warp:一款可跨平台运行的开源安全文件共享应用][2]**
|
||||
|
||||
### 2、 MusicPod:漂亮的音乐播放器
|
||||
|
||||
![][4]
|
||||
|
||||
如果你想要一款支持播客和广播电台的音乐播放器,而且用户体验上佳,那么 [MusicPod][5] 无疑是个好的选择。
|
||||
|
||||
这是一款基于 Flutter 开发的应用,提供了直观的用户界面和对音乐播放的基本控制功能。当然,如果这不合你的口味,我们的 [最佳 Linux 音乐播放器列表][6] 中还有更多的选择。
|
||||
|
||||
MusicPod 是一款以 Snap 包形式提供的 Linux 应用。
|
||||
|
||||
### 3、Pano:GNOME 剪贴板管理器扩展
|
||||
|
||||
![][7]
|
||||
|
||||
对于 GNOME 用户来说,[Pano 剪贴板管理器][8] 是个实用且有必要装的扩展。
|
||||
|
||||
> **[Pano 剪贴板管理器是你需要的一个很棒的 GNOME 扩展][8]**
|
||||
|
||||
当然,你可以选择像 [CopyQ][9] 这样稳定的剪贴板管理应用。但 Pano 作为一个扩展,使得剪贴板内容的追踪更加直观。
|
||||
|
||||
它会显示你剪贴板中所有的颜色 / 链接 / 图片,并允许你调整其外观。
|
||||
|
||||
你还可以查看我们推荐的 [剪贴板管理器列表][10],看看还有哪些其他的选择。
|
||||
|
||||
### 4、Beaver Notes:极简主义设计的隐私记事应用
|
||||
|
||||
![][12]
|
||||
|
||||
Linux 平台上有许多 [记事应用][13]。然而,如果你已经试过大多数,但还是想要一款简洁直接且注重隐私保护的应用,那么 [Beaver Notes][14] 就值得你一试。
|
||||
|
||||
虽然没有太多功能,但你可以使用 Markdown 进行笔记,以及基本的笔记整理功能。
|
||||
|
||||
我们在今年初就开始使用它,你可以查看一下以获得初次体验:
|
||||
|
||||
> **[Beaver Notes:一款开源的私人记事本应用][14]**
|
||||
|
||||
### 5、Wave:现代化的 Linux 终端
|
||||
|
||||
![][15]
|
||||
|
||||
如果你是命令行的爱好者,但原有的用户体验让你望而却步,你可能会对 [Wave][15A] 这款出色的终端仿真器感兴趣。
|
||||
|
||||
它提供了类似代码编辑器的用户界面,使得即便是新手也能轻松理解。你一眼就能看到所有必需的部分,让整个界面既清晰又有条理。
|
||||
|
||||
除了用户体验方面的优点,它还提供了诸如保存持久 SSH 连接等实用功能。你可以在我们的报道中了解更多相关内容:
|
||||
|
||||
> **[Wave:即使你讨厌命令行,也会喜欢的现代新 Linux 终端][15A]**
|
||||
|
||||
### 6、Xplorer:一款新颖的文件管理器
|
||||
|
||||
![][16]
|
||||
|
||||
大部分用户对 Linux 发行版中内置的文件管理器都十分满意。
|
||||
|
||||
但是,如果你想要尝试些新的东西,Xplorer 就是一个带有一些定制选项的漂亮文件管理器。
|
||||
|
||||
尽管这款应用的开发活跃度并不像其他一些替代品那么高,但随着更多的贡献者的参与,它有可能展现出更大的潜力。
|
||||
|
||||
### 7、Mission Center:系统监控的绝佳应用
|
||||
|
||||
![][17]
|
||||
|
||||
想要进一步了解你的系统资源使用情况?包括线程的使用统计?
|
||||
|
||||
[Mission Center][17A] 是你的首选,它提供了完美的 GUI 系统监控。在我们的报道中,你可以了解更多关于它的详细内容:
|
||||
|
||||
> **[任务中心:一款流畅的 Linux 系统监控应用][17A]**
|
||||
|
||||
### 8、Denaro
|
||||
|
||||
![][18]
|
||||
|
||||
有了 [Denaro][19],Linux 下的个人财务管理变得轻而易举。
|
||||
|
||||
你可以得到对各种货币的支持,以及一些可视化你的财务以及保持事物有序的功能。
|
||||
|
||||
### 最后
|
||||
|
||||
作为 《[初体验系列][20]》 的一部分,我们报道了许多其他的应用程序,如果你感兴趣。而这些,都是我们读者中最受关注的一些。
|
||||
|
||||
💬 你最喜欢列表中的哪一个应用?你有没有新的推荐,让我们在 2024 年来一探究竟?欢迎在下方评论中分享你的想法。
|
||||
|
||||
|
||||
*(题图:DA/94feed1c-767c-4606-8eee-c99ebd01cc49)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/exciting-apps-2023/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/06/Warp_X.jpg
|
||||
[2]: https://linux.cn/article-16117-1.html
|
||||
[3]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/03/MusicPod.png
|
||||
[5]: https://news.itsfoss.com/musicpod/
|
||||
[6]: https://itsfoss.com/best-music-players-linux/
|
||||
[7]: https://news.itsfoss.com/content/images/2023/03/Pano-1.jpg
|
||||
[8]: https://linux.cn/article-15835-1.html
|
||||
[9]: https://itsfoss.com/copyq-clipboard-manager/
|
||||
[10]: https://itsfoss.com/linux-clipboard-managers/
|
||||
[11]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/08/BN-1-1.jpg
|
||||
[13]: https://itsfoss.com/note-taking-apps-linux/
|
||||
[14]: https://linux.cn/article-16210-1.html
|
||||
[15]: https://news.itsfoss.com/content/images/2023/11/wave-terminal.webp
|
||||
[15A]: https://linux.cn/article-16409-1.html
|
||||
[16]: https://news.itsfoss.com/content/images/2023/12/Xplorer_X.png
|
||||
[17]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_1.png
|
||||
[17A]: https://linux.cn/article-16257-1.html
|
||||
[18]: https://news.itsfoss.com/content/images/2023/11/Denaro_9.png
|
||||
[19]: https://news.itsfoss.com/denaro/
|
||||
[20]: https://news.itsfoss.com/tag/first-look/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/30/173805pryspssscpmysbhc.jpg
|
||||
@@ -0,0 +1,96 @@
|
||||
[#]: subject: "Rhino Linux 2023.4 Update Adds An Auto-Tiling Feature"
|
||||
[#]: via: "https://news.itsfoss.com/rhino-linux-2023-4-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16517-1.html"
|
||||
|
||||
Rhino Linux 2023.4 更新添加自动平铺功能
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Rhino Linux 在 2023 年的最后一次更新中添加了一个很棒的功能。
|
||||
|
||||
[Rhino Linux][1] 是一个基于 Ubuntu 的滚动发行版,旨在利用 [滚动发布][2] 方法的优势提供稳定的体验。它诞生于现已解散的 “Rolling Rhino Remix” 项目的废墟之上,并一直在接受定期更新。
|
||||
|
||||
在 2023 年的最后,开发者们发布了 **Rhino Linux 2023.4**,对 Rhino Linux 的未来进行了展望。
|
||||
|
||||
下面,就请随我一起来了解一下吧。
|
||||
|
||||
### 🆕 Rhino Linux 2023.4:有什么新变化?
|
||||
|
||||
![][4]
|
||||
|
||||
在最近的 [Linux 内核 6.6][5] 的支持下,Rhino Linux 2023.4 配备了更新的 Unicorn 桌面,现在**具有可选的自动平铺功能**,可以通过顶部面板中的小程序启用。
|
||||
|
||||
这要归功于 [cortile][6] 的实现,它使用户能够轻松地平铺窗口。它支持诸如**基于工作区的平铺**、**热角**、**拖放窗口交换**等功能。
|
||||
|
||||
同样,**uLauncher 也看到了更新**,它现在看起来更加圆润,并且背景颜色略有不同。
|
||||
|
||||
`rhino-pkg` 也有改进**,现在,如果安装了 [Nala][7],`rhino-pkg update` 不再默认自动删除软件包。
|
||||
|
||||
要清理过时的软件包或损坏的依赖项,你现在可以运行新的 `rhino-pkg cleanup` 命令。
|
||||
|
||||
**对 Pine64 设备的支持也得到了改进**,PineTab2 有**一个新的用户友好的实验性 Wi-Fi 模块**,**PinePhone 和 PinePhone Pro 的各种调制解调器稳定性修复**以及启用 GPS 支持。
|
||||
|
||||
你现在还可以在所有 PinePhone 和 PineTab 上使用手电筒! (如果你正在尝试这样做)
|
||||
|
||||
#### 🛠️ 其他更改和改进
|
||||
|
||||
除了亮点之外,你还应该了解以下一些其他变化:
|
||||
|
||||
* **从 PulseAudio 完全过渡到 PipeWire**。
|
||||
* **在树莓派等嵌入式设备上连接到 Wi-Fi** 已得到改进。
|
||||
* [pacstall-qa][8] 已作为**新的默认包**引入,用于在本地测试来自 PR 的 pacscript。
|
||||
|
||||
开发者还分享了**他们的 2024 年计划**。其中包括**支持离线安装**、**新的图标包**、 **参与开发 [UBXI ports][9]**、用 [nushell][10] 重写 `rhino-pkg` 等。
|
||||
|
||||
你可以浏览 [发行说明][11] 以了解有关此版本以及未来开发计划的更多信息。
|
||||
|
||||
### 📥 下载 Rhino Linux 2023.4
|
||||
|
||||
你可以从 [官方网站][12] 获取最新的 Rhino Linux。共有三种类型的镜像可用于各种系统配置。如果你想在普通计算机上使用它,请选择 “**Generic ISO**”。
|
||||
|
||||
> **[Rhino Linux 2023.4][12]**
|
||||
|
||||
> 📋 通用镜像采用 Linux 内核 6.6.7,Pine64 镜像采用 Linux 内核 6.7.0-rc5,树莓派镜像采用 Linux 内核 6.5.0。
|
||||
|
||||
**对于现有用户**,你只需运行以下命令即可升级:
|
||||
|
||||
```
|
||||
rpk update -y
|
||||
```
|
||||
|
||||
💬 2023 年即将结束,这是今年最后的发行版之一。你怎么看呢?
|
||||
|
||||
*(题图:DA/2aaf8e99-0888-44d4-8dac-9d2d33392f68)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/rhino-linux-2023-4-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://rhinolinux.org/index.html
|
||||
[2]: https://itsfoss.com/rolling-release/
|
||||
[3]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/12/Rhino_Linux_2023.4.png
|
||||
[5]: https://news.itsfoss.com/linux-kernel-6-6-release/
|
||||
[6]: https://github.com/leukipp/cortile
|
||||
[7]: https://itsfoss.com/nala/
|
||||
[8]: https://github.com/pacstall/pacstall-qa
|
||||
[9]: https://rhinolinux.org/news-9.html
|
||||
[10]: https://itsfoss.com/nushell/
|
||||
[11]: https://rhinolinux.org/news-10.html
|
||||
[12]: https://rhinolinux.org/download.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202312/30/160853ktyoyyppoa06ywwa.jpg
|
||||
@@ -0,0 +1,125 @@
|
||||
[#]: subject: "AI: Anaconda and More on Probability"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/12/ai-anaconda-and-more-on-probability/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16526-1.html"
|
||||
|
||||
人工智能教程(五):Anaconda 以及更多概率论
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在本系列的第五篇文章中,我们将继续介绍概率和统计中的概念。
|
||||
|
||||
在本系列的 [前一篇文章](https://linux.cn/article-16485-1.html) 中,我们首先介绍了使用 TensorFlow。它是一个非常强大的开发人工智能和机器学习应用程序的库。然后我们讨论了概率论的相关知识,为我们后面的讨论打下基础。在本系列的第五篇文章中,我们将继续介绍概率和统计中的概念。
|
||||
|
||||
在本文中我将首先介绍 Anaconda,一个用于科学计算的 Python 发行版。它对于开发人工智能、机器学习和数据科学的程序特别有用。稍后我们将介绍一个名为 Theano 的 Python 库。但在此之前,让我们下讨论一下人工智能的未来。
|
||||
|
||||
在回顾和修订之前的文章时,我发觉我偶尔对人工智能前景的怀疑语气和在一些话题上毫不留情的诚实态度可能在无意中使部分读者产生了消极情绪。
|
||||
|
||||
这促使我开始从金融角度研究人工智能和机器学习。我想确定涉足人工智能市场的公司类型,是否有重量级的公司大力参与其中?还是只有一些初创公司在努力推动?这些公司未来会向人工智能市场投入多少资金?是几百万美元,几十亿美元还是几万亿美元?
|
||||
|
||||
我通过于最近知名报纸上的的预测和数据来理解基于人工智能的经济发展背后的复杂动态性。2020 年《福布斯》上的一篇文章就预测 2020 年企业在人工智能上投入的投入将达到 500 亿美元的规模。这是一笔巨大的投资。《财富》杂志上发表的一篇文章称,风险投资者正将部分关注力从人工智能转移到 Web3 和<ruby>去中心化金融<rt>decentralised finance</rt></ruby>(DeFi)等更新潮的领域上。但《华尔街日报》在 2022 年自信地预测,“大型科技公司正在花费数十亿美元进行人工智能研究。投资者应该密切关注。”
|
||||
|
||||
印度《商业标准报》在 2022 年报道称,87% 的印度公司将在未来 3 年将人工智能支出提高 10%。总的来说,人工智能的未来看起来是非常安全和光明的。 令人惊讶的是,除了亚马逊、Meta(Facebook 的母公司)、Alphabet(谷歌的母公司)、微软、IBM 等顶级科技巨头在投资人工智能外,壳牌、强生、联合利华、沃尔玛等非 IT 科技类公司也在大举投资人工智能。
|
||||
|
||||
很明显众多世界级大公司都认为人工智能将在不久的将来发挥重要作用。但是未来的变化和新趋势是什么呢?我通过新闻文章和采访找到一些答案。在人工智能未来趋势的背景下,经常提到的术语包括<ruby>负责任的人工智能<rt>Responsible AI</rt></ruby>、量子人工智能、人工智能物联网、人工智能和伦理、自动机器学习等。我相信这些都是需要深入探讨的话题,在上一篇文章中我们已经讨论过人工智能和伦理,在后续的文章中我们将详细讨论一些其它的话题。
|
||||
|
||||
### Anaconda 入门
|
||||
|
||||
现在让我们讨论人工智能的必要技术。Anaconda 是用于科学计算的 Python 和 R 语言的发行版。它极大地简化了包管理过程。从本文开始,我们将在有需要时使用 Anaconda。第一步,让我们安装 Anaconda。访问 [安装程序下载页面](https://www.anaconda.com/products/distribution#linux) 下载最新版本的 Anaconda 发行版安装程序。在撰写本文时(2022 年 10 月),64 位处理器上最新的 Anaconda 安装程序是 `Anaconda3-2022.05-Linux-x86_64.sh`。如果你下载了不同版本的安装程序,将后面命令中的文件名换成你实际下载的安装文件名就行。下载完成后需要检查安装程序的完整性。在安装程序目录中打开一个终端,运行以下命令:
|
||||
|
||||
```
|
||||
shasum -a 256 Anaconda3-2022.05-Linux-x86_64.sh
|
||||
```
|
||||
|
||||
终端上会输出哈希值和文件名。我的输出显示是:
|
||||
|
||||
```
|
||||
a7c0afe862f6ea19a596801fc138bde0463abcbce1b753e8d5c474b506a2db2d Anaconda3-2022.05-Linux-x86_64.sh
|
||||
```
|
||||
|
||||
然后访问 [Anaconda 安装程序哈希值页面](https://docs.anaconda.com/anaconda/install/hashes),比对下载安装文件的哈希值。如果哈希值匹配,说明下载文件完整无误,否则请重新下载。然后在终端上执行以下命令开始安装:
|
||||
|
||||
```
|
||||
bash Anaconda3-2022.05-Linux-x86_64.sh
|
||||
```
|
||||
|
||||
按回车键后,向下滚动查看并接受用户协议。最后,输入 `yes` 开始安装。出现用户交互提示时,一般直接使用 Anaconda 的默认选项就行。现在 Anaconda 就安装完成了。
|
||||
|
||||
默认情况下,Anaconda 会安装 Conda。这是一个包管理器和环境管理系统。Anaconda 发行版会自动安装超过 250 个软件包,并可选择安装超过 7500 个额外的开源软件包。而且使用 Anaconda 安装的任何包或库都可以在 Jupyter Notebook 中使用。在安装新包的过程中, Anaconda 会自动处理它的依赖项的更新。
|
||||
|
||||
至此之后我们终于不用再担心安装软件包和库的问题了,可以继续我们的人工智能和机器学习程序的开发。注意,Anaconda 只有一个命令行界面。好在我们的安装项中包括 Anaconda Navigator。这是一个用于 Anaconda 的图形用户界面。在终端上执行命令 `anaconda-navigator` 运行 Anaconda Navigator(图 1)。我们马上会通过例子看到它的强大功能。
|
||||
|
||||
![图 1:Anaconda Navigator][3]
|
||||
|
||||
### Theano 介绍
|
||||
|
||||
Theano 是一个用于数学表达式计算的优化编译的 Python 库。在 Anaconda Navigator 中安装Theano 非常容易。打开 Anaconda Navigator 后点击 “<ruby>环境<rt>Environments</rt></ruby>” 按钮(图 1 中用红框标记)。在打开的窗口中会显示当前安装的所有软件包的列表。在顶部的下拉列表中选择“<ruby>尚未安装<rt>Not installed</rt></ruby>”选项。向下滚动并找到 Theano,然后勾选左侧的复选框。点击窗口右下角的绿色 “<ruby>应用<rt>Apply</rt></ruby>” 按钮。Anaconda 会在弹出菜单中显示安装 Theano 的所有依赖项。图 2 是我安装 Theano 时的弹出菜单。可以看到,除了 Theano 之外,还安装了一个新的包,并修改了 8 个包。
|
||||
|
||||
想象一下,如果要手动安装 Theano,这将是多么麻烦。有了 Anaconda,我们只需要点几个按钮就行了。只需要等待一会儿,Theano 就安装好了。现在我们可以在 Jupyter Notebook 中使用 Theano 了。
|
||||
|
||||
![图 2:安装 Theano][4]
|
||||
|
||||
我们已经熟悉了用于符号计算的 Python 库 SymPy,但 Theano 将符号计算提升到了一个新的水平。图 3 是一个使用 Theano 的例子。第 1 行代码导入 Theano。第 2 行导入 `theano.tensor` 并将其命名为 `T`。我们在介绍 TensorFlow 时已经介绍过<ruby>张量<rt>tensor</rt></ruby>了。
|
||||
|
||||
![图 3:使用 Theano 的代码例子][5]
|
||||
|
||||
在数学上,可以将张量看作多维数组。张量是 Theano 的关键数据结构之一,它可用于存储和操作标量(数字)、向量(一维数组)、矩阵(二维数组)、张量(多维数组)等。在第 3 行中,从 Theano 导入了 `function()` 的函数。第 4 行导入名为 `pp()` 的 Theano 函数,该函数用于格式化打印。第 5 行创建了一个名为 `x` 的 `double` 类型的标量符号变量。你可能会在理解符号变量这个概念上遇到一些困难。这里你可以把它看作是没有绑定具体值的 `double` 类型的对象。类似地,第 6 行创建了另一个名为 `y` 的标量符号变量。第 7 行告诉 Python 解释器,当符号变量 `x` 和 `y` 得到值时,将这些值相加并存储在 `a` 里面。
|
||||
|
||||
为了进一步解释符号操作,仔细看第 8 行的输出是 `(x+y)`。这表明两个数字的实际相加还没有发生。第 9 到 11 行类似地分别定义了符号减法、乘法和除法。你可以自己使用函数 `pp()` 来查找 `b`、`c` 和 `d` 的值。第 12 行非常关键。它使用 Theano 的 `function()` 函数定义了一个名为 `f()` 的新函数。 函数 `f()` 的输入是 `x` 和 `y`,输出是 `[a b c d]`。最后在第 13 行中,给函数 `f()` 提供了实际值来调用该函数。该操作的输出也显示在图 3 中。我们很容易验证所显示的输出是正确的。
|
||||
|
||||
![图 4:用 Theano 处理矩阵][6]
|
||||
|
||||
下面让我们通过图 4 的代码来看看如何使用 Theano 创建和操作矩阵。需要注意的是,图中我省略了导入代码。如果你要直接运行图 4 的代码,需要自己添加上这几行导入代码(图 3 中的前三行)。第 1 行创建了两个符号矩阵 `x` 和 `y`。这里我使用了<ruby>复数构造函数<rt>plural constructor</rt></ruby> `imatrices`,它可以同时构造多个矩阵。第 2 行到第 4 行分别对符号矩阵 `x` 和 `y` 执行符号加法、减法和乘法。这里你可以使用 `print(pp(a))`、`print(pp(b))` 和 `print(pp(c))` 来帮助理解符号操作的性质。第 5 行创建了一个函数 `f()`,它的输入是两个符号矩阵 `x` 和 `y`,输出是 `[a b c]`,它们分别表示符号加法、减法和乘法。最后,在第 6 行中,为函数 `f()` 提供实际的值来调用该函数。该操作的输出也显示在图 4 中。很容易验证所示的三个输出矩阵是否正确。注意,除了标量和矩阵,张量还提供了向量、行、列类型张量的构造函数。Theano 暂时就介绍到这里了,在讨论概率和统计的进阶话题时我们还会提到它。
|
||||
|
||||
### 再来一点概率论
|
||||
|
||||
![图 5:算术平均值和标准偏差][7]
|
||||
|
||||
现在我们继续讨论概率论和统计。我在上一篇文章中我建议你仔细阅读三篇维基百科文章,然后介绍了正态分布。在我们开始开发人工智能和机器学习程序之前,有必要回顾一些概率论和统计的基本概念。我们首先要介绍的是 <ruby>算术平均值<rt>arithmetic mean</rt></ruby>和<ruby>标准差<rt>standard deviation</rt></ruby>。
|
||||
|
||||
算术平均值可以看作是一组数的平均值。标准差可以被认为是一组数的分散程度。如果标准差较小,则表示集合中的元素都接近平均值。相反,如果标准差很大,则表示集合的中的元素分布在较大的范围内。如何使用 Python 计算算术平均值和标准差呢?Python 中有一个名为 `statistics` 的模块,可用于求平均值和标准差。但专家用户认为这个模块太慢,因此我们选择 NumPy。
|
||||
|
||||
图 5 所示的代码打印两个列表 `C1` 和 `C2` 的平均值和标准差(我暂时隐藏了两个列表的实际内容)。你能从这些值中看出什么呢?目前它们对你来说只是一些数字而已。现在我告诉你,这些列表分别包含学校 A 和学校 B 的 6 名学生的数学考试成绩(满分 50 分,及格 20 分)。均值告诉我们,两所学校的学生平均成绩都较差,但学校 B 的成绩略好于学校 A。标准差值告诉我们什么呢?学校 B 的巨大的标准差值虽然隐藏在平均值之下,但却清楚地反映了学校 B 的的教学失败。为了进一步加深理解,我将给出两个列表的值,`C1 =[20,22,20,22,22,20] `,`C2 =[18,16,17,16,15,48]`。这个例子清楚地告诉我们,我们需要更复杂的参数来处理问题的复杂性。概率和统计将提供更复杂的模型来描述复杂和混乱的数据。
|
||||
|
||||
随机数生成是概率论的重要组成部分。但实际上我们只能生成伪随机数。伪随机数序列具有和真随机数序列近似的性质。在图 6 中我们介绍了几个生成伪随机数的函数。第 1 行导入 Python 的 `random` 包。第 2 行代码生成两个随机数,并将它们存储在名为 `new_list` 的列表中。其中函数 `random.random()` 生成随机数,代码 `new_list = [random.random() for i in range(2)]` 使用了 Python 的<ruby>列表推导<rt>list comprehension</rt></ruby>语法。第 3 行将此列表打印输出。注意,每次执行代码打印出的两个随机数会变化,并且连续两次打印出相同数字的概率理论上为 0。图 6 的第二个代码单元中使用了 `random.choice()` 函数。这个函数从给定的选项中等概率地选择数据。代码片 `random.choice(["Heads", "Tails"])` 将等概率地在“Heads”和“Tails”之间选择。注意,该行代码也使用了列表推导,它会连续执行 3 次选择操作。从图 6 的输出可以看到,三次都选中了“Tails”。
|
||||
|
||||
![图 6:伪随机数生成][8]
|
||||
|
||||
现在,我们用一个简单的例子来说明概率论中著名的<ruby>大数定理<rt>xxx</rt></ruby>。大数定理表明从大量试验中获得的结果的平均值应该接近期望值,并且随着试验次数的增加这个平均值会越来越接近期望值。我们都知道,投掷一个均匀的骰子得到数字 6 的概率是 1/6。我们用图 7 中的 Python 代码来模拟这个实验。第 1 行导入 Python 的 `random` 包。第 2 行设置重复试验的次数为 1000。第 3 行将计数器 `ct` 初始化为 0。第 4 行是一个循环,它将迭代 1000 次。第 5 行的 `random.randint(1, 6)` 随机生成 1 到 6 之间的整数(包括 1 和 6)。然后检查生成的数字是否等于 6;如果是,则转到第 7 行,将计数器 `ct` 增加 1。循环迭代 1000 次后,第 8 行打印数字 6 出现的次数与总试验次数之间的比例。图 7 显示该比例为 0.179,略高于期望值 1/6 = 0.1666…。这与期望值的差异还是比较大的。将第 2 行中 `n` 的值设置为 10000,再次运行代码并观察打印的输出。很可能你会得到一个更接近期望值的数字(它也可能是一个小于期望值的数字)。不断增加第 2 行中 `n` 的值,你将看到输出越来越接近期望值。
|
||||
|
||||
![图 7:大数定理][9]
|
||||
|
||||
虽然大数定理的描述朴实简单,但如果你了解到哪些数学家证明了大数定理或改进了原有的证明,你一定会大吃一惊的。他们包括卡尔达诺、雅各布·伯努利、丹尼尔·伯努利、泊松、切比雪夫、马尔科夫、博雷尔、坎特利、科尔莫戈罗夫、钦钦等。这些都是各自领域的数学巨匠。
|
||||
|
||||
目前我们还没有涵盖概率的随机变量、概率分布等主题,它们对开发人工智能和机器学习程序是必不可少的。我们对概率和统计的讨论仍处于初级阶段,在下一篇文章中还会加强这些知识。与此同时,我们将重逢两个老朋友,Pandas 和 TensorFlow。另外我们还将介绍一个与 TensorFlow 关系密切的库 Keras。
|
||||
|
||||
*(题图:DA/ea8d9b6a-5282-41ad-a84f-3e3815e359fb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/12/ai-anaconda-and-more-on-probability/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/11/AI-Anaconda-programming-696x477.jpg (AI-Anaconda-programming)
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/11/AI-Anaconda-programming.jpg
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-1-Anaconda-Navigator-.png
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-2-Installation-of-Theano.png
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-3-Our-first-code-using-Theano-590x394.png
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-4-Manipulating-matrices-with-Theano.png
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-5-Arithmetic-mean-and-standard-deviation-590x164.png
|
||||
[8]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-6-Pseudo-random-number-generation-590x168.png
|
||||
[9]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-7-Illustrating-the-law-of-large-numbers-590x266.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202401/02/161712jyckozyocvbz1c8v.jpg
|
||||
@@ -0,0 +1,124 @@
|
||||
[#]: subject: "AI: Introduction to Keras and Our First Data Set"
|
||||
[#]: via: "https://www.opensourceforu.com/2023/01/ai-introduction-to-keras-and-our-first-data-set/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16579-1.html"
|
||||
|
||||
人工智能教程(六):Keras 和第一个数据集
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在本文中我们将继续学习概率论的知识。
|
||||
|
||||
在本系列的 [上一篇文章](https://linux.cn/article-16526-1.html)中,我们学习了使用 Anaconda,加强了概率论的知识。在本文中我们将继续学习概率论的知识,学习使用 seaborn 和 Pandas 进行数据可视化,并进一步介绍 TensorFlow 和 Keras 的使用。
|
||||
|
||||
让我们从增长人工智能和机器学习的理论知识开始。众所周知人工智能、机器学习、数据科学、深度学习等是当今计算机科学的热门话题。然而,计算机科学还其他热门的话题,比如 <ruby>区块链<rt>blockchain</rt></ruby>、<ruby>物联网<rt>Internet of Things</rt></ruby>(IoT)、<ruby>量子计算<rt>quantum computing</rt></ruby>等。那么,人工智能领域的发展是否会对这些技术产生积极的影响呢?
|
||||
|
||||
首先,让我们讨论一下区块链。根据维基百科的定义,“区块链是一种分布式账本,它由不断增长的记录(称为 <ruby>区块<rt>block</rt></ruby>)组成,这些记录使用加密技术安全地连接在一起。”乍一看,人工智能和区块链似乎是两个高速发展的独立技术。但令人惊讶的是,事实并非如此。区块链相关的行话是 <ruby>完整性<rt>integrity</rt></ruby>,人工智能相关的行话是数据。我们将大量数据交给人工智能程序去处理。虽然这些应用程序产生了惊人的结果,但我们如何信任它们呢?这就提出了对可解释的人工智能的需求。它可以提供一定的保证,以便最终用户可以信任人工智能程序提供的结果。许多专家认为,区块链技术可以用来提高人工智能软件做出的决策的可信度。另一方面,<ruby>智能合约<rt>smart contract</rt></ruby>(区块链技术的一部分)可以从人工智能的验证中受益。从本质上讲,智能合约和人工智能通常都是做决策。因此,人工智能的进步将对区块链技术产生积极影响,反之亦然。
|
||||
|
||||
下面让我们讨论一下人工智能和物联网之间的影响。早期的物联网设备通常没有强大的处理能力或备用电池。这使得需要大量处理能力的机器学习的软件无法部署在物联网设备上。当时,大多数物联网设备中只部署了基于规则的人工智能软件。基于规则的人工智能的优势在于它很简单,需要相对较少的处理能力。如今的物联网设备具备更强大的处理能力,可以运行更强大的机器学习软件。特斯拉开发的高级驾驶辅助系统 <ruby>特斯拉自动驾驶仪<rt>Tesla Autopilo</rt></ruby> 是物联网与人工智能融合的典范。人工智能和物联网对彼此的发展产生了积极影响。
|
||||
|
||||
最后,让我们讨论人工智能和量子计算是如何相互影响的。尽管量子计算仍处于起步阶段,但 <ruby>量子机器学习<rt>quantum machine learning</rt></ruby>(QML)是其中非常重要的课题。量子机器学习基于两个概念:量子数据和量子-经典混合模型。量子数据是由量子计算机产生的数据。<ruby>量子神经网络<rt> quantum neural network</rt></ruby>(QNN)用于模拟量子计算模型。TensorFlow Quantum 是一个用于量子-经典混合机器学习的强大工具。这类工具的存在表明,在不久的将来将会有越来越多的基于量子计算的人工智能解决方案。
|
||||
|
||||
### seaborn 入门
|
||||
|
||||
seaborn 是一个基于 Matplotlib 的数据可视化 Python 库。用它能够绘制美观且信息丰富的统计图形。通过 Anaconda Navigator 可以轻松安装 seaborn。我用 ESPNcricinfo 网站上 T20 国际板球赛的击球记录,创建了一个名为 `T20.csv` 的 CSV(<ruby>逗号分隔值<rt>comma-separated value</rt></ruby>)文件,其中包含以下 15 列:球员姓名、职业生涯跨度、比赛场次、局数、未出局次数、总得分、最高得分、平均得分、面对球数、击球率、百分次数、五十分次数、零分次数、四分次数和六分次数。图 1 是使用 Pandas 库读取这个 CSV 文件的程序代码。我们已经在前面介绍过 Pandas 了。
|
||||
|
||||
![图 1:使用 seaborn 的简单例子][1]
|
||||
|
||||
下面逐行解释程序代码的作用。第 1 行和第 2 行导入 Pandas 和 seaborn 包。第 3 行从 JupyterLab 的工作目录中读取文件 `T20.csv`。第 4 行打印元数据和第一行数据。图 1 显示了这行数据,它显示了 T20 国际板球赛中得分最高的 Virat Kohli 的击球记录。第 5 行将元数据和 `T20.csv` 中的前五行数据保存到 `Best5.csv` 中。在执行该行代码时会在 JupyterLab 的工作目录中创建这个文件。第 6 行根据列百分次数按升序对 CSV 文件进行排序,并将前 10 名世纪得分手的详细信息存储到 `Highest100.csv` 中。该文件也将存储在 JupyterLab 的工作目录中。最后,第7行代码提取了第 5 列(总得分)和第 7 列(平均得分)的数据信息,并生成散点图。图 2 显示了程序在执行时生成的散点图。
|
||||
|
||||
![图 2:seaborn 绘制的散点图][2]
|
||||
|
||||
在程序末尾添加如下代码行并再次运行。
|
||||
|
||||
```
|
||||
sns.kdeplot(data=df.iloc[:, [5, 7]].head(50), x=’Ave’, y=’Runs’)
|
||||
```
|
||||
![图 3:使用 seaborn 绘制的核密度估计图][3]
|
||||
|
||||
这行代码调用 `kdeplot()` 函数绘制第 5 列和第 7 列数据的 <ruby>核密度估计<rt>Kernel Distribution Estimation</rt></ruby>(KDE)图。KDE 图可以描述连续或非参数数据变量的概率密度函数。这个定义可能无法让您了解函数 `kdeploy()` 将要执行的实际操作。图 3 是在单个图像上绘制的 KDE 图和散点图。从图中我们可以看到,散点图绘制的数据点被 KDE 图分组成簇。seaborn 还提供了许多其他绘图功能。在图 1 中程序的第 7 行分别替换为下面的的代码行(一次一行),并再次执行该程序,你会看到不同风格的绘图显示。探索 seaborn 提供的其他绘图功能,并选择最适合你需求的功能。
|
||||
|
||||
```
|
||||
sns.histplot(data=df.iloc[:, [5, 7]].head(50), x=’Ave’, y=’Runs’)
|
||||
sns.rugplot(data=df.iloc[:, [5, 7]].head(50), x=’Ave’, y=’Runs’)
|
||||
```
|
||||
|
||||
### 更多概率论
|
||||
|
||||
在本系列之前的一篇文章中,我们看到可以用正态分布来对现实场景进行建模。但正态分布只是众多重要概率分布中的一种。图 4 中的程序绘制了三种概率分布。
|
||||
|
||||
![图 4:绘制多种概率分布的程序][4]
|
||||
|
||||
下面我来解释这个程序。第 1 行导入 NumPy 的 random 模块。第 2 行和第 3 行导入用于绘图的 Matplotlib 和 seaborn。第 5 行生成带有参数 `n`(试验次数)和 `p`(成功概率)的 <ruby>二项分布<rt>binomial distribution</rt></ruby>数据。
|
||||
|
||||
二项分布是一种离散概率分布,它给出了在一系列 `n` 次独立实验中成功的数量。第三个参数 `size` 决定了输出的形状。第 6 行绘制生成的数据的直方图。由于参数 `kde=True`,它还会绘制 KDE 图。第三个参数 `color='r'` 表示绘图时使用红色。第 7 行生成一个泊松分布。泊松分布是一种离散概率分布,它给出了二项分布的极限。参数 `lam` 表示在固定时间间隔内发生预期事件的次数。这里的参数 `size` 也决定了输出的形状。第 8 行将生成的数据绘制为绿色的直方图。第 9 行生成大小为 1000 的指数分布。第 10 行将生成的数据绘制为蓝色的直方图。最后,第 11 绘制三个概率分布的所有图像(见图 5)。NumPy 的 random 模块提供了大量的其他概率分布,如 Dirichlet 分布、Gamma 分布、几何分布、拉普拉斯分布等。学习和熟悉它们将是非常值得的。
|
||||
|
||||
![图 5:概率分布的图像][5]
|
||||
|
||||
现在,让我们学习线性回归。使用线性回归分析可以根据一个变量来预测一个变量的值。线性回归的一个重要应用是数据拟合。线性回归非常重要,因为它很简单。机器学习中的监督学习范式实际上就是回归建模。因此,线性回归可以被认为是一种重要的机器学习策略。这种学习范式通常被统计学家称为统计学习。线性回归是机器学习中的重要操作。NumPy 和 SciPy 都提供了线性回归的函数。下面我们展示使用 NumPy 和 SciPy 进行线性回归的示例。
|
||||
|
||||
![图 6:使用 NumPy 进行线性回归][6]
|
||||
|
||||
图 6 是使用 NumPy 进行线性回归的程序。第 1 行和第 2 行导入 NumPy 和 Matplotlib。第 4 行和第 5 行初始化变量 `a`和 `b`。第 6 行使用函数 `linspace()` 在 0 和 1 之间等间隔地生成 100 个数字。第 7 行使用变量 `a`、`b` 和数组 `x` 生成数组 `y` 中的值。函数 `randn()` 返回标准正态分布的数据。第 8 行将数组 `x` 和 `y` 中的值绘制成散点图(见图 7),图中的 100 个数据点用红色标记。第 9 行使用函数 `polyfit()` 执行称为 <ruby>最小二乘多项式拟合<rt>least squares polynomial fit</rt></ruby> 的线性回归技术。函数 `polyfit()` 的输入参数包括数组 `x` 和 `y`,以及第三个表示拟合多项式的阶数的参数,在本例中为 1,表示拟合一条直线。该函数的返回值是多项式的系数,代码中将其存储在数组 `p` 中。第 10 行使用函数 `polyval()` 对多项式求值,并将这些值存储在数组`y_l`中。第 11 行用蓝色绘制拟合得到的直线(见图 7)。最后,第 12 行显示所有的图像。可以用这条回归直线预测可能的 `(x, y)` 数据对。
|
||||
|
||||
![图 7:线性回归散点图 1][7]
|
||||
|
||||
图 8 是使用 SciPy 进行线性回归的程序代码。
|
||||
|
||||
![图 8:使用 SciPy 进行线性回归][8]
|
||||
|
||||
下面我解释一下这个程序的工作原理。第 1 行和第 2 行导入库 NumPy 和 Matplotlib。第 3 行从库 SciPy 导入 stats 模块。第 4 到 8 行与前面的程序执行类似的任务。第 9 行使用 SciPy 的 stats 模块的 `linregression()` 函数计算两组测量值的线性最小二乘回归——在本例中是数组 `x` 和 `y` 中的值。该函数返回值中的 `m` 和 `c` 分别表示回归直线的 <ruby>斜率<rt>slope</rt></ruby>和<ruby>截距<rt>intercept</rt></ruby>。第 10 行使用斜率和截距的值生成回归线。第 11 行用绿色绘制回归线。最后,第 12 行显示所有的图像(见图 9),其中数据点以黄色显示,回归线以绿色显示。
|
||||
|
||||
![图 9:线性回归散点图 2][9]
|
||||
|
||||
在本系列的前面几篇文章中,我们学习了概率和统计学的一些概念。尽管还不够全面的,但我认为这已经打下了一个良好的基础,现在是时候将注意力转移到其他同样重要的问题上了。
|
||||
|
||||
### Keras 简介
|
||||
|
||||
Keras 一般与 TensorFlow 一起使用。因此,我们先从使用 TensorFlow 开始。图 10 所示的程序虽然只包含四行代码,但确实构建了在本系列中的第一个神经网络。下面我来介绍它的工作原理。第 1 行导入库 TensorFlow。第 2 行创建了一个名为 `x` 的张量。第 3 行和第 4 行分别在张量 `x` 上应用 ReLU(<ruby>整流线性单元<rt>Rectified Linear Unit</rt></ruby>)和 Leaky ReLU 激活函数。在神经网络中,激活函数定义了节点的输出由输入计算出的规则。ReLU 激活函数是定义为 `Relu(x) = max(0,x)`。第 3 行代码的输出如图 10 所示。可以观察到,在应用 ReLU 激活函数后,张量 `x` 中的负值被替换为零。Leaky ReLU 是 ReLU 激活函数的改进版本。从图 10 中的第 4 行代码的输出可以看出 Leaky ReLU 激活函数保留了全量的正值和 20% 的负值。在后面我们将会继续讨论 Keras,同时学习更多神经网络和激活函数的知识。
|
||||
|
||||
![图 10:使用 TensorFlow 实现的神经网络][10]
|
||||
|
||||
下面我们开始使用 Keras。Keras 的安装也可以通过 Anaconda Navigator 轻松完成。图 11 所示的程序导入了我们的第一个数据集并显示了其中的一个数据样本。在下一篇文章中,我们将使用这个数据集来训练和测试模型,从而开启我们开发人工智能和机器学习程序的下一个阶段。
|
||||
|
||||
![图 11:第一个数据集][11]
|
||||
|
||||
下面介绍这个程序的工作原理。第 1 行导入 Keras。第 2 行从 Keras 导入手写数字数据集 MNIST。它包含 6 万个训练样本和 1 万个测试样本。第 3 行导入 Matplotlib。第 5 行加载 MNIST 数据集。第 6 到 9 行打印训练集和测试集的维数和维度。图 12 显示了这些代码行的输出。可以看出,训练集和测试集都是三维的,所有数据样本的分辨率都是 28 × 28。第 10 行加载了第 1234 个训练图像。第 11 行和第 12 行显示这个图像。从图 12 可以看到它是数字 3 的手写图像。
|
||||
|
||||
![图 12:数据样例][12]
|
||||
|
||||
本文中我们开始涉及到神经网络,并通过 Keras 接触到了第一个数据集。在下一篇文章中,我们将继续讲解神经网络和 Keras,并通过使用该数据集训练自己的模型。我们还会遇到 scikit-learn, 它是另一个强大的机器学习 Python 库 。
|
||||
|
||||
*(题图:DA/2f8f2e0c-c9a7-4a55-8a03-3b5105721013)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2023/01/ai-introduction-to-keras-and-our-first-data-set/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-1-A-simple-example-for-seaborn-1.png
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-2-A-scatter-plot-with-seaborn-1.png
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-3-A-KDE-plot-with-seaborn-1-590x415.png
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-4-Program-for-probability-distributions-1.png
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-5-Plots-of-probability-distributions-590x358.png
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-6-Linear-regression-with-NumPy-1.png
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-7-Linear-regression-scatter-plot-1-2.png
|
||||
[8]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-8-Linear-regression-with-SciPy.png
|
||||
[9]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-9-Linear-regression-scatter-plot-2-590x393.png
|
||||
[10]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-10-TensorFlow-for-Neural-Networks-2-590x121.png
|
||||
[11]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-11-Our-first-data-set-590x219.png
|
||||
[12]: https://www.opensourceforu.com/wp-content/uploads/2022/11/Figure-12-A-sample-from-the-data-set.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202401/24/093419f88e88zchzzauuul.jpg
|
||||
@@ -0,0 +1,164 @@
|
||||
[#]: subject: "AI: An Introduction to Scikit-learn and Our First Trained Model"
|
||||
[#]: via: "https://www.opensourceforu.com/2023/02/ai-an-introduction-to-scikit-learn-and-our-first-trained-model/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1700446145"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16600-1.html"
|
||||
|
||||
人工智能教程(七):Scikit-learn 和训练第一个模型
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
在本系列的 [上一篇文章](https://linux.cn/article-16579-1.html) 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Keras 接触了第一个数据集。在本系列的第七篇文章中,我们将继续探索神经网络,并使用数据集来训练模型。我们还将介绍另一个强大的机器学习 Python 库 scikit-learn。不过在进入正题之前,我要介绍两个轰动性的人工智能应用:ChatGPT 和 DALL-E 2。(LCTT 译注:此文原文发表于 2023 年初,恰值以 ChatGPT 为代表的 AI 热潮开始掀起。)
|
||||
|
||||
OpenAI 是一个人工智能研究实验室,它在人工智能和机器学习领域做了很多研究。<ruby>埃隆·马斯克<rt>Elon Musk</rt></ruby> 是该组织的联合创始人之一。2022 年 11 月,该实验室推出了一款名为 ChatGPT 的在线工具。它是一个可以像人类一样聊天的人工智能聊天机器人。它是使用监督学习和强化学习技术训练的<ruby>大型语言模型<rt>large language model</rt></ruby>(LLM)。ChatGPT 使用了 OpenAI 的 GPT-3.5 语言模型,这是 GPT-3(<ruby>生成式预训练变换器<rt>Generative Pre-trained Transformer</rt></ruby>)的改进版本,GPT-3 是一种使用深度学习来生成类似人类文本的语言模型。(LCTT 译注:OpenAI 已于 2023 年 3 月 14 日 发布了 GPT-4.0,它支持图文混合的输入输出,并大幅提升了推理能力和准确性。)我仍然记得第一次使用 ChatGPT 时的兴奋。它清楚地展现了人工智能的能力。ChatGPT 的回答质量很高,通常与人类给出的答案没有区别。你可以使用它来纠正语法错误、改写句子、总结段落、编写程序等。实际上,我就用 ChatGPT 改写了本文中的许多句子。此外,我还故意使用有语法错误的文本测试了 ChatGPT,它纠正后的句子非常准确。它重新措辞和总结段落的能力也很惊人。
|
||||
|
||||
程序员甚至有可能使用 ChatGPT 在短时间内解决编程难题。在 <ruby>编程探险挑战赛 2022<rt>Advent of Code 2022</rt></ruby> 中,就有人这样宣称(LCTT 译注:比赛官方只是没有完全禁止使用人工智能作为辅助,但是并不很推崇这样的作法。[消息来源](https://adventofcode.com/2022/about))。事实上在 2022 年 12 月,也就是 ChatGPT 发布的一个月后,Stack Overflow 发布了一条新的规定,禁止提交 GPT 或 ChatGPT 生成答案。(LCTT 译注:消息来源:[Temporary policy Generative AI (e.g., ChatGPT) is banned - Meta Stack Overflow](https://meta.stackoverflow.com/questions/421831/temporary-policy-generative-ai-e-g-chatgpt-is-banned))
|
||||
|
||||
![图 1:ChatGPT 生成的程序][4]
|
||||
|
||||
图 1 显示了 ChatGPT 编写的将两个矩阵相加的 Python 程序。我要求用 BASIC、FORTRAN、Pascal、Haskell、Lua、Pawn、C、c++、Java 等语言编写程序,ChatGPT 总能给出答案,甚至对于像 Brainfuck 和 Ook! 这样生僻的编程语言也是如此。我很确定 ChatGPT 没有从互联网上复制程序代码。更确切地说,我认为 ChatGPT 是基于对上述编程语言的语法知识生成了这些答案的,这些知识是从训练它的大量数据中获得的。许多专家和观察人士认为,随着 ChatGPT 的发展,人工智能已经成为主流。ChatGPT 的真正力量将在未来几个月或几年里被看到。
|
||||
|
||||
OpenAI 的另一个令人惊叹的在线人工智能工具是 DALL-E 2,它以卡通机器人 WALL-E(LCTT 译注:电源《机器人总动员》中的主角)和著名画家/艺术家 <ruby>萨尔瓦多·达利<rt>Salvador Dalí</rt></ruby> 的名字命名。DALL-E 2 是一个可以根据英文描述来生成绘画的人工智能系统。该工具支持丰富的图像风格,如油画、卡通、漫画、现实主义、超现实主义、壁画等。它还可以模仿著名画家的风格,如达利、毕加索、梵高等。由 DALL-E 2 生成的图像质量非常高。我用下面的描述测试了这个工具:“一个快乐的人在海滩旁看日出的立体主义画作”。图 2 是 DALL-E 2 根据我的描述生成的图像之一。立体主义是毕加索推广的一种绘画风格。问问你的任何一个画家朋友,他/她都会说这确实是一幅立体主义风格的画。令人惊讶的是软件——它也许很复杂——能够模仿像毕加索、梵高、达利这样的大师。我强烈建议你体验一下它。这种体验将非常有趣,同时也体现了人工智能的威力。但请记住,像 ChatGPT 和 DALL-E 2 这样的工具也会带来很多问题,比如版权侵犯、学生的作业抄袭等。(LCTT 译注:本文的题图就是 DALL-E 3 生成的。)
|
||||
|
||||
![图 2: DALL-E 2 生成的立体主义画作][5]
|
||||
|
||||
### 介绍 scikit-learn
|
||||
|
||||
scikit-learn 是一个非常强大的机器学习 Python 库。它是一个采用 <ruby>新 BSD 许可协议<rt>new BSD licence</rt></ruby>(LCTT 译注:即三句版 BSD 许可证) 的自由开源软件。scikit-learn 提供了回归、分类、聚类和降维等当面的算法,如<ruby>支持向量机<rt>Support Vector Machine</rt></ruby>(SVM)、随机森林、k-means 聚类等。
|
||||
|
||||
在下面关于 scikit-learn 的介绍中,我们将通过代码讨论支持向量机。支持向量机是机器学习中的一个重要的监督学习模型,可以用于分类和回归分析。支持向量机的发明人 Vladimir Vapnik 和 Alexey Chervonenkis。他们还一起提出了 <ruby>VC 维<rt>Vapnik–Chervonenkis dimension</rt></ruby> 概念,这是一个评估模型分类能力的理论框架。
|
||||
|
||||
图 3 是使用支持向量机对数据进行分类的程序。第 1 行从 scikit-learn 导入 svm 模块。跟前面几篇中介绍的 python 库一样,scikit-learn 也可以通过 Anaconda Navigator 轻松安装。第 2 行定义了一个名为 `X` 的列表,其中包含训练数据。`X` 中的所有元素都是大小为 3 的列表。第 3 行定义了一个列表 `y`,其中包含列表 `X` 中数据的类别标签。在本例中,数据属于两个类别,标签只有 0 和 1 两种。但是使用该技术可以对多个类别的数据进行分类。第 4 行使用 svm 模块的 `SVC()` 方法生成一个支持向量分类器。第 5 行使用 svm 模块的 `fit()` 方法,根据给定的训练数据(本例中为数组 `X `和 `y`)拟合 svm 分类器模型。最后,第 6 行和第 7 行基于该分类器进行预测。预测的结果也显示在图 3 中。可以看到,分类器能够正确区分我们提供的测试数据。
|
||||
|
||||
![图 3: 使用 SVM 进行分类][6]
|
||||
|
||||
图 4 中的代码是一个使用 SVM 进行回归的例子。第 1 行次从 scikit-learn 导入 svm 模块。第 2 行定义了一个名为 `X` 的列表,其中包含训练数据。注意,`X` 中的所有元素都是大小为 2 的列表。第 3 行定义了一个列表 `y`,其中包含与列表 `X` 中的数据相关的值。第 4 行使用 svm 模块的 `SVR()` 方法生成支持向量回归模型。第 5 行使用 svm 模块的 `fit()` 方法,根据给定的训练数据(本例中为数 `X` 和 `y`)拟合 svm 回归模型。最后,第 6 行根据该 svm 回归模型进行预测。此预测的结果显示在图 4 中。除了 `SVR()` 之外,还有 `LinearSVR()` 和 `NuSVR()` 两种支持向量回归模型。将第 4 行替换为 `regr = svm.LinearSVR()` 和 `regr = svm.NuSVR()`,并执行代码来查看这些支持向量回归模型的效果。
|
||||
|
||||
![图 4:使用 SVM 进行回归][7]
|
||||
|
||||
现在让我们把注意力转到神经网络和 TensorFlow 上。但在下一篇讲无监督学习和聚类时,我们还会学习 scikit-learn 提供的其他方法。
|
||||
|
||||
### 神经网络和 TensorFlow
|
||||
|
||||
在上一篇中我们已经看到了 TensorFlow 的 nn 模块提供的 ReLU (<ruby>整流线性单元<rt>rectified linear unit</rt></ruby>)和 Leaky ReLU 两个激活函数,下面再介绍两个其他激活函数。`tf.nn.crelu()` 是串联 ReLU 激活函数。`tf.nn.elu()` 是 <ruby>指数线性单元<rt>exponential linear unit</rt></ruby> 激活函数。我们将在后续用 TensorFlow 和 Keras 训练我们的第一个模型时用到其中一个激活函数。
|
||||
|
||||
在开始训练模型之前,我想向你分享 TensorFlow 的提供的“神经网络实验场”工具。它通过可视化的方式帮助你理解神经网络的工作原理。你可以直观地向神经网络中添加神经元和隐藏层,然后训练该模型。你可以选择 Tanh、Sigmoid、Linear 和 ReLU 等激活函数。分类模型和回归模型都可以使用该工具进行分析。训练的效果以动画的形式显示。图 5 显示了一个示例神经网络和它的输出。你可以通过 https://playground.tensorflow.org 访问它。
|
||||
|
||||
![图 5:神经网络实验场][8]
|
||||
|
||||
### 训练第一个模型
|
||||
|
||||
现在,我们使用 [上一篇](https://linux.cn/article-16579-1.html) 提到的 MNIST 手写数字数据集来训练模型,然后使用手写数字图像对其进行测试。完整的程序 `digital.py` 相对较大,为了便于理解,我将程序拆分成几个部分来解释,并且添加了额外的行号。
|
||||
|
||||
```
|
||||
import numpy as np
|
||||
from tensorflow import keras, expand_dims
|
||||
from tensorflow.keras import layers
|
||||
num_classes = 10
|
||||
input_shape = (28, 28, 1)
|
||||
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data( )
|
||||
```
|
||||
|
||||
第 1 行到第 3 行加载必要的包和模块。第 4 行将类别的数量定义为 10,因为我们试图对 0 到 9 进行分类。第 5 行将输入维度定义为 `(28,28,1)`,这表明我们使用是 28 x 28 像素的灰度图像数据。第 6 行加载该数据集,并将其分为训练数据和测试数据。关于该数据集的更多信息可以参考 [上一篇](https://linux.cn/article-16579-1.html) 的相关介绍。
|
||||
|
||||
```
|
||||
x_train = x_train.astype("float32") / 255
|
||||
x_test = x_test.astype("float32") / 255
|
||||
x_train = np.expand_dims(x_train, 3)
|
||||
x_test = np.expand_dims(x_test, 3)
|
||||
y_train = keras.utils.to_categorical(y_train, num_classes)
|
||||
y_test = keras.utils.to_categorical(y_test, num_classes)
|
||||
```
|
||||
|
||||
第 7 行和第 8 行将图像像素值从 `[0,255]` 转换到 `[0,1]`。其中 `astype()` 方法用于将整数值类型转换为浮点值。第 9 行和第 10 行将数组 `x_test` 和 `x_train` 的维度从 `(60000,28,28)` 扩展为 `(60000,28,28,1)`。列表 `y_train` 和 `y_test` 包含从 0 到 9 的 10 个数字的标签。第 11 行和第 12 行将列表 `y_train` 和 `y_test` 转换为二进制类别矩阵。
|
||||
|
||||
```
|
||||
try:
|
||||
model = keras.models.load_model(“existing_model”)
|
||||
except IOError:
|
||||
model = keras.Sequential(
|
||||
[
|
||||
keras.Input(shape=input_shape),
|
||||
layers.Conv2D(32, kernel_size=(3, 3), activation=”relu”),
|
||||
layers.MaxPooling2D(pool_size=(2, 2)),
|
||||
layers.Conv2D(64, kernel_size=(3, 3), activation=”relu”),
|
||||
layers.MaxPooling2D(pool_size=(2, 2)),
|
||||
layers.Flatten( ),
|
||||
layers.Dropout(0.5),
|
||||
layers.Dense(num_classes, activation=”softmax”),
|
||||
]
|
||||
)
|
||||
batch_size = 64
|
||||
epochs = 25
|
||||
model.compile(loss=”categorical_crossentropy”, optimizer=”adam”, metrics=[“accuracy”])
|
||||
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
|
||||
model.save(“existing_model”)
|
||||
```
|
||||
|
||||
训练模型是一个处理器密集和高内存消耗的操作,我们可不希望每次运行程序时都要重新训练一遍模型。因此,在第 13 行和第 14 行中,我们先尝试从 `existing_model` 目录加载模型。第一次执行此代码时,没有模型存在,因此会引发异常。第 16 到 21 行通过定义、训练和保存模型来处理这个异常。第 16 行代码(跨越多行)定义了模型的结构。这一行的参数决定了模型的行为。我们使用的是一个序列模型,它有一系列顺序连接的层,每一层都有一个输入张量和一个输出张量。我们将在下一篇文章中讨论这些定义模型的参数。在此之前,将这个神经网络看作一个黑箱就可以了。
|
||||
|
||||
第 17 行将批大小定义为 64,它决定每批计算的样本数量。第 18 行将 epoch 设置为 25,它决定了整个数据集将被学习算法处理的次数。第 19 行对模型的训练行为进行了配置。第 20 行根据给定的数据和参数训练模型。对这两行代码的详细解释将推迟到下一篇文章中。最后,第 21 行将训练好的模型保存到 `existing_model` 目录中。模型会以多个 `.pb` 文件的形式保存在该目录中。注意,第 16 到 21 行位于 `except` 块中。
|
||||
|
||||
```
|
||||
print(model.summary( ))
|
||||
score = model.evaluate(x_test, y_test, verbose=0)
|
||||
print(“Test loss:”, score[0])
|
||||
print(“Test accuracy:”, score[1])
|
||||
```
|
||||
|
||||
第 22 行打印我们训练的模型的摘要信息(见图 6)。回想一下,在加载数据集时将其分为了训练数据和测试数据。第 23 行使用测试数据来测试我们训练的模型的准确性。第 24 行和第 25 行打印测试的详细信息(见图 8)。
|
||||
|
||||
![图 6:模型的细节信息][9]
|
||||
|
||||
```
|
||||
img = keras.utils.load_img("sample1.png").resize((28, 28)).convert('L')
|
||||
img = keras.utils.img_to_array(img)
|
||||
img = img.reshape((1, 28, 28, 1))
|
||||
img = img.astype('float32')/255
|
||||
score = model.predict(img)
|
||||
print(score)
|
||||
print("Number is", np.argmax(score))
|
||||
print("Accuracy", np.max(score) * 100.0)
|
||||
```
|
||||
|
||||
现在,是时候用实际数据来测试我们训练的模型了。我在纸上写了几个数字,并扫描了它们。图 7 是我用来测试模型的一个图像。第 26 行加载图像,然后将其大小调整为 28 x 28 像素,最后将其转换为灰度图像。第 27 到 29 行对图像进行必要的预处理,以便将它输入到我们训练好的模型中。第 30 行预测图像所属的类别。第 31 到 33 行打印该预测的详细信息。图 8 显示了程序 `digital.py` 的这部分输出。从图中可以看出,虽然图像被正确识别为 7,但置信度只有 23.77%。进一步,从图 8 中可以看到它被识别为 1 的置信度为 12.86%,被识别为 8 或 9 的置信度约为 11%。此外,该模型甚至在某些情况下会是分类错误。虽然我找不到导致性能低于标准的准确原因,但我认为相对较低的训练图像分辨率以及测试图像的质量可能是主要的影响因素。这虽然不是最好的模型,但我们现在有了第一个基于人工智能和机器学习原理的训练模型。希望在本系列的后续文章中,我们能构建出可以处理更困难任务的模型。
|
||||
|
||||
![图 7:测试手写数字样例][10]
|
||||
|
||||
在本文介绍了 scikit-learn,在下一篇文章中我们还会继续用到它。然后介绍了一些加深对神经网络的理解的知识和工具。我们还使用 Keras 训练了第一个模型,并用这个模型进行预测。下一篇文章将继续探索神经网络和模型训练。我们还将了解 PyTorch,这是一个基于 Torch 库的机器学习框架。PyTorch 可以用于开发 <ruby>计算机视觉<rt>computer vision</rt></ruby>(CV) 和 <ruby>自然语言处理<rt>natural language processing</rt></ruby>(NLP) 相关的应用程序。
|
||||
|
||||
![图 8:digit.py 脚本的输出][11]
|
||||
|
||||
致谢:感谢我的学生 Sreyas S. 在撰写本文过程中提出的创造性建议。
|
||||
|
||||
*(题图:DA/c8e10cac-a5a5-4d53-b5eb-db06f448e60e)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2023/02/ai-an-introduction-to-scikit-learn-and-our-first-trained-model/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2023/01/AI-Scikit-learn-696x477.jpg (AI-Scikit-learn)
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2023/01/AI-Scikit-learn.jpg
|
||||
[3]: https://www.opensourceforu.com/2023/01/ai-introduction-to-keras-and-our-first-data-set/
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-1-A-program-written-by-ChatGPT-1.jpg
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-2-A-Cubist-painting-generated-by-DALL-E-2.jpg
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-3-Classification-with-SVM.jpg
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-4-Regression-with-SVM-1.jpg
|
||||
[8]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-5-The-neural-network-playground-in-action.jpg
|
||||
[9]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-6-Details-of-the-model-trained-590x463.jpg
|
||||
[10]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-7-A-handwritten-digit-for-testing.jpg
|
||||
[11]: https://www.opensourceforu.com/wp-content/uploads/2023/01/Figure-8-Output-of-the-Python-script-digit.py_.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202401/31/153305qiqxi3aq23qqvini.jpg
|
||||
@@ -0,0 +1,183 @@
|
||||
[#]: subject: "Mastering Nautilus File Search in Linux Desktop"
|
||||
[#]: via: "https://itsfoss.com/nautilus-file-search/"
|
||||
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16583-1.html"
|
||||
|
||||
掌握 Linux 桌面中的 Nautilus 文件搜索
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 使用 GNOME 的 Nautilus 文件搜索,通过这些方便的提示改善您的文件搜索体验,成为一名专业的搜索者。
|
||||
|
||||
GNOME 的 Nautilus 文件管理器功能丰富。
|
||||
|
||||
不信?看看这篇文章,你就会知道如何将 [Nautilus 的全部功能][1] 发挥到极致。
|
||||
|
||||
文件搜索是 Nautilus 被忽视的功能之一。没有多少 Linux 用户充分发挥了它的潜力。
|
||||
|
||||
因此,我编写了本教程,与大家分享一些使用 Nautilus 文件管理器中文件搜索选项的技巧。
|
||||
|
||||
我知道经验丰富的 Linux 用户可以使用终端中的 [find 命令][2] 实现相同的目的,但许多桌面用户更喜欢使用 GUI。
|
||||
|
||||
让我们从最简单的搜索选项开始。
|
||||
|
||||
### 按名称搜索文件
|
||||
|
||||
打开 Nautilus 并单击顶部栏上的放大镜。这将打开一个搜索栏,你可以在其中输入查询字符串。
|
||||
|
||||
当你输入时,搜索结果会不断完善,并在输入完整文件名时进行匹配。
|
||||
|
||||
![在 Nautilus 中搜索][3]
|
||||
|
||||
> 💡 搜索在当前目录及其子目录中执行。可以启用 [隐藏文件视图][4],将隐藏文件包含在搜索结果中。
|
||||
|
||||
### 根据时间搜索文件
|
||||
|
||||
使用 Nautilus,你可以根据文件的创建、修改或上次访问的时间过滤搜索。
|
||||
|
||||
为此,请单击搜索按钮并开始输入。当你开始输入时,你会注意到搜索按钮附近有一个下拉菜单。点击它。这将为你提供一个菜单,其中包含用于过滤搜索的选项。
|
||||
|
||||
![单击下拉菜单][5]
|
||||
|
||||
单击下拉菜单上的 “<ruby>选择日期<rt>Select Dates</rt></ruby>” 按钮。另外,选择选项 “<ruby>文件名<rt>File Name</rt></ruby>” 以按文件名匹配。
|
||||
|
||||
![按日期搜索的设置][6]
|
||||
|
||||
这将为你提供一个扩展菜单,你可以在其中选择文件创建、修改或上次访问的日期。
|
||||
|
||||
![设定标准][7]
|
||||
|
||||
在这里,如果你想设置自定义日期,请单击日历图标,如下图所示:
|
||||
|
||||
![点击日历图标][8]
|
||||
|
||||
现在,你将看到一个小日历,并可以相应地选择日期。
|
||||
|
||||
![选择日期][9]
|
||||
|
||||
从列表中设置你选择的日期后,你可以看到搜索栏上应用的条件,并向你显示基于该条件的文件。
|
||||
|
||||
![应用日期标准][10]
|
||||
|
||||
### 根据文件类型搜索文件
|
||||
|
||||
你还可以根据文件类型过滤搜索。假设你正在寻找 PDF 文件。
|
||||
|
||||
与上一步一样,单击搜索图标并开始输入文件名。现在,从下拉菜单中,单击 “<ruby>任何<rt>Anything</rt></ruby>” 选项并选择 “<ruby>文件名<rt>File Name</rt></ruby>”。
|
||||
|
||||
![根据文件类型搜索][11]
|
||||
|
||||
从展开的视图中选择要搜索的文件类型。在这里,我选择了 “PDF/Postscript”。
|
||||
|
||||
![设置所需的文件类型][12]
|
||||
|
||||
选择所需的文件类型后,你可以在搜索栏上看到应用的条件。你还将看到相应的结果。
|
||||
|
||||
![应用文件类型标准][13]
|
||||
|
||||
在搜索选项中没有找到所需的文件类型?向下滚动到底部并单击 “<ruby>其他类型<rt>other types</rt></ruby>”。
|
||||
|
||||
![获取更多文件类型][14]
|
||||
|
||||
这将为你提供更多文件类型。
|
||||
|
||||
![列出更多文件类型][15]
|
||||
|
||||
### 搜索文件内容,而不是名称
|
||||
|
||||
默认情况下,根据文件名执行文件搜索。如果你想知道是否有包含特定单词的文件,Nautilus 也允许你这样做。
|
||||
|
||||
首先,单击搜索图标并开始输入。现在,与前面的部分一样,转到下拉菜单。
|
||||
|
||||
在下拉菜单中,不要选择 “<ruby>文件名<rt>File Name</rt></ruby>”,而是选择 “<ruby>全文<rt>Full Text</rt></ruby>”。
|
||||
|
||||
现在,你可以搜索特定字符串并根据特定日期或文件类型进行搜索过滤。过滤的方法与前面提到的相同。
|
||||
|
||||
![选择“全文”选项][16]
|
||||
|
||||
在这里,我使用了字符串 “text to be”,你可以看到列出了几个具有该特定字符串的文件。另外,你可以看到,该部分也突出显示。
|
||||
|
||||
### 仅搜索文件或仅搜索文件夹
|
||||
|
||||
默认情况下,Nautilus 会搜索文件和文件夹。你可以将搜索细化为文件或文件夹。
|
||||
|
||||
为此,请在下拉菜单中选择 “<ruby>文件名<rt>File Name</rt></ruby>”,然后从类型列表中选择 “<ruby>文件<rt>Files</rt></ruby>” 或 “<ruby>文件夹<rt>Folders</rt></ruby>”,如下所示。
|
||||
|
||||
![仅在文件或文件夹中搜索][17]
|
||||
|
||||
这将根据你的选择过滤结果。
|
||||
|
||||
### 应用多个过滤器
|
||||
|
||||
你可以将日期过滤器和类型过滤器组合在一起以获得更精确的搜索。为此,请从各自的下拉列表中选择每个条件。
|
||||
|
||||
你可以在下面的截图中看到,我已经搜索了包含字符串 “to be search” 的文件。我应用的标准是 1 天内创建的 PDF 文件。
|
||||
|
||||
![应用多个过滤器][18]
|
||||
|
||||
### 更多 Nautilus 提示和调整
|
||||
|
||||
Nautilus 足以满足大多数搜索场景。如果你需要更多,还有专用的 GUI 工具,可让你执行桌面范围的自定义搜索。
|
||||
|
||||
> **[ANGRYsearch - 用于 Linux 的快速搜索图形用户界面工具][19A]**
|
||||
|
||||
想要更多这样的 Nautilus 技巧吗? [以 root 身份打开文件][20] 怎么样?
|
||||
|
||||
> **[在 Nautilus 文件管理器中以管理员身份打开文件和文件夹][20]**
|
||||
|
||||
或者将终端的功能与文件管理器结合起来?
|
||||
|
||||
> **[在 Linux 中混合搭配终端与 Nautilus 文件管理器][20A]**
|
||||
|
||||
这里还有更多此类提示。请自行查看。
|
||||
|
||||
> **[在 Linux 中调整 Nautilus 文件管理器的 13 种方法][20B]**
|
||||
|
||||
我希望你喜欢这些技巧,它们有助于更好地改善你的桌面 Linux 体验。
|
||||
|
||||
你还知道其他这样酷的技巧吗? 请在评论中分享。
|
||||
|
||||
*(题图:DA/77ae519f-e942-42b0-9808-4af943b168cb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/nautilus-file-search/
|
||||
|
||||
作者:[Sreenath][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/nautilus-tips-tweaks/
|
||||
[2]: https://linuxhandbook.com/find-command-examples/?ref=itsfoss.com
|
||||
[3]: https://itsfoss.com/content/images/2023/08/Click-on-the-search-button-and-start-typing.png
|
||||
[4]: https://itsfoss.com/show-hidden-files-linux/
|
||||
[5]: https://itsfoss.com/content/images/2023/08/Access-more-search-options.png
|
||||
[6]: https://itsfoss.com/content/images/2023/08/click-on-time-option-to-get-expanded-list.png
|
||||
[7]: https://itsfoss.com/content/images/2023/08/Search-according-to-date-and-time.png
|
||||
[8]: https://itsfoss.com/content/images/2023/08/click-on-calendar-icon.png
|
||||
[9]: https://itsfoss.com/content/images/2023/08/select-date-from-calendar.png
|
||||
[10]: https://itsfoss.com/content/images/2023/08/Showing-search-criterea-date-on-search-result.png
|
||||
[11]: https://itsfoss.com/content/images/2023/08/click-on-type-option-to-get-expanded.png
|
||||
[12]: https://itsfoss.com/content/images/2023/08/Search-based-on-file-type-like-pdf.png
|
||||
[13]: https://itsfoss.com/content/images/2023/08/showing-search-criteria-type-on-search-result.png
|
||||
[14]: https://itsfoss.com/content/images/2023/08/click-on-other-type.png
|
||||
[15]: https://itsfoss.com/content/images/2023/08/complete-list-of-types.png
|
||||
[16]: https://itsfoss.com/content/images/2023/08/Search-inside-the-file.png
|
||||
[17]: https://itsfoss.com/content/images/2023/08/search-for-only-folders-or-only-files.png
|
||||
[18]: https://itsfoss.com/content/images/2023/08/applied-multiple-criteria.png
|
||||
[19]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[19A]: https://itsfoss.com/angrysearch/
|
||||
[20]: https://itsfoss.com/open-nautilus-as-administrator/
|
||||
[20A]: https://itsfoss.com/terminal-nautilus-combination/
|
||||
[20B]: https://itsfoss.com/nautilus-tips-tweaks/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202401/25/155635ocrk3q8dgg3rkkgh.jpg
|
||||
207
published/202401/20230821 How to Use Subtitles with VLC.md
Normal file
207
published/202401/20230821 How to Use Subtitles with VLC.md
Normal file
@@ -0,0 +1,207 @@
|
||||
[#]: subject: "How to Use Subtitles with VLC"
|
||||
[#]: via: "https://itsfoss.com/vlc-use-subtitles/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16594-1.html"
|
||||
|
||||
如何通过 VLC 使用字幕
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 使用 VLC 媒体播放器播放和管理字幕的新手指南。
|
||||
|
||||
我是一个超级动漫迷,如果你想观看最新的剧集,那么你只能观看日语音频,因此字幕对于非日语观众来说是必不可少的。
|
||||
|
||||
值得庆幸的是,我最喜欢的视频播放器 VLC 很好地支持字幕。难怪它是有史以来 [最好的视频播放器][1] 之一。
|
||||
|
||||
VLC 实际上可以做的不仅仅是播放提供的字幕。
|
||||
|
||||
在本指南中,我将引导你完成以下内容:
|
||||
|
||||
* 如何使用可用的字幕(如果有的话)
|
||||
* 如何使用下载的字幕
|
||||
* 如何自动下载字幕(使用 vlsub 扩展)
|
||||
* 如何将字幕与视频同步
|
||||
* VLC 支持哪些字幕格式
|
||||
|
||||
那么让我们从第一个开始。
|
||||
|
||||
### 如何在 VLC 中启用字幕
|
||||
|
||||
有些视频附带字幕文件。如果字幕与视频文件位于同一文件夹中,你可以轻松启用字幕。
|
||||
|
||||
虽然启用字幕的方法有多种,但我将向你展示两种有效的方法。
|
||||
|
||||
#### 按 V 键(最简单的方法)
|
||||
|
||||
如果当前播放的视频有一个或多个字幕,那么你可以按 `V` 键,它将在可用选项之间更改字幕。
|
||||
|
||||
正如你所看到的,当我按下 `V` 时,它会在多个字幕之间漫游,甚至可以选择完全禁用字幕。
|
||||
|
||||
#### 使用顶部菜单栏或右键单击上下文菜单
|
||||
|
||||
虽然按 `V` 键是启用字幕的最简单方法,但如果你有多个字幕文件(可能有多种语言)并且必须选择其中之一,那么按 `V` 键的效果就不是最好了。
|
||||
|
||||
假设你要查找的字幕位于最后一个位置,那么你必须按 `V` 键几次,如果你错过了,请再次重复该过程。
|
||||
|
||||
因此,在这种情况下,从顶部菜单中选择字幕轨道是一种简单方便的方法。
|
||||
|
||||
要使用此方法,你必须遵循两个简单的步骤:
|
||||
|
||||
* 单击顶部菜单栏中的 “<ruby>字幕<rt>Subtitle</rt></ruby>” 菜单
|
||||
* 选择 “<ruby>子轨道<rt>Sub Track</rt></ruby>”,然后选择所需的字幕轨道
|
||||
|
||||
![][2]
|
||||
|
||||
你还可以通过右键单击正在播放的视频,并选择字幕选项来完成此操作。
|
||||
|
||||
### 如何在 VLC 中使用下载的字幕
|
||||
|
||||
如果你从网上下载了字幕,但不知道如何在 VLC 中使用它们,那么本节将解决该问题。
|
||||
|
||||
要使用下载的字幕,你必须将其导入 VLC。并且可以通过遵循给定的简单步骤轻松完成:
|
||||
|
||||
* 首先,单击顶部菜单栏中的 “字幕”
|
||||
* 选择第一个 “<ruby>添加字幕文件<rt>Add Subtitle File</rt></ruby>” 选项,它将打开文件管理器
|
||||
* 从这里找到字幕文件所在的位置并选择它
|
||||
|
||||
![][3]
|
||||
|
||||
完成后,可以通过顶部菜单栏中的`字幕`菜单访问添加的字幕:
|
||||
|
||||
![][4]
|
||||
|
||||
> 💡 如果你要保存视频以供将来使用,我建议将字幕文件复制到与视频文件本身相同的文件夹中。更好的方法是将文件重命名为与视频文件相同的名称。因此,如果视频文件是 `my-xyz.mp4`,则字幕文件应该是 `my-xyz.srt`。这样,字幕要么自动播放,要么在你按 `v` 键时被识别。
|
||||
|
||||
### 如何在 VLC 中自动下载字幕(适用于 Linux 用户)
|
||||
|
||||
你是否知道 VLC 有一个名为 VLsub 的插件,可用于从网络下载字幕并直接在 VLC 中访问它们?
|
||||
|
||||
如果你是 Linux 用户,请按照给定的说明将其添加到 VLC 中。
|
||||
|
||||
首先,[使用 wget 命令][5] 下载 zip 文件:
|
||||
|
||||
```
|
||||
wget https://github.com/exebetche/vlsub/archive/master.zip
|
||||
```
|
||||
|
||||
接下来,如下所示 [使用 unzip 命令解压文件][6]:
|
||||
|
||||
```
|
||||
unzip master.zip
|
||||
```
|
||||
|
||||
之后,你需要 [创建一个新目录][7]:
|
||||
|
||||
```
|
||||
mkdir -p ~/.local/share/vlc/lua/extensions
|
||||
```
|
||||
|
||||
最后,使用 [mv 命令][8] 将文件移动到创建的目录,如下所示:
|
||||
|
||||
```
|
||||
mv ~/vlsub-master/vlsub.lua ~/.local/share/vlc/lua/extensions
|
||||
```
|
||||
|
||||
现在,打开VLC播放器,在 “<ruby>视图<rt>View</rt></ruby>” 菜单下,你将找到 “VLsub”:
|
||||
|
||||
![][9]
|
||||
|
||||
要使用 VLsub 下载字幕,首先,输入电影名称和年份以获得更好的结果,然后点击“<ruby>按名称搜索<rt>Search by name</rt></ruby>”按钮,从结果中选择字幕文件,然后单击“<ruby>下载选择<rt>Download selection</rt></ruby>”按钮,如图所示 :
|
||||
|
||||
![][10]
|
||||
|
||||
就是这样!
|
||||
|
||||
要了解有关如何使用 VLsub 扩展的更多信息,请参阅我们有关该主题的 [详细指南][11]。
|
||||
|
||||
### 如何在 VLC 中将字幕与电影同步
|
||||
|
||||
有时,下载的字幕可能会比电影中发生的事情稍微落后或提前,这可能会令人沮丧!
|
||||
|
||||
不用担心! VLC也有解决这个问题的方法!
|
||||
|
||||
在 VLC 中,你可以通过按 `G` 和 `H` 键前进或后退字幕。
|
||||
|
||||
* `G` 键将使字幕快进 50 毫秒
|
||||
* `H` 键将使字幕后退 50 毫秒
|
||||
|
||||
虽然 50 毫秒听起来太短,但你会在 2-3 次按键内注意到显着差异。
|
||||
|
||||
**如果你在实际场景中跑得太超前或落后,也可以按住它们。**
|
||||
|
||||
还感到困惑吗? 你可以参考我们的 [如何在 VLC 中同步字幕的详细指南][13]。
|
||||
|
||||
### VLC 支持哪些字幕格式?
|
||||
|
||||
如果你想从互联网上下载字幕,那么你必须了解 VLC 支持的字幕格式。
|
||||
|
||||
以下是 VLC 支持的字幕格式列表:
|
||||
|
||||
* *.idx(VOBSub)
|
||||
* *.cvd(Chaoji VCD)
|
||||
* *.usf(通用字幕)
|
||||
* *.ttxt(MPEG-4 定时文本)
|
||||
* *.srt(SubRip)
|
||||
* *.ssa(Sub Station Alpha)
|
||||
* *.smi(SAMI)
|
||||
* *.aqt(AQTitle)
|
||||
* *.txt(ML2/VPlayer)
|
||||
* *.rt(RealText/Smil)
|
||||
* *.psb(PowerDivX)
|
||||
* *.pjs(Phoenix Subtitle)
|
||||
* *.dks(DKS)
|
||||
* *.mpl(ML2)
|
||||
* *.jss(JACOSub)
|
||||
* *.svcd(Super Video CD)
|
||||
* *.txt(ML2/VPlayer)
|
||||
|
||||
但最流行的微妙类型是 `*.srt`,并且通常在你下载视频文件时默认提供。
|
||||
|
||||
### VLC 的功能远不止播放视频
|
||||
|
||||
你知道可以使用 VLC 下载 YouTube 视频吗? 嗯,它可以做的远不止这些。
|
||||
|
||||
为此,我们制作了关于 [你可以使用 VLC 播放器做的很酷的事情][14] 的详细指南。
|
||||
|
||||
以下是如何充分利用 VLC 的方法:
|
||||
|
||||
> **[让 VLC 播放器在 Linux 中发挥更大作用的 5 个技巧][15]**
|
||||
|
||||
我希望本指南对你有所帮助。
|
||||
|
||||
*(题图:DA/39a917f2-a1b3-4167-8393-1af0859105b0)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/vlc-use-subtitles/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/video-players-linux/
|
||||
[2]: https://itsfoss.com/content/images/2023/08/Enable-subtitles-from-menu-bar-in-VLC.png
|
||||
[3]: https://itsfoss.com/content/images/2023/08/Use-subtitles-downloaded-from-web-in-VLC.png
|
||||
[4]: https://itsfoss.com/content/images/2023/08/Add-subtitles-in-VLC.png
|
||||
[5]: https://learnubuntu.com/install-wget/?ref=itsfoss.com
|
||||
[6]: https://learnubuntu.com/unzip-file/?ref=itsfoss.com
|
||||
[7]: https://linuxhandbook.com/mkdir-command/?ref=itsfoss.com
|
||||
[8]: https://linuxhandbook.com/mv-command/?ref=itsfoss.com
|
||||
[9]: https://itsfoss.com/content/images/2023/08/use-VLsub-extension-in-VLC-to-download-subtitles-easily.png
|
||||
[10]: https://itsfoss.com/content/images/2023/08/How-to-download-subtitles-in-VLC-using-VLsub-extension.png
|
||||
[11]: https://itsfoss.com/download-subtitles-automatically-vlc-media-player-ubuntu/
|
||||
[12]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[13]: https://itsfoss.com/how-to-synchronize-subtitles-with-movie-quick-tip/
|
||||
[14]: https://itsfoss.com/simple-vlc-tips/
|
||||
[15]: https://itsfoss.com/vlc-pro-tricks-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202401/29/181554ruyylfyiusdq9yla.jpg
|
||||
@@ -0,0 +1,182 @@
|
||||
[#]: subject: "How to Configure VLAN Tagging Over Bonding on RHEL"
|
||||
[#]: via: "https://www.2daygeek.com/configure-vlan-tagging-over-network-bonding-rhel/"
|
||||
[#]: author: "Jayabal Thiyagarajan https://www.2daygeek.com/author/jayabal/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16596-1.html"
|
||||
|
||||
如何在 RHEL 上通过绑定配置 VLAN 标记
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
在 Linux 中,你可以根据自己的需要创建高级网络设置,如 <ruby>网络绑定<rt>Network Bonding</rt></ruby> 或 <ruby>网卡聚合<rt>NIC teaming</rt></ruby>、VLAN 标记和桥接。这些高级功能可以提高网络连接的效率和可靠性。
|
||||
|
||||
你可以在以太网、绑定、聚合或桥接设备等其他接口上创建 VLAN 接口。
|
||||
|
||||
在本文中,我们将学习如何在 RHEL 系统中通过网络绑定配置 VLAN 标记,它允许来自不同网络的流量共享共同的物理链接。
|
||||
|
||||
### 通过绑定对 VLAN 进行标记的先决条件
|
||||
|
||||
* 网络聚合需要在网络交换机端口上启用 LACP(802.3ad),以聚合链路。
|
||||
* 网络聚合需要将网络端口配置为中继端口,这样可以在同一端口上添加多个 VLAN。此外,还要从它们那里获取 VLAN ID,以便在操作系统层面进行配置。
|
||||
* Linux 系统应该有两个接口。
|
||||
* 如果是物理服务器,我们建议在板载接口和 PCI 接口之间配置绑定,以避免主机端的网卡出现单点故障。
|
||||
|
||||
#### 绑定内核模块
|
||||
|
||||
使用 `lsmod` 命令检查 Linux 系统是否已加载绑定模块。
|
||||
|
||||
```
|
||||
lsmod | grep -i bonding
|
||||
bonding 12451 0
|
||||
```
|
||||
|
||||
默认情况下已加载。否则,请使用 `modprobe` 命令加载它。
|
||||
|
||||
```
|
||||
modprobe bonding
|
||||
```
|
||||
|
||||
### 1) LACP 绑定配置
|
||||
|
||||
我们将配置基于 LACP(Mode 4 – 802.3ad)的链路聚合绑定,通过组合名为 `em1` 和 `p7p1` 的两个接口,为绑定接口提供更大的带宽。
|
||||
|
||||
#### 1a) 创建 Bond 接口
|
||||
|
||||
在目录 `/etc/sysconfig/network-scripts/` 下创建绑定接口文件 `ifcfg-bond0`。
|
||||
|
||||
```
|
||||
vi /etc/sysconfig/network-scripts/ifcfg-bond0
|
||||
|
||||
TYPE=Bond
|
||||
DEVICE=bond0
|
||||
NAME=bond0
|
||||
BONDING_MASTER=yes
|
||||
BOOTPROTO=none
|
||||
ONBOOT=yes
|
||||
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
|
||||
NM_CONTROLLED=no
|
||||
```
|
||||
|
||||
#### 1b) 配置第一个从接口
|
||||
|
||||
配置你想要进行绑定的第一个从属接口 `em1`。请根据你的环境使用正确的接口名称。
|
||||
|
||||
```
|
||||
vi /etc/sysconfig/network-scripts/ifcfg-em1
|
||||
|
||||
TYPE=Ethernet
|
||||
BOOTPROTO=none
|
||||
DEVICE=em1
|
||||
ONBOOT=yes
|
||||
MASTER=bond0
|
||||
SLAVE=yes
|
||||
```
|
||||
|
||||
#### 1c) 配置第二个从接口
|
||||
|
||||
配置你想要进行绑定的第二个从属接口 `p7p1`。 请根据你的环境使用正确的接口名称。
|
||||
|
||||
```
|
||||
vi /etc/sysconfig/network-scripts/ifcfg-p7p1
|
||||
|
||||
TYPE=Ethernet
|
||||
BOOTPROTO=none
|
||||
DEVICE=p7p1
|
||||
ONBOOT=yes
|
||||
MASTER=bond0
|
||||
SLAVE=yes
|
||||
```
|
||||
|
||||
#### 重启网络服务
|
||||
|
||||
重启网络服务以启用绑定接口或使用 `ifup` 命令启动它们。
|
||||
|
||||
```
|
||||
systemctl restart network
|
||||
```
|
||||
|
||||
### 2) 通过绑定接口进行 VLAN 标记
|
||||
|
||||
LACP 绑定配置已完成,所有接口现已启动并运行。让我们按照以下步骤配置绑定接口上的 VLAN 标记。
|
||||
|
||||
正如先决条件中所讨论的,以下是映射到相应以太网卡端口(`em1` 和 `p7p1`)和网络交换机端口的 VLAN。
|
||||
|
||||
* VLAN ID (221), VLAN N/W = 192.168.10.0/24
|
||||
* VLAN ID (331), VLAN N/W = 192.168.20.0/24
|
||||
|
||||
#### 2a) 将 VLAN 221 配置到 Bond0
|
||||
|
||||
为 VLAN id 221 创建标记接口文件 `/etc/sysconfig/network-scripts/ifcfg-bond0.221` 并添加以下内容。
|
||||
|
||||
```
|
||||
vi /etc/sysconfig/network-scripts/ifcfg-bond0.221
|
||||
|
||||
DEVICE=bond0.221
|
||||
BOOTPROTO=none
|
||||
ONBOOT=yes
|
||||
IPADDR=192.168.10.100
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=192.168.10.1
|
||||
VLAN=yes
|
||||
NM_CONTROLLED=no
|
||||
```
|
||||
|
||||
#### 2b) 将 VLAN 331 配置到 Bond0
|
||||
|
||||
为 VLAN id 331 创建标记接口文件 `/etc/sysconfig/network-scripts/ifcfg-bond0.331` 并添加以下内容。
|
||||
|
||||
```
|
||||
vi /etc/sysconfig/network-scripts/ifcfg-bond0.331
|
||||
|
||||
DEVICE=bond0.331
|
||||
BOOTPROTO=none
|
||||
ONBOOT=yes
|
||||
IPADDR=192.168.20.100
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=192.168.20.1
|
||||
VLAN=yes
|
||||
NM_CONTROLLED=no
|
||||
```
|
||||
|
||||
#### 重启网络服务
|
||||
|
||||
重启网络服务以启用绑定接口或使用 `ifup` 命令启动它们。
|
||||
|
||||
```
|
||||
systemctl restart network
|
||||
```
|
||||
|
||||
### 验证 VLAN 标记配置
|
||||
|
||||
最后使用 [ip 命令][1] 验证 VLAN 标记接口是否已配置并启动和运行。
|
||||
|
||||
是的,我可以看到 `bondo.221@bond0` 和 `bon0.331@bond0` 有两个不同的 IP,并且能够通过 ssh 访问系统,没有任何问题。因此,VLAN 标记按预期工作。
|
||||
|
||||
![][2]
|
||||
|
||||
### 结论
|
||||
|
||||
恭喜,你已经了解了如何在 RHEL 系统上通过 LACP 绑定配置 VLAN 标记,该系统监听两个 VLAN。VLAN 标记不限于两个 VLAN,支持多个 VLAN,你可以根据该 VLAN 的网络配置添加 VLAN 标记。
|
||||
|
||||
*(题图:DA/2854516d-4d19-4008-a421-05f9a2a78368)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.2daygeek.com/configure-vlan-tagging-over-network-bonding-rhel/
|
||||
|
||||
作者:[Jayabal Thiyagarajan][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.2daygeek.com/author/jayabal/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.2daygeek.com/linux-ip-command-configure-network-interface/
|
||||
[2]: https://www.2daygeek.com/wp-content/uploads/2023/09/configure-vlan-tagging-over-bonding-rhel-1024x395.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202401/30/154618igt5zj2dwgfax2th.jpg
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user