[00:00.000 --> 00:02.000] We can start if you're ready. [00:02.000 --> 00:30.000] So we go on with our next session. [00:30.000 --> 00:33.000] So we go on with our next speaker, Michele, [00:33.000 --> 00:37.000] who will talk to us about the FBI Improved Image Viewer. [00:37.000 --> 00:39.000] Please welcome Michele. [00:39.000 --> 00:42.000] Thanks. [00:42.000 --> 00:49.000] So welcome to my talk about using the FIM Image Viewer. [00:49.000 --> 00:53.000] Around 2006, I was a user of FBI, [00:53.000 --> 00:57.000] the Image Viewer for the Linux Frame Buffer. [00:57.000 --> 01:00.000] And I was fond of it, but at some point I talked, [01:00.000 --> 01:06.000] I really need to have the VIM arrow keys into FBI. [01:06.000 --> 01:09.000] And I made a patch to FBI. [01:09.000 --> 01:12.000] At some point, I started realizing that I need something more, [01:12.000 --> 01:19.000] like some shortcuts, bindings, or a small command line, [01:19.000 --> 01:23.000] commands, at some point, a parser, auto-completion. [01:23.000 --> 01:28.000] So, hack after hack, a fork came out of FBI, [01:28.000 --> 01:29.000] which I called FIM. [01:29.000 --> 01:33.000] So something which takes inspiration from the VIM text editor, [01:33.000 --> 01:42.000] the MAT, mail user agent, and shell languages. [01:42.000 --> 01:45.000] So what is nowadays FIM? [01:45.000 --> 01:46.000] It's a UNIX tool. [01:46.000 --> 01:48.000] A UNIX tool for one task. [01:48.000 --> 01:51.000] One task which is viewing images. [01:51.000 --> 01:53.000] It's not editing images. [01:53.000 --> 01:55.000] So many people confound this. [01:55.000 --> 02:00.000] It's for command line users, people who like using the keyboard. [02:00.000 --> 02:06.000] It has a configuration file because it's nice to configure custom commands. [02:06.000 --> 02:11.000] It uses regular expressions, standard inputs, standard outputs, [02:11.000 --> 02:14.000] and it plays nice in scripts. [02:14.000 --> 02:16.000] So it's highly interoperable. [02:16.000 --> 02:22.000] The amotto is like in Perl that there is more than one way to do it. [02:22.000 --> 02:26.000] I think FIM plays well with all the hardware. [02:26.000 --> 02:33.000] There are functionalities for caching files or image from files [02:33.000 --> 02:38.000] to load them in advance via prefetching, so to spare a bit of IO. [02:38.000 --> 02:41.000] And the user interface is quite minimal, [02:41.000 --> 02:45.000] so there are no menus, no buttons, sorry, at the moment. [02:45.000 --> 02:51.000] And it works at the moment with four graphical output styles. [02:51.000 --> 02:56.000] So pixels with X11, pixels with Linux frame buffer, [02:56.000 --> 02:59.000] and ASCII art with and without color. [02:59.000 --> 03:05.000] And it plays a bit nice under SSH or screen in different situations. [03:05.000 --> 03:12.000] So on this picture here you see a pixel mode, character mode, [03:12.000 --> 03:14.000] and another character mode without the colors. [03:14.000 --> 03:17.000] So you select this when you start the program, [03:17.000 --> 03:24.000] or you let it just being auto-detected by the environment variables. [03:24.000 --> 03:31.000] The basic invocation of FIM is more or less like what you expect from most programs. [03:31.000 --> 03:34.000] So you specify the files you want to open, [03:34.000 --> 03:37.000] and in the case of graphical files, [03:37.000 --> 03:42.000] the magic number will determine which decoder to use, not the file extension. [03:42.000 --> 03:44.000] However, if you want to open a directory, [03:44.000 --> 03:47.000] or recursively three of directories, [03:47.000 --> 03:51.000] or perhaps even with a background load function, [03:51.000 --> 03:56.000] then filtering on file names will occur. [03:56.000 --> 04:03.000] Again, it's quite intuitive what the plus, minus, page up, page down keys do. [04:03.000 --> 04:06.000] So it's what you expect, and this is good. [04:06.000 --> 04:12.000] And what they do, usually it's, of course, the binding is dynamic, [04:12.000 --> 04:16.000] so you can configure FIM to do different things. [04:16.000 --> 04:22.000] The defaults are for plus to call the magnify command, [04:22.000 --> 04:27.000] the internal magnify command, for minus the reduce command, [04:27.000 --> 04:32.000] or apart from commands, you have also small actions which can be longer, [04:32.000 --> 04:37.000] can be like a concatenation of, let's say, command argument, [04:37.000 --> 04:43.000] or even a small control flow expression. [04:43.000 --> 04:51.000] And yes, so it's quite rich what you can assign to single keys. [04:51.000 --> 04:56.000] So in general, this language, which I show here in these red boxes, [04:56.000 --> 04:59.000] it lives in the command line. [04:59.000 --> 05:02.000] The command line which hosts this language, [05:02.000 --> 05:06.000] which you can also access with the column key, just like in VIM. [05:06.000 --> 05:10.000] And just like in VIM and other software, with the tab, [05:10.000 --> 05:16.000] you might get some auto-completion of, I don't know, commands, variable names. [05:16.000 --> 05:22.000] It's not science fiction, so it can be helpful. [05:22.000 --> 05:26.000] Yeah, and this is the same language that you also use in the configuration files and scripts. [05:26.000 --> 05:29.000] So that is the VIM language. [05:29.000 --> 05:35.000] The language elements of VIM are commands, aliases, which you can customize, [05:35.000 --> 05:40.000] variables, built-in or customizable, if while blocks, [05:40.000 --> 05:46.000] so to have a bit of control, and some special syntax like shortcut expressions [05:46.000 --> 05:51.000] or shortcut statements for some other precise things. [05:51.000 --> 05:53.000] How do I use VIM? [05:53.000 --> 05:57.000] I don't spend much time programming it or programming the usage of VIM. [05:57.000 --> 06:02.000] Most of the time, I use it interactively as any other image viewer, [06:02.000 --> 06:05.000] especially to organize pictures collections, like I will show later. [06:05.000 --> 06:09.000] Occasionally, I use the special functionality. [06:09.000 --> 06:12.000] So what is really unique to VIM or the command line? [06:12.000 --> 06:16.000] It's quite rarely when I come up with some nice workflow which I like. [06:16.000 --> 06:22.000] Yes, then I exchange the configuration file or even I do an alias in the shell [06:22.000 --> 06:28.000] to reuse some special way of calling VIM, which is customized for me. [06:28.000 --> 06:31.000] So now we will continue with this talk. [06:31.000 --> 06:35.000] I just wanted to mention that another talk which has been recorded [06:35.000 --> 06:40.000] will go into language-specific topics that is a bit more nerdy than this. [06:40.000 --> 06:45.000] This talk here goes about the interactive usage of VIM. [06:45.000 --> 06:47.000] This is not really a tutorial. [06:47.000 --> 06:49.000] It's not a documentation. [06:49.000 --> 06:52.000] It's a bit of a showcase, what I will be showing here. [06:52.000 --> 06:57.000] So I said VIM is programmable, but you don't want to program it here [06:57.000 --> 07:01.000] in what I'm showing you here, but still you want to use a bit of automation. [07:01.000 --> 07:07.000] And the base level of automation is perhaps to simulate a key press, right? [07:07.000 --> 07:12.000] So when you invoke VIM and specify minus K the name of a character [07:12.000 --> 07:15.000] or of a key press, that will happen. [07:15.000 --> 07:20.000] So you have pressed that key. [07:20.000 --> 07:22.000] So for R, we'll rotate. [07:22.000 --> 07:25.000] I mean, this is what will happen just after startup. [07:25.000 --> 07:27.000] Afterwards, you are in control. [07:27.000 --> 07:28.000] So with R, we'll rotate. [07:28.000 --> 07:32.000] With delete, we'll delete the first image from the list. [07:32.000 --> 07:39.000] With CH, control H, we'll make help pop up and so on. [07:39.000 --> 07:43.000] You can go further with minus uppercase K. [07:43.000 --> 07:46.000] So with key combos. [07:46.000 --> 07:51.000] So if you specify minus BKRA, rotate and autoscale, [07:51.000 --> 07:54.000] that will happen as the first thing with FIM starts once. [07:54.000 --> 07:57.000] So afterwards, you're in control. [07:57.000 --> 08:03.000] In VIM, I appreciate that when you are about to press a key [08:03.000 --> 08:06.000] and you prepend it with a digit or more digits, [08:06.000 --> 08:09.000] the number that you will have specified [08:09.000 --> 08:13.000] also the repetition of what is about to be done. [08:13.000 --> 08:15.000] So you have this also here. [08:15.000 --> 08:17.000] Of course, now I'm showing you here the command line, [08:17.000 --> 08:19.000] but this is the interactive usage. [08:19.000 --> 08:22.000] So if you do it interactively, this is what happens. [08:22.000 --> 08:27.000] It's the same interpreter who processes this. [08:27.000 --> 08:32.000] Yeah, but there's also the dot modifier in VIM and also here [08:32.000 --> 08:36.000] that instead of repeating twice a particular command, [08:36.000 --> 08:41.000] you can add a dot after what you have just done [08:41.000 --> 08:44.000] and it will just repeat the last action. [08:44.000 --> 08:47.000] So plus dot, it's like plus plus. [08:47.000 --> 08:51.000] Now, you can combine this with number syntax. [08:51.000 --> 08:58.000] So if you prepend a number to the dot, [08:58.000 --> 09:00.000] the dot will repeat the last command, [09:00.000 --> 09:03.000] that number the amount of times. [09:03.000 --> 09:06.000] This can spare you a bit of typing interactively, [09:06.000 --> 09:10.000] but also in this special mode here. [09:10.000 --> 09:13.000] Of course, this just applies to the last command, [09:13.000 --> 09:17.000] not to the last combo or last series of things. [09:17.000 --> 09:20.000] For more complicated things, [09:20.000 --> 09:23.000] you can use another mechanism, [09:23.000 --> 09:28.000] which is that of simply configuring your VIM RC file [09:28.000 --> 09:33.000] and there you perhaps bind a special, [09:33.000 --> 09:36.000] a particular keyboard key to a special command, [09:36.000 --> 09:41.000] and then yes, you can use a repetition on that combo [09:41.000 --> 09:43.000] which you like, which is what you use, [09:43.000 --> 09:45.000] what is useful to you, [09:45.000 --> 09:48.000] and that's the way to go. [09:48.000 --> 09:51.000] So not over-complicate unnecessary things. [09:51.000 --> 09:55.000] Now I will show random functionality which I like in VIM [09:55.000 --> 09:58.000] but I didn't bother looking in other image viewers. [09:58.000 --> 10:01.000] So with double apostrophe, [10:01.000 --> 10:06.000] I have the so-called shadow directory load, let's say. [10:06.000 --> 10:10.000] So my observation is that nowadays cameras [10:10.000 --> 10:12.000] have a very high resolution. [10:12.000 --> 10:14.000] I don't need that resolution. [10:14.000 --> 10:16.000] Mostly the pictures which come from those cameras [10:16.000 --> 10:18.000] are too heavy for my purposes. [10:18.000 --> 10:22.000] So what I do is that I have a directory with reductions [10:22.000 --> 10:24.000] which fit more or less my screen [10:24.000 --> 10:28.000] and I have another directory with heavy original pictures. [10:28.000 --> 10:31.000] But with VIM, I just say, hey VIM, [10:31.000 --> 10:34.000] in that directory are the heavy originals. [10:34.000 --> 10:36.000] So be aware of this. [10:36.000 --> 10:40.000] And then VIM offers me the double apostrophe, [10:40.000 --> 10:42.000] the double quote, key, [10:42.000 --> 10:44.000] which does something which I forgot what it is [10:44.000 --> 10:46.000] but you can just check it up with the help. [10:46.000 --> 10:49.000] And that will substitute the content of the images, [10:49.000 --> 10:54.000] of the current images with the high resolution [10:54.000 --> 10:57.000] or low resolution or whatever you have set it up. [10:57.000 --> 10:59.000] So it's a way to substitute it. [10:59.000 --> 11:02.000] Probably you can use it to create funny games or whatever [11:02.000 --> 11:06.000] but for me it's just the purpose of substituting [11:06.000 --> 11:10.000] the low resolution image with the high resolution image [11:10.000 --> 11:12.000] because I like using used computers. [11:12.000 --> 11:14.000] I think there is too much garbage on this earth [11:14.000 --> 11:18.000] and therefore sometimes I don't need that extra heavy processing [11:18.000 --> 11:20.000] in my everyday usage. [11:20.000 --> 11:22.000] And I think this can have many uses. [11:22.000 --> 11:26.000] Another thing which is I think perhaps unique maybe, [11:26.000 --> 11:32.000] it's a simple key to jump between the last view [11:32.000 --> 11:33.000] and the current view. [11:33.000 --> 11:34.000] Why? [11:34.000 --> 11:37.000] Because sometimes I watch 100 pictures, [11:37.000 --> 11:40.000] I do a selection of the few pictures I really like [11:40.000 --> 11:42.000] and I jump between them because I want to see [11:42.000 --> 11:45.000] certain detail from one side, from the other side. [11:45.000 --> 11:48.000] So I like to jump a lot of times between two pictures, [11:48.000 --> 11:52.000] perhaps to catch some detail and therefore I have this key [11:52.000 --> 11:58.000] which most of the times I would say retains the position [11:58.000 --> 11:59.000] you were and the scaling. [11:59.000 --> 12:01.000] So it's really for comparing things. [12:01.000 --> 12:04.000] I find it useful, especially in combination as I said [12:04.000 --> 12:07.000] with the short listing functionality which allows you [12:07.000 --> 12:12.000] to make selections to shorten the selection of pictures. [12:12.000 --> 12:15.000] Now another random functionality is the one of conversion [12:15.000 --> 12:16.000] pipelines. [12:16.000 --> 12:20.000] Sometimes you want to load things which are not properly [12:20.000 --> 12:25.000] pixel images like SVG files or PDFs or Postcript files. [12:25.000 --> 12:30.000] There are a few built-in defaults in FIM which will invoke [12:30.000 --> 12:34.000] that external program to convert it in something [12:34.000 --> 12:35.000] that FIM can view. [12:35.000 --> 12:39.000] So this enlarges the set of pictures formats [12:39.000 --> 12:41.000] which you can watch under FIM. [12:41.000 --> 12:45.000] Extending this idea, perhaps sometimes you want to view all [12:45.000 --> 12:48.000] of the images which you were about to load with one specific [12:48.000 --> 12:50.000] filter pipeline. [12:50.000 --> 12:57.000] Here I have shown convert with charcoal filter and put a label [12:57.000 --> 12:58.000] on the bottom. [12:58.000 --> 13:01.000] Yeah, you can specify that to FIM when you start it. [13:01.000 --> 13:05.000] And all of the pictures which you will see in that session [13:05.000 --> 13:07.000] will be filtered according that way. [13:07.000 --> 13:09.000] I don't know what this is useful for. [13:09.000 --> 13:13.000] Previews, making fun, you choose it. [13:13.000 --> 13:17.000] But the point is if you don't screw up this expression, [13:17.000 --> 13:19.000] you will not write to any file. [13:19.000 --> 13:23.000] So just temporary files will be modified. [13:23.000 --> 13:25.000] You can interact with different programs [13:25.000 --> 13:26.000] in different situations. [13:26.000 --> 13:31.000] Sometimes you can use the exclamation point syntax [13:31.000 --> 13:34.000] to call an external program and then with that external [13:34.000 --> 13:36.000] program that gets its output. [13:36.000 --> 13:38.000] OK, it's not that useful. [13:38.000 --> 13:42.000] Still, if you got the danger, the dangerous way, [13:42.000 --> 13:44.000] you are not afraid. [13:44.000 --> 13:48.000] You create an alias which maybe calls in the end XIF tool [13:48.000 --> 13:50.000] and you say XIF tool. [13:50.000 --> 13:53.000] Please remove the XIF data from the file which I'm just [13:53.000 --> 13:59.000] watching because you can specify that file as an internal [13:59.000 --> 14:00.000] variable. [14:00.000 --> 14:03.000] Yes, you will modify the current file which is dangerous. [14:03.000 --> 14:04.000] You should not do it. [14:04.000 --> 14:06.000] But if you really want and you are automating some nice [14:06.000 --> 14:09.000] useful workflow, you can do it. [14:09.000 --> 14:10.000] I have warned you. [14:10.000 --> 14:14.000] OK, did you know that with FIM you can even load files [14:14.000 --> 14:17.000] from a file name list? [14:17.000 --> 14:19.000] OK, this sounds boring. [14:19.000 --> 14:22.000] It sounds boring, but maybe it's nicer if you learn that [14:22.000 --> 14:25.000] with FIM you can write files with the file name [14:25.000 --> 14:27.000] and the description. [14:27.000 --> 14:30.000] OK, maybe it could be even useful in a few situations. [14:30.000 --> 14:34.000] In my case, I find it useful or I like it because FIM has [14:34.000 --> 14:40.000] a few captions in different parts of the displayed window, [14:40.000 --> 14:41.000] let's say. [14:41.000 --> 14:46.000] And there are a few variables with expando codes, [14:46.000 --> 14:49.000] so like percentage and something. [14:49.000 --> 14:50.000] So you can customize them. [14:50.000 --> 14:54.000] You can view, I don't know, the comment, the description [14:54.000 --> 14:56.000] which I said before, or other information. [14:56.000 --> 15:00.000] So you can customize it a bit the way you want it. [15:00.000 --> 15:05.000] More, you can have in this description file internal [15:05.000 --> 15:06.000] variables. [15:06.000 --> 15:10.000] So just for the purpose of giving attributes to the files [15:10.000 --> 15:12.000] you are about to have in the list. [15:12.000 --> 15:14.000] So not only the descriptions, but also attributes. [15:14.000 --> 15:18.000] So the bill will be in the category of businessmen. [15:18.000 --> 15:20.000] Aron as best, Abram and Richard will be in the category [15:20.000 --> 15:21.000] of activists. [15:21.000 --> 15:29.000] So they will inherit this, those attributes. [15:29.000 --> 15:34.000] Furthermore, there are some shortcut syntaxes which [15:34.000 --> 15:40.000] prepend text to this description or allow referring [15:40.000 --> 15:43.000] to specific variables in those descriptions for the purpose [15:43.000 --> 15:46.000] of making them shorter. [15:46.000 --> 15:49.000] What you can use it for apart from the caption? [15:49.000 --> 15:52.000] Well, you can use them also for searching the picture [15:52.000 --> 15:54.000] in the file list, in the list. [15:54.000 --> 16:00.000] So with the go to command or you use a special slash or [16:00.000 --> 16:05.000] question mark syntax, not command line, but search line [16:05.000 --> 16:09.000] to search and to jump directly to a file which has a [16:09.000 --> 16:10.000] description that way. [16:10.000 --> 16:14.000] So if you manage your pictures collection nicely, [16:14.000 --> 16:15.000] it can be useful. [16:15.000 --> 16:18.000] For me, it's nice because my picture is targeted that way [16:18.000 --> 16:20.000] and I'm happy with that. [16:20.000 --> 16:23.000] Or I have custom collections of pictures that way [16:23.000 --> 16:25.000] for my own amusement. [16:25.000 --> 16:26.000] Yes. [16:26.000 --> 16:29.000] So you have this go to command which you can use also [16:29.000 --> 16:33.000] in other ways like jumping or controlling it to jump [16:33.000 --> 16:42.000] according to the values of those property variables. [16:42.000 --> 16:45.000] Or you can use this go to jump between to the next [16:45.000 --> 16:46.000] directory, for instance. [16:46.000 --> 16:49.000] If you load 1,000 files in different directories where [16:49.000 --> 16:52.000] you don't know exactly where they are, you can use go to [16:52.000 --> 16:54.000] and something very specific which you find in the [16:54.000 --> 16:55.000] manual. [16:55.000 --> 16:58.000] And this will jump to the next directory inside what is [16:58.000 --> 17:00.000] being loaded there. [17:00.000 --> 17:02.000] So there are many shortcuts, let's say, for doing very [17:02.000 --> 17:06.000] specific jumps according to your workflow because this is [17:06.000 --> 17:09.000] to adapt the way you wish to organize your stuff. [17:09.000 --> 17:11.000] And of course, if you have different specifications to [17:11.000 --> 17:15.000] the go to command, the first one which matches the jump [17:15.000 --> 17:18.000] will do the jump. [17:18.000 --> 17:22.000] Before the session is over, I wish to say the limit [17:22.000 --> 17:25.000] functionality which I talk from math. [17:25.000 --> 17:28.000] I find it also useful because you can shrink the [17:28.000 --> 17:29.000] collection. [17:29.000 --> 17:32.000] For instance, I have around 20,000 pictures in my [17:32.000 --> 17:34.000] collection, in my photograph collections. [17:34.000 --> 17:37.000] But I can limit them, for instance, to city equal [17:37.000 --> 17:40.000] browsers or something like this which is useful to me. [17:40.000 --> 17:43.000] In this case, you see that we have shortened the [17:43.000 --> 17:48.000] pictures list from the file, total five to four which [17:48.000 --> 17:51.000] matches category equal activist. [17:51.000 --> 17:55.000] Further, the limit command can shrink the list according [17:55.000 --> 17:59.000] to duplicate the base file names or the date of the [17:59.000 --> 18:02.000] files or the size of the files. [18:02.000 --> 18:06.000] The base idea of FIM is that you use it interactively. [18:06.000 --> 18:09.000] You have a few aliases which are perhaps sometimes [18:09.000 --> 18:13.000] customized and assigned to specific keys which you [18:13.000 --> 18:15.000] like to have. [18:15.000 --> 18:18.000] Yeah, and you write this in the configuration file and [18:18.000 --> 18:20.000] you perhaps share it with others. [18:20.000 --> 18:24.000] And you just remember by heart the commands which you [18:24.000 --> 18:25.000] use every day. [18:25.000 --> 18:27.000] And that's all. [18:27.000 --> 18:30.000] So FIM at the moment will be releasing the 06 after [18:30.000 --> 18:33.000] 15 years, the 06 version. [18:33.000 --> 18:36.000] In a few days, the table is out there. [18:36.000 --> 18:40.000] I have to do some promotion and especially I have to [18:40.000 --> 18:43.000] say give the next version to the Debian guys. [18:43.000 --> 18:46.000] So there is the version on Debian and everywhere else is [18:46.000 --> 18:49.000] old but we'll update it soon. [18:49.000 --> 18:50.000] The manual has everything. [18:50.000 --> 18:52.000] So everything is written there. [18:52.000 --> 18:55.000] And I hope you enjoy FIM and perhaps watch the other [18:55.000 --> 18:58.000] recording with more nerdy language aspects. [18:58.000 --> 18:59.000] That's all. [18:59.000 --> 19:01.000] Thank you for your attention. [19:01.000 --> 19:08.000] Thank you. [19:08.000 --> 19:10.000] So we have some time for questions. [19:10.000 --> 19:13.000] Is there any questions on the floor? [19:13.000 --> 19:17.000] Yeah, so the collection stuff sounds particularly [19:17.000 --> 19:18.000] interesting. [19:18.000 --> 19:20.000] Can you update the collection from FIM itself? [19:20.000 --> 19:23.000] So while you're watching it, is that an image so that [19:23.000 --> 19:25.000] while you're watching images, you update your [19:25.000 --> 19:28.000] collection from within FIM somehow? [19:28.000 --> 19:30.000] Perhaps at the moment I don't have this. [19:30.000 --> 19:33.000] I'll write a text file in your... [19:33.000 --> 19:36.000] The question was whether FIM, as I have written, [19:36.000 --> 19:39.000] organizer, picture organizer, I wrote it correctly. [19:39.000 --> 19:41.000] No, I wrote...it was a mistake. [19:41.000 --> 19:42.000] FIM is not an organizer. [19:42.000 --> 19:46.000] You have to organize the files by yourself with a text editor. [19:46.000 --> 19:50.000] We have a non-line question here if you can read it. [19:50.000 --> 19:52.000] Thank you for the talk. [19:52.000 --> 19:54.000] Is there a way, plan to have a way for FIM to script a [19:54.000 --> 19:57.000] small step-by-step animation of the actions? [19:57.000 --> 20:00.000] Maybe some sort of slip between the actions. [20:00.000 --> 20:03.000] Yes, there is a functionality which is called [20:03.000 --> 20:05.000] recording out or something like this. [20:05.000 --> 20:10.000] So after you exit FIM, on the standard out, [20:10.000 --> 20:15.000] in a specific file, actions and commands, [20:15.000 --> 20:17.000] sorry, and timings will be spitted out. [20:17.000 --> 20:20.000] So there is a slip command which says slip, [20:20.000 --> 20:23.000] I don't know, three quarters of a second, [20:23.000 --> 20:24.000] something like this. [20:24.000 --> 20:26.000] Yes, the answer is yes. [20:26.000 --> 20:28.000] Question on the floor? [20:28.000 --> 20:30.000] Yeah, good question. [20:30.000 --> 20:32.000] What about the descriptions? [20:32.000 --> 20:34.000] Are stored in the same image files? [20:34.000 --> 20:37.000] Are they stored like metadata in other files? [20:37.000 --> 20:40.000] Can they be read by exit tools? [20:40.000 --> 20:43.000] What I have shown here was just the plain things you [20:43.000 --> 20:46.000] write in a textual file. [20:46.000 --> 20:50.000] Apart from this, the exit tags from JPEGs, [20:50.000 --> 20:52.000] or I don't know, I think in other places also you [20:52.000 --> 20:54.000] get exit data, but at least from JPEGs, [20:54.000 --> 20:58.000] and they become internal variables in set FIM, [20:58.000 --> 21:01.000] because I really like to have some particular JPEG [21:01.000 --> 21:03.000] exit data being displayed in the caption, [21:03.000 --> 21:04.000] and that occurs there. [21:04.000 --> 21:07.000] Actually, also PNGs and also JPEGs without exit [21:07.000 --> 21:08.000] have commands. [21:08.000 --> 21:10.000] This also drift here. [21:10.000 --> 21:12.000] Yeah, so there are different... [21:12.000 --> 21:14.000] I don't think I'm covering everything, everything, [21:14.000 --> 21:17.000] everything, but as soon as I learn of some extra [21:17.000 --> 21:22.000] metadata, I integrate it in the internal variables [21:22.000 --> 21:25.000] associated to each file. [21:25.000 --> 21:27.000] I have one extra slide. [21:27.000 --> 21:29.000] Any other question, maybe? [21:29.000 --> 21:30.000] Okay. [21:30.000 --> 21:33.000] Maybe I didn't have to understand so much, [21:33.000 --> 21:39.000] but the result of modifying this file is... [21:39.000 --> 21:41.000] Modifying which file? [21:41.000 --> 21:43.000] The original file. [21:43.000 --> 21:46.000] It's then storing another file. [21:46.000 --> 21:48.000] We don't modify any file with FIM. [21:48.000 --> 21:50.000] If you do it, this is a mistake. [21:50.000 --> 21:53.000] Oh, okay. [21:53.000 --> 21:55.000] There was one example where I was saying, [21:55.000 --> 21:59.000] you can write programs to modify the file, [21:59.000 --> 22:01.000] but most of the times you don't want this. [22:01.000 --> 22:02.000] Okay. [22:02.000 --> 22:05.000] But if you really want it, you can. [22:05.000 --> 22:07.000] If the file is changed from this, [22:07.000 --> 22:09.000] will FIM reload it automatically, [22:09.000 --> 22:10.000] or will it... [22:10.000 --> 22:12.000] I think there is such a functionality. [22:12.000 --> 22:17.000] The question is, if you are stuck on a picture [22:17.000 --> 22:19.000] and the picture changes, [22:19.000 --> 22:24.000] will the FIM reload it? [22:24.000 --> 22:26.000] There is some functionality to detect this. [22:26.000 --> 22:28.000] I'm not sure if at the moment it's at default. [22:28.000 --> 22:31.000] In principle, it's like two lines of code. [22:31.000 --> 22:33.000] It's easy to implement this. [22:33.000 --> 22:36.000] I think this is for picture frame situations [22:36.000 --> 22:38.000] where many people use FIM for picture frames. [22:38.000 --> 22:39.000] I'm not happy with that. [22:39.000 --> 22:41.000] I wish people to use it interactively, [22:41.000 --> 22:44.000] but yes, that's possible. [22:44.000 --> 22:47.000] If you want, I have one extra slide. [22:47.000 --> 22:52.000] So with FIM, you can even play the little steganographer [22:52.000 --> 22:54.000] or the little forensic investigator [22:54.000 --> 22:58.000] by using the offset switch [22:58.000 --> 23:02.000] or the seek magic internal variable, [23:02.000 --> 23:04.000] which do nothing else than saying, [23:04.000 --> 23:08.000] hey, please, don't seek for the image at byte zero. [23:08.000 --> 23:10.000] Seek between here and here. [23:10.000 --> 23:12.000] The picture is there in the file. [23:12.000 --> 23:17.000] So you can use this for looking for the signatures within the file, [23:17.000 --> 23:19.000] which maybe is broken. [23:19.000 --> 23:20.000] Maybe there are a few files [23:20.000 --> 23:22.000] which are concatenated for some reasons. [23:22.000 --> 23:26.000] Maybe it's a TAR archive, which actually... [23:26.000 --> 23:27.000] Sorry? [23:27.000 --> 23:29.000] I have an example of this. [23:29.000 --> 23:33.000] So if you look at your Chrome cache, [23:33.000 --> 23:35.000] Chrome browser, so the cache, [23:35.000 --> 23:38.000] you have binary files, [23:38.000 --> 23:41.000] which are a concatenation of HTTP headers [23:41.000 --> 23:43.000] and image files. [23:43.000 --> 23:46.000] And right now, I'm using exit two to find the byte offset [23:46.000 --> 23:49.000] and then using image everywhere to use the file. [23:49.000 --> 23:51.000] But I would try it being... [23:51.000 --> 23:53.000] Yeah, so FIM is... [23:53.000 --> 23:55.000] It's the same thing. [23:55.000 --> 23:57.000] So the question is... [23:57.000 --> 24:01.000] The observation is actually... [24:01.000 --> 24:06.000] apart from maybe seeking into broken file systems that way, [24:06.000 --> 24:10.000] you can even just look into the certain configuration files [24:10.000 --> 24:13.000] like the cache files, like the one from the Chrome browser, [24:13.000 --> 24:17.000] because there, actually, there are some special custom file formats [24:17.000 --> 24:22.000] where a proper file is pushed down into another file. [24:22.000 --> 24:27.000] Yeah, there are encodings, let's say, [24:27.000 --> 24:29.000] which simply you have a picture, [24:29.000 --> 24:32.000] but it cannot be immediately seen. [24:32.000 --> 24:34.000] But with this, you can... [24:34.000 --> 24:37.000] Functionality, which jumps or seeks, [24:37.000 --> 24:41.000] or a file, perhaps, with a signature, can locate it. [24:41.000 --> 24:43.000] Yeah. [24:43.000 --> 24:45.000] Okay, last question. [24:45.000 --> 24:47.000] We don't have any online. [24:47.000 --> 24:49.000] Question on the floor? [24:49.000 --> 24:51.000] Yeah? [24:51.000 --> 24:53.000] Okay. [24:53.000 --> 24:55.000] Okay, thank you. [24:55.000 --> 24:57.000] Thank you. [25:01.000 --> 25:03.000] Yeah, I need to get back. [25:03.000 --> 25:07.000] Bye, man.