📜 ⬆️ ⬇️

The most necessary program in the world

image
What programs do people use all the time? If you think about this issue, it turns out that this list is not so big. The constantly used programs include: the operating system itself, the file manager, a text editor, a browser, an instant messenger. This is exactly the basic set that almost every person uses on the computer. Requirements for such programs should be high: smooth operation, quick execution of all functions, clear and convenient interface.

We can say that the above set of programs is the most necessary programs used by people in the digital age. This list covers all basic human user needs. Or not all? Is there another basic need that is not included in the above list of essential programs? Is this need the most important computer to automate? For me, this need exists, but there was no place for her in the list of the most used programs. What is this need?


Historical retrospective


Previously, the computer was considered a device for carrying out calculations. Even household old computers were guided by a very advanced user who used a computer for calculations by writing his own small programs. To complete the work with the computer, the user had to know the programming language. The further rise of more advanced computer platforms was largely due to the emergence of the first versions of spreadsheets, which also aimed at computing, but reduced the requirements for the user, without forcing him to be a programmer. In any case, it was a period when the purpose of the computer directly corresponded to its name. The computing module itself - the processor - was placed at the forefront, because it was the appearance of the microprocessor that made the appearance of the computer possible.
')
However, the subsequent development did not fixate on improving the characteristics of processors. Developed all the components of the computer, and, in particular, memory. Memory is operational, and memory is permanent. At that moment, when it became clear that the computer was able to store and quickly retrieve unprecedented amounts of data, it became possible to realize another long-standing man’s dream on the computer: the accumulation and quick retrieval of data. Make it like a limitless memory, some place in which you can put information, and then quickly find it and extract. So began to develop databases and query languages.

Gradually, the world's largest database - the Internet, with all its billions of sites: wikipedia, libraries, forums and social networks - appeared. Search tools have changed dramatically, and the average user can not even have a personal search engine on the Internet - it is almost impossible, and not necessary.

Many roles tried on a computer for all the years of IT development. A computer is a very universal thing, and the digital universe is capable of containing all the manifestations of human fantasy. And it’s good that by now the necessary minimum of programs has been formed, which demonstrates the evolutionary path that humankind passed through in its needs in the digital age. These needs, frankly, are greatly shifted to the area of ​​consumption and transfer of content. Not to say that this is bad, but ...

Behind all this tumult of technology, one very important dream of many people from antiquity to the present day, which is well realized in the form of a personal computer, moved a little to one side. This dream is to get a personal intellectual assistant with infinite memory, who would help a person, if not think, remember and find the knowledge (not data!) That a person has already managed to comprehend, or at least fluently saw out of the corner of his eye, or he knew Something needed is in some library. This alone would help to bring human development to a new qualitative level. Perhaps the ancient Greeks could say that it was necessary to develop their own brains (when writing developed, many Greeks demonstrated miracles of quoting from memory, neglecting the records). However, a lot of time has passed, the world has changed, and now our civilization has rested on the restriction: nowadays, the human brain cannot cope with the amount of information that needs to be known and remembered. Information has become too much. And this did not happen today, but at the moment of the victorious march of the scientific and technological revolution.

History knows at least one conceptual project, in which for the first time an attempt was made to solve the above mentioned problem at a new technological level. American analogue development engineer Vanivar Bush suggested that we move away from notebooks with records, card files, libraries, and a crowd of personal secretaries to a device that could replace all this. In the 40s of the last century, he proposed the concept of the MEMEX device. Here is how it is described:

... an electromechanical device that allows you to create an autonomous knowledge base, equipped with associative links and notes that can be transferred at any time to other such knowledge bases. This device was supposed to imitate as accurately as possible the associative processes of human thinking, in the absence of flaws, such as “forgetting” information.

The description of this device ultimately indirectly influenced the appearance of HTML hypertext markup, but we are now interested in the class of programs that would in some form implement the idea of ​​this concept. Attention should be paid to the words “autonomous knowledge base” - they are key to us. Are there any programs that fall under this definition? Of course have! These are personal information managers (PIM), mind-maps solutions, some organizers and their various hybrids.

Finding the perfect assistant


