Normal view

There are new articles available, click to refresh the page.
Before yesterdayMain stream

好奇怪啊,我在 reddit/SideProject 每次发帖都会被自动审核删除掉

By: spike0100
6 October 2025 at 21:49
spike0100:

我在 ai 的建议下修改了多次: 第一次删除了所有的外部链接 第二次删除了所有的图片 第三次删除了所有的 market 相关单词(其实和营销没有关系)

但是毫无例外都被删帖了。在其他节点发帖好像类似的内容也没被删除过。不过最后倒是也没封号就是了。

img1

The Dutch Golden Age: Group portraits

By: hoakley
24 September 2025 at 19:30

As organised occupational groups, guilds have ancient origins, and in Roman times were known as collegia. Although they were an important part of Renaissance society, few if any appear to have commissioned group portraits, which were largely confined to families at that time. This changed in the Dutch Golden Age, and some of its best-known paintings depict occupational and other groups.

vanmiereveltanatomylesson
Michiel Jansz. van Mierevelt (1566–1641) and Pieter van Mierevelt (1596–1623), The Anatomy Lesson of Dr. Willem van der Meer (1617), oil on canvas, 146.5 x 202 cm, Museum Prinsenhof Delft, Delft, The Netherlands. Wikimedia Commons.

In 1617, Michiel van Mierevelt and his son Pieter, specialists in portraiture, painted The Anatomy Lesson of Dr. Willem van der Meer, one of the earliest portraits of a social group from the Dutch Golden Age. Members of this group are all ignoring the cadaver in front of them, preferring to look at the painter, and are thought to be members of the Surgeons’ Guild of the city of Delft, who commissioned this work.

rembrandtanatomylesson
Rembrandt Harmenszoon van Rijn (1606–1669), The Anatomy Lesson of Dr. Nicolaes Tulp (1632), oil on canvas, 169.5 x 216.5 cm, Koninklijk Kabinet van Schilderijen Mauritshuis, The Hague, The Netherlands. Wikimedia Commons.

Rembrandt painted his Anatomy Lesson of Dr. Nicolaes Tulp in 1632, as an early commission soon after his arrival in Amsterdam. It’s a group portrait of distinguished members of the Surgeons’ Guild in their working environment. Most remarkable is the fact that its principal, Dr Tulp, and most of his colleagues aren’t looking at the dissected forearm.

As cities developed in the Dutch Republic, guilds and associations flourished. This wasn’t a period of peace, and most towns and cities required adult males to be members of the local civic militia or schutterij for mutual defence. These were operated using the guild model, with local men appointed to military rank for their command. Their roles included helping defend the town or city in the event of attack or revolt, and manning a night watch, in which members took turns to patrol the streets.

Frans Hals (1582/1583–1666), Banquet of the Officers of the Calivermen Civic Guard (1627), oil on canvas, 183 x 266.5 cm, Frans Hals Museum, Haarlem, The Netherlands.

One of the earlier of these group portraits is Frans Hals’ Banquet of the Officers of the Calivermen Civic Guard from 1627. Contemporary records have enabled their identification as (from the left) Willem Claesz. Vooght, Johan Damius, Willem Warmont, Johan Schatter, Gilles de Wildt, Nicolaes van Napels, Outgert Akersloot, Matthijs Haeswindius, Adriaen Matham, Lot Schout, Pieter Ramp, and Willem Ruychaver at the right.

The cost of these group portraits was relatively modest, as it was normally shared between those depicted. In most cases shares weren’t equal, but determined by the member’s rank in the organisation.

potcivicguardstadrian
Hendrik Gerritsz Pot (c 1580–1657), Portrait of the St Adrian Civic Guard, Haarlem (1630), oil on canvas, 214 × 276 cm, Frans Hals Museum, Haarlem, The Netherlands. Wikimedia Commons.

Hendrik Gerritsz Pot used the novel technique of putting indigo layers over underpainting, without the protection of glazes, in his Portrait of the St Adrian Civic Guard, Haarlem from 1630. As a result of fading of the indigo, what were originally bright blue sashes have become almost white, as shown in the detail below.

potcivicguardstadriand1
Hendrik Gerritsz Pot (c 1580–1657), Portrait of the St Adrian Civic Guard, Haarlem (detail) (1630), oil on canvas, 214 × 276 cm, Frans Hals Museum, Haarlem, The Netherlands. Wikimedia Commons.
halsstadrianguard
Frans Hals (1582/1583–1666), Officers and Sergeants of the St Adrian Civic Guard (1633), oil on canvas, 207 × 337 cm, Frans Hals Museum, Haarlem, The Netherlands. Wikimedia Commons.

Frans Hals’ Officers and Sergeants of the St Adrian Civic Guard (1633) not only shows the same group of men, but has suffered exactly the same fate with their formerly blue sashes.

Frans Hals (1582/1583–1666), Militia Company of District XI under the Command of Captain Reynier Reael (1633-37), oil on canvas, 209 x 429 cm, Rijksmuseum, Amsterdam, The Netherlands.

Hals’ Militia Company of District XI under the Command of Captain Reynier Reael (1633-37) shows a group known as the Meagre Company. He was commissioned to paint this in 1633, but three years later it remained unfinished, and the commission was transferred to Codde to complete the right side of the canvas and many of the hands and faces a year later.

rembrandtnightwatch
Rembrandt Harmenszoon van Rijn (1606–1669), The Night Watch (1642), oil on canvas, 363 x 437 cm, Rijksmuseum Amsterdam, Amsterdam, The Netherlands. Wikimedia Commons.

Painted a decade later, Rembrandt’s vast group portrait of The Night Watch (1642) is perhaps the most famous of them all, although it’s more correctly titled Militia Company of District II under the Command of Captain Frans Banninck Cocq. It features the commander and seventeen members of his civic guard company in Amsterdam, and took the artist three years to complete from his first commission to paint this for display in the great hall of the guards.

Captain Frans Banninck Cocq (in black with a red sash), followed by his lieutenant Willem van Ruytenburch (in yellow with a white sash) are leading out this militia company, their colours borne by the ensign Jan Visscher Cornelissen. The small girl to the left of them is carrying a dead chicken as a symbol of arquebusiers, the type of weapon several are carrying (detail below).

rembrandtnightwatchd1
Rembrandt Harmenszoon van Rijn (1606–1669), The Night Watch (detail) (1642), oil on canvas, 363 x 437 cm, Rijksmuseum Amsterdam, Amsterdam, The Netherlands. Wikimedia Commons.
Bartholomeus van der Helst (1613–1670) and Jan Vos (1610–1667), The Celebration of the Peace of Münster, 18 June 1648, in the Headquarters of the Crossbowmen’s Civic Guard (St George Guard), Amsterdam (1648), oil on canvas, 232 x 547 cm, Rijksmuseum, Amsterdam, The Netherlands.

Some of these militia group portraits commemorated events of greater significance than social occasions. On 15 May 1648, peace between Philip IV of Spain and the Lords States General of the Dutch Republic was finally ratified to end the Eighty Years’ War, and on 18 June this was marked by The Celebration of the Peace of Münster, 18 June 1648, in the Headquarters of the Crossbowmen’s Civic Guard (St George Guard), Amsterdam, painted here by Bartholomeus van der Helst with Jan Vos.

At the right with a silver horn is Captain Cornelis Jansz. Witsen, who is shaking the hand of Lieutenant Johan Oetgens van Waveren. In the centre, seated behind the drum with a flag draped over him, is Reserve Officer Candidate Jacob Banning, and around him are Sergeants Dirck Claesz. Thoveling and Thomas Hartog.

Neighbourhood and welfare organisations also flourished, and the latter distributed money, food, clothes and fuel to the poor. These were run by the middle classes, who formed themselves into regents for the purpose of their administration.

verspronckregentesses
Johannes Cornelisz Verspronck (c 1600/1603–1662), Regentesses of the St. Elisabeth’s Hospital (1641), oil on canvas, 156.9 x 214.7 cm, Frans Hals Museum, Haarlem, The Netherlands. Wikimedia Commons.

Johannes Cornelisz Verspronck’s Regentesses of the St. Elisabeth’s Hospital (1641) shows the group of august ladies who oversaw that charitable foundation in Haarlem. Time has shown that they too were victims of fugitive pigment, as their tablecloth was originally a rich green. Its unprotected indigo blue has faded from much of its surface, leaving most of it an odd yellow ochre hue.

Frans Hals (1582/1583–1666), Regents of the Old Men’s Alms House, Haarlem (1664), oil on canvas, 172.3 x 256 cm, Frans Hals Museum, Haarlem, The Netherlands.

The gentlemen shown in Frans Hals’ group portrait of the Regents of the Old Men’s Alms House, Haarlem from 1664 were responsible for running the alms house for poor elderly men in the city of Haarlem.

Medium and Message: Faces frozen in wax

By: hoakley
16 September 2025 at 19:30

In the distant past, fresco painting was ideal for brightening up the walls or ceiling of a substantial building, but there was also demand for smaller, more portable works of art. Some would have been painted onto animal skins, and were ultimately developed into miniatures in beautiful manuscripts, using the precursors of watercolours. One alternative medium developed most successfully was wax, in encaustic painting.

Characteristically this uses binder that in most ambient temperatures is solid, but becomes liquid paint at higher temperatures, usually no higher than the boiling point of water. This enables the painter to heat mixtures of pigment and binder kept at around 50˚-90˚C (120˚-200˚F), apply them while still hot, and for them to bind the pigment to its ground once the paint cools.

People started to keep bees by around 7000 BCE, and one of their most important products has been the wax from which they build their hives. Beeswax has a typical melting point of about 63˚C (145˚F), a temperature readily achieved by heating water but well above daytime maximum air temperatures experienced where people live, which very seldom reach 50˚C (120˚F). Beeswax was therefore most probably the first binder used for encaustic painting.

Encaustic paint is thus unusual as it doesn’t rely on a chemical process to form the dry paint layer, but a physical change of state, which is fully reversible. Common supports include panels of wood, which originally didn’t have any ground applied. More recently grounds of gesso have been used successfully, but encaustic paints have also been applied to a wide range of supports including dried and fired clay tablets, pots, and sculpture.

One significant limitation with the process of painting using encaustic media is that heated paint tends to be thin and runny. Most artists therefore apply their paint with the support laid flat, and leave their work horizontal until the paint has solidified. Instead of painting stood up in front of an easel, they tend to work lying down.

Although encaustic paintings are susceptible to physical damage and decay, some from before the Christian era have survived, and it’s thought that the medium was used for several hundred or even thousands of years before the birth of Christ. The best-known early encaustic paintings are those made by colonists from Greece and Rome when living in Egypt between about 80-250 CE, particularly those found in the Fayum (or Faiyum) Basin. These were first discovered in about 1615, with most being removed during the nineteenth century and spread across collections in Europe and America. These funerary portraits are among the most haunting images in European art, and demonstrate how skilled encaustic painting can rival other media. It can achieve a remarkable lucency, although this depends on the processing of the beeswax and its ageing.

Anonymous, Funerary Portrait of a Woman 'Isidora' (c 100 - 110 CE), encaustic on panel, Getty Villa, Los Angeles. By Dave & Margie Hill / Kleerup from Centennial, CO, USA (Getty Villa - Collection  Uploaded by Marcus Cyron), via Wikimedia Commons.
Artist not known, Funerary Portrait of a Woman ‘Isidora’ (c 100-110 CE), encaustic on panel, Getty Villa, Los Angeles. By Dave & Margie Hill / Kleerup from Centennial, CO, USA (Getty Villa – Collection Uploaded by Marcus Cyron), via Wikimedia Commons.

This Funerary Portrait of a Woman ‘Isidora’ is rendered in fine, close-packed strokes of encaustic wax to model the form, and the eyelashes have been formed by scraping away wax to reveal the underlying black ground. Originally painted on a rectangular cedar board, small squares of gold leaf were applied around her neck, and the board cut down to size to fit the facial area of the woman’s mummy for interment.

Anonymous, Funerary Portrait of the Boy Eutyches (c 100 - 150 CE), encaustic on panel, 38 x 19 cm, Metropolitan Museum of Art, New York. Wikimedia Commons.
Artist not known, Funerary Portrait of the Boy Eutyches (c 100-150 CE), encaustic on panel, 38 x 19 cm, Metropolitan Museum of Art, New York. Wikimedia Commons.

Modelling of the skin in this Funerary Portrait of the Boy Eutyches is well in advance of its time, and appears more characteristic of portraits from the Renaissance over a thousand years later.

Anonymous, Funerary Portrait of a Young Woman (c 120 - 150 CE), encaustic on panel, Liebieghaus, Frankfurt am Main. By User:FA2010 (Own work), via Wikimedia Commons.
Artist not known, Funerary Portrait of a Young Woman (c 120-150 CE), encaustic on panel, Liebieghaus, Frankfurt am Main. By User:FA2010 (Own work), via Wikimedia Commons.

Anonymous, Funerary Portrait of a Woman 'The European' (c 80 - 200 CE), encaustic on cedar panel, 42 x 24 cm, Musée du Louvre, Paris. By dalbera from Paris, France, via Wikimedia Commons.
Artist not known, Funerary Portrait of a Woman ‘The European’ (c 80-200 CE), encaustic on cedar panel, 42 x 24 cm, Musée du Louvre, Paris. By dalbera from Paris, France, via Wikimedia Commons.

A tradition of encaustic painting also grew up in early Christian communities, where it was used to create icons for places of worship and the homes of the wealthiest.

anonvirginchild
Artist not known, Virgin Mary and Child with Saints Theodor of Amasea and George, and Angels (c 580 CE), encaustic, 68.5 x 49.7 cm, Saint Catherine’s Monastery, Sinai, Egypt. Wikimedia Commons.

This encaustic painting of the Virgin Mary and Child with Saints Theodor of Amasea and George, and Angels was made in about 580 CE for Saint Catherine’s Monastery in Sinai, not far from where the Fayum portraits had been interred.

romanelliboysfishing
Giovanni Francesco Romanelli (1610–1662), Boys Fishing (c 1640), encaustic on cardboard, 159 x 310 cm, Casa Museu Eva Klabin, Rio de Janeiro, Brazil. Wikimedia Commons.

A few artists continued to paint in encaustic even after the Renaissance, although this has remained a minority pursuit. Giovanni Francesco Romanelli’s painting of Boys Fishing from about 1640 curiously uses cardboard as its support, suggesting it may have been more of an experiment.

bocklinvillaonsea1
Arnold Böcklin (1827–1901), Villa by the Sea, version I (1864), resin and wax on canvas, 124.5 × 174.5 cm, Sammlung Schack, Bayerische Staatsgemäldesammlungen, Munich, Germany. Wikimedia Commons.

