[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:06.28,0:00:09.30,Default,,0000,0000,0000,,Okay, good morning everyone. Dialogue: 0,0:00:09.30,0:00:12.54,Default,,0000,0000,0000,,I'm going to talk about the\NLinux Font Rendering stack, Dialogue: 0,0:00:12.86,0:00:18.68,Default,,0000,0000,0000,,and that is what I learned the last\Nfour and a half years. Dialogue: 0,0:00:18.68,0:00:22.08,Default,,0000,0000,0000,,I worked at the\Ncity administration of Munich. Dialogue: 0,0:00:22.92,0:00:28.40,Default,,0000,0000,0000,,For introduction to font rendering, Dialogue: 0,0:00:30.32,0:00:34.78,Default,,0000,0000,0000,,I can say writing is\Nthe most used interface, Dialogue: 0,0:00:34.78,0:00:39.08,Default,,0000,0000,0000,,or probably the most used interface\Nbetween humans and the machines. Dialogue: 0,0:00:39.08,0:00:45.70,Default,,0000,0000,0000,,So all of you probably use it everyday\Non your computer. Dialogue: 0,0:00:48.50,0:00:52.78,Default,,0000,0000,0000,,Screen text is replacing text on paper\Nmore and more Dialogue: 0,0:00:52.78,0:00:56.82,Default,,0000,0000,0000,,and this is still an ongoing process. Dialogue: 0,0:01:00.62,0:01:09.16,Default,,0000,0000,0000,,The way from a string in a computer to\Ndisplay text is surprisingly complex, Dialogue: 0,0:01:09.16,0:01:14.64,Default,,0000,0000,0000,,And writing in itself is quite profound. Dialogue: 0,0:01:14.64,0:01:24.96,Default,,0000,0000,0000,,For example, it's influenced by history\Nso probably all, or at least most, Dialogue: 0,0:01:24.96,0:01:30.68,Default,,0000,0000,0000,,writing systems are derived from some\Npictograph writing systems. Dialogue: 0,0:01:31.14,0:01:34.44,Default,,0000,0000,0000,,This is also true for Roman letters. Dialogue: 0,0:01:36.08,0:01:43.98,Default,,0000,0000,0000,,And also the Roman letters themselves,\Nthey changed a lot since 2000 years ago. Dialogue: 0,0:01:43.98,0:01:51.12,Default,,0000,0000,0000,,In the Roman Empire they used some\Ndifferent letters than we use now. Dialogue: 0,0:01:51.12,0:01:56.98,Default,,0000,0000,0000,,So the goal of this talk is to raise\Nawareness of font rendering in computing, Dialogue: 0,0:01:56.98,0:02:00.74,Default,,0000,0000,0000,,with the focus on the Linux desktop. Dialogue: 0,0:02:04.74,0:02:11.68,Default,,0000,0000,0000,,Now to the history,\Nand then I talk about typography. Dialogue: 0,0:02:13.78,0:02:17.40,Default,,0000,0000,0000,,Text display in early computing. Dialogue: 0,0:02:17.40,0:02:24.76,Default,,0000,0000,0000,,In early computing it was just\Na way to display results. Dialogue: 0,0:02:26.38,0:02:29.90,Default,,0000,0000,0000,,Before that there were\Nonly flashing lights Dialogue: 0,0:02:29.90,0:02:34.42,Default,,0000,0000,0000,,where you can read the results\Nand... Dialogue: 0,0:02:35.66,0:02:39.84,Default,,0000,0000,0000,,[audience member] ??... BT100\N?? raise your hand Dialogue: 0,0:02:43.30,0:02:47.66,Default,,0000,0000,0000,,[Max] And the output device receives\Na page or a character stream, Dialogue: 0,0:02:47.66,0:02:52.00,Default,,0000,0000,0000,,and then the presentation is the job\Nof the output device. Dialogue: 0,0:02:52.00,0:02:58.00,Default,,0000,0000,0000,,So for example, a typewriter\Nor a printer or a terminal. Dialogue: 0,0:02:58.00,0:03:05.78,Default,,0000,0000,0000,,And this is a BT100\Nyou can see on the right side. Dialogue: 0,0:03:05.78,0:03:08.34,Default,,0000,0000,0000,,So this is a real terminal. Dialogue: 0,0:03:13.26,0:03:19.42,Default,,0000,0000,0000,,But going on in history\Nthere's the home computer era. Dialogue: 0,0:03:21.86,0:03:25.73,Default,,0000,0000,0000,,In the home computer era you have\Nfixed character sets Dialogue: 0,0:03:25.73,0:03:31.84,Default,,0000,0000,0000,,and most of the time due to system\Nlimitations, memory limitations, Dialogue: 0,0:03:31.84,0:03:35.70,Default,,0000,0000,0000,,you have graphics mode and text mode. Dialogue: 0,0:03:38.10,0:03:46.84,Default,,0000,0000,0000,,In the graphics mode you can basically\Nset the pixels more or less as you want, Dialogue: 0,0:03:46.84,0:03:53.00,Default,,0000,0000,0000,,and in the text mode you can use fonts. Dialogue: 0,0:03:55.62,0:03:59.54,Default,,0000,0000,0000,,The screen configuration at that time\Nis more or less defined Dialogue: 0,0:03:59.54,0:04:01.54,Default,,0000,0000,0000,,by the state of technology. Dialogue: 0,0:04:01.54,0:04:07.74,Default,,0000,0000,0000,,So every screen at that time has more or\Nless the same resolution, Dialogue: 0,0:04:07.74,0:04:15.68,Default,,0000,0000,0000,,and that's something that the engineers\Nof that time relied on, Dialogue: 0,0:04:15.68,0:04:18.20,Default,,0000,0000,0000,,and also software engineers relied on. Dialogue: 0,0:04:19.66,0:04:24.98,Default,,0000,0000,0000,,The text rendering was just\Nusing bitmap fonts. Dialogue: 0,0:04:24.98,0:04:37.12,Default,,0000,0000,0000,,That means you have a fixed size character\Nand you just define it pixelwise Dialogue: 0,0:04:38.78,0:04:45.04,Default,,0000,0000,0000,,so it's some kind of hand-crafted\Ncharacters. Dialogue: 0,0:04:45.04,0:04:51.32,Default,,0000,0000,0000,,You have a given raster and then\Nyou really display Dialogue: 0,0:04:51.32,0:04:54.34,Default,,0000,0000,0000,,these hard-defined characters. Dialogue: 0,0:04:59.52,0:05:06.74,Default,,0000,0000,0000,,So then I need to introduce a few\Ntypography terms. Dialogue: 0,0:05:12.38,0:05:16.26,Default,,0000,0000,0000,,First, there's glyph or a character. Dialogue: 0,0:05:21.32,0:05:25.42,Default,,0000,0000,0000,,That's...well you can say a symbol. Dialogue: 0,0:05:26.92,0:05:31.70,Default,,0000,0000,0000,,So I think most people can understand what\Nthat means. Dialogue: 0,0:05:31.70,0:05:36.24,Default,,0000,0000,0000,,Then a font, this is a set of glyphs. Dialogue: 0,0:05:38.04,0:05:45.32,Default,,0000,0000,0000,,And then we have a collection of fonts,\Nthat is called typeface or font family. Dialogue: 0,0:05:45.32,0:05:53.02,Default,,0000,0000,0000,,Those are closely related fonts with\Nthe same visual appearance, Dialogue: 0,0:05:53.02,0:05:59.92,Default,,0000,0000,0000,,And they differ only in slopes or widths\Nor weights for example. Dialogue: 0,0:06:03.88,0:06:12.48,Default,,0000,0000,0000,,Usually with typesetting, with moving\Nletters in the printing press, Dialogue: 0,0:06:12.48,0:06:25.14,Default,,0000,0000,0000,,you really had, for weight for example,\Ndifferent pieces/letters/hardware. Dialogue: 0,0:06:27.74,0:06:31.46,Default,,0000,0000,0000,,And then the point size,\Nor typographic unit. Dialogue: 0,0:06:32.56,0:06:41.77,Default,,0000,0000,0000,,This is a measure of the size, and\Nderives directly from the printing press Dialogue: 0,0:06:41.77,0:06:44.56,Default,,0000,0000,0000,,with moving letters. Dialogue: 0,0:06:48.40,0:06:56.50,Default,,0000,0000,0000,,There are different definitions, and what\Nwe probably all use as point size is the Dialogue: 0,0:06:56.50,0:07:03.76,Default,,0000,0000,0000,,DTP point – desktop publishing point, Dialogue: 0,0:07:03.76,0:07:18.52,Default,,0000,0000,0000,,where one point is defined as 1/72 inch,\Nwhich is 0.3527 period millimeters. Dialogue: 0,0:07:18.52,0:07:25.98,Default,,0000,0000,0000,,It is interesting to note that this has\Nnothing to do with pixels. Dialogue: 0,0:07:28.60,0:07:30.98,Default,,0000,0000,0000,,[audience] (unintelligible question) Dialogue: 0,0:07:30.98,0:07:34.70,Default,,0000,0000,0000,,[Max] Please use the microphone\Nif you a question. Dialogue: 0,0:07:35.90,0:07:39.44,Default,,0000,0000,0000,,[audience] ...3257, what's the bar\Nover the 7 mean? Dialogue: 0,0:07:39.44,0:07:43.16,Default,,0000,0000,0000,,[Max] It means that the 7 goes\Non and on and on forever. Dialogue: 0,0:07:51.00,0:07:58.50,Default,,0000,0000,0000,,So this is typography of the\NLatin alphabet...terminology. Dialogue: 0,0:07:58.50,0:08:01.74,Default,,0000,0000,0000,,There's something called kerning. Dialogue: 0,0:08:02.40,0:08:08.38,Default,,0000,0000,0000,,You can see an example of kerning\Non the right side. Dialogue: 0,0:08:08.38,0:08:19.18,Default,,0000,0000,0000,,So in the printing press you have letters\Nand they usually have a gap. Dialogue: 0,0:08:21.40,0:08:29.60,Default,,0000,0000,0000,,To improve the readability, and to\Nmake all the text appear more uniform Dialogue: 0,0:08:31.14,0:08:33.76,Default,,0000,0000,0000,,the typesetter reduces the gap. Dialogue: 0,0:08:35.66,0:08:39.70,Default,,0000,0000,0000,,With moving letters they have special\Nletter pairs... Dialogue: 0,0:08:40.68,0:08:46.18,Default,,0000,0000,0000,,if you go on with this\Nthere are ligatures, Dialogue: 0,0:08:46.18,0:08:50.62,Default,,0000,0000,0000,,which are replacement glyphs for close\Nstanding characters. Dialogue: 0,0:08:52.14,0:08:57.30,Default,,0000,0000,0000,,An example of this is\Na double f, fi or fl. Dialogue: 0,0:08:58.30,0:09:05.44,Default,,0000,0000,0000,,So you can see also in the slides here\Nthat double f is such a ligature. Dialogue: 0,0:09:06.32,0:09:08.60,Default,,0000,0000,0000,,It's one connected glyph. Dialogue: 0,0:09:10.98,0:09:16.48,Default,,0000,0000,0000,,And then there's a speciality\Nif you reverse all of the ?? [static]. Dialogue: 0,0:09:18.12,0:09:20.04,Default,,0000,0000,0000,,The term non-proportional font. Dialogue: 0,0:09:20.04,0:09:27.30,Default,,0000,0000,0000,,So you have a font where very character,\Nevery glyph, has the same width. Dialogue: 0,0:09:27.30,0:09:30.64,Default,,0000,0000,0000,,This is also called monospace font. Dialogue: 0,0:09:33.64,0:09:40.82,Default,,0000,0000,0000,,Sometimes you distinguish half-width\Nand full width letters. Dialogue: 0,0:09:41.48,0:09:45.74,Default,,0000,0000,0000,,This is also something you would see\Non a typewriter for example. Dialogue: 0,0:09:47.44,0:09:54.02,Default,,0000,0000,0000,,Early bitmap fonts are usually\Nmonospaced fonts. Dialogue: 0,0:09:56.44,0:10:01.74,Default,,0000,0000,0000,,Okay, let's go to\Nthe text rendering stack. Dialogue: 0,0:10:06.52,0:10:08.98,Default,,0000,0000,0000,,Text rendering today. Dialogue: 0,0:10:10.40,0:10:15.09,Default,,0000,0000,0000,,In all computing nowadays,\Ntypography is introduced. Dialogue: 0,0:10:15.09,0:10:24.50,Default,,0000,0000,0000,,So won't find many devices on the market\Nwhich don't use accurate typography. Dialogue: 0,0:10:28.16,0:10:32.28,Default,,0000,0000,0000,,Glyphs are now represented as\Nsize-independent outlines. Dialogue: 0,0:10:32.28,0:10:37.52,Default,,0000,0000,0000,,We can see on the right side there's\Na font editor: Font Forge. Dialogue: 0,0:10:37.52,0:10:41.90,Default,,0000,0000,0000,,This is the way that such fonts\Nare created. Dialogue: 0,0:10:41.90,0:10:47.16,Default,,0000,0000,0000,,So you can see here in the picture\Nthe outline of the "S". Dialogue: 0,0:10:49.20,0:10:55.96,Default,,0000,0000,0000,,It's a size-independent outline and\Nyou can just use that for Dialogue: 0,0:10:55.96,0:10:59.18,Default,,0000,0000,0000,,every kind of display. Dialogue: 0,0:10:59.18,0:11:04.02,Default,,0000,0000,0000,,And then you do something that is called\Nrasterization, or sampling, or rendering Dialogue: 0,0:11:04.02,0:11:08.00,Default,,0000,0000,0000,,for displaying it at the actual display. Dialogue: 0,0:11:09.66,0:11:13.76,Default,,0000,0000,0000,,In the past this allowed for new\Napplications for computers. Dialogue: 0,0:11:13.76,0:11:19.68,Default,,0000,0000,0000,,First it allowed word processing and\Ncomputer-based typesetting. Dialogue: 0,0:11:21.24,0:11:26.32,Default,,0000,0000,0000,,Before that typesetting was\Na very hard job. Dialogue: 0,0:11:26.74,0:11:30.80,Default,,0000,0000,0000,,It allowed internationalization. Dialogue: 0,0:11:36.60,0:11:41.50,Default,,0000,0000,0000,,It allows universal graphical interface\Nwhich goes Dialogue: 0,0:11:41.50,0:11:45.42,Default,,0000,0000,0000,,hand-in-hand with internationalization. Dialogue: 0,0:11:46.28,0:11:52.38,Default,,0000,0000,0000,,Come to think of it, not so long ago it\Nwas not so common that you could Dialogue: 0,0:11:52.38,0:11:58.28,Default,,0000,0000,0000,,buy devices where you can easily switch\Nthe language to Dialogue: 0,0:11:58.28,0:12:01.68,Default,,0000,0000,0000,,any language you would like. Dialogue: 0,0:12:01.68,0:12:05.32,Default,,0000,0000,0000,,This is just a recent development. Dialogue: 0,0:12:06.60,0:12:15.60,Default,,0000,0000,0000,,So now I will give you an overview of\Nthe formats we see on Linux systems. Dialogue: 0,0:12:15.60,0:12:18.88,Default,,0000,0000,0000,,First I talk about the bitmap formats. Dialogue: 0,0:12:18.88,0:12:27.12,Default,,0000,0000,0000,,Today we have bitmap formats in the\NPC Screen Font format, Dialogue: 0,0:12:27.12,0:12:28.96,Default,,0000,0000,0000,,PSF or PSFU. Dialogue: 0,0:12:28.96,0:12:36.18,Default,,0000,0000,0000,,These are the fonts that are used for the\NLinux VT, also known as the console. Dialogue: 0,0:12:36.18,0:12:45.70,Default,,0000,0000,0000,,Usually you can store in such a font\N256 or 512 glyphs. Dialogue: 0,0:12:45.70,0:12:52.54,Default,,0000,0000,0000,,Some of them contain\Na Unicode translation table. Dialogue: 0,0:12:53.80,0:12:59.50,Default,,0000,0000,0000,,And on the other hand there are\NX Window System Bitmap Fonts. Dialogue: 0,0:12:59.50,0:13:02.82,Default,,0000,0000,0000,,There are three formats: Dialogue: 0,0:13:02.82,0:13:07.06,Default,,0000,0000,0000,,There's a Sever Normal Format (SNF). Dialogue: 0,0:13:07.06,0:13:11.34,Default,,0000,0000,0000,,Glyph Bitmap Distribution Format (BDF). Dialogue: 0,0:13:11.34,0:13:13.96,Default,,0000,0000,0000,,And Portable Compiled Format (PCF). Dialogue: 0,0:13:13.96,0:13:22.68,Default,,0000,0000,0000,,Nowadays PCF is the only letter that\Nyou can find on a Linux system if so, Dialogue: 0,0:13:22.68,0:13:29.16,Default,,0000,0000,0000,,and the first two are deprecated. Dialogue: 0,0:13:29.16,0:13:40.22,Default,,0000,0000,0000,,And also the X Window Bitmap Fonts\Nthemselves are not very common these days. Dialogue: 0,0:13:44.56,0:13:47.38,Default,,0000,0000,0000,,To the outline font formats. Dialogue: 0,0:13:49.02,0:13:51.96,Default,,0000,0000,0000,,There are Postscript Formats. Dialogue: 0,0:13:53.92,0:14:05.24,Default,,0000,0000,0000,,Postscript Formats have different versions\Nas I would call them. It's called types. Dialogue: 0,0:14:05.24,0:14:11.54,Default,,0000,0000,0000,,Type 1 is the one that is still relevant,\Nto a certain degree. Dialogue: 0,0:14:11.54,0:14:16.76,Default,,0000,0000,0000,,Those are the ones you can probably Dialogue: 0,0:14:16.76,0:14:21.40,Default,,0000,0000,0000,,find on a standard Debian installation\Nfor example. Dialogue: 0,0:14:21.40,0:14:23.88,Default,,0000,0000,0000,,It uses cubic bezier curves. Dialogue: 0,0:14:26.12,0:14:35.76,Default,,0000,0000,0000,,The file format is divided into\Ndifferent files. Dialogue: 0,0:14:35.76,0:14:39.50,Default,,0000,0000,0000,,So for every font you have\NPrinter Font ASCII Dialogue: 0,0:14:39.50,0:14:44.20,Default,,0000,0000,0000,,or a Printer Font Binary file,\Nand you have Dialogue: 0,0:14:44.20,0:14:49.12,Default,,0000,0000,0000,,a Print Font Metric or\NAdobe Font Metric file. Dialogue: 0,0:14:54.74,0:15:00.90,Default,,0000,0000,0000,,Then you have the Truetype file format. Dialogue: 0,0:15:02.86,0:15:07.70,Default,,0000,0000,0000,,This is more common. I guess everyone\Nheard of that already. Dialogue: 0,0:15:08.94,0:15:12.14,Default,,0000,0000,0000,,It uses quadratic bezier curves. Dialogue: 0,0:15:13.76,0:15:21.42,Default,,0000,0000,0000,,It can contain optional code for\NTrueType Hinting Virtual Machine. Dialogue: 0,0:15:21.42,0:15:25.12,Default,,0000,0000,0000,,What that means I will explain latter. Dialogue: 0,0:15:25.12,0:15:30.74,Default,,0000,0000,0000,,There's a third format,\Nthe OpenType format, Dialogue: 0,0:15:30.74,0:15:35.16,Default,,0000,0000,0000,,which has two possible glyph formats:\None is TrueType, Dialogue: 0,0:15:35.16,0:15:40.98,Default,,0000,0000,0000,,and the other is Compact Font Format,\Nwhich is based on Postscript Type 2. Dialogue: 0,0:15:40.98,0:15:47.88,Default,,0000,0000,0000,,So you can say what is new in this format,\Nor what's the difference? Dialogue: 0,0:15:47.88,0:15:51.70,Default,,0000,0000,0000,,Well it supports so-called Smartfonts. Dialogue: 0,0:15:53.58,0:15:59.60,Default,,0000,0000,0000,,That means you can have language-specific\Nligatures or character substitutions. Dialogue: 0,0:16:01.36,0:16:09.56,Default,,0000,0000,0000,,For example, kerning classes, which means\Nyou have a class of characters like Dialogue: 0,0:16:09.56,0:16:13.52,Default,,0000,0000,0000,,the A and different variations. Dialogue: 0,0:16:13.52,0:16:19.82,Default,,0000,0000,0000,,So these are A with different diacritic\Nsymbols, Dialogue: 0,0:16:19.82,0:16:30.56,Default,,0000,0000,0000,,and you can just use one kerning class for\Nall of those characters and don't have to Dialogue: 0,0:16:30.56,0:16:37.58,Default,,0000,0000,0000,,invent the wheel for every A with\Ndiacritic symbols anew. Dialogue: 0,0:16:43.54,0:16:50.14,Default,,0000,0000,0000,,Now to the font rendering techniques that\NI use today. Dialogue: 0,0:16:53.54,0:17:02.36,Default,,0000,0000,0000,,This only applies to the outline fonts\Nbecause well rendering bitmap fonts is Dialogue: 0,0:17:02.36,0:17:11.02,Default,,0000,0000,0000,,obviously quite easy. You just paint the\Npixels that are in the bitmap. Dialogue: 0,0:17:11.02,0:17:17.48,Default,,0000,0000,0000,,So rasterization is all about using\Noutline fonts. Dialogue: 0,0:17:19.28,0:17:24.62,Default,,0000,0000,0000,,The one library library that is used all\Nover the free and open source world Dialogue: 0,0:17:24.62,0:17:26.18,Default,,0000,0000,0000,,is FreeType. Dialogue: 0,0:17:26.18,0:17:40.60,Default,,0000,0000,0000,,It is used on Linux system, BSD desktops,\NAndroid, and ReactOS, and some others. Dialogue: 0,0:17:40.60,0:17:47.30,Default,,0000,0000,0000,,For example it is contained in Ghostscript\Nand therefore in most of the printers. Dialogue: 0,0:17:49.04,0:17:52.14,Default,,0000,0000,0000,,It's also on iOS [exhale]. Dialogue: 0,0:17:53.14,0:17:59.75,Default,,0000,0000,0000,,So the naive rasterization algorithm would\Nbe just lay a pixel raster over the Dialogue: 0,0:17:59.75,0:18:06.35,Default,,0000,0000,0000,,outline font, over the character you want\Nto display, and if the center of the pixel Dialogue: 0,0:18:06.35,0:18:09.90,Default,,0000,0000,0000,,is inside the outline then you\Nset the color to black. Dialogue: 0,0:18:14.96,0:18:19.34,Default,,0000,0000,0000,,The problem is the so called\Naliasing effect. Dialogue: 0,0:18:19.34,0:18:23.82,Default,,0000,0000,0000,,This is what you can see\Nin the picture below. Dialogue: 0,0:18:23.82,0:18:29.76,Default,,0000,0000,0000,,So those are the same words,\Nrendered at different resolutions. Dialogue: 0,0:18:29.76,0:18:36.44,Default,,0000,0000,0000,,The left one has 10x the resolution\Nof the right one. Dialogue: 0,0:18:38.62,0:18:49.54,Default,,0000,0000,0000,,You can see that, for example,\Nthe 'w' is quite deformed. Dialogue: 0,0:18:49.54,0:18:55.34,Default,,0000,0000,0000,,Or the curl of the 'g';\Nthere's even a part missing. Dialogue: 0,0:18:55.34,0:18:59.80,Default,,0000,0000,0000,,So you have details of the font\Nwhich are lost, Dialogue: 0,0:18:59.80,0:19:02.04,Default,,0000,0000,0000,,and you have artefacts. Dialogue: 0,0:19:04.24,0:19:11.58,Default,,0000,0000,0000,,Somehow, especially in the early computing\Ndays you wanted to reduce those, Dialogue: 0,0:19:11.58,0:19:15.48,Default,,0000,0000,0000,,and therefore you used a technique\Ncalled hinting. Dialogue: 0,0:19:15.48,0:19:20.82,Default,,0000,0000,0000,,This is to avoid such artefacts and\Nimprove the readability Dialogue: 0,0:19:20.82,0:19:22.52,Default,,0000,0000,0000,,at lower resolutions. Dialogue: 0,0:19:22.52,0:19:34.66,Default,,0000,0000,0000,,Therefore the outline is adjusted to fit\Nthe pixel raster at the rasterization. Dialogue: 0,0:19:36.90,0:19:41.84,Default,,0000,0000,0000,,Some of the fonts can contain\Ninstructions, the so-called hints Dialogue: 0,0:19:41.84,0:19:46.02,Default,,0000,0000,0000,,where the the name comes from:\N"hinting". Dialogue: 0,0:19:51.36,0:19:58.86,Default,,0000,0000,0000,,You can see in the example here,\Nin the picture above, Dialogue: 0,0:19:58.86,0:20:07.86,Default,,0000,0000,0000,,that it's quite a good result. Dialogue: 0,0:20:07.86,0:20:15.48,Default,,0000,0000,0000,,This is much more readable\Nthan the word above. Dialogue: 0,0:20:15.48,0:20:22.56,Default,,0000,0000,0000,,However, with the use of hinting, there\Nare also characteristics of the font lost Dialogue: 0,0:20:24.20,0:20:27.54,Default,,0000,0000,0000,,which is obvious because\Nif you change the outline Dialogue: 0,0:20:27.54,0:20:31.16,Default,,0000,0000,0000,,then obviously characteristics get lost. Dialogue: 0,0:20:31.16,0:20:37.26,Default,,0000,0000,0000,,And especially important for\Nword processing, Dialogue: 0,0:20:37.26,0:20:39.64,Default,,0000,0000,0000,,what you see is what you get\Nword processing, Dialogue: 0,0:20:39.64,0:20:43.68,Default,,0000,0000,0000,,is that the tracking\Nof the font is changed. Dialogue: 0,0:20:45.92,0:20:49.96,Default,,0000,0000,0000,,So tracking means the width\Nof single characters. Dialogue: 0,0:20:49.96,0:20:56.68,Default,,0000,0000,0000,,The picture below, this is a picture I\Ntook from LibreOffice. Dialogue: 0,0:20:56.68,0:21:05.30,Default,,0000,0000,0000,,If you have a close look, you can see\Nthat the gap between those 'i' characters Dialogue: 0,0:21:05.30,0:21:07.30,Default,,0000,0000,0000,,is not always the same. Dialogue: 0,0:21:08.04,0:21:16.88,Default,,0000,0000,0000,,But if do word processing, you actually\Nwant to have a result which looks the same Dialogue: 0,0:21:16.88,0:21:18.88,Default,,0000,0000,0000,,as on the printout. Dialogue: 0,0:21:20.48,0:21:26.84,Default,,0000,0000,0000,,So I would recommend not\Nto hint fonts in Dialogue: 0,0:21:26.84,0:21:29.86,Default,,0000,0000,0000,,a what you see is what you get\Nword processor. Dialogue: 0,0:21:33.52,0:21:40.98,Default,,0000,0000,0000,,If you have a look beyond the backyard,\Non macOS there exists no hinting, Dialogue: 0,0:21:40.98,0:21:45.78,Default,,0000,0000,0000,,and in the Windows world, hint can't\Nbe turned off, Dialogue: 0,0:21:45.78,0:21:52.32,Default,,0000,0000,0000,,so this is hardwired in the\Nfont rendering of the Windows system. Dialogue: 0,0:21:56.12,0:22:03.48,Default,,0000,0000,0000,,Well another approach to improve\Nreadability is anti-aliasing Dialogue: 0,0:22:03.48,0:22:08.40,Default,,0000,0000,0000,,which applies multisampling. Dialogue: 0,0:22:08.40,0:22:15.92,Default,,0000,0000,0000,,So for every pixel you take samples at\Ndifferent spots Dialogue: 0,0:22:15.92,0:22:22.24,Default,,0000,0000,0000,,and then you compute from\Nthat a gray value, Dialogue: 0,0:22:22.24,0:22:29.24,Default,,0000,0000,0000,,which is a measure of how much of the\Narea of the pixel is covered by the glyph. Dialogue: 0,0:22:33.26,0:22:40.04,Default,,0000,0000,0000,,On the picture you can see again\Nthe simple raster word, Dialogue: 0,0:22:40.04,0:22:45.84,Default,,0000,0000,0000,,and then in the middle you see the word\Nwith anti-aliasing, Dialogue: 0,0:22:46.24,0:22:56.00,Default,,0000,0000,0000,,and below you can see a combination of\Nhinting and antialiasing. Dialogue: 0,0:22:58.70,0:23:02.86,Default,,0000,0000,0000,,Suddenly the text becomes very readable\Nalso on low resolutions. Dialogue: 0,0:23:04.74,0:23:12.46,Default,,0000,0000,0000,,This is what was usually used in\Ncomputing in the 90s. Dialogue: 0,0:23:18.44,0:23:23.56,Default,,0000,0000,0000,,So there is another approach to improve\Nand therefore I have to Dialogue: 0,0:23:23.56,0:23:27.08,Default,,0000,0000,0000,,talk a bit about LCD displays. Dialogue: 0,0:23:27.08,0:23:37.14,Default,,0000,0000,0000,,So in the picture on the left, above you\Ncan see tube monitor pixels and Dialogue: 0,0:23:37.14,0:23:40.68,Default,,0000,0000,0000,,on the bottom you can see\NLCD monitor pixels. Dialogue: 0,0:23:40.68,0:23:50.40,Default,,0000,0000,0000,,All of the pixels consist of so-called\Nsubpixels with different colors. Dialogue: 0,0:23:52.16,0:23:55.94,Default,,0000,0000,0000,,The mixture of the three different colors Dialogue: 0,0:23:55.94,0:24:01.66,Default,,0000,0000,0000,,gives them a wide range\Nof different colors. Dialogue: 0,0:24:04.56,0:24:12.54,Default,,0000,0000,0000,,With the tube monitors this is not used,\Nbut with LCD display Dialogue: 0,0:24:12.54,0:24:18.68,Default,,0000,0000,0000,,depending on the\Nconfiguration of the subpixels Dialogue: 0,0:24:18.68,0:24:23.32,Default,,0000,0000,0000,,it can be used to improve improve the\Nresolution in one direction. Dialogue: 0,0:24:23.32,0:24:29.40,Default,,0000,0000,0000,,Therefore you have to know how the\Nconfiguration of the display is. Dialogue: 0,0:24:29.40,0:24:36.98,Default,,0000,0000,0000,,So usually, one pixel, which you can see\Nin the picture below right? Dialogue: 0,0:24:36.98,0:24:40.12,Default,,0000,0000,0000,,These are the usual computer monitors. Dialogue: 0,0:24:40.12,0:24:51.86,Default,,0000,0000,0000,,One pixel consists of a red, green and a\Nblue subpixel in this order. Dialogue: 0,0:24:51.86,0:24:58.40,Default,,0000,0000,0000,,But you have to keep in mind, especially\Nwith tablets, or smartphones, Dialogue: 0,0:24:58.40,0:25:05.20,Default,,0000,0000,0000,,you can rotate the screen, so you have to\Nkeep that in mind. Dialogue: 0,0:25:06.06,0:25:11.28,Default,,0000,0000,0000,,Also there are other subpixel\Nconfigurations. Dialogue: 0,0:25:11.28,0:25:17.88,Default,,0000,0000,0000,,For example, depending on the technology\Nthere can be additional red or green Dialogue: 0,0:25:17.88,0:25:20.18,Default,,0000,0000,0000,,or even white subpixels. Dialogue: 0,0:25:24.18,0:25:30.40,Default,,0000,0000,0000,,So there are also multiple possibilities\Nof the configuration. Dialogue: 0,0:25:33.84,0:25:39.50,Default,,0000,0000,0000,,We can use this configuration as I said\Nto improve the resolution Dialogue: 0,0:25:39.50,0:25:45.00,Default,,0000,0000,0000,,and in the usual case\Nthis is horizontally. Dialogue: 0,0:25:45.00,0:25:50.44,Default,,0000,0000,0000,,You can see on the picture\Non the left side, Dialogue: 0,0:25:52.80,0:25:59.40,Default,,0000,0000,0000,,first there's the naive,\Nsimple rendered character, Dialogue: 0,0:25:59.40,0:26:03.88,Default,,0000,0000,0000,,then the character\Njust using anti-aliasing, Dialogue: 0,0:26:03.88,0:26:08.34,Default,,0000,0000,0000,,and then there's the\Nsubpixel rendered character. Dialogue: 0,0:26:10.06,0:26:16.26,Default,,0000,0000,0000,,This one is the most readable\Nor most sharp character. Dialogue: 0,0:26:16.26,0:26:25.10,Default,,0000,0000,0000,,Not sharp!... but it's most correctly\Nrendered according to the outline font. Dialogue: 0,0:26:25.96,0:26:31.42,Default,,0000,0000,0000,,Depending on the technique of the display, Dialogue: 0,0:26:31.42,0:26:41.34,Default,,0000,0000,0000,,you can see a color haze\Naround the characters. Dialogue: 0,0:26:44.08,0:26:49.26,Default,,0000,0000,0000,,So this happens when the software\Nand the display technology Dialogue: 0,0:26:49.26,0:26:52.02,Default,,0000,0000,0000,,don't match each other. Dialogue: 0,0:26:54.18,0:26:59.32,Default,,0000,0000,0000,,So this is what you can see\Non the picture on the right. Dialogue: 0,0:27:01.34,0:27:07.90,Default,,0000,0000,0000,,Okay, let's talk about the font rendering\Nsoftware parts in the Linux desktop. Dialogue: 0,0:27:10.66,0:27:15.34,Default,,0000,0000,0000,,There's the so-called server-side\Ntext rendering. Dialogue: 0,0:27:16.60,0:27:21.76,Default,,0000,0000,0000,,So in the X server there's the\NCore Font subsystem. Dialogue: 0,0:27:25.04,0:27:31.94,Default,,0000,0000,0000,,With that, X11 clients can request the\Nserver to display a text Dialogue: 0,0:27:31.94,0:27:36.16,Default,,0000,0000,0000,,by sending a string via libXfont Dialogue: 0,0:27:36.16,0:27:45.22,Default,,0000,0000,0000,,and using the so-called\NX Logical Font Description (XLFD). Dialogue: 0,0:27:45.22,0:27:52.92,Default,,0000,0000,0000,,Here's an example for Adobe Career font, Dialogue: 0,0:27:52.92,0:28:02.60,Default,,0000,0000,0000,,then the X server has to\Nrender the text using the font. Dialogue: 0,0:28:05.98,0:28:10.94,Default,,0000,0000,0000,,If you imagine a terminal server setup\Nwith thin clients, Dialogue: 0,0:28:10.94,0:28:18.50,Default,,0000,0000,0000,,then the thin client runs the X server\Nand the terminal server runs the X client Dialogue: 0,0:28:18.50,0:28:27.62,Default,,0000,0000,0000,,and every thin client then has to\Nhandle the font rendering. Dialogue: 0,0:28:27.62,0:28:34.52,Default,,0000,0000,0000,,So I don't know if\Nthis is the only reason, Dialogue: 0,0:28:34.52,0:28:40.88,Default,,0000,0000,0000,,but nowadays server-side font\Nrendering is not so common. Dialogue: 0,0:28:40.88,0:28:47.62,Default,,0000,0000,0000,,Probably not used anymore. Dialogue: 0,0:28:52.54,0:28:56.16,Default,,0000,0000,0000,,Now I have to talk first\Nabout font management. Dialogue: 0,0:28:56.16,0:29:01.72,Default,,0000,0000,0000,,In Linux systems there is\Na software called fontconfig, Dialogue: 0,0:29:01.72,0:29:05.28,Default,,0000,0000,0000,,which manages installed fonts\Non the system Dialogue: 0,0:29:05.28,0:29:15.64,Default,,0000,0000,0000,,and it configures for example how to\Nsubstitute fonts. Dialogue: 0,0:29:17.16,0:29:24.28,Default,,0000,0000,0000,,For example if in a document there's a\Nfont to render a text Dialogue: 0,0:29:24.28,0:29:27.12,Default,,0000,0000,0000,,and the font is not\Navailable on the system Dialogue: 0,0:29:27.12,0:29:33.86,Default,,0000,0000,0000,,then in the font config system there can\Nbe rules to replace the font Dialogue: 0,0:29:33.86,0:29:36.64,Default,,0000,0000,0000,,with a similar font. Dialogue: 0,0:29:37.38,0:29:41.02,Default,,0000,0000,0000,,This is heavily used in Linux systems. Dialogue: 0,0:29:41.02,0:29:47.76,Default,,0000,0000,0000,,There are also rules for what font to\Nuse if the current selected font Dialogue: 0,0:29:47.76,0:29:51.48,Default,,0000,0000,0000,,doesn't contain a character\Nyou want to display. Dialogue: 0,0:29:52.94,0:29:59.02,Default,,0000,0000,0000,,You can see on the picture on the right\Nthat this is also used... Dialogue: 0,0:29:59.02,0:30:01.80,Default,,0000,0000,0000,,although I have to admit, Dialogue: 0,0:30:01.80,0:30:07.92,Default,,0000,0000,0000,,I had to take this picture on a Debian 5.0\Nsystem in LibreOffice Dialogue: 0,0:30:07.92,0:30:12.00,Default,,0000,0000,0000,,because nowadays\Nit works a bit different, Dialogue: 0,0:30:12.00,0:30:17.78,Default,,0000,0000,0000,,but this is a good example where\Nyou can see that those characters Dialogue: 0,0:30:17.78,0:30:20.82,Default,,0000,0000,0000,,come from different fonts actually. Dialogue: 0,0:30:23.22,0:30:27.92,Default,,0000,0000,0000,,There's also a command line tool\Nwhich is quite nice. Dialogue: 0,0:30:27.92,0:30:29.58,Default,,0000,0000,0000,,fc-match command line tool. Dialogue: 0,0:30:29.58,0:30:37.46,Default,,0000,0000,0000,,So for example if you want to see what is\Nthe replacement font for, let's say, Arial Dialogue: 0,0:30:37.46,0:30:40.96,Default,,0000,0000,0000,,then you get the output:\Nokay, it's Nimbus Sans. Dialogue: 0,0:30:44.84,0:30:47.96,Default,,0000,0000,0000,,And you can also set rendering options, Dialogue: 0,0:30:47.96,0:30:55.88,Default,,0000,0000,0000,,which means you can set anti-aliasing\Nor you can turn off hinting. Dialogue: 0,0:31:00.26,0:31:06.70,Default,,0000,0000,0000,,Usually these configurations are stored in\N/etc/fonts Dialogue: 0,0:31:06.70,0:31:11.80,Default,,0000,0000,0000,,and there is also a per-user configuration\Nin .config/fontconfig Dialogue: 0,0:31:11.80,0:31:19.68,Default,,0000,0000,0000,,and it's in XML file format snippets. Dialogue: 0,0:31:21.50,0:31:24.92,Default,,0000,0000,0000,,In the picture you can see an example. Dialogue: 0,0:31:24.92,0:31:33.02,Default,,0000,0000,0000,,This is the replacement rule for\NCarlito and Calibri. Dialogue: 0,0:31:35.54,0:31:41.54,Default,,0000,0000,0000,,Carlito is a replacement font for the\Nnowadays often used Dialogue: 0,0:31:41.54,0:31:44.20,Default,,0000,0000,0000,,Calibri font from Microsoft. Dialogue: 0,0:31:45.78,0:31:54.38,Default,,0000,0000,0000,,So this configuration says the one way,\NCarlito is the same as Calibri, Dialogue: 0,0:31:54.38,0:31:56.24,Default,,0000,0000,0000,,and the other way around. Dialogue: 0,0:31:56.24,0:31:58.28,Default,,0000,0000,0000,,This is just an example, Dialogue: 0,0:31:58.28,0:32:03.94,Default,,0000,0000,0000,,you can have a look at /etc/fonts\Nand a lot of such snippets. Dialogue: 0,0:32:07.34,0:32:12.64,Default,,0000,0000,0000,,It defines how fonts are\Ndisplayed on the system. Dialogue: 0,0:32:16.18,0:32:23.72,Default,,0000,0000,0000,,Another thing, and this is the reason\Nwhy I had to take the screenshot Dialogue: 0,0:32:23.72,0:32:29.78,Default,,0000,0000,0000,,on an older system, there's a piece of\Nsoftware called HarfBuzz. Dialogue: 0,0:32:29.78,0:32:35.24,Default,,0000,0000,0000,,HarfBuzz is Persian for OpenType, Dialogue: 0,0:32:35.24,0:32:41.46,Default,,0000,0000,0000,,so this software relies on the OpenType\Nfont format. Dialogue: 0,0:32:41.46,0:32:46.40,Default,,0000,0000,0000,,You can see on the right side\Nthe HarfBuzz logo Dialogue: 0,0:32:46.40,0:32:50.18,Default,,0000,0000,0000,,that actually says\NHarfBuzz in Persian. Dialogue: 0,0:32:53.50,0:32:56.24,Default,,0000,0000,0000,,Before I talked about ligatures, Dialogue: 0,0:32:56.24,0:33:02.84,Default,,0000,0000,0000,,In some languages ligatures are required\Nto render fonts correctly Dialogue: 0,0:33:02.84,0:33:09.22,Default,,0000,0000,0000,,and this is an example on the left of\NDevanagari, which is an Indic script. Dialogue: 0,0:33:11.72,0:33:17.70,Default,,0000,0000,0000,,So if you have the first two characters\Ncombined then this is the rule Dialogue: 0,0:33:17.70,0:33:24.50,Default,,0000,0000,0000,,of how to replace those characters\Nwith a third glyph. Dialogue: 0,0:33:29.48,0:33:34.28,Default,,0000,0000,0000,,There were early implementations\Nby Qt and Pango Dialogue: 0,0:33:34.28,0:33:38.74,Default,,0000,0000,0000,,and those were integrated in HarfBuzz. Dialogue: 0,0:33:41.14,0:33:44.78,Default,,0000,0000,0000,,Well those parts are now known as\NHarfbuzz Old, Dialogue: 0,0:33:44.78,0:33:50.22,Default,,0000,0000,0000,,and the current HarfBuzz is a rewrite. Dialogue: 0,0:33:51.58,0:33:57.02,Default,,0000,0000,0000,,Nowadays it's also used for\Nthe so-called simple script, Dialogue: 0,0:33:59.26,0:34:03.66,Default,,0000,0000,0000,,meaning especially Latin script, Dialogue: 0,0:34:03.66,0:34:12.06,Default,,0000,0000,0000,,and is integrated into Qt, GTK,\NLibreOffice, Firefox, Android, and XETEX. Dialogue: 0,0:34:12.06,0:34:14.88,Default,,0000,0000,0000,,This is what I use for the slides here, Dialogue: 0,0:34:14.88,0:34:20.84,Default,,0000,0000,0000,,so all the slides here are\Nalso rendered using HarfBuzz. Dialogue: 0,0:34:20.84,0:34:24.88,Default,,0000,0000,0000,,And of course the whole\Nfont rendering stack. Dialogue: 0,0:34:26.30,0:34:34.86,Default,,0000,0000,0000,,HarfBuzz also has fancy features like\Nvariable widths or weight Dialogue: 0,0:34:34.86,0:34:45.76,Default,,0000,0000,0000,,with only one font or you can define\Nin the font characters with Dialogue: 0,0:34:45.76,0:34:55.54,Default,,0000,0000,0000,,variable widths and without stepping you\Ncan change it using HarfBuzz. Dialogue: 0,0:34:59.94,0:35:04.76,Default,,0000,0000,0000,,Those techniques are used in\Nclient-side rendering. Dialogue: 0,0:35:06.86,0:35:15.10,Default,,0000,0000,0000,,One library often was\Nuntil recently often used, Xft. Dialogue: 0,0:35:17.82,0:35:22.48,Default,,0000,0000,0000,,Well this is the applications meaning the\NX clients render the text Dialogue: 0,0:35:24.06,0:35:27.28,Default,,0000,0000,0000,,based on FreeType and fontconfig. Dialogue: 0,0:35:27.80,0:35:31.24,Default,,0000,0000,0000,,Then the X server\Nonly displays the results. Dialogue: 0,0:35:32.16,0:35:36.14,Default,,0000,0000,0000,,Well, there is some caching involved, Dialogue: 0,0:35:36.14,0:35:42.20,Default,,0000,0000,0000,,and it requires\Nan extension to the protocol. Dialogue: 0,0:35:51.16,0:35:56.12,Default,,0000,0000,0000,,In the widget libraries this was also\Nused a long time, Dialogue: 0,0:35:56.12,0:36:01.54,Default,,0000,0000,0000,,but now Qt, for example, has its own\Ncode for font rendering Dialogue: 0,0:36:01.54,0:36:05.24,Default,,0000,0000,0000,,based on HarfBuzz, FreeType,\Nand fontconfig. Dialogue: 0,0:36:05.24,0:36:09.14,Default,,0000,0000,0000,,There's the combination of\NPango and Cairo, Dialogue: 0,0:36:09.14,0:36:13.00,Default,,0000,0000,0000,,which is used in the GTK environment. Dialogue: 0,0:36:13.00,0:36:22.66,Default,,0000,0000,0000,,Pango derives from Greek and Japanese:\Npan means all and go means languages. Dialogue: 0,0:36:22.66,0:36:29.66,Default,,0000,0000,0000,,So this is the background to write\Nin all languages. Dialogue: 0,0:36:29.66,0:36:34.00,Default,,0000,0000,0000,,This also uses HarfBuzz, FreeType,\Nand fontconfig. Dialogue: 0,0:36:34.00,0:36:39.78,Default,,0000,0000,0000,,And if you look at Wayland clients,\Nthey only do client-side rendering. Dialogue: 0,0:36:42.66,0:36:48.14,Default,,0000,0000,0000,,To sum it up, we have a variety of\Ntechniques for text display. Dialogue: 0,0:36:50.34,0:36:53.60,Default,,0000,0000,0000,,Some have historical than\Npractical value nowadays. Dialogue: 0,0:36:53.60,0:36:58.94,Default,,0000,0000,0000,,The modern font rendering stack\Nis quite complex. Dialogue: 0,0:37:03.84,0:37:08.82,Default,,0000,0000,0000,,But writing is one of the\Nmain interface to computers, Dialogue: 0,0:37:08.82,0:37:12.16,Default,,0000,0000,0000,,so developers should be aware\Nof the complexity. Dialogue: 0,0:37:14.46,0:37:16.56,Default,,0000,0000,0000,,Keep that in mind. Dialogue: 0,0:37:17.72,0:37:18.54,Default,,0000,0000,0000,,Thank you. Dialogue: 0,0:37:20.28,0:37:24.08,Default,,0000,0000,0000,,[applause] Dialogue: 0,0:37:33.64,0:37:35.44,Default,,0000,0000,0000,,Are there any questions? Dialogue: 0,0:37:41.10,0:37:45.04,Default,,0000,0000,0000,,[audience] More a request than a question,\NI find the topic very interesting Dialogue: 0,0:37:45.04,0:37:51.24,Default,,0000,0000,0000,,and I'd like to check it again. I know\Nyour video was not recorded Dialogue: 0,0:37:51.24,0:37:53.64,Default,,0000,0000,0000,,or I think it was not recorded... Dialogue: 0,0:37:53.64,0:37:57.08,Default,,0000,0000,0000,,[Max] Well it was I think. Dialogue: 0,0:37:58.34,0:38:04.55,Default,,0000,0000,0000,,[audience] Okay so nevermind, but still\Nif you are able to share your presentation Dialogue: 0,0:38:04.55,0:38:05.38,Default,,0000,0000,0000,,[Max] Yes Dialogue: 0,0:38:05.38,0:38:08.30,Default,,0000,0000,0000,,[audience] I would be very\Nhappy to look at it. Thank you. Dialogue: 0,0:38:16.96,0:38:25.64,Default,,0000,0000,0000,,[audience] [tests mic] What's\Nthe problem due to the Dialogue: 0,0:38:25.64,0:38:32.90,Default,,0000,0000,0000,,complexity from the software stack\Nin your open ??. Dialogue: 0,0:38:32.90,0:38:36.24,Default,,0000,0000,0000,,[Max] The problem of what? Dialogue: 0,0:38:36.24,0:38:48.32,Default,,0000,0000,0000,,[audience] What's the problem it came from\Nthis complex software stack Dialogue: 0,0:38:48.32,0:38:50.32,Default,,0000,0000,0000,,in your open ??. Dialogue: 0,0:38:50.32,0:38:59.42,Default,,0000,0000,0000,,There's no problem with that,\Nor there's some problem Dialogue: 0,0:38:59.42,0:39:11.30,Default,,0000,0000,0000,,with these lot of layers, very lot of\Ncomponents to render the font. Dialogue: 0,0:39:11.30,0:39:17.44,Default,,0000,0000,0000,,[Max] Okay, I try to rephrase the question\N[audience] Please. Dialogue: 0,0:39:17.44,0:39:22.82,Default,,0000,0000,0000,,[Max] What is the reason there is so many\Nlayers in the font rendering stack today. Dialogue: 0,0:39:22.82,0:39:23.98,Default,,0000,0000,0000,,[Max] Is that correct? Dialogue: 0,0:39:23.98,0:39:38.12,Default,,0000,0000,0000,,[audience] And it caused some problem. Do\Nyou know any problem Dialogue: 0,0:39:38.12,0:39:41.60,Default,,0000,0000,0000,,with current font rendering system. Dialogue: 0,0:39:41.60,0:39:43.70,Default,,0000,0000,0000,,[Max] Colored font rendering system? Dialogue: 0,0:39:43.70,0:39:45.70,Default,,0000,0000,0000,,[audience] Current, now. Dialogue: 0,0:39:48.04,0:39:49.44,Default,,0000,0000,0000,,[Max] Ah current font- Dialogue: 0,0:39:49.44,0:39:52.50,Default,,0000,0000,0000,,[audience 2] The question is\Nwhether the complexity Dialogue: 0,0:39:52.50,0:39:55.52,Default,,0000,0000,0000,,means that there are\Ndifficulties for developers. Dialogue: 0,0:39:55.52,0:39:56.70,Default,,0000,0000,0000,,Is it too complex? Dialogue: 0,0:39:56.70,0:39:58.20,Default,,0000,0000,0000,,Does that cause problems? Dialogue: 0,0:39:58.20,0:40:02.64,Default,,0000,0000,0000,,[Max] Well the complexity is hidden behind\Nthe font rendering stack. Dialogue: 0,0:40:02.64,0:40:10.56,Default,,0000,0000,0000,,So it's a huge collection of software, Dialogue: 0,0:40:10.56,0:40:17.62,Default,,0000,0000,0000,,usually there's HarfBuzz, fontconfig,\Nand FreeType heavily used nowadays. Dialogue: 0,0:40:17.62,0:40:22.30,Default,,0000,0000,0000,,But it's all encapsulated\Nin these libraries Dialogue: 0,0:40:22.30,0:40:29.14,Default,,0000,0000,0000,,and it's used all over\Nthe free software world Dialogue: 0,0:40:30.24,0:40:39.08,Default,,0000,0000,0000,,and it makes it easy to write applications\Nwhich are easily translatable. Dialogue: 0,0:40:39.84,0:40:47.80,Default,,0000,0000,0000,,[audience] Yes but for example,\Nthe fontconfig is not so flexible. Dialogue: 0,0:40:47.80,0:40:55.08,Default,,0000,0000,0000,,For example, when we're using\Nmainly Japanese Dialogue: 0,0:40:55.08,0:41:01.80,Default,,0000,0000,0000,,and other display of the language, Dialogue: 0,0:41:01.80,0:41:13.16,Default,,0000,0000,0000,,then the font of config chooses the\Nnon-Japanese font like the Chinese one. Dialogue: 0,0:41:13.16,0:41:28.22,Default,,0000,0000,0000,,I know some distributions like Ubuntu make\Nlanguage specific fontconfig file Dialogue: 0,0:41:28.22,0:41:36.50,Default,,0000,0000,0000,,for each language to deal with but\NDebian doesn't have such a mechanism. Dialogue: 0,0:41:38.88,0:41:47.80,Default,,0000,0000,0000,,So in my opinion the fontconfig\Nis a bit terrible so Dialogue: 0,0:41:47.80,0:41:55.26,Default,,0000,0000,0000,,is there any ?? meant or any hack for it? Dialogue: 0,0:41:55.26,0:42:04.76,Default,,0000,0000,0000,,[Max] Okay, the fontconfig system comes\Nfrom the time where XML was popular. Dialogue: 0,0:42:04.76,0:42:06.60,Default,,0000,0000,0000,,[audience] Mhmm\N[Max] As you can see. Dialogue: 0,0:42:08.52,0:42:15.36,Default,,0000,0000,0000,,Well the problem here is\Nnot so much the software stack Dialogue: 0,0:42:15.36,0:42:18.96,Default,,0000,0000,0000,,more than the Unicode system. Dialogue: 0,0:42:18.96,0:42:25.30,Default,,0000,0000,0000,,So in the Unicode system there are\Nsame code points for Dialogue: 0,0:42:25.30,0:42:31.24,Default,,0000,0000,0000,,Japanese and Chinese characters somewhere\Nalthough they have different appearances. Dialogue: 0,0:42:31.24,0:42:39.20,Default,,0000,0000,0000,,In the fontconfig system there are\Nreplacement rules for characters Dialogue: 0,0:42:39.20,0:42:48.38,Default,,0000,0000,0000,,and it is just a list and usually Chinese\Nfonts are listed first. Dialogue: 0,0:42:48.38,0:42:54.54,Default,,0000,0000,0000,,So that is the reason why in the Japanese\Nlanguage you get Chinese characters Dialogue: 0,0:42:54.54,0:42:56.62,Default,,0000,0000,0000,,instead of Japanese characters. Dialogue: 0,0:42:56.62,0:43:01.76,Default,,0000,0000,0000,,So I also think there's room to improve\Nthe software stack, yes. Dialogue: 0,0:43:01.76,0:43:03.18,Default,,0000,0000,0000,,[audience] Thank you. Dialogue: 0,0:43:15.50,0:43:19.52,Default,,0000,0000,0000,,[Max] Okay, done. Thank you. Dialogue: 0,0:43:20.08,0:43:24.64,Default,,0000,0000,0000,,[applause]