The peculiarity of choosing the ideal personal assistant is that such a program is chosen for decades. And this requirement imposes big restrictions on possible candidates.

By virtue of my beliefs, when searching for a suitable program, I was guided primarily by the cross-platform and openness of the code. The first requirement - cross-platform - is related to the fact that I use Linux on home computers, and I have been instructed to use Windows at work, and on which platform I will have to work tomorrow — I don’t know for sure. But I know for sure that on each platform I need the same helper. The openness of the code is associated with many factors, but the most important is security in time and in code space. Security over time is a firm assurance that tomorrow the author of the proprietary program will not close his project or raise the price of the license. Security in code space is the certainty that the program will not merge the stored personal data into places where this data has nothing to do.

Of course, an important factor is the openness of the format of the stored data. Nothing should interfere with the “escape from the format”, if for some reason the initial choice of the assistant was unsuccessful. It would be very unpleasant to part with the accumulated knowledge base simply because it is stored in a proprietary format.

Note: Why do I use the term "knowledge base" and not "database"? Because it would be desirable to accumulate knowledge, but not the data. The question is, what is the mechanism for turning data into knowledge? In general, it can be said that the data are transformed into knowledge after they are understood by man. It is after this thinking process that a person, looking at familiar records (data), can use them as knowledge.

As it turned out, there are not too many programs that meet the above criteria. And at first I even greatly lowered the bar of requirements, telling myself that, in a pinch, there is Wine, and why should be afraid of closed formats - others use it. And I went through a large number of projects in order to understand what would suit me best.

From the proprietary products, I revised the linear and tree PIM-managers, tried the mind-map solutions, felt the opportunity to keep records in the organizers. Nothing I tried did not fit me: there was always some unpleasant flaw that stopped me from using the product further. A good text editor, but linearity of records instead of tree. Having a tree, but a terrible editor. Attempts to make a limited set of record types that do not describe the whole variety of possible situations. The inability to receive data from office programs or from a browser window. Falls within five minutes with elementary actions. Unreasoned interface, heavy cluttering of the working area, clinging of elements to each other in Russified versions. It is possible that things are better now, but eight years ago I was horrified at what people were being offered to buy for money. In fact, from the whole zoo, Microsoft OneNote and some Chinese combine with a bunch of functions and buttons, which, surprisingly, all worked (maybe it was TreeDBNotes), turned out to be more or less completed. But seeing how destructive marketing Microsoft is engaged in, I did not get involved with OneNote. And at that time I could not buy a Chinese combine because the payment went either with a currency bank card, or through PayPal, and I didn’t have either. I basically was not going to chuck.

In the free software camp, I touched CherryTree, Zim, KOrganizer, KeepNote, even tried using Eclipse in a separate directory, creating a tree of subdirectories and opening text and HTML files in it. The problems turned out to be the same: major and minor flaws that hinder the full use of the program, or major inconveniences instead of working as in the case of Eclipse (it is not intended for such things, and it also slows down because Java). Even more or less decent CherryTree, for example, couldn’t curl up on the system when clicking on the cross in the window title: it just completed the work. Under Linux, I somehow solved the problem, but on Windows it turned out to be unsolvable. At one time, I refused WinAmp when he suddenly forgot how to fold and continue working when clicking on the cross. After all, a personal assistant is such a thing that should always be at hand, and there should be no fear that it will close during natural elementary actions.

By the way, about the tree. The human brain is used to classify everything. This is his strength. For example, such a complex thing as the classification of living beings from Aristotle and Theophrastus to Robert Hooke and Carl Linnaeus to this day has a tree structure. And although according to modern concepts, the origin of species is no longer a tree but a graph, and electronic encyclopedias in structuring information generally exclude tree, which together indirectly indicates that the tree is unsuitable for describing all possible groupings of data, I still believe that the tree - This is the convenient compromise between simplicity of linearity (as in the first versions of Evernote) and the complexity of the graph (as in Wikipedia). At least, when building a tree, you can always single out one conditionally main feature by which you can group information. But the presence of the tree gives the support, thanks to which it is possible to look for information “according to the logic of things”, if such logic is traced.