The nineteenth century saw a resurgence in the use of more traditional media such as egg tempera. In addition to painting with that, some like Arnold Böcklin returned to try encaustics, here in one of his major works, the first version of Villa by the Sea from 1864.

More followed suit in the twentieth century, including James Ensor, Diego Rivera and Jasper Johns, and today encaustic methods have a small but enthusiastic following.

What happens to images when you disable Live Text?

By: hoakley
19 August 2025 at 14:30

For many of us, Live Text and Visual Look Up are real boons, making it simple to copy text from images, to perform Optical Character Recognition (OCR) on images of text, and to identify objects of interest. They are also used by the mediaanalysisd service to extract text and object identifications for indexing by Spotlight, making those image contents searchable. Although the latter can be disabled generally or for specific folders in Spotlight settings, there appears to be only one control over Live Text, and none for Visual Look Up. This article examines what that single control does, using log extracts obtained from a Mac mini M4 Pro running macOS Sequoia 15.6. It follows my recent article on how these features work.

Setting

Live Text, which is enabled by default, can be disabled in Language & Region settings. When that is turned off, opening an image containing text in Preview no longer makes any text selectable. However, Visual Look Up still works as normal.

Textual images

When an image containing recognisable text but no other objects is opened in Preview, the VisionKit subsystem is still activated soon after the image is loaded. VisionKit initially reports that the “device” supports analysis, but immediately clarifies that to
Device does not support image analysis, but does support Visual Search, limiting to just Visual Search.
It then starts a VKImageAnalyzerProcessRequestEvent with a MAD parse request. That leads to a Visual Search Gating Task being run, and the Apple Neural Engine (ANE) and all CPU P cores are prepared for that.

Less than 0.1 second later, the end of the VKImageAnalyzerProcessRequestEvent is reported, and VisionKit returns an analysis that no image segments merits further analysis. Preview’s ⓘ Info button remains in its normal state, and clicking on that doesn’t alter the image displayed.

Images with other objects

An image containing potentially recognisable objects doesn’t stop there. If VisionKit returns an analysis indicating Visual Search could extract objects from the image, the ⓘ Info button adds stars and waits for the user to open the Info window.

VisionKit reports in the log
Setting Active Interaction Types: [private], [private]
then that it
DidShowVisualSearchHints with invocationType: VisualSearchHintsActivated, id: 1

When one of those Visual Search Hints is clicked, the Lookup View is prepared, followed by a notice from LookupViewService that it’s Changing state from LVSDisplayStateConfigured to LVSDisplayStateSearching. That leads to VisionKit making a Visual Search request from mediaanalysisd.

After the Apple Neural Engine (ANE) is run to progress that, successful search results in PegasusKit making its internet connection to identify the object, exactly as it does when Live Text is enabled and text has been recovered from the image:
Querying https: // api-glb-aeuw1b.smoot.apple.com/apple.parsec.visualsearch.v2.VisualSearch/VisualSearch with request (requestId: [UUID]) : (headers: ["Content-Type": "application/grpc+proto", "grpc-encoding": "gzip", "grpc-accept-encoding": "gzip", "grpc-message-type": "apple.parsec.visualsearch.v2.VisualSearchRequest", "X-Apple-RequestId": "[UUID]", "User-Agent": "PegasusKit/1 (Mac16,11; macOS 15.6 24G84) visualintelligence/1", "grpc-timeout": "10S"]) [private]

The ANE is finally cleaned up and shut down as the search results are displayed in the Lookup View.

Conclusions

  • When Live Text is disabled in Language & Region settings, images are still analysed when they are opened, to determine if they’re likely to contain objects that can be recognised in Visual Search for Visual Look Up.
  • If there are no such objects detected, VisionKit proceeds no further.
  • If there are suitable objects, mediaanalysisd and VisionKit proceed to identify them using Visual Search Hints, as normal.
  • If the user clicks on a Visual Search Hint, PegasusKit connects to Apple’s servers to identify that object and provide information for display in the Lookup View.
  • Although there is less extensive use of the ANE and CPU cores than when Live Text is enabled, neural networks are still run locally to perform a more limited image analysis.

I’m very grateful to Benjamin for pointing out this control over Live Text.

How do Live Text and Visual Look Up work now?

By: hoakley
12 August 2025 at 14:30

Live Text and Visual Look Up are recent features in macOS, first appearing in Monterey nearly four years ago. As that immediately followed Apple’s short debacle over its now-abandoned intention to scan images for CSAM, most concerns have been over whether these features send details of images to Apple.

Although recent Intel Macs also support both these features, they don’t have the special hardware to accelerate them, so are far slower. For this walkthrough, I’ll only present information from Apple silicon Macs, in particular for the M4 Pro chip in a Mac mini.

Initiation

When an image is opened from disk, the VisionKit system starts up early, often within 0.1 second of it starting to open. Its initial goal is to segment the image according to its content, and identify whether there’s any part of it that could provide text. If there is, then Live Text is run first so you can select and use that as quickly as possible.

In the log, first mention of this comes from com.apple.VisionKit announcing
Setting DDTypes: All, [private]
Cancelling all requests: [private]
Signpost Begin: "VKImageAnalyzerProcessRequestEvent"

It then adds a request to Mad Interface, that’s the mediaanalysisd service, with a total method return time, and that’s processed with another signpost (a regular log entry rather than a Signpost):
Signpost Begin: "VisionKit MAD Parse Request"

com.apple.mediaanalysis receives that request
[MADServicePublic] Received on-demand image processing request (CVPixelBuffer) with MADRequestID
then runs that
Running task VCPMADServiceImageProcessingTask

This is run at a high Quality of Service of 25, termed userInitiated, for tasks the user needs to complete to be able to use an app, and is scheduled to run in the foreground. Next Espresso creates a plan for a neural network to perform segmentation analysis, and the Apple Neural Engine, ANE, is prepared to load and run that model. There’s then a long series of log entries posted for the ANE detailing its preparations. As this proceeds, segmentation may be adjusted and the model run repeatedly. This can involve CoreML, TextRecognition, Espresso and the ANE, which can appear in long series of log entries.

Text recognition

With segmentation analysis looking promising for the successful recognition of text in the image, LanguageModeling prepares its model by loading linguistic data, marked by com.apple.LanguageModeling reporting
Creating CompositeLanguageModel ([private]) for locale(s) ([private]): [private]
NgramModel: Loaded language model: [private]

and the appearance of com.apple.Lexicon. An n-gram is an ordered sequence of symbols, that could range from letters to whole words, and the lexicon depends on the language locales. In my case, two locales are used, en (generic English) and en_US (US English).

At this point, mediaanalysisd declares the VCPMADVIDocumentRecognitionTask is complete, and runs a VCPMADVIVisualSearchGatingTask, involving com.apple.triald, TRIClient, PegasusKit and Espresso again. Another neural network is loaded into the ANE, and is run until the VCPMADVIVisualSearchGatingTask is complete and text returned.

The next task is for the translationd service to perform any translations required. If that’s not needed, VisionKit reports
Translation Check completed with result: NO, [private]
These may be repeated with other image segments until all probable text has been discovered and recognised. At that stage, recognised text is fully accessible to the user.

Object recognition

Further image analysis is then undertaken on segments of interest, to support Visual Look Up. Successful completion of that phase is signalled in Preview by the addition of two small stars at the upper left of its ⓘ Info tool. That indicates objects of interest can be identified by clicking on that tool, and isn’t offered when only Live Text has been successful. VisionKit terms those small buttons Visual Search Hints, and remains paused until the user clicks on one.

Visual Search Hints

Clicking on a Visual Search Hint then engages the LookupViewService, and changes the state from Configured to Searching. VisionKit records another
Signpost Begin: "VisionKit MAD VisualSearch Request"
and submits a request to MAD for image processing to be performed. If necessary, the kernel then brings all P cores online in preparation, and the ANE is put to work with a new model.

PegasusKit then makes the first off-device connection for assistance in visual search:
Querying https: // api-glb-aeus2a.smoot.apple.com/apple.parsec.visualsearch.v2.VisualSearch/VisualSearch with request (requestId: [UUID]) : (headers: ["grpc-message-type": "apple.parsec.visualsearch.v2.VisualSearchRequest", "Content-Type": "application/grpc+proto", "grpc-encoding": "gzip", "grpc-accept-encoding": "gzip", "X-Apple-RequestId": "[UUID]", "grpc-timeout": "10S", "User-Agent": "PegasusKit/1 (Mac16,11; macOS 15.6 24G84) visualintelligence/1"]) [private]

When the visual search task completes, information is displayed about the object of interest in a floating window. Visual Look Up is then complete, and in the absence of any further demands, the ANE may be shut down to conserve energy, and any inactive CPU cluster likewise:
ANE0: power_off_hardware: Powering off... done
PE_cpu_power_disable>turning off power to cluster 2

Key points

  • Image analysis starts shortly after the image is loaded.
  • Central components are VisionKit and mediaanalysisd, MAD.
  • In Apple silicon Macs, extensive use is made of the Apple Neural Engine throughout, for neural network modelling.
  • Most if not all is run at high QoS of 25 and in the foreground, for performance.
  • Segmentation analysis identifies areas that might contain recoverable text.
  • Segments are then analysed, using language modelling for appropriate locales and languages, and lexicons, to return words rather than fragmented characters.
  • When Live Text is ready, segments are then analysed for recognisable objects. When that’s complete, each is marked by a Visual Search Hint.
  • Clicking on a Visual Search Hint initiates a network connection to provide information about that object, displayed in a floating window.

Modern Stories of Lovis Corinth: A life in self-portraits

By: hoakley
14 July 2025 at 19:30

From the start of his career, Lovis Corinth was a great admirer of the paintings of Rembrandt, and like him he painted a series of self-portraits reflecting changes in his life. This penultimate article in the series to commemorate his death a century ago looks at a selection of those. These should cast light on whether his style changed dramatically over the course of his career, and what effects his stroke at the end of 1911 may have had on that style.

corinthselfportrait1887
Lovis Corinth (1858–1925), Self Portrait (1887), oil on canvas, 52 × 43.5 cm, Private collection. Wikimedia Commons.

His earliest self-portrait is typical of his initial detailed realist style, although he didn’t show the meticulous detail in his hair or beard, for instance, that was more popular earlier in the nineteenth century.

corinthselfportraitskeleton1896
Lovis Corinth (1858–1925), Self-portrait with Skeleton (1896), oil on canvas, 66 × 86 cm , Städtische Galerie im Lenbachhaus, Munich. Wikipedia Commons.

By his later years in Munich, the skin of his face has become more painterly, and non-flesh surfaces such as his shirt and the landscape background, as well as the skull, have obviously visible brushstrokes. A simple self-portrait was also not enough: he posed beside a skeleton, drawing the comparison between his living, fleshy face, and the fleshless skull next to it.

corinthselfportraitwithcharlotte
Lovis Corinth (1858–1925), Self portrait with Charlotte Berend-Corinth (1902), oil on canvas, 98.5 x 108.5 cm, Private collection. Wikimedia Commons.

His move from Munich, where he already had a reputation for drinking and social life, to Berlin brought him love and inspiration from his fiancée then wife Charlotte Berend, but intensified his work, social life, and drinking. His depiction of flesh has a rougher facture, and most of the passages in this work appear to have been sketched in quickly.

corinthbacchantecouple
Lovis Corinth (1858–1925), Bacchante Couple (1908), oil on canvas, 111.5 × 101.5 cm, Private collection. Wikimedia Commons.

These changes are even more evident in this wild and ribald double portrait with his wife, posing appropriately as Bacchantes. His chest and left arm now have stark dark brushstrokes giving the flesh a texture rather than form.

corinthselfportrait1911
Lovis Corinth (1858–1925), Self-portrait as a Flag-Bearer (1911), oil on canvas, 146 × 130 cm, Muzeum Narodowe w Poznaniu, Poznań, Poland. Wikimedia Commons.

Before his stroke, and the outbreak of the First World War, he posed as the standard-bearer to a mediaeval knight, his head held high with pride for Prussia. The flesh of his face now appears rough-hewn, particularly over surfaces that would normally be shown smooth and blended, such as the forehead. Bright patches on the suit of armour are shown with coarse daubs of white paint.

corinthselfportraitinharness1914
Lovis Corinth (1858–1925), Self-portrait in Armour (1914), oil on canvas, 120 × 90 cm, Hamburger Kunsthalle, Hamburg. Wikimedia Commons.

After his stroke, and just as the First World War was about to start, there has been little roughening in his facture. His face, though, looks more worried, and his previous pride appears to have been quashed.

corinthselfportraitwhitecoat
Lovis Corinth (1858–1925), Self-Portrait in a White Coat (1918), oil on canvas, 105 × 80 cm, Wallraf-Richartz-Museum & Fondation Corboud, Cologne. Wikimedia Commons.

By the end of the war, when he was 60, he had aged markedly, with receding hair and gaunt cheeks. Although his face and hand are as sketchy as before, his hair and left ear have been rendered more roughly still.

corinthselfportraitstrawhat
Lovis Corinth (1858–1925), Self-portrait in a Straw Hat (1923), cardboard, 70 x 85 cm, Kunstmuseum Bern, Switzerland. Wikimedia Commons.

When he was out in the country sun at the family’s chalet by Walchensee, he painted his clothing and the landscape extremely roughly. He looks his years, but if anything appears more healthy and relaxed than when he was confined to Berlin.

corinthlastselfportrait
Lovis Corinth (1858–1925), Last Self-Portrait (1925), oil on canvas, 80.5 × 60.5 cm, Kunsthaus Zürich, Zürich. Wikimedia Commons.

His last self-portrait shows age catching up with him, and has even rougher facture. His forehead is now a field of daubs of different colours, applied coarsely. His hair consists of gestural marks seemingly made in haste.

Although there’s a clear trend towards a rough facture over the years, I can’t see any particular watershed either following his stroke or at another time that suggests sudden change. Can you?

References

Wikipedia.

Lemoine S et al. (2008) Lovis Corinth, Musée d’Orsay & RMN. ISBN 978 2 711 85400 4. (In French.)

哈佛大学免费在线课程 2025年7月12日,星期六

By: 10year
13 July 2025 at 00:28
美国哈佛大学(Harvard)开放免费课程,任何人都可以在线学。想当年我在中国因体检不合格被拒之于大学校门之外 […]

利用 WireGuard 搭建 VPN 用于远程访问家庭局域网

24 January 2025 at 11:26
(Abstract)在 OpenWrt 路由器上安装 WireGuard 服务端可以用于远程访问家庭局域网,教程网上不少。可是有几个坑容易忽略。一是对 Allowed IPs的设置,服务端和客户端是不一样的。二是有些地方需要酌情设置 MTU。