The tree has many other useful properties: growing up without significant thickening, hierarchy, visibility. You can easily make a graph from a tree: just add links between branches.

Creating the perfect assistant


In general, I found myself in a classic situation: if you want to get something good, do it yourself. At that moment, I was eyeing the Qt plus framework, which was released in its 4th version. And I decided that there is nothing better than to make my own manager who would satisfy me to the best of my own abilities. Even if the project "does not go", I, at least, will be able to practice exploring a promising cross-platform framework.

I read a couple of books, sat down for programming, and made the first minimal version of the program. I called it MyTetra . She looked like this:

image

Initially, I sharpened those little things that I lacked in other managers: normal folding to tray, dividing the tree into the entities “branch” and “record”, counting the number of records in the branches, copying paste through the clipboard. In the first version, there was not even a search, but I began to fill the database with my own records in order to feel if I could keep the information in the tree, if I did not find that I needed different "cuts" of the tree (I was passionately convinced of the need for an automatically reconfigurable tree one comrade), will there be a need for grouping on various grounds. And I quickly realized that the tree performs its function of the “basis” well, especially if you yourself grew this tree.

I initially did the data storage format in a “natural” form, and I was not going to use any of my own binary formats. Also refused to store data in the database. All formats are open: the tree is stored in an XML file, formatted text is in HTML, pictures in PNG, settings in INI. Initially, the structure was designed so that the data were neatly decomposed into files, and were amenable to differential synchronization through version control systems. The names of the stored files and directories are platform-independent: after all, the cross-platform program should work on any modern platform without alterations and side effects. All this is elementary things, but it turns out that the developers of similar programs do not always understand them: for example, the author OutWiker allows you to give directories Russian names - that is, uses the name of a branch as a directory name on a disk, and with punctuation marks, I was greatly shocked at one time : the program on Python was declared as cross-platform, but if you synchronize data from different platforms, such a solution would certainly cause problems.

For the entities “branch” and “record” I determined the main actions that can be performed with them: create, edit, copy, paste, move, delete. And when this minimum fully earned and the search appeared, I combed the code a bit and released the first public version.

What did I record in my program? First of all, I began to write down such information that I forgot all the time, and which is very difficult to find in simple form. There are such things that you constantly follow into your notes. For example, in Linux, man pages are traditionally written in the form of “minimally necessary and sufficient”, therefore, it is very difficult to quickly understand the command line options of a program. For example, tar.gz archive packing options: four badly pronounced letters that you always forget.

I also began to write down in detail the actions that I produce when setting up some linukhovogo software. Often in Linux it is difficult not only to configure the program, but it is difficult to install it, let alone run it. And in order for the program to start, it is necessary to do not five and not fifteen unobvious actions, but much more. By the end, if something happened, the person no longer remembers exactly what he did at the beginning. And if you wrote it down, then there is no such problem.

I also wrote down really good materials from the Internet or “squeeze” that I made on their basis. It so happens that for a long time you can not understand any question. And suddenly you come across a text in which everything is explained in detail, easily and simply. It is a pity to lose such a text: it can disappear from the Internet, you can simply forget about it, having earned it. But if you throw it into your knowledge base, you can feel a sense of comfort, that this important information will not disappear anywhere, and will remain with you. Honestly, I don’t understand people who bookmark in the browser: it’s unpleasant to bookmark and know that at some point the information may disappear. Several times my prudence helped me: interesting material disappeared from the Internet, but remained in my database.

And of course, I wrote down all possible information on my household electronic devices, admin login passwords and other Internet services, phone numbers and addresses of any organizations and friends, other small things, which is very important, but difficult to remember.

Gradually, the base grew, and the program was modified. At the moment it looks like this (by the way, this is a screenshot from Linux, not Windows):

image

Yes, considering that now hosting of distributed version control systems, such as GitHub and BitBucket, as well as cloud storage such as DropBox or Yandex.Disk are easily accessible, it would be a sin not to use them for free storage of their knowledge bases in them. At the same time, the issue of backup and synchronization was solved. There was only one problem: the storage of private data. In the open form they can not be uploaded to the hosting. Therefore, a small cryptographic library was developed, and on its basis encryption of the selected branches was made. That is, it became possible to securely store private data in plain sight. Why was the library made and the existing one not used? Because the manager is positioned as Qt-only. It should be easy to build with qmake & make commands on any platform where only Qt is available, and no additional libraries are required. This principle makes it easy to get builds for all popular platforms: Linux, Windows, MacOs, FreeBSD, Android, and even for such exotics as MeeGo. However, versioning is provided in the encryption format, and, perhaps, I will ever screw OpenSSL when I figure out how to include it in the project for all the above platforms.

In addition to encryption, the program has implemented customizable synchronization, history navigation, a built-in preloader, attachments, a sorted list of entries, and much more than that. After five years of open development, we got a PIM-manager with the characteristics that were needed: open, cross-platform, easy and fast, able to work for months without shutting down, with a set of functionality that is necessary for convenient record keeping.

I, as a person using MyTetra daily, currently keep about 5000 records in it. The average increase is about 1000 entries per year. For comparison: the author of the Evernote service Stepan Pachikov in one of his interviews mentioned about 20,000 entries. However, he has a different concept: he collects everything in his system, using it as an “external” human memory. I collect the information I need, draw it up, tag it, i.e. I work with information with my hands. And over the past three years such statistics has accumulated here:

image

Not everyone can boast of such a Contributions Map on a GitHub. And I don’t even notice how this statistic has gathered, as MyTetra is my daily work tool.

MyTetra and the Internet


The personal records manager is, of course, good. Everyone can make their own small vegetable garden and secretly saw their knowledge base. How much personal data is in such a database, and how many other people might be needed? From my own experience I will say that the records that can be shared, about 2/3 of the total. This is due to the fact that in private records I have a constant daily work, that is, their percentage is very large.

Once I played with the visualization of my base through the GraphViz package. And to understand the scale of my open data, I made a couple of pictures. Here, in the pivot picture, the cloud is rotated 90 degrees, otherwise it would have looked too wide. There are about 3000 open entries displayed here. The full base would be ~ 2000 more entries.

image

Links to full-size images (Attention! Images are very large, the browser can segfoltutsya. It is better to deflate and view the viewer.):

Tree PNG 1.751 x 32.767 pix (7.2 MB)
Cloud PNG 31.279 x 5.289 pix (19.2 MB)

It is a pity that large amounts of knowledge simply lie on users' disks, and they don’t even have the opportunity to share them, even if they wanted to, because there is no corresponding infrastructure.

What is the reason for users to share their knowledge bases? Everyone decides for himself. Someone wants to “return debts” to the information community, someone simply believes that on the path of ascent, everyone should share their knowledge. Someone needs to improve their karma. Someone wants to do this simply because of altruistic considerations, and some of them are practical: it is convenient to look at your open records from any place where there is Internet.

In general, besides the accumulation of records itself, I decided to make a service that allows you to display your records in the Internet space. Initially, I made a JavaScript application that you can feed the URL of the MyTetra index file, accessible via HTTP (S). And this application opens the MyTetra database in a WEB-interface resembling the Qt-interface of MyTetra. I called this application MyTetra Web Client . It looks like this:

image

This client was written in 2012, and since then I have not developed it. This is a very simple wrapper, in which even a search by record name and tag is not done. Just a demonstration of the fact that the MyTetra database can be seen in a browser right on the Internet, if you store data in open GitHub or BitBucket repositories. The client is working now, and you can see a demonstration of his work like this:

  1. Copy the following URL to the clipboard: https://raw.github.com/xintrea/mytetra_syncro/master/mytetra.xml
  2. Follow the Web Client link and paste this URL in the dialog that appears. (Sometimes GitHub does not respond due to the large number of requests from my site’s IP, so if nothing is shown, you can click the Set URL button again at the top right)

If there is another MyTetra database stored somewhere in the open HTTP (S) access - GitHub, BitBucket, the shared DropBox directory, then you can see it, just specify the URL of the mytetra.xml file. No registration is required - everything just works. If there are private encrypted branches in the database, then they are simply not displayed: there is no point in showing people what is impossible to read.

However, this web client has one drawback: in fact, this is just a JavaScript page, and the data displayed on it is not indexed by search engines. What is the use of knowledge bases if nobody knows about them?