把红米 AX5 路由器刷成了 OpenWrt 系统

21 January 2025 at 23:14
(Abstract)划重点:第一,Uboot 和 MIBIB 刷写件是可以免费获得的,不用花钱买。第二,要用 Chrome 浏览器来操作 web 界面。第三,用 openwrt.ai 这个网站自行构建最终固件,不要用网上现成的,特别是那些骗钱的。

简繁字库

By: fivestone
29 September 2024 at 18:52

偶然发现,思源字体的繁体字库文件,无法显示一些简体字。而思源的简体文件,似乎可以显示全部的繁体字?于是把常用的字体文件拆开,看看分别都能涵盖多少简繁汉字。

直接说结论:

  • 简体字的字体,如「思源简体」,包含了中国大陆 GB18030-2000 编码标准的全部汉字,是能够同时显示几乎所有的常用繁体字的,因为这个 GB18030 标准,也涵盖了所有的早期台湾 big5 编码的繁体字;
  • 反之,通常专门的「繁體 / 正體」字体,如「思源繁體」,很多简体字是不能显示的。因为相关的台湾汉字编码 CNS11643-1986(第 1 & 2 版面),只能覆盖 70% 的常用简体字。

首先,在最常用的几个字体中,

  • 微软雅黑 和 思源简体 基本一致
  • 思源繁体 和 思源香港 基本一致

两两之间的差别,只是少许生僻字、异体字、以及历史遗留的制作中文编码时的重复或疏忽。具体差别的内容,放在文末了。所以,这里主要对比「思源简体」和「思源繁体」,就可以了。

在思源字体 CJK 的说明文件里,写出了不同国家字体文件的字符数量,和需要支持的标准。可以看到,简中字体文件打包的字符,比繁中多了一万多个(这里的 Glyphs 不仅是中文,也包括西文、特殊符号、甚至一些 emoji)。

简中字体需要支持的标准,主要是

  • 大陆 2000 年颁布的《GB18030 标准简体中文字符集》,包含 27,533 个汉字。当然,是否能做到 100% 符合,思源的设计方也表示,编码标准比较复杂,不好说……
  • 2013 年颁布的《通用规范汉字表》,包含 8105 个汉字。其中有 199 个,不在 GB18030 的范围内。

繁体字体需要支持的标准,主要包括

  • 台湾 1986 年颁布的《CNS11643 通用汉字标准交换码》,包括 13051 个汉字,和早年的「big5 大五码」相同。最初只有 1 2 两个字面(Panel),后来逐渐扩展,现在 1~7 字面都已经被 ISO 纳入 Unicode 体系,但思源繁体里,只支持 1 2 字面。
  • HKSCS 香港增补字符集》,是香港从 1995 年开始,对台湾 big5 编码的补充,到 2016 年,收录汉字 5033 个。

从台湾的官网上,可以下载到目前最新的 CNS11643 – Unicode 之间的对应情况;大陆这边没有找到类似的官网资料,搜到的几个 GB18030 – Unicode 编码表,都是 PDF 格式(掀桌……)。但可以在 python 里把字符 encode,得到相应的编码,也可以变相确认,某个字符是否在某个编码里。

>>> print('劍'.encode('gb18030'))
b'\x84\xa6'
>>> print('劍'.encode('gb2312'))
报错
>>> print('劍'.encode('big5'))
b'\xbcC'
>>> print('劍'.encode('raw_unicode_escape'))
b'\\u528d'

实测结果,所有的 13053 个繁体 big5 汉字,也就是台湾最初规定的,最常用的繁体字,都包含在大陆的 GB18030 编码,也包含在思源简体的字体文件里。包含在思源繁体,而不在思源简体中的汉字,只有 1711 个(详见文末,——如果你觉得其中哪个字不够生僻,那么通常是历史遗留下来的编码重复、或者异体字。譬如,现在 Unicode 里,至少有 10 个各种形态的「龟」字了。

  • 简体「龟」 – U+9F9F、U+2EF2、U+2EF3
  • 繁体「龜」 – U+9F9C、U+2EF1、U+2FD4、U+F907、U+F908、U+FACE
  • 日文「亀」 – U+4E80
  • 还有 emoji 的 🐢 U+1F422 、埃及象形文的 𓆉 U+13189

相对的,包含在思源简体,而不在思源繁体中的汉字,有 11856 个之多。这其中,包括了非常多的常用简体字。以大陆最常用的 6763 个汉字(也就是 1980 年大陆发布的 GB2132 汉字编码集)为例。在这些汉字当中:

  • 包含在 1986 年台湾 big5 编码中的汉字:4383 个
  • 没有被 big5 收录,但是包含在「思源繁体」中的:482 个
  • 「思源繁体」中也不存在的:1898 个

具体字符清单见文末。可以看到,思源繁体字库中,不能显示的常用简体字,接近 30%,尤其是部首本身就有简繁体之分的,如:讠纟艹饣钅车马鱼鸟页……使用了这些简体字部首的字,有很大概率,在繁体字库里无法显示。

当然,这样的差异,不一定代表着台湾那边的汉字编码工作不力、或者对简体字的傲慢。无论是 GB18030 还是 CNS11643,都早已有了更新更全面的版本,在 CNS11643 2004 年的版本中,包含了 GB2312 的全部 6763 个汉字,而整个思源简体的三万多字符,也只有 500 多个不在其中。所以,还是一些神秘的历史差异,导致——

  • 简体字体支持大陆 2000 年的标准,而
  • 繁体字体只支持台湾 1986 年的标准

但目前我们在网上浏览,或者文字排版时,如果用统一的字体,且需要考虑简繁体的兼容性的话,还是使用满足 GB18030 的 “简体” 字库吧。


思源字体(黑体宋体)在 github 上的原始下载版本,分成了

  • Variable OTCs – 五个地区的合集(中国、台湾、香港、日本、韩国)
  • Language-specific Variable Fonts – 不同语言的合集
  • Region-specific Subset Variable Fonts – 适配不同地区的版本

本文之前分析的,都是 Region-specific 版本之间的区别。而更大一级的 Language-specific 的中文字体,无论是简体繁体,都收录了四万多个字符,大约是大陆和台湾编码标准的合集,甚至更多,推荐大家去使用这个。但 Github 的界面流程,对于非专业人士来说,还是过于复杂了。而 Google Fonts 上提供的下载版本,就只有 Region-specific 的版本。


附——

同时出现在 GB2312,和台湾 big5 编码中的汉字:4383 个

一丁七万丈三上下丌不与丐丑且丕世丘丙丞丫中丰串丸丹主乃久乇么之乍乎乏乒乓乖乘乙乜九乞也乩乳乾了予事二亍于云互亓五井些亟亡亢交亥亦亨享京亭亮亳人什仁仂仃仄仆仇仉今介仍仔仕他仗付仙仝仞仟仡代令以仨仰仲仳仵件价任份仿企伉伊伍伎伏伐休优伙伢伯估伴伶伸伺似伽佃但位低住佐佑体何佗佘余佚佛作佝佞佟你佣佤佧佩佬佯佰佳佴佶佻佼佾使侃侄侈侉例侍侏侑侔侗供依侮侯侵便促俄俅俊俎俏俐俑俗俘俚俜保俞俟信修俯俱俳俸俺俾倌倍倏倒倔倘候倚倜借倡倥倦倨倩倪倬倭值偃假偈偌偎偏偕做停健偶偷傀傅傍傣催傲傺傻像僖僚僦僧僬僭僮僳僵僻儆儇儋儒儡儿兀允元兄充兆先光克免兔兕党兜兢入全八公六兮共兵其具典兼冀冉再冒冕冗冠冢冤冥冬冰冱冶冷冼冽凄准凋凌凝几凡凰凳凵凶凸凹出函刀刁刃分切刈刊刎刑划刖列初判刨利刮到刳制刷券刺刻剁剃削剌前剔剖剜剞剡剩剪副割剽剿劁劂劈劓力功加劣助努劫劬劭劾勃勇勉勒勖勘募勤勰勺勾勿包匆匈匍匏匐匕化北匙匚匝匠匡匣匪匹匾匿十千卅升午卉半卑卒卓南博卜卞占卡卣卦卮卯印危即卵卷卸卿厂厄厘厚厝原厥去又叉及友反叔取受叛叟口古句另叨叩只叫召叭叮可台叱史右叵司叻叼吁吃各吆合吉吊同名后吏吐向吒君吝吞吟吠否吧吨吩含听吭吮吱吵吸吹吻吼吾呀呃呆呈告呔呢呤呦周呱呲味呵呶呷呸呻呼命咀咂咄咆咋和咎咐咒咕咖咚咦咧咨咩咪咫咬咭咯咱咳咸咻咽咿哀品哂哄哆哇哈哉哎哏哞哥哦哧哨哩哪哭哮哲哳哺哼哽哿唁唆唇唉唏唐唑唔唧唪唬售唯唰唱唳唷唼唾啁啃啄商啊啐啕啖啜啡啤啥啦啪啵啶啷啻啼啾喀喁喂喃善喇喈喉喊喋喏喑喔喘喙喜喝喟喧喱喳喵喻嗄嗅嗉嗌嗍嗑嗒嗓嗔嗖嗜嗝嗟嗡嗣嗤嗥嗦嗨嗯嗲嗷嗽嗾嘀嘁嘈嘉嘌嘎嘏嘛嘟嘧嘬嘲嘴嘶嘹嘻嘿噌噎噗噘噙噢噤器噩噪噫噬噱噶嚅嚆嚎嚏嚓嚷嚼囊囔囗囚四囝回囟因囡囤囫困囹固囿圃圄圈圉圊圜土圣在圩圪圬圭圮圯地圳圻圾址均坊坌坍坎坏坐坑坡坤坦坨坩坪坫坭坯坳坶坷坻坼垂垃型垌垓垛垠垢垣垤垮垸埂埃埋城埏埒埔埕域埠埤埭埴埸培基埽堀堂堆堇堋堍堙堞堠堡堤堪堰堵塌塍塑塔塘塞塥填塾墀墁境墅墉墓增墟墨墩墼壁壅壑壕壤士壬壹复夏夔夕外夙多夜夤夥大天太夫夭央夯失夷夸夼奄奇奈奉奎奏契奔奕套奘奚奠奢女奴奶奸她好妁如妃妄妊妍妒妓妖妗妙妞妣妤妥妨妮妯妲妹妻妾姆姊始姐姑姒姓委姘姚姜姝姣姥姨姬姻姿威娃娉娌娑娓娘娜娟娠娣娥娩娶娼婀婆婉婊婕婚婢婧婪婷婺婿媒媚媛媲媳媵媸媾嫁嫂嫉嫌嫖嫘嫜嫠嫡嫣嫦嫩嫫嬉嬖嬗嬲嬴孀子孑孓孔孕字存孚孛孜孝孟孢季孤孥孩孬孰孱孳孵孺孽宁它宄宅宇守安宋完宏宓宕宗官宙定宛宜客宣室宥宦宰害宴宵家宸容宿寂寄寅密寇富寐寒寓寞察寡寤寥寨寮寰寸寺封射尉尊小少尕尖尚尢尤尥尬就尸尹尺尻尼尾尿局屁居屈屋屎屏屐屑展屙屠屣履屮屯山屹屺岈岌岍岐岑岔岢岣岩岫岬岭岱岳岵岷岸峋峒峙峨峪峭峰峻崆崇崎崔崖崛崞崤崦崧崩崮崴崽嵇嵊嵋嵌嵩嵫嵬嵯嶂嶙嶝嶷巍川州巡巢工左巧巨巫差己已巳巴巷巽巾市布帆希帑帔帕帖帘帙帚帛帝席帷常帽幄幅幌幔幕幛幡幢干平年并幸幻幼幽庀庄庇床庋序底庖店庚府庠庥度座庭庳庵庶康庸庹庾廉廊廑廒廓廖廛廨延廷建廾廿弁异弄弈弊弋式弓引弗弘弛弟弦弧弩弭弱弼彀彖彗彘彝形彤彩彪彬彭彰影彳彷役彼往征徂待徇很徉徊律後徐徒得徘徙徜御徨循徭微徵德徼徽心必忉忌忍忏忐忑忒忖志忘忙忝忠忡忤忪快忭忮忱念忸忻忽忿怀怊怍怎怏怒怔怕怖怙怛怜思怠怡急怦性怨怩怪怫怯怵恁恂恃恍恐恕恙恚恝恢恣恤恧恨恩恪恫恬恭息恰恿悃悄悉悌悍悒悔悖悚悛悝悟悠患您悱悲悴悸悻悼情惆惊惋惑惕惘惚惜惝惟惠惦惰想惴惶惹惺愀愁愆愈愉愍愎意愕愚感愣愧愫愿慈慊慌慎慕慝慢慧慨慰慵慷憋憎憔憝憧憨憩憬憾懂懈懊懋懦懵懿戈戊戌戍戎成我戒戕或戚戛戟戡戢戤戥截戮戳戴戽戾房所扁扃扇扈扉手才扎扑扒打扔托扛扣扦扭扮扯扰扳扶批扼找承技抄抉把抑抒抓投抖抗折抨披抬抱抵抹抻押抽抿拂拄拆拇拈拉拊拌拍拎拐拒拓拔拖拗拘拙拚招拜括拭拮拯拱拳拴拶拷拼拽拾拿持挂指挈按挎挑挖挨挪挫振挲挹挺挽捂捃捅捆捉捋捌捍捎捏捐捕捧捩捭据捱捶捷捺捻掀掂掇授掉掊掌掎掏掐排掖掘掠探掣接控推掩措掬掭掮掰掾揄揆揉揍揎描提插揖揠握揣揩揪揭揲援揶搋搌搏搐搓搔搛搜搞搠搡搦搪搬搭搴搽搿摁摒摔摘摞摧摩摭摸摹摺撂撅撇撒撕撖撙撞撤撩撬播撮撰撼擂擅操擎擐擒擗擘擢擤擦攀攉攘攥攫攮支收攸改攻放政故效敉敏救敕敖教敝敞敢散敦敬敲整敷文斌斐斑斗料斛斜斟斡斤斥斧斫斯新方於施旁旃旄旅旆旋旌旎族旒旖旗既日旦旨早旬旭旮旯旰旱旺昀昂昃昆昊昌明昏易昔昕昝星映春昧昨昭是昱昴昵昶晁晃晌晏晒晚晟晡晤晦晨普景晰晴晶晷智晾暄暇暌暑暖暗暝暨暮暴暹暾曙曛曜曝曦曩曰曲曳更曷曹曼曾替最月有朊朋服朐朔朕朗望朝期朦木未末本札朱朴朵机朽杆杈杉杌李杏材村杓杖杜杞束杠杪杭杯杰杲杳杵杷杼松板极构枇枉枋析枕林枘枚果枝枯枰枳枵架枷枸柁柃柄柏某柑柒染柔柘柙柚柜柝柞柢查柩柬柯柰柱柳柴柿栓栖栗栝校栩株栲栳核根格栽桀桁桂桃桄桅框案桉桌桎桐桑桓桔桫桴桶桷梁梃梅梆梏梓梗梢梧梨梭梯械梳梵棉棋棍棒棕棘棚棠棣森棰棱棵棹棺棼椅椋植椎椐椒椰椴椹椽椿楂楔楗楚楝楞楠楣楦楫楮楱楷楸楹概榆榍榔榕榛榜榧榨榫榭榱榴榷榻槁槊槌槎槐槔槭槲槽槿樊樗樘樟模樨樵樽樾橄橇橐橘橙橛橡檀檄檎檐檑檗檠檬欠次欣欲欷欹欺款歃歆歇歉歌歙止正此步武歧歪歹死殂殃殄殆殉殊殍殖殛殪殳段殷殿毅毋母每毒毓比毖毗毛毫毯毳毹毽氅氆氍氏氐民氓气氕氖氘氙氚氛氟氡氤氦氧氨氪氮氯氰水永汀汁求汆汊汐汔汕汗汛汜汝汞江池污汨汩汪汰汲汴汶汽汾沁沂沃沅沆沈沉沌沏沐沓沔沙沛沫沭沮沱河沸油治沼沽沾沿泄泅泉泊泌泐泓泔法泖泗泛泞泠泡波泣泥注泫泮泯泰泱泳泵洁洄洇洋洌洎洒洗洙洚洛洞津洧洪洫洮洱洲洳洵洹活洼洽派流浙浚浞浠浣浦浩浪浮浯浴海浸浼涂涅消涉涌涎涑涓涔涕涪涫涮涯液涵涸涿淀淄淅淆淇淋淌淑淖淘淙淝淞淠淡淤淦淫淬淮深淳混淹添淼清渚渝渠渡渣渤渥渫渭港渲渴游渺湃湄湍湎湓湔湖湘湛湟湫湮溉溏源溘溜溟溢溥溧溪溯溱溲溴溶溷溺溽滁滂滇滋滏滑滓滔滕滴滹漂漆漉漏漓演漕漠漩漪漫漭漯漱漳漶漾潘潞潢潦潭潮潲潸潺潼澄澈澉澌澍澎澡澧澳澶澹激濂濉濞濠濡濮濯瀑瀚瀛瀣瀵瀹灌灞火灰灶灸灼炅炊炎炒炔炕炖炙炫炬炭炮炯炱炳炷炸烈烊烘烙烤烯烷烹烽焉焊焐焓焙焚焦焯焰焱然煌煎煜煞煤煦照煨煮煲煸煽熄熊熏熔熙熟熠熨熬熳熵熹燃燎燔燕燠燥燧燮燹爆爝爨爪爬爰爵父爸爹爻爽爿片版牌牒牖牙牛牝牟牡牢牧物牮牯牲特牾牿犀犁犄犋犍犒犬犯犰犴狁狂狃狄狎狐狒狗狙狠狡狨狩狳狴狷狸狺狻狼猁猊猓猖猗猛猜猝猞猢猥猩猱猴猷猾猿獍獐獒獗獠獬獯獾玄率玉王玎玖玟玢玩玫玲玳玷玻珀珂珈珊珍珙珞珠珥珧珩班球琅理琉琊琚琛琢琥琦琨琪琬琮琰琳琴琵琶瑁瑕瑗瑙瑚瑛瑜瑞瑟瑭瑰瑾璀璁璃璇璋璐璜璞璧璨璩璺瓜瓞瓠瓢瓣瓤瓦瓮瓴瓶瓷瓿甄甍甏甑甓甘甚甜生甥用甩甫甬甭甯田由甲申男甸町甾畀畈畋界畎畏畔留畚畛畜略畦番畸畹畿疆疋疏疑疔疙疚疝疣疤疥疫疰疲疳疵疸疹疼疽疾痂痄病症痊痍痒痔痕痘痛痞痢痣痤痦痧痰痱痴痹痼痿瘀瘁瘃瘊瘌瘐瘕瘙瘛瘟瘠瘢瘤瘥瘦瘩瘭瘰瘳瘴瘵瘸瘼癃癌癖癜癸登白百皂的皆皇皈皋皎皓皖皙皤皮皴皿盂盅盆盈益盍盎盒盔盛盟盥目盯盱盲直相盹盼盾省眄眇眈眉看眙眚真眠眢眨眩眭眯眵眶眷眸眺眼睇睚睛睡睢督睥睦睨睫睬睹睽睾睿瞀瞄瞅瞌瞍瞎瞑瞟瞠瞢瞥瞧瞪瞬瞰瞳瞵瞻瞽瞿矍矗矛矜矢矣知矧矩矬短矮石矸矽砂砉砌砍砑砒研砝砟砣砥砦砧砩砬砭砰破砷砸硅硌硎硐硒硝硪硫硬硭确硼碇碉碌碎碑碓碗碘碚碟碡碣碥碧碰碲碳碴碾磁磅磉磊磋磐磔磕磨磬磲磴磷磺礁礅礓礞礤示社祀祁祆祈祉祓祖祗祚祛祜祝神祟祠祥祧票祭祺禁禊福禚禧禳禹禺离禽禾秀私秉秋种科秒秕秘租秣秤秦秧秩秫秭秸移稀稂稃程稍稔稗稚稞稠稷稹稻稼稽稿穆穗穰穴究穸穹空穿窀突窄窆窈窒窕窖窗窘窟窠窨窬窳窿立站竟章竣童竦竭端竹竺竽竿笄笆笈笊笏笑笙笛笞笠笤笥符笨笪笫第笮笱笳笸筅筇等筋筌筏筐筑筒答策筘筠筮筱筲筵筷箅箍箐箔箕算箜箝管箬箭箱箴箸篁篆篇篌篙篚篝篡篥篦篪篱篷篾簇簋簌簏簟簦簧簪簸簿籀籍米籽粉粑粒粕粗粘粞粟粢粥粱粲粳粹粼粽精糅糈糊糌糕糖糗糙糜糟糠糨糯糸系紊素索紫累絮綦綮縻繁繇纂纛缶缸缺罄罅罐网罔罕罘罟罡罨罩罪置署罹罾羊羌美羔羚羝羞羡群羧羯羰羲羸羹羼羽羿翁翅翊翌翎翔翕翟翠翡翥翦翩翮翰翱翳翻翼耀老考耄者耆耋而耍耐耒耔耕耖耗耘耙耜耦耨耩耪耳耵耶耷耽耿聃聆聊聒聘聚聱聿肄肆肇肉肋肌肓肖肘肚肛肜肝股肢肥肩肪肫肭肮肯肱育肴肺胂胃胄背胍胎胖胗胙胚胛胜胝胞胡胤胥胭胯胰胱胲胳胴胸胺胼能脂脆脊脖脘脞脬脯脾腆腊腋腌腐腑腓腔腕腠腥腧腩腮腰腱腴腹腺腿膀膂膈膊膏膘膛膜膝膣膦膨膳膺膻臀臂臃臆臊臌臣臧自臬臭至致臻臼臾舀舁舂舄舅舌舍舐舒舔舛舜舞舟舡舢舨航舫般舯舳舴舵舶舷舸船艄艇艉艋艏艘艚艟艨艮良色艴艽艾艿芄芊芋芍芎芏芑芒芘芙芝芟芡芤芥芨芩芫芬芭芮芯芰花芳芴芷芸芹芽芾苑苒苓苔苕苗苛苜苞苟苠苡苣苤若苦苫苯英苴苹苻茁茂范茄茅茆茇茈茉茌茗茛茜茧茨茫茬茭茯茱茳茴茵茶茸茹茺茼荀荃荇草荏荐荑荒荔荷荸荻荼荽莆莉莎莒莓莘莛莞莠莨莩莪莫莰莽菀菁菅菇菊菌菏菔菖菘菜菝菟菠菡菥菩菪菰菱菲菸菹菽萁萃萄萆萋萌萍萎萏萑萱萸萼落葆葑著葙葚葛葡董葩葫葬葭葳葵葶葸葺蒂蒎蒗蒙蒜蒡蒯蒲蒴蒸蒹蒺蒿蓁蓄蓉蓊蓍蓐蓑蓓蓖蓬蓰蓼蓿蔌蔑蔓蔗蔚蔟蔡蔫蔬蔻蔽蕃蕈蕉蕊蕖蕙蕞蕤蕨蕹蕺蕻蕾薄薅薇薏薛薜薤薨薪薯薰薷薹藉藏藐藕藜藤藩藻藿蘅蘑蘧蘩蘸蘼虍虎虐虔虞虢虫虮虱虹虺虻虼蚊蚋蚌蚍蚓蚕蚜蚝蚣蚤蚧蚨蚩蚪蚯蚰蚱蚴蚵蚶蚺蛀蛄蛆蛇蛉蛋蛐蛑蛔蛘蛙蛛蛞蛟蛤蛩蛭蛸蛹蛾蜀蜂蜃蜇蜈蜉蜊蜍蜒蜓蜘蜚蜜蜞蜡蜢蜣蜥蜩蜮蜱蜴蜷蜻蜾蜿蝌蝎蝓蝗蝙蝠蝣蝤蝥蝮蝴蝶蝻螂螃螅螈融螓螗螟螫螬螭螯螳螵螺螽蟀蟆蟊蟋蟑蟒蟓蟛蟠蟥蟪蟹蟾蠃蠊蠓蠕蠖蠛蠡蠢蠲蠹蠼血衄行衍街衙衡衢衣表衩衫衰衲衷衽衾衿袁袂袈袋袍袒袖袢袤被袱袷袼裁裂裉裎裒裔裕裘裙裟裨裰裱裳裴裸裹裼裾褂褊褐褒褓褙褚褡褥褪褫褰褶襁襄襞襟襦襻西要覃覆角觖觚觜解觥触觫觳言訇訾詈詹誓謇謦警譬谷豁豆豇豉豌豕豚象豢豪豫豳豸豹豺貂貅貉貊貌貔貘赤赦赧赫赭走赳赴赶起趁趄超越趑趔趟趣足趴趵趺趼趾趿跆跋跌跎跏跑跖跗跚跛距跟跣跤跨跪跫跬路跳跺跽踅踉踊踏踔踝踞踟踢踣踩踮踱踵踹踽蹀蹁蹂蹄蹇蹈蹉蹊蹋蹙蹦蹩蹬蹭蹯蹲蹴蹶蹼躁躅躇躐躔躞身躬躲躺辛辜辟辣辨辰辱迂迄迅迎近迓返迕迢迤迥迦迨迪迫迭迮述迷迸追退送适逃逄逅逆逋逍透逐逑途逖逗通逛逝逞速造逡逢逭逮逯逵逶逸逼逾遁遂遄遇遍遏遐遑遒道遘遛遢遣遨遭遮遴遵遽避邀邂邃邈邋邑邕邗邙邛邡邢那邦邪邯邰邱邳邴邵邶邸邾郁郅郇郊郎郗郛郜郝郡郢部郫郭郯郴都郾鄂鄄鄙鄞鄢鄣鄯鄱鄹酃酆酉酊酋酌配酎酏酐酒酗酚酡酢酣酤酥酩酪酬酮酯酲酴酵酷酸酹醅醇醉醋醍醐醑醒醚醛醢醣醪醭醮醯醴醵醺采釉里重野量金釜銎鋈鍪鎏鏊鏖鑫阜阡阢阪阮阱防阻阼阽阿陀陂附陋陌降限陔陛陟陡院除陪陬陲陴陵陶陷隅隆隈隋隍隔隗隘隙障隧隰隳隹隼雀雁雄雅集雇雉雌雍雎雒雕雨雩雪雯零雷雹需霄霆震霈霉霍霎霏霓霖霜霞霪霰露霸霹霾青靖靛非靠靡面革靳靴靶靼鞅鞋鞍鞔鞘鞠鞣鞫鞭韭音韶食飧餐餮饔饕首馗馘香馥馨骨骰骱骷骸骼髀髁髂髑髓高髟髡髦髫髭髯髹髻鬃鬈鬟鬣鬯鬲鬻鬼魁魂魃魄魅魈魍魏魑魔鹿麂麇麈麋麒麓麝麟麴麻麾黍黎黏黑黔默黛黜黝黟黠黥黧黯黹黻黼鼎鼐鼓鼙鼠鼢鼬鼯鼷鼻鼽鼾龠

出现在 GB2312,没有被 big5 收录,但是包含在「思源繁体」中的:482 个

业东丢两丨个丬丶丽丿义争亘亚亠亻亿从仪仫众会伲侨倮偬傈兑兖兴兹冂冈冖农冫冲决况凇凉减凑凛凤凭凼刂删劐务动勐勹医华卟卤卧卩却厢厦厨厩厮厶叁参双发变叙叠叶号吓吖吡吣启吲吴呋咏咔咣咤咴哌响哐哚唣唿啉喹嗪嗬嗵嘞嘣嘭噍噔噻噼嚯团园囱国坂块坛坟垡垧垴埝埯塄塬墒墙墚声壳夂处备够头奥姹媪学宀宝实宪寿尔尜屉届属岙岚岜峁峥崾嵛嵴巛帮幂幞幺广庆庙廴弥强彐彡彻忄总恋恒悦惧惨惩愠憷戬户扌护担拟拥揞揸携撑擀攴攵敫斋无晋晓晗条栀样栾桊桕桥梦椁榀榘橥橱檫殁毁毡毪氲氵氽汉汹沟沪沲泪济浜涤渊温溆溻滚滢滨滩漤潜潴灬灯灵灾灿炉点炻炼炽烀烟煅煊煳煺熘牦犏犟犭狍猪猫猬献猸猹玺珉珏珐琼瑶甙电画畲疃疒疱疴痃痈癀癍癔癯盖眦着睃矾砘砜砹砼硇碍碱碹礴礻礼祢禀秆稆税窃窑笋笔筢筻箢篼籴类籼粜粮糇糍纟纤纬纺织经统缆罱耠耥耱耻联肀肟肷肼肽胆胩胬胶脉脎脒脔脚脱脲腈腙腚腭腼腽膪臁舭舾艹艺芦芪苄苊苏苘苷茚荣荦药莅莜莹萘萜萤萦葜葱蒈蒽蓥蔸藁蘖虬虾蜕蝰蝽螋蟮衅衤补衮袄袜装见视讠设询贝跃踪踺軎车轧轮输辶边达迁运迹递邮邻郄酞酰酶醌銮鐾钅钟钢铁铃铜银锭镇长门间阝阳际险随隶隽鞲鞴韦韵页风飞饣马骏骶骺鬏鱼鸟麦麽黄黢黾鼗鼹齄齐齿龙龟

出现在 GB2312,但「思源繁体」中不存在的常用简体字:1898 个

专丛丝严丧临为举乌乐乔习乡书买乱亏产亩亲亵仅仑仓们伛伞伟传伤伥伦伧伪伫佥侠侣侥侦侧侩侪侬俣俦俨俩俪俭债倾偻偾偿傥傧储傩兰关养兽冁内册写军冯冻净凫凯击凿刍刘则刚创别刭刹刽刿剀剂剐剑剥剧劝办劢励劲劳势勋匀匦匮区协单卖卢卫卺厅历厉压厌厍厕厣县叹叽吕吗呐呒呓呕呖呗员呙呛呜咙咛咝哑哒哓哔哕哗哙哜哝哟唛唠唢唤啧啬啭啮啸喷喽喾嗫嗳嘘嘤嘱噜嚣围囵图圆圹场坚坜坝坞坠垄垅垆垒垦垩垫垭垲埘埙埚堑堕壮壶夹夺奁奂奋奖妆妇妈妩妪妫姗娄娅娆娇娈娱娲娴婴婵婶嫒嫔嫱嬷孙孪宠审宫宽宾寝对寻导将尘尝尧尴尽层屡屦屿岁岂岖岗岘岛岽岿峄峡峤峦崂崃崭嵘嵝巅巩巯币帅师帏帐帜带帧帱帻帼庐庑库应庞废廪开弃弑张弪弯弹归当录彦径徕忆忧忾态怂怃怄怅怆怼怿恳恶恸恹恺恻恼恽悫悬悭悯惫惬惭惮惯愤愦慑懑懒懔戆戋戏戗战执扩扪扫扬抚抛抟抠抡抢报拢拣拦拧拨择挚挛挝挞挟挠挡挢挣挤挥捞损捡换捣掳掴掷掸掺掼揽揿搀搁搂搅摄摅摆摇摈摊撄撵撷撸撺擞攒敌敛数斓斩断旧时旷昙昼显晔晕晖暂暧术杀杂权来杨杩枞枢枣枥枧枨枪枫枭柠柽栅标栈栉栊栋栌栎栏树桠桡桢档桤桦桧桨桩检棂椟椠椤椭楼榄榇榈榉槛槟槠横樯樱橹橼檩欢欤欧歼殇残殒殓殚殡殴毂毕毙毵氇氢氩汇汤没沣沤沥沦沧沩泶泷泸泺泻泼泽泾浃浅浆浇浈浊测浍浏浑浒浓浔涛涝涞涟涠涡涣润涧涨涩渌渍渎渐渑渔渖渗湾湿溃溅滗滞滟滠满滤滥滦潆潇潋潍澜濑濒灏灭炀炜炝烁烂烃烛烦烧烨烩烫烬热焕焖焘爱爷牍牵牺犊状犷犸犹狈狞独狭狮狯狰狱狲猃猎猕猡獭玑玛玮环现珑珲琏琐瑷璎瓒瓯畅畴疖疗疟疠疡疬疮疯痉痖痨痪痫瘅瘗瘘瘪瘫瘾瘿癞癣癫皑皱皲盏盐监盗盘眍睁睐睑瞒瞩矫矶矿砀码砖砗砚砺砻砾础硕硖硗硷碛碜磙祯祷祸禄禅秃积称秽稣稳穑穷窍窜窝窥窦窭竖竞笃笕笺笼笾筚筛筝筹签简箦箧箨箩箪箫篑篓篮簖籁粝粤粪糁紧絷纠纡红纣纥约级纨纩纪纫纭纯纰纱纲纳纵纶纷纸纹纽纾线绀绁绂练组绅细终绉绊绋绌绍绎绐绑绒结绔绕绗绘给绚绛络绝绞绠绡绢绣绥绦继绨绩绪绫续绮绯绰绱绲绳维绵绶绷绸绺绻综绽绾绿缀缁缂缃缄缅缇缈缉缋缌缍缎缏缑缒缓缔缕编缗缘缙缚缛缜缝缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂罗罚罢罴羁羟翘耢耧耸聂聋职聍聩聪肃肠肤肾肿胀胁胧胨胪胫脍脏脐脑脓脶脸腻腾膑舆舣舰舱舻艰艳节芈芗芜苁苇苈苋苌苍苎茎茏茑茔茕荆荚荛荜荞荟荠荡荤荥荧荨荩荪荫荬荭荮莱莲莳莴莶获莸莺莼萝营萧萨蒇蒉蒋蒌蓝蓟蓠蓣蓦蔷蔹蔺蔼蕲蕴薮藓虏虑虚虽虿蚀蚁蚂蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜗蝇蝈蝉蝼蝾螨衔衬袅袭裆裢裣裤裥褛褴观规觅觇览觉觊觋觌觎觏觐觑觞觯誉誊计订讣认讥讦讧讨让讪讫训议讯记讲讳讴讵讶讷许讹论讼讽访诀证诂诃评诅识诈诉诊诋诌词诎诏译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡诣诤该详诧诨诩诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶贞负贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赓赔赕赖赘赙赚赛赜赝赞赠赡赢赣赵趋趱趸跄跞践跷跸跹跻踌踬踯蹑蹒蹰蹿躏躜躯轨轩轫转轭软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辁辂较辄辅辆辇辈辉辊辋辍辎辏辐辑辔辕辖辗辘辙辚辞辩辫辽过迈还这进远违连迟迩迳选逊逦逻遗遥邓邝邬邹邺郏郐郑郓郦郧郸酝酱酽酾酿释鉴錾钆钇针钉钊钋钌钍钎钏钐钒钓钔钕钗钙钚钛钜钝钞钠钡钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铂铄铅铆铈铉铊铋铌铍铎铐铑铒铕铖铗铘铙铛铝铞铟铠铡铢铣铤铥铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵铷铸铹铺铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锝锞锟锡锢锣锤锥锦锨锩锪锫锬键锯锰锱锲锴锵锶锷锸锹锺锻锼锾锿镀镁镂镄镅镆镉镊镌镍镎镏镐镑镒镓镔镖镗镘镙镛镜镝镞镟镡镢镣镤镥镦镧镨镩镪镫镬镭镯镰镱镲镳镶闩闪闫闭问闯闰闱闲闳闵闶闷闸闹闺闻闼闽闾阀阁阂阃阄阅阆阈阉阊阋阌阍阎阏阐阑阒阔阕阖阗阙阚队阴阵阶陆陇陈陉陕陧陨隐难雏雠雳雾霁霭靓静靥鞑鞒鞯韧韩韪韫韬顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颌颍颏颐频颓颔颖颗题颚颛颜额颞颟颠颡颢颤颥颦颧飑飒飓飕飘飙飚飨餍饥饧饨饩饪饫饬饭饮饯饰饱饲饴饵饶饷饺饼饽饿馀馁馄馅馆馇馈馊馋馍馏馐馑馒馓馔馕驭驮驯驰驱驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骄骅骆骇骈骊骋验骐骑骒骓骖骗骘骚骛骜骝骞骟骠骡骢骣骤骥骧髅髋髌鬓魇魉鱿鲁鲂鲅鲆鲇鲈鲋鲍鲎鲐鲑鲒鲔鲕鲚鲛鲜鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲸鲺鲻鲼鲽鳃鳄鳅鳆鳇鳊鳋鳌鳍鳎鳏鳐鳓鳔鳕鳖鳗鳘鳙鳜鳝鳞鳟鳢鸠鸡鸢鸣鸥鸦鸨鸩鸪鸫鸬鸭鸯鸱鸲鸳鸵鸶鸷鸸鸹鸺鸽鸾鸿鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹎鹏鹑鹕鹗鹘鹚鹛鹜鹞鹣鹤鹦鹧鹨鹩鹪鹫鹬鹭鹰鹱鹳鹾麸黉黩黪鼋鼍齑龀龃龄龅龆龇龈龉龊龋龌龚龛

思源繁體 比 思源简体 多的中文字符,1711 个

龜懶濫兩閭列烈例杻𠀡𠀾𠁆𠁎𠁨𠂆𠂊𠂔𠃊𠃋𠃍𠃑𠃮𠄌𠄎𠄘𠆤𠆩𠆫𠇁𠇔𠇲𠈄𠈌𠈔𠈹𠉛𠉴𠉵𠊙𠊞𠊠𠊷𠊿𠋀𠋥𠌊𠌥𠍁𠍅𠍆𠍇𠍾𠍿𠎀𠎠𠎧𠎵𠏉𠏋𠏵𠏼𠐓𠐔𠐟𠑥𠒇𠒎𠒑𠒒𠒣𠓗𠓼𠓾𠕇𠖎𠖥𠖳𠗃𠗊𠗐𠗕𠗟𠗠𠗫𠘑𠘕𠘙𠘚𠘰𠙖𠜎𠜱𠝹𠠬𠡳𠣕𠤖𠤣𠥔𠥹𠧧𠨑𠩐𠩯𠪊𠪴𠫂𠫍𠬍𠮏𠮟𠮨𠮩𠮿𠯆𠯋𠯢𠯫𠯻𠯿𠰋𠰍𠰠𠰴𠰺𠰻𠱁𠱂𠱃𠱓𠱥𠱷𠱸𠱼𠲍𠲖𠲜𠲵𠲸𠳏𠳓𠳔𠳕𠳖𠳝𠳭𠳿𠴕𠴨𠴱𠴲𠵆𠵇𠵈𠵉𠵌𠵍𠵎𠵯𠵱𠵴𠵼𠵾𠵿𠶖𠶜𠶧𠶲𠷈𠸄𠸉𠸊𠸍𠸎𠸏𠸐𠸑𠸖𠸝𠹌𠹭𠹳𠹵𠹶𠹷𠹸𠹹𠹺𠹻𠺌𠺖𠺘𠺝𠺢𠺪𠺫𠺬𠺶𠻗𠻘𠻝𠻸𠻹𠻺𠻻𠼝𠼦𠼭𠼮𠼰𠼱𠼻𠽌𠽤𠾍𠾐𠾭𠾴𠾵𠾶𠾼𠿟𠿪𠿫𠿬𠿭𡀔𡀝𡀞𡁏𡁜𡁯𡁵𡁶𡁷𡁸𡁻𡂈𡂖𡂝𡂴𡂿𡃀𡃁𡃇𡃈𡃉𡃏𡃓𡃤𡃴𡃵𡃶𡄯𡄻𡄽𡅅𡅈𡅏𡆀𡆇𡇙𡈼𡉏𡉼𡊨𡊩𡊰𡋣𡋾𡌂𡌃𡌄𡌅𡌶𡌺𡍵𡍶𡎎𡎘𡎜𡏅𡏆𡏭𡏾𡐖𡐤𡐿𡑒𡑔𡑕𡒊𡒗𡒶𡓨𡓽𡕷𡖂𡖖𡘊𡘓𡘙𡘾𡙡𡚒𡚸𡚺𡛀𡛁𡛂𡛓𡛕𡛟𡛦𡛧𡛨𡛺𡛻𡛼𡛾𡜍𡜐𡜦𡜺𡜻𡜼𡝗𡝬𡝭𡝮𡝯𡝰𡝱𡝳𡝴𡞫𡞰𡞱𡞲𡞳𡞴𡞵𡟃𡟇𡟙𡟚𡟛𡟜𡟟𡟯𡟵𡟶𡟸𡟹𡟺𡟻𡟼𡠠𡠨𡠩𡠪𡠭𡠹𡠺𡠻𡡀𡡅𡡒𡡞𡡡𡡢𡡣𡡤𡡷𡡻𡢃𡢄𡢅𡢞𡢟𡢠𡢡𡢢𡢾𡢿𡣑𡣖𡣗𡣘𡣙𡣺𡤃𡤄𡤅𡤐𡤑𡤒𡤕𡤜𡤢𡤧𡤻𡥄𡥘𡥪𡥼𡦀𡦃𡦈𡦖𡧛𡧳𡨭𡨴𡩅𡩋𡩣𡭄𡯁𡯂𡰪𡱰𡲢𡲥𡲬𡵆𡵓𡵞𡶐𡶶𡶺𡷊𡷑𡷫𡷹𡸜𡸣𡸷𡸽𡺉𡺤𡺨𡻈𡻕𡼏𡼕𡽪𡾞𡾡𡿨𢁅𢁉𢁾𢂚𢃇𢃼𢄪𢅛𢅳𢅺𢆡𢇁𢇃𢈈𢉼𢌡𢌥𢎽𢏐𢏗𢏺𢑥𢑱𢒋𢒑𢒰𢒼𢓁𢓉𢓌𢓭𢔓𢔛𢔰𢕔𢖍𢖯𢖾𢘛𢘜𢘫𢙨𢙺𢚖𢚘𢛴𢛵𢛶𢜒𢜔𢜛𢜟𢜪𢝵𢞁𢞖𢞴𢞵𢟍𢠃𢡟𢡠𢡱𢢭𢣁𢣷𢤦𢤹𢥏𢥧𢥫𢦀𢦓𢩦𢫏𢫕𢫦𢫨𢬎𢬢𢬿𢭃𢭪𢯊𢯎𢰦𢰧𢰸𢱌𢱑𢱕𢱢𢲈𢲛𢲡𢲩𢲲𢲷𢳂𢳆𢳉𢴇𢴈𢴒𢵄𢵌𢵧𢶍𢶕𢶠𢶣𢶤𢶷𢷮𢸍𢸶𢹂𢹸𢺋𢺳𢻯𢽴𢿌𢿣𣀳𣁄𣁋𣁦𣁽𣁾𣂎𣂷𣂼𣃚𣄃𣄽𣅽𣆂𣆤𣆥𣆳𣇈𣇉𣇪𣇷𣇸𣇹𣈏𣈥𣈯𣈱𣈲𣈳𣈴𣉖𣉞𣉢𣊁𣊉𣊊𣊫𣊬𣊭𣋒𣋠𣋡𣌀𣌊𣌟𣎴𣏌𣏞𣏦𣏴𣏵𣏹𣏺𣏾𣐀𣐿𣑐𣑯𣑲𣓥𣔙𣔰𣕑𣕚𣕧𣖕𣖙𣖜𣖻𣗍𣗎𣗏𣗳𣘀𣘗𣘚𣘼𣙀𣙙𣙟𣙷𣚎𣚞𣚦𣚭𣚺𣛟𣛮𣜃𣜖𣜠𣜭𣜯𣜿𣝦𣞁𣞢𣞼𣟂𣟕𣟖𣟗𣠺𣧂𣪧𣫛𣫮𣫺𣬚𣭚𣱣𣲙𣲚𣲛𣲵𣲷𣳇𣳈𣳉𣳼𣳽𣳾𣳿𣵀𣵛𣵾𣶏𣶶𣶷𣶸𣶹𣶺𣶻𣶼𣶽𣷣𣷸𣸆𣸑𣸬𣸭𣸮𣸯𣸰𣸱𣸹𣺈𣺉𣺊𣺋𣺹𣺿𣻗𣻷𣻸𣻹𣻺𣻻𣻼𣼵𣽁𣽊𣽡𣽿𣾀𣾁𣾂𣾏𣾴𣾷𣿀𣿅𣿫𣿬𣿭𣿮𣿯𣿰𤀑𤀹𤀺𤀻𤀼𤀽𤁗𤂅𤂋𤂌𤂍𤂑𤃉𤃡𤃬𤄄𤄏𤄙𤄿𤅀𤅄𤅎𤅕𤅖𤅗𤅜𤅟𤅡𤅷𤅺𤆣𤆤𤆥𤆬𤆵𤇍𤇢𤇼𤈛𤉋𤉖𤉙𤉶𤉷𤉸𤊄𤊓𤊕𤊥𤊿𤋁𤋉𤋊𤋮𤋺𤌍𤌚𤌴𤍈𤍢𤍣𤍤𤍥𤎌𤎖𤎜𤎽𤏁𤏩𤏪𤏲𤏸𤐄𤐵𤐶𤑚𤑛𤑳𤒇𤒈𤒹𤒼𤓎𤓓𤓖𤔅𤔡𤕸𤗈𤘘𤘪𤙥𤙴𤚗𤛔𤜆𤜥𤜯𤞏𤟠𤠒𤠣𤢂𤣰𤣱𤣲𤣳𤣻𤣿𤤀𤤁𤤌𤤖𤤗𤤙𤤯𤤳𤤴𤤾𤤿𤥀𤥁𤥂𤥃𤥢𤥣𤥴𤥵𤥶𤥻𤥿𤦂𤦈𤦉𤦊𤦋𤦌𤦍𤦎𤦏𤦔𤦤𤦧𤦩𤦫𤦬𤦭𤦷𤦸𤦹𤦺𤦻𤧅𤧐𤧚𤧞𤧟𤧣𤧥𤧬𤧭𤧶𤧷𤧸𤧹𤧻𤨎𤨒𤨓𤨕𤨡𤨢𤨣𤨤𤨥𤨦𤨧𤨨𤨩𤨪𤨾𤩂𤩅𤩊𤩎𤩏𤩐𤩑𤩝𤩥𤩦𤩧𤩱𤩷𤩸𤩹𤩺𤪌𤪓𤪔𤪕𤪖𤪤𤪥𤪦𤪧𤪱𤪲𤪳𤪺𤪻𤪼𤫀𤫇𤫊𤫑𤫟𤫢𤫩𤬏𤭮𤯵𤰉𤲞𤲟𤳉𤳙𤴆𤴓𤶸𤷪𤷫𤸻𤹐𤺥𤺧𤼎𤽜𤾂𤾆𤾗𤾚𤾩𤾸𤿂𥀬𥁒𥂝𥄫𥅈𥅽𥅾𥇍𥇣𥇦𥇧𥈠𥈡𥉐𥊙𥋇𥋘𥌎𥌑𥌓𥐙𥐥𥐯𥐰𥑆𥑬𥑮𥒚𥔱𥔵𥔿𥕛𥕜𥕝𥕞𥕥𥕦𥖁𥖄𥖏𥖹𥗕𥗛𥗠𥘅𥘵𥙑𥚃𥚕𥛣𥛶𥜆𥜝𥜥𥜽𥝲𥟇𥟟𥟠𥟡𥡗𥡝𥡲𥣈𥣞𥣡𥤃𥥆𥥖𥦬𥧌𥩔𥪕𥪜𥪮𥪯𥫩𥭴𥮉𥮳𥮴𥯆𥯤𥯨𥰁𥰆𥰡𥱊𥱥𥲑𥲤𥳀𥳁𥳾𥴠𥴰𥵃𥶙𥶹𥸎𥹉𥺁𥺂𥺃𥺦𥺼𥻘𥼚𥽋𥿡𥿢𦀡𦀩𦁈𦁤𦂃𦂗𦂤𦂥𦄂𦄡𦅙𦅚𦅛𦅜𦆭𦆮𦆲𦇝𦉘𦉡𦉪𦉫𦋐𦌵𦍋𦍌𦍑𦎾𦏵𦏸𦐂𦐐𦐑𦐒𦑊𦑩𦒄𦒈𦒉𦒘𦔒𦕲𦖠𦖭𦖿𦘒𦘦𦚯𦚱𦚵𦛚𦛨𦛼𦜖𦝁𦞙𦞳𦞴𦟌𦠜𦡆𦡞𦡮𦢈𦢊𦢓𦣇𦤎𦤑𦤦𦤹𦦨𦦵𦧲𦧺𦨭𦨮𦨴𦩂𦩑𦩒𦬅𦬊𦬓𦬕𦬣𦬨𦭐𦭑𦭒𦭓𦭛𦭵𦮂𦮖𦮗𦮝𦮳𦯀𦯷𦱀𦱁𦱆𦱾𦱿𦲀𦲁𦲂𦲤𦲷𦲸𦲽𦳀𦳃𦳑𦴢𦴣𦴤𦴥𦴦𦴧𦴨𦴩𦴪𦵑𦵴𦶠𦶡𦶢𦶣𦶤𦶥𦶦𦶧𦶮𦷜𦷪𦷫𦷰𦸀𦸅𦸇𦸒𦹂𦹃𦹄𦹅𦹮𦹲𦹷𦺄𦺈𦺋𦺙𦻐𦻑𦻒𦻓𦻔𦻕𦻖𦻗𦼦𦽳𦽴𦾟𦾡𦾾𦿞𦿟𧀎𧁋𧁒𧁓𧂈𧂭𧂮𧂯𧃍𧃒𧃰𧃸𧄉𧄌𧄍𧄦𧄧𧅤𧅥𧅵𧇍𧈛𧉧𧊀𧊅𧊋𧊲𧊶𧋦𧍒𧎚𧏿𧐢𧑐𧒄𧒆𧕴𧖣𧗠𧗤𧗽𧗾𧘇𧘌𧘲𧘹𧙕𧙖𧙗𧚔𧜏𧜵𧜶𧝁𧝞𧞄𧞅𧟌𧡘𧡰𧢝𧣈𧤤𧥧𧥺𧦠𧧝𧧽𧨊𧨎𧨾𧩓𧩙𧩹𧪄𧪽𧪾𧫴𧬆𧬋𧬘𧬸𧬹𧬺𧭈𧭥𧯯𧯴𧰒𧱬𧲱𧳅𧴯𧵓𧵔𧵦𧵳𧶄𧶏𧶘𧶽𧷜𧹍𧹏𧼮𨀂𨀉𨀞𨀣𨀤𨁈𨂃𨂐𨂽𨂾𨃨𨃩𨃴𨄮𨅏𨅝𨅯𨆉𨆯𨆼𨈇𨈘𨈚𨉖𨉼𨊛𨋍𨋢𨌆𨌘𨌯𨌺𨍥𨍭𨍽𨎊𨐒𨑨𨑬𨑳𨒂𨔁𨔼𨔽𨕬𨗨𨗴𨘀𨘋𨘥𨘻𨚪𨚫𨚲𨚼𨛘𨛦𨜏𨜓𨠄𨠫𨤍𨤳𨥈𨥉𨥖𨥤𨥨𨥬𨥭𨥾𨦉𨦨𨦪𨦫𨦸𨦼𨧀𨧜𨧞𨧡𨧣𨧤𨧧𨧨𨧹𨧺𨧻𨧼𨨏𨨖𨨥𨨩𨨲𨨶𨩄𨩅𨩆𨩇𨩈𨩉𨩊𨩋𨩙𨩚𨪁𨪂𨪃𨪚𨪛𨪜𨫀𨫆𨫋𨫌𨫎𨫞𨫟𨫠𨫡𨫢𨫣𨫥𨫪𨫼𨬌𨬓𨬡𨬢𨬫𨬬𨬭𨬯𨭆𨭌𨭎𨭐𨭣𨭤𨭥𨭦𨭬𨮏𨮙𨮜𨮝𨮹𨯂𨯅𨯔𨯗𨯙𨯚𨯧𨯨𨯩𨯪𨯫𨯬𨯵𨯿𨰃𨰉𨰜𨰝𨰣𨰦𨰫𨰰𨰹𨰻𨳊𨳍𨳒𨴴𨶙𨶹𨸶𨸹𨹥𨹦𨺗𨺬𨺲𨺳𨻙𨻧𨿅𩁹𩂈𩂋𩂓𩂯𩂰𩂱𩃀𩃤𩃥𩃬𩃭𩄍𩄐𩄼𩅍𩅛𩅞𩅰𩆜𩆨𩇕𩇫𩐝𩐠𩐳𩐿𩑈𩓐𩓙𩓚𩓥𩓧𩖞𩖰𩖸𩗗𩗩𩗴𩜠𩜲𩟔𩡗𩢤𩣑𩣪𩣱𩣺𩤃𩤅𩤯𩥅𩥇𩥈𩥉𩥝𩥪𩦝𩧃𩧉𩨨𩩍𩬅𩬎𩯕𩱳𩲭𩴾𩵚𩵼𩶘𩶛𩷶𩸆𩸭𩹨𩺬𩺰𩻃𩻸𩼣𩼰𩾷𩿞𪀔𪂇𪂹𪃡𪃭𪃳𪃸𪃾𪄇𪄣𪄳𪄴𪅐𪆒𪆓𪆫𪆴𪆵𪇟𪇵𪈠𪈳𪊓𪊟𪊲𪊴𪊶𪊺𪊽𪋟𪋿𪍑𪎩𪏭𪐴𪑛𪗆𪗋𪘁𪘲𪙊𪙛𪚩𪷿勇吆咢屮弢慈晉杞芳䕫蜨貫

思源繁體(台灣) 比 思源香港 多的中文字符,3 个

㫚櫓魯

思源香港 比 思源繁體 多的中文字符,13 个

岃滑龜奈老省糧劣料類慄梨泥

微软雅黑 比 思源简体 多的中文字符,26 个

䶶䶷䶸䶹䶺䶻䶼䶽䶾䶿鿰鿱鿲鿳鿴鿵鿶鿷鿸鿹鿺鿻鿼鿽鿾鿿

思源简体 比 微软雅黑 多的中文字符,125 个

豈更車賈串句喇奈洛珞落酪駱嵐來勞櫓爐盧老蘆路露魯鷺弄磊賂雷壘漏勒肋丹異北磻便復不葉沈若略梁糧量勵呂濾礪力曆歷年煉輦瑩靈醴僚尿料燎暈阮類律慄隆利吏履易梨泥理里林淋狀什刺拓洞暴輻行見隷勉勤卑嘆器墨漢爫碑艹艹𠂇𠂉𠃌𠘨𡗗𢦏𤇾𤈎𤣩𤨁𥫗𦥑𧢲𧺯𧾷𨸏𩙿𩠐𭕄巽拔𰻝𰻞𱁬

寻找适合的自建聊天工具

By: fivestone
3 July 2024 at 22:07

到现在为止,并没有找到最合适的解决方案(目前最靠谱的是 Nextcloud Talk 和 Voce Chat)。先把过程中考虑到的一些因素,记录下来,作为借鉴。

我的目的,是如何更便捷地,和墙内小范围的朋友、家人,保持联系,在对话中不受信息审查。现有的聊天软件,能够不翻墙使用的,几乎没有了,即使有,也不是长久之计。所以最靠谱的方式,大概只有通过一台海外的 vps,自建服务,供小范围的人使用。如果传播范围不大,除非 gfw 变成白名单,否则应该都可以长期使用。

下面是选择各种自建聊天工具时,会考虑到的因素。这些因素之间,有些是互相冲突的。对不同需求的人,在这些因素之间考虑的权重,也不一样。对于我上述的需求来说,

  • 不需要考虑的因素,用黑色显示;
  • 希望能有,但没有也无所谓的因素,用蓝色显示;
  • 非常希望能满足的因素,用绿色显示。

首先,我希望这是一个可以挂机的聊天工具,可以在收到信息时,从手机接收到通知;而不仅仅是个网页聊天室,只能在专门打开网站时,才能聊天:

  • 可以持续挂机,通过 app 或者「Chrome 把网站添加到桌面」的功能,实时接收来信通知
  • 除了手机外,也能在 pc 的浏览器里使用

要联系的人,并不擅长电脑技术和操作,因此

  • 不需要翻墙使用
  • 操作简便
  • 有中文界面

这些人,可能并不属于同一个群体。所以,需要为不同的人群,架设不同的服务地址,互相分开。

  • 在一台 vps 上,同时部署多个聊天服务。一些功能更加完善的聊天服务如 xmpp,因为需要独占端口,并不能满足这一点;

安全性方面:

  • 信息加密
  • 开源
  • 不和中央服务器连接,一些 self-host 的服务,会经常连接开发者的服务器,虽然只是检查升级或校验程序完整性,但还是看着心虚;
  • 完全通过域名交互,不向其它服务器暴露 ip 地址
  • 用户之间的私信,对管理员也不可见,否则,其实开个 fediverse 实例,可以满足这里很多条要求;
  • 用户之间不会互相暴露信息,譬如很多协同工作平台,可以互相看到所有用户的名单、email……

架设系统的便利程度:

  • 支持 docker + nginx 部署,或者直接放进 php 目录就能运行
  • 系统开销小,内存上 G 的那种就算了吧;
  • 不需要 mysql 等专门数据库,因为规模不大,sqlite 就足够了;
  • 能部署在网站的子目录下,不需要独占一个子域名;

对聊天功能的需求:

  • 是否要加入去中心化网络,和其它服务器的用户交流?对我来说,这不是必须的。而且这在部署的便利性、轻量级、安全性、同时部署多个服务……等方面,都会造成冲突;
  • 可以群聊,也可以一对一私聊
  • 可以传输文件;
  • 支持语音
  • 支持视频;
  • 注册过程简洁,可以由管理员直接生成账户;
  • 可以关闭对外注册

……………还有什么要补充的吗?


已经考察过的工具

其实最理想的,应该是一个 php 的聊天室……能通过 chrome 在手机桌面接收消息通知就可以。轻量化、可以塞到任何目录下、没有中文我自己汉化也可以。但是,真的没找到靠谱的…………求推荐!!!

ps,如果联系人有一定电脑常识,也懂英文的话,用 mycryptochat 做临时沟通,蛮好用的。

目前最合适的,是 Nextcloud Talk,用 docker + sqlite + nginx,是可以做到快速部署的;占用内存不到 300MB,勉强可以接受(所以开销更高的方案,基本不考虑了);而 nextcloud 作为一个庞大的办公平台,其 web 界面对于非技术人士,未免有些眼花缭乱。

xmpp 和 matrix 服务器,可以做到开销更小,但也在 100MB 以上,还涉及独占端口的调整,部署起来繁琐很多。似乎也可以把跨实例通信的功能关掉,做成封闭社区,配置和开销会简单一些。但还没仔细研究。

各种协同平台类,如 Mattermost、Rocket.Chat,系统开销过大,就算了。

这两年有个国人开发的 VoceChat 工具,评价很不错。可以 docker + nginx 部署,内存 30MB,有 web 界面和自己的 app。推荐大家可以试试。目前发现的一些问题:

  • 免费 license 有 20 个用户的限制。 问题不大;
  • nginx 不能反代到子目录,只能独占域名的根目录;
  • 可以看到其它用户的 email,但用邀请码注册的话,可以填假的,不用验证;
  • 最大的问题:VoceChat 的语音聊天模块,是外挂的 agora.io,——是著名的大陆运营商,当年 clubhouse 因此遭受很大质疑。所以,不要用它的语音功能谈关键的信息。进而,这个软件的文字聊天的安全性,虽然是开源,但使用官方 docker 时,也让人有些嘀咕了。

兔子王国里的外星人_0.ylog

By: Steven
26 April 2024 at 00:52

欢迎收听荒野楼阁 WildloG,这里是设计师苏志斌的个人播客。作为第 0 期,我会与你分享一下做这个播客的动机、这个播客的主题会是什么、起这个名字的缘由、本期封面和播客 Logo 的设计想法,以及后续的节目计划。

在这一期,你会听到:

—- 我是谁?从我家的动物园,工作和话剧的经历,聊到我二十多年的写作习惯。

—- 我对于视频内容的态度?为什么那么久没更新《设以观复》系列?

—- 原本并不想做播客,为什么转变想法呢?动机是什么?

—- 这个播客的主题:一个外星人

—- 荒野楼阁 WildloG 这个名字是什么意思?因为生机勃勃啊!

—- Why not 和 WildloG

—- 封面设计:隐秘的荒野和兔子王国

—- 以两类节目为主:一个人捡树枝,两人以上一起捡树枝

—- 要停更视频?

|登场人物|

苏志斌:工业设计师,车联网智能硬件产品经理/联创,《设以观复》作者

|相关链接|

若你所使用的播客客户端未能完整显示插图,或遇网络问题未能正常播放,请访问:

荒野楼阁 WildloG 的地址:https://suithink.me/zlink/podcast/

阅读设计相关的各类文章:https://suithink.me/zlink/idea/

|其他社交网络媒体|

苏志斌 @ 知乎|SUiTHiNK @ 即刻 / 微博

苏志斌SUiTHiNK @ Bilibili / YouTube / 小红书

|联络邮箱|

suithink.su@gmail.com

欢迎在 小宇宙、Spotify、YouTube、Apple Podcast 收听本节目,期待你的留言。

💾

在外置硬盘上,加密安装 ubuntu

By: fivestone
13 February 2024 at 19:27

需求:

  1. 在便携硬盘盒(M.2 SATA/NVME)安装 Linux(Ubuntu/Zorin),以便在不同的电脑上都可以启动使用。
  2. root 级别的系统分区加密(使用 LUKS & LVM)。
  3. 不要把整块硬盘都加密,而是在硬盘上保留一个未加密分区。这样也可以作为普通的移动硬盘使用。

——这篇攻略和是否外置硬盘盒,没多大关系。普通内置硬盘也可以这样加密安装。

最新的 Ubuntu 22.04 之后的版本,在安装界面里自带了 LVM 全盘加密安装的选项。但是并不能满足第 3 条需求。所以还需要一些复杂的手动操作。

安装过程尽量围绕 ubuntu 的图形安装界面,对新人友好。参考并验证了这篇教程。但原文连同 /boot 引导分区也一起加密了,于是在配置上略显繁琐。我觉得加密 /boot 并不是很有必要,做了一些改动。最终的硬盘分区结构为(以 512GB 硬盘为例):

  • 大约 800MB,EFI 引导分区
  • 大约 300GB,LUKS 加密分区。在其中配置 LVM 逻辑分区:
    • 2GB,swap 交换分区
    • 大约 300GB,Ubuntu 系统分区 root /
  • 大约 200GB,普通移动硬盘分区

操作步骤:

下载 Ubuntu,制作 USB 安装盘(过程略)。——然后,强烈建议在整个安装过程之前,在电脑的 BIOS 里,把内置的其它硬盘暂时卸载。

插上移动硬盘和 USB 启动盘。从 U 盘启动电脑,选择 Try Ubuntu。最新的 Ubuntu 22.04 安装程序里,已经内置了所需的 cryptsetup 和 cryptsetup-initramfs 软件包。因此,整个安装过程中,应该不需要连接互联网。

首先,把硬盘预分区。分区软件有很多种,可以用原文的 sgdidk,也可以直接用图形界面下的 Disk 或者 Gparted。在硬盘上创建 GPT 分区表,然后分成:

  • 大约 800MB,EFI 引导分区
  • 大约 300GB,要加密的系统分区
  • 余下的约 200GB 移动硬盘

这些分区都先不用格式化。记住第二个分区的名字,本文假定为 /dev/sda2。

分区成功后,关闭分区软件,打开 Terminal 命令界面,执行 root 权限

sudo -i

将系统分区加密。按提示输入密码,——这个密码,就是以后每次启动时,挂在硬盘用的密码。和安装 Ubuntu 时的用户密码,并不是一回事。

cryptsetup luksFormat --type=luks1 /dev/sda2

解锁刚刚加密的分区:

cryptsetup open /dev/sda2 hd2_crypt

创建逻辑卷组(LVM),然后在其中创建 2GB 的 swap 交换分区,再把剩余的空间创建为系统分区(这两个分区的大小,大家自行调整):

pvcreate /dev/mapper/hd2_crypt

vgcreate ubuntu--vg /dev/mapper/hd2_crypt

lvcreate -L 2G -n swap_1 ubuntu--vg

lvcreate -l 100%FREE -n root ubuntu--vg

然后,运行桌面上的 Ubuntu 安装程序(Terminal 先不要关),在磁盘分区页面,选择 Something else,进行手动分区。

  • 把 /dev/mapper/ubuntu—-vg-root 格式化成 ext4,挂载为系统根目录 /
  • 把 /dev/mapper/ubuntu—-vg-swap_1 设为 swap 交换分区
  • 把 /dev/sda1 设为 EFI 引导分区

点击 Install Now,确认对分区的设置。注意,到了下一步创建用户的界面时,先不要继续。切换回 Terminal 命令行界面,正式安装前,在 GRUB 中启用加密(能看懂下面这些命令的话,也可以直接去编辑相应的文件):

while [ ! -d /target/etc/default/grub.d ]; do sleep 1; done; echo "GRUB_ENABLE_CRYPTODISK=y" > /target/etc/default/grub.d/local.cfg

然后回到创建用户的页面,点击继续,开始安装系统。安装结束后,先不要 restart。而是点击 Continue Testing。

回到 Terminal 命令行界面,chroot 到新装的系统:

mount /dev/mapper/ubuntu----vg-root /target

for n in proc sys dev etc/resolv.conf; do mount --rbind /$n /target/$n; done

chroot /target

mount -a

原文说此时需要(联网)安装 apt install cryptsetup-initramfs;但我用的 ubuntu 安装程序已经自带了,并不需要联网安装软件包。

添加密钥文件相关设置:

echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook

echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf

创建密钥文件并将其添加到 LUKS

mkdir /etc/luks

dd if=/dev/urandom of=/etc/luks/boot_os.keyfile bs=512 count=1

chmod u=rx,go-rwx /etc/luks

chmod u=r,go-rwx /etc/luks/boot_os.keyfile

将密钥添加到 boot_os.file 和 Crypttab

cryptsetup luksAddKey /dev/sda2 /etc/luks/boot_os.keyfile

echo "hd2_crypt UUID=$(blkid -s UUID -o value /dev/sda2) /etc/luks/boot_os.keyfile luks,discard" >> /etc/crypttab

更新 Initialramfs 内核映像

update-initramfs -u -k all

此时全部结束。可以重启系统啦。


关于这个硬盘密码:

  • 是用来防止,别人拿到这块硬盘时,无法查看硬盘的文件;
  • 并不能防止,当你登入系统后,因为系统漏洞或操作失误,而造成的入侵;
  • 这个密码,如果忘记了,硬盘里的文件,就再也无法看到了!!(有添加 recovery 的操作,但我觉得没必要);
  • 每次开机启动时,都要输入一次这个密码。所以,虽然密码需要足够复杂,但最好选一个,自己能方便记住,日常使用的方式。

如何修改硬盘密码:

最简单的方式,是在已经启动的移动硬盘系统里,先通过 disk 等分区软件,确认加密分区的名字(这里假设仍然是 /dev/sda2,但实际上不一定了),打开 Terminal 界面,

sudo -i

cryptsetup luksChangeKey /dev/sda2

按照提示,输入旧密码,再输入两遍新密码。最后,更新 initramfs,

update-initramfs -u -k all

就可以了。

智能家居之第三方监控接入 HomeKit

By: Orchestr
30 November 2023 at 15:20
智能家居之第三方监控接入 HomeKit

相信很多和我一样的有宠家庭,都会为了掌握宠物的行踪或拆家的进展而购买了监控摄像头,通过互联网掌握藏在家中猫猫狗狗的踪迹,抑或是其他的为了家庭安全而购买摄像头起安保作用的家庭,都会面临相同的几个问题:我们真的需要云存储吗?我们真的信任摄像头厂商吗?我回家以后需要关掉摄像头吗?

智能家居之第三方监控接入 HomeKit

猫猫和我一样表示怀疑,以及各个厂商的云存储价格,打消了我的想法。我一开始的方案是将监控接入了群晖的 Surveillance Station,打开了群晖的动态提醒,但随之而来的便是每天无数的提醒,监控视野内但凡有一点点风吹草动,便会让我手机震动不停。

智能家居之第三方监控接入 HomeKit

直到我后来看到一篇关于 iCloud 安防摄像头的文档,为何不接入 HomeKit 白嫖无限 iCloud 存储呢?苹果还是相当良心的,摄像头存储的录像并不占用原有的 iCloud 空间。50 GB 方案:可添加一个摄像头。200 GB 方案:最多可添加五个摄像头。2 TB 及更高方案:不限制摄像头数量。作为高贵的美区 Apple One 超大杯车主,理论上是可以添加无数个摄像头的。具体的内容大家可以看下面的文档。

在 iCloud 中使用 HomeKit 安全视频储存加密安保摄像头录制的视频
了解如何在 iCloud 中使用 HomeKit 安全视频储存安保摄像头的视频。
智能家居之第三方监控接入 HomeKitApple Support
智能家居之第三方监控接入 HomeKit

话不多说,那就准备开搞!以往来说,其他的设备加入 HomeKit 我会选择通过 Home Assistant 进行中转,但是因为 HA 接入的摄像头好像并不支持 动态监测、人脸识别等 HomeKit 安防高级功能,所以我们这里会使用一个新的工具。

GitHub - koush/scrypted: Scrypted is a high performance home video integration and automation platform
Scrypted is a high performance home video integration and automation platform - GitHub - koush/scrypted: Scrypted is a high performance home video integration and automation platform
智能家居之第三方监控接入 HomeKitGitHubkoush
智能家居之第三方监控接入 HomeKit

Scrypted Docker 安装

Scrypted 本身是支持 Home Assistant Add On 的,所以不是通过 Container 安装 Home Assistant 可以方便的跟随这里的文档进行安装:

Home Assistant | Scrypted Docs
Video Integration Platform
智能家居之第三方监控接入 HomeKitScrypted Docs
智能家居之第三方监控接入 HomeKit

因为我的 Home Assistant 是通过 Docker 安装的 HA Core,不支持 Add On,所以这里需要通过 Docker 来进行安装,之前提到过,我的 Home Server 运行的是 NixOS,所以可以很方便的配置 Docker,具体的配置项如下,将其改为 Docker Compose 也很方便,所以这里不再提供。

{ config, pkgs, ... }: {
  virtualisation.oci-containers.containers."scrypted" = {
    autoStart = true;
    image = "koush/scrypted:latest";
    volumes = [ "/orchestr/static/docker/scrypted:/server/volume" ];
    extraOptions = [ "--network=host" ];
    environment = { TZ = "Asia/Shanghai"; };
  };
}

Scrypted 配置

安装完成后,我们便可以在浏览器内进入 scrypted 后台,注意这里的 https 不可省略,具体的网址为:

https://your-host-ip:10443

按照网页提示设置账号密码进入主界面选择 Management Console 即可。

scrypted 插件安装

智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit

点击左侧栏内 Plugins,然后点击 Install 进入以下界面:

智能家居之第三方监控接入 HomeKit

安装以下插件:

  • HomeKit
  • Onvif Camera Plugin 或 RTSP Camera Plugin
  • OpenCV Motion Detection
  • Snapshot Plugin
  • Video Analysis Plugin
  • WebRTC Plugin

注意,安装完 HomeKit 插件后切勿着急配置,继续看完下文。

Scrypted Server Address 设置

注意,此步不可省略,不然会出现摄像头无画面的情况。依次点击左侧边栏 SettingsGeneral ,即可看到界面设置。

智能家居之第三方监控接入 HomeKit

scrypted 摄像头配置

这里以 Onvif 协议举例,RTSP 配置过程基本一致,点击 Onvif Camera Plugin 进入插件配置,点击 Add New,进入以下界面:

智能家居之第三方监控接入 HomeKit

输入摄像头相关参数,点击 Create ,进入摄像头配置界面,这时,应当能看到摄像头的 SnapShot ,因为我这里已经配置过一遍了,所以界面可能略有不同。点击右侧的 Extensions ,将以下的插件勾选后点击 Save

智能家居之第三方监控接入 HomeKit

Scrypted 插件功能

一般情况下如果使用没有异常,尽可能保留默认配置即可。

Stream

智能家居之第三方监控接入 HomeKit

一般的家用摄像头都会有两个视频流,一般其中一个为高画质,一个为低画质,大家可以根据自己的需求选择相应的视频流,比如在家时适用高画质,出门适用低画质等。

SnapShot

智能家居之第三方监控接入 HomeKit

可以选择一些视频预览画面的选项,比如从哪个视频流截取画面等。

Motion Detection

智能家居之第三方监控接入 HomeKit

这里需要说明的是 Built In Motion Sensor 选项,Assist 为使用摄像头默认内置的动态监测算法,Replace 为使用 OpenCV 进行替代,如果你的摄像头没有内建相应功能的话,建议选择 Replace

Homekit 配置

这里有一个坑大家需要注意,HomeKit 摄像头的配置不是在 Scrypted 的 HomeKit 插件页面进行配置,而是在摄像头的 Extensions 页面,因为 Homekit 摄像头这里的默认配置是 Accessory 而不是Bridge 。对于摄像头而言我更青睐于配件而非桥接,毕竟一次性桥接一串设备进去,将来如果有什么问题需要单独配置某个设备的话,需要整个桥接的所有设备一起移除重新配置,较为麻烦。

智能家居之第三方监控接入 HomeKit

这里有一个选项,RTP Sender 提供两个选择,FfmpegScrpytedFfmpeg 大家众所周知,不做赘述,Scrpyted 为一个实验性选项,在这里有着更快视频转接速度,即更低的延时。

注意,这里配置完成后可能需要重启 Homekie 或 Scrypted 服务,注意观看网页顶部蓝色框的提示,这里不再截图展示。

接下来点击 Pairing ,打开 Home App,点击添加设备,扫描屏幕上的二维码,可能需要输入下方的 Pairing Code ,完成后即可将摄像头加入家庭。

智能家居之第三方监控接入 HomeKit

Home App 设置

在添加完摄像头,App 内便会引导进行摄像头的配置,比如视频录制选项,在家或外出是是否仅串流或开启录制等,以及动态监测是否监测人,动物,包裹等,如果是室外摄像头,还可以监测汽车等,也可以开启人脸识别,避免自己在家时被 Home App 不停地通知监测到有人进入摄像头。

下面只贴一些完成后的截图吧。

智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit
智能家居之第三方监控接入 HomeKit

结束语

到此为止,将第三方摄像头接入 Homekit 的工作就宣告结束,我们可以在这步完成后便关闭摄像头的联网权限。如果大家在配置过程中遇到什么问题,可以留言,博主将在看到后及时回复。如果你对这里的内容略感兴趣,可尝试订阅本站,点击这里即可

Sign up for Digital Immigrants

Nobody from nowhere, belonging to no one.

Email sent! Check your inbox to complete your signup.

No spam. Unsubscribe anytime.

在自己服务器上安装 GitLab,代替 GitHub!

By: James Guo
25 June 2016 at 21:12

我的服务器上部署的代码、配置文件等内容大多是使用 Git 进行版本控制。为了能够使用、配置起来更方便,通常使用一整套系统去管理。很显然,在一些代码和配置文件里会有一些机密的内容,如一些密钥什么的,所以必须不能公开。GitHub.com 虽然提供了 Private 存放处功能,但是由于此功能是付费的,而且对于 Organization 的 Plan 还是极贵,并不十分划算;就算能有免费的 Private 存放处,把自己的很多重要的密钥放在第三方服务器上还是很不安全,所以能够 Host 在自己的主机上的,并且能够替代 GitHub.com 的软件/服务就是不错的选择。 本文将讲一下我在自己服务器上安装 GitLab 遇到的坑,进阶使用,包括使用 .gitlab-ci.yml 文件实现自动 Build,实时同步镜像到 GitHub。

能够 Host 在自己的服务器上的软件/服务其实有很多,比如 GitHub Enterprise,Bitbucket Server。不过再此还是推荐完全开源、免费、由社区维护的 GitLab Community Edition,没有任何限制,只是相比 Enterprise Edition 少了些本来也用不着的功能。

安装及遇到的坑

具体安装方法见文档,目前官方推荐的系统环境是 Ubuntu 16.04 LTS,安装起来非常简便,整个 Web 环境都会配置好。安装后的更多配置请参见文档。如果你的主机上跑了不只一个 Web 程序,那就需要对现有的 Web 软件做修改,需要参见官方的 Nginx 的配置文档。我的代码中使用了 sub_filter 来实现替换默认的标题,实现更好的 SEO,更加品牌化。 然后为了能达到更好的使用效果,还应该配置 SMTP 发件服务器,我使用的是 AWS SES;然后还需要一个支持 IMAP 的收件服务器实现 Reply by email,我使用的是 Gmail,收邮件的限制总比发邮件的限制少吧~这些的具体设置方法官方文档里都有。 安装后默认是允许注册的,如果你不想让外人注册,你需要直接去 Web 后台禁用。如果你想要开放注册,那么最好先想好新注册用户能干什么,比如和我一样:只允许新用户创建 Issues 和 Snippets,那就在 Web 后台将 Default projects limit 设置为 0,然后编辑后台的配置文件,禁止新用户创建 Group。同时建议在 Web 后台启用 reCAPTCHA 和 Akismet,防止恶意注册和恶意发 Issues。既然允许注册,那么也建议使用 OmniAuth 来支持第三方 OAuth 的方式登陆。

GitLab Runner

GitLab Runner 十分强大,但是并不是内置的,它可以极其方便的实现自动部署等非常有用的功能。安装配置好 Runner 后,在项目根目录下添加一个名为 .gitlab-ci.yml 的文件,以 master 分支为例,为了实现每次 commit 到 master 都将文件部署到 /var/gitlab/myapp ,那么文件内容应该是这样的:

pages:stage: deployscript:- mkdir -p /var/gitlab/myapp- git --work-tree=/var/gitlab/myapp checkout -fonly:- master

注意,你需要先创建 /var/gitlab 文件夹,并设置这个文件夹的用户组为 gitlab-runner:gitlab-runner

$ sudo chown -R gitlab-runner:gitlab-runner /var/gitlab

.gitlab-ci.yml 核心的部分就是 script: ,这里的脚本都是由用户 gitlab-runner 执行的,你可以根据需要修改,后文中也给了几种范例。 然后 commit,去设置页面里里激活这个项目的 Runner。建议在设置里设置 Builds 为 git clone 而不是 git fetch ,因为后者常常出现奇奇怪怪的问题,前者的速度瓶颈主要在于网络传输。

部署 Runner 在同一个主机上,Or not?

官方的文档里强烈不推荐把 Runner 部署在同一个主机上,其实这种说法并不正确。官方不推荐这样做是因为一些 build 会花费很长时间,占用很多的 CPU 和内存资源。但是如果你执行的 build 脚本并不会这样,那么安装在同一个主机上也未尝不可。

常见的部署范例

这几种部署是我比较常用的,大家可以当作范例,具体根据自己的需要弄各种不同的部署。 以下几种 Web 的部署方式所消耗的系统资源都不多,而且由于使用了 nice ,并不会阻塞其他任务,可以部署在同一台主机上。

Jekyll

修改之前那个 .gitlab-ci.yml 文件的 git checkout 一行,替换为:

jekyll build --incremental -d /var/gitlab/myapp

检查 PHP 的编译错误

也是添加以下代码到 .gitlab-ci.yml 即可自动检查所有 PHP 文件的编译错误,编译通过的文件不会显示,只会显示编译错误的:

if find . -type f -name "*.php" -exec nice php -l {} \;  grep -v "No syntax errors"; then false; else echo "No syntax errors"; fi

自动与 GitHub 同步

以下过程需要 root 权限登陆到主机,或者在每行命令前添加 sudo。 首先,需要先给 gitlab-runner 用户一个单独的 SSH Key:

$ ssh-keygen -f /home/gitlab-runner/.ssh/id_rsa

然后,创建 /home/gitlab-runner/.ssh/known_hosts ,内容是:

github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==

之后,获取 /home/gitlab-runner/.ssh/id_rsa.pub 文件内容,在 GitHub 上添加这个 SSH Key。 由于是使用 root 帐号,弄完了之后不要忘了修改用户组:

$ sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner/.ssh

然后,同样是通过 .gitlab-ci.yml 实现自动同步:

git push --force --mirror git@github.com:[Organization]/[Project].git

修改 [Organization][Project] 为你自己的名称即可。

谈谈安装在自己服务器上的 GitLab 的好处

文件都存储在自己的服务器里,安全性比较有保障,自己有最高权限,不会遇到项目被删的情况。部署时延迟极低,可靠性也高,不会遇到自己服务器没问题但是第三方服务宕机导致无法部署的窘况。 可以根据情况部署到离自己最近的服务器,或者是内部服务器,像 GitHub 的服务器就在美国东岸,亚洲这边连接并不快,国内也不稳定。 最关键的是,如果你本来就有个 VPS 什么的,也有很大的空闲,那么相当于你可以免费获得私有存放处,但是要注意性能需求,没有足够的空闲还是不要启用。 由于能够配置好实时同步镜像到 GitHub,GitLab 还有那么多 GitHub 没有的功能,其实已经可以完全使用 GitLab 作为主要的版本控制工具,GitHub 只是存一份镜像备用。

【纪录片】Objectified · 设计面面观

By: Steven
24 November 2023 at 13:45
🎥 点击封面,进入视频播放页面

昨天整理硬盘时,在众多历史文档中翻到了这部纪录片。因为年代比较久远,可能一些年轻的设计师和学生都还没有看过,所以上传上来分享给大家。这部影片上映时,我正好从学校里毕业走向工作,其中的不少案例、观点都对我有不少长久的影响。

现在是 2023 年 11 月,距离这部影片上映已经过去了 14 年零 8 个月。其中一定不乏一些略显过时的东西,也存在一些只存在于大公司而不适用于多数公司的内容,但我一向认为,设计师最难能可贵的品质之一,就是从不同的领域和人物身上获取对世界的洞察。因此,对这部影片,我们可以有所取舍地看,结合眼下 AI 的形势,一并观察和思考。这才是观看这类年代久远的纪录片,比较好的方式。

祝你有所收获!

制片人&导演:Gary Hustwit

参演人员:Jonathan Ive(苹果前设计总监)、Dieter Rams(设计十诫)、深泽直人(无印良品)、纽约现代艺术馆馆长 Paola Antonelli,慕尼黑 BMW 首席设计师 Chris Bangle,巴黎兄弟设计组合 Ronan & Erwan Bouroullec,美国明尼阿波利斯市 Walker 艺术中心平面设计师 Andrew Blauvelt 等世界最具影响力的设计师。

视频封面设计苏志斌SUiTHiNK

《 Objectified 》是一部以工业设计为主题的长篇独立纪录片。影片详尽地展示了创造工业产品流程的实录片断,并记录了与世界顶尖设计师们的交谈与讨论。导演 Gary Hustwit 用洞察深切的镜头记录了这些在我们身边随处可见的工业设计产品,看似稀松平常的设计背后,却是设计师们倾尽全力的良苦用心。

又名: 设计面面观 / 造物 / 工业设计纪录片造物 / 客观化

上映日期: 2009-03-14

同时,也顺手重制了八年前给深大录的公开课的视频封面,从原来拿视频截图当封面,替换成了新版本。虽然也就是简单排了下版面,但起码,看上去像个网课的样子了。

🎥 点击封面,进入视频播放页面

Mastodon: 将媒体文件存放在本地(docker 版)

By: fivestone
30 August 2023 at 05:12

本攻略适用于——

  • 自建 mastodon(非大站)
  • 使用 docker compose
  • 将媒体文件直接保存在服务器上,而不使用 s3 外部存储

这个搭配虽然不多见,但其实用起来满爽的。很多人用的 s3 服务都是在薅羊毛,而 mastodon 那个变态的,把别人家的媒体文件缓存到自家的架构,流量的吞吐其实很大的(开了 relay 就更夸张),薅羊毛时很容易就超出了。反而是 vps 本身的流量上限很高。对于个人建站而言,媒体文件总量通常 <50GB,某些 vps 自带 200GB 硬盘,足够用了。

缺点是,除了数据库定期备份外,也要考虑媒体文件的异地备份问题。但其实只需要备份存储本地附件的 media_attachments,而 cache 是不需要备份的,所以工作量也不大。

两年前我把媒体文件转移到本地时,参照了 antisocial science 的设置。但因为我用 docker,官方默认的设置,docker 内外权限不一致,无法将媒体文件写到本地。于是匆匆又在本地建了个 minio s3 来中转……这样其实很浪费资源了,minio 的开销也不小。所以最近趁着搬家,又试了一下,终于把 docker + 本地存储 跑通了。


1. 在 docker-compose.yml 里,

web 和 sidekiq 容器中,已经预设了媒体文件的卷映射

volumes:
- ./public/system:/mastodon/public/system

这个不用动。——也可以改成其它的路径,但要和后面的设置一致(本文用相同的颜色标明)。

2. 修改 .env.production

S3_ENABLED=false
PAPERCLIP_ROOT_PATH=/mastodon/public/system
PAPERCLIP_ROOT_URL=/fivestone-mastodon-media

PAPERCLIP_ROOT_URL 是服务器的所有媒体文件链接的子文件夹名称,形如:

https://mastodon.fivest.one/fivestone-mastodon-media/media_attachments/.../x.jpg

默认值是 /system;但是建议改成独特一些的名字,而且建议和 S3_BUCKET 一致。以后需要在本地存储和 s3 之间转换时,可以省一点心。(所以要独特一些,防止回头在 s3 上和别人撞名)

3. 修改 nginx 的域名配置文件

参照官方的配置,把域名文件夹里的 proxy_pass ,直接改成本地的 alias

server 
{
  server_name mastodon.fivest.one;
# ......

  location /fivestone-mastodon-media/
  {
    alias /path-to...docker-compose-folder/public/system/ ;

    proxy_cache CACHE;
    proxy_cache_valid 200 48h;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    proxy_cache_lock on;

    expires 1y;
    add_header Cache-Control public;
    add_header 'Access-Control-Allow-Origin' '*';
    add_header X-Cache-Status $upstream_cache_status;
    add_header X-Content-Type-Options nosniff;
    add_header Content-Security-Policy "default-src 'none'; form-action 'none'";
  }
}

然后重启 nginx

sudo systemctl reload nginx.service

4. 通过 docker 设置媒体文件夹的权限

在 docker 内部,是以 mastodon 用户的身份,来运行程序的,所以要把媒体文件夹的所有者改成(docker 内部的)mastodon:

sudo docker-compose run --user=root --rm web chown -R mastodon /mastodon/public/system

如果是从 s3 迁移到本地,把媒体文件移入这个本地文件夹(/path-to…docker-compose-folder/public/system/)后,也要再执行一遍上面这条命令。

或者在 mastodon docker 服务已经启动的情况下,执行:

sudo docker exec -u 0 mastodon_container_web chown -R mastodon /mastodon/public/system

但在这条命令执行结束之前,mastodon 在后台写入媒体文件时,仍然可能出现文件夹权限不足,无法写入的问题。

❌
❌