So I made a second project called MyTetra Share . The project motto: “Share your knowledge!”. This service dynamically converts the MyTetra knowledge base into a set of HTML pages that can be viewed via the Internet. On the official page of the project 8 user databases are listed, which can be immediately viewed. The principle is the same as in MyTetra Web Client: if the database is stored in open repositories, you can create a special URL, which will open the contents of the knowledge base in HTML-form. If the search engine indexes such a URL, then it will go further and index all the contents of the open database. As I said, there are 8 such databases now ( an example of one database ), and they are indexed by search engines. MyTetra Share looks like this. The tree itself:

image

And record:

image

This project turned out to be more in demand, and with the help of it, I was even able to monetize the content of my homepage and MyTetra Share service: on some pages you can see text ads. , . , -, , , , . , . , .

, MyTetra Share 100 , 3000 . Pet- , .


? , — , , -, . , C++, - . , .

, . . - , , , . , .

As for the C ++ language, it turned out to be much more complicated and ambiguous than I could have imagined ten years ago when I started using it tightly. Unfortunately, my work is not related to programming: where I live, you cannot earn such a thing. In my environment there are no acquaintances who at least knew the difference between "si" and "pluses", only a couple of PHP coders. And so it turns out that if there is no personal communication between the mouth and the ears with the blackboard and felt-tip pen at hand, then there is no development either. No one to discuss difficult things so that there is no misunderstanding and they are well kept in mind. Perhaps I would have been helped by books that I was highly recommended:


. . — . . , — «», - , , .

C++ . , — lektorium.tv. , : , . «» .

In general, for me, the C ++ language has remained a mystery. I use a very small part of the language - procedures and OOP, I write templates with pain, if one cannot do without them. Every time I cry from the syntax of pointers and addresses. I carefully use inheritance, although I understand that the power of the language is in it. With horror I look at multiple inheritance and casting of object types. Qt smoothes out all these problems a little, but it masks them more than solves them. The apotheosis of my understanding of the language was the news on the ENT, which was quickly cut out, here is a small part:

What changes does the initiative group of the standard C ++ !! offer to make the C ++ language a beautiful, powerful and popular means of modern development? Of the most notable improvements:
  • Inclusion in the standard of conceptors that implement the aspect-oriented paradigm of inherited code;
  • ;
  • -, , ;
  • , - ;
  • ;
  • -.

— 1 , . . , — ISO C++!!..

How can you help the project


, , , . , , . , , , . , - , .

, MyTetra : . , MyTetra Share, : , , . MyTetra Share , , MyTetra. , .

: CVS- GitHub BitBucket, , OpenSource . , MyTetra Share , . OpenSource, !


. , .

, , , , . : , - , . , email MyTetra Share.

If the number of bases in MyTetra Share doubles relative to the current one, I will begin work on creating a separate site for the MyTetra project. On the new site it is planned to make news, source, wiki, screenshots sections, post a forum, transfer MyTetra Share and MyTetra Web Client services there. Perhaps the presence of the site and the English versions of the pages will lead the project to a new level.

Speaking of English. I am constantly approached by English-speaking users, and I understand that MyTetra has some interest in the English-speaking world. Two official pages - MyTetra and MyTetra Web Client ( , ). -, . MyTetra Share, , ( ). , , ( ). , - .

MyTetra


The author is very pleased that a few months ago, the Beimprovised Chinese developer (real name is Hugh Young) did fork MyTetra, called MyTetra WebEngine . For several months, he frantically commits huge chunks of code on GitHub, which makes him genuinely surprised by its performance. The presence of this fork suggests that the code of the MyTetra program was sufficiently clear and simple so that another developer, even a native speaker of another language, could pick up a project and start making a new product based on it.

Hugh Young , MyTetra. , , , MyTetra , , .

, , , . , .

Conclusion


MyTetra , , :


( , ), MyTetra:


, , 1.42, 3 , YouTube:


( 20-40 .), . MyTetra — , , . , MyTetra . .

MyTetra 1.42 ( 5- ) , , .

, , , .

Source: https://habr.com/ru/post/316814/


All Articles