I would like to share with you a system for training, which I have been developing for several years now and which has already brought me a
lot of great benefits. The system is presented in the form of a
web site .
In this article, you will learn where the ideas behind IronBrain originated, how it evolved, how to use it correctly, as well as specific practical cases -
what IB can help you specifically and how much . I will also tell you in detail what problems I encountered during development and how I solved them, about some of the details of the technical implementation of IB.
Immediately I warn you - the system is aimed at a very high and high-quality level of training and is
not for everyone .
')
PS: The project is completely open and free, has no commercial orientation, is made from the heart and is laid out for your consideration - maybe someone will come in handy ...

Introduction
Immediately make a reservation - it is possible that the
ironbrain.org site will fall due to the habr effect or it will slow down greatly during the publication of the article, so I have provided a backup option - you can simply
download and run the server on your PC (under Windows). Still, the main goal of this article is
to bring the idea , not the realization.
How the idea originated
To convey the most accurate ideology of the program and its scope, you need to understand why it was created, what tasks it solved and how it developed. Briefly about myself - my name is Yaroslav and at the time of publication of the article I am studying on the 4th year of SPB GUAP. The ideas behind IB originated many years ago. But first things first.
I started to get involved in programming back in 2007. Then the majority studied languages ​​independently and, as a rule, according to books or manuals. For a start, I just read books and tested in practice what is written in them. But over time, came the realization of the ineffectiveness of this technique. I started looking for more productive ways of learning - and eventually I found them.
Friends advised to start a notebook of 48 sheets and write a brief summary of what is in the book. At first, the idea of ​​“jotting down a book” seemed strange and useless to me. Why rewrite what is already there? After all, I can always open a book and find the information I need. There are many books and it is not always possible to take them with you? Electronic copies can be obtained without difficulty for most books, and with the advent of electronic ink, the border is almost erased - you can have 1000 books in one device. And in general, the very idea of ​​the abstracts seemed to me to be a relic of the past - then the books were not available, I had to take notes or completely rewrite them.
But I was wrong. The main advantage of the note-taking of books was far from that. When you write a synopsis, your brain processes information and draws conclusions. He passes it through himself and writes it in the form in which it is better specifically for you. And this processed information is remembered much better. Especially if you add something of your own in your summary - thoughts that have arisen, unobvious conclusions or observations. Writing the abstract makes you think and draw theoretical conclusions - which ultimately will have a good effect on practice. This is the main benefit. Use number two - if you have not used this knowledge for a long time, for example, on a library or programming language, it is much easier for you to remember the material you read.
In fact, you can achieve about the same effect by making a summary verbally - by reading and pondering over what you read. So in 2010, I was preparing for the exam in physics - without making a summary. What, by the way, I regretted at the beginning of the first year, because I didn’t have a desire to re-read the little book, but I wanted to refresh the basics.
For many years I, studying certain technologies, conducted paper notes on them - notebooks for Assemler, Pascal, AcrionScript 2,3 were preserved. Outlining books for me was then a steep breakthrough in learning. But then I began to feel that something was missing. The first problem I began to think about is: why not replace paper notes with electronic ones? I tried, but there was no breakthrough - doc or odt - the document is essentially the same notebook, only infinitely strong and infinitely light - take it wherever you want. But these properties were not very necessary. But there were drawbacks - the notebook still was much nicer to lead, and even the eyes rested. Thus, electronic notes in the traditional form have not taken root at all.
When I was preparing for the first session in the first year of GUAP (it was a distant year of 2011), I had the task to study algebra at the university level in a short period of time - in just a week. The exam promised to be harsh, it is extremely difficult to write off there. Part of the material was in my lecture notes, part - had to be taken from the book. When I reread the notes, I noticed that the lecturer gave significantly more than it was in the list of questions for the exam. What if I was going to work as an engineer in the future and I would have been interested in in-depth knowledge of algebra? In general, I thought deeply about this difference in the amount of material supplied. And I also noticed that the ticketing approach itself is very good for learning, and can be useful for personal purposes, for example, in learning new programming languages ​​or libraries for them. Ticket makes you think. I was prepared in the classical way, writing most of the tickets for a given list of questions - and passed this exam perfectly.
In the second semester of the first course, when we started a physics course, I thought about how to study it more deeply, and for one thing I would prepare for the exam in advance. Why not make tickets for all the topics that the lecturer reads? And create more questions that "pull out" all the material, forcing him to remember and think about? I tried to compose them in the second half of the notebook, but on paper it was extremely inconvenient, it was unclear what question it was, and I did not want to rewrite all the material separately. What was needed was a program that, among other things, knows how to cut tickets at random, and also stores, I remember this ticket or not, in order not to issue it again. But then I did not guess to do it.
When I rested in Cyprus in the summer of 2011, I got the idea to create a universal program for storing personal documents and adding functions I needed that are not in Word / Writer. Among other things, I remembered the idea of ​​taking notes in tickets, and decided that it could be easily implemented on the basis of this program. I decided to call the program IronBrain. According to the original idea, the program was supposed to synchronize the knowledge of your brain with a computer, let it be very close and not direct - through a mouse and a monitor. But this general idea was not implemented then to the extent that I wanted. In fact, when you write a document and then reread it, you synchronize your knowledge with the PC, but this is very inefficient. If you have a lot of documents, it will not be interesting for you to simply re-read them all with a specific period.
IronBrain Evolution
In the second year I immediately set to work. Then I saw IronBrain as a harsh desktop program that runs instantly quickly, sits in the notification bar and runs on global hotkeys. So I did. A long search on the Internet and research has shown that using C ++ / Qt will be the best solution to the problem. By “best,” I understood that the program would be best for users — it would not require installing third-party virtual machines, run as a clean executable file, and look like most desktop programs. In this case, Qt gives the desired cross-platform - I did not want to be tied to a specific operating system. I also looked in the direction of Java / Swing, but dropped the idea. It seemed to me that Java interfaces would be terribly slow.
Then I ran into two major problems - ignorance of C ++ and ignorance of Qt. It is the absence of that basic course on C ++ - I did not have lecture notes on it and did not have time to study it normally. According to Qt, I had to read several chapters from the book in order to understand the very basics. In the end, ignorance of C ++ multiplied by its complexity, and sometimes I spent hours and hours trying to achieve an elementary compilation of the program. The development was very slow, and only by the end of the semester did I submit something working. Admittedly, C ++ / Qt knowledge did not grow much during the development process, especially C ++. By the way, this is another clear proof of why it is not necessary to study languages ​​like C ++ on the go and it is better to spend separate time for learning “by the book”.
In fact, the development slowed down what I didn’t have a very good idea of ​​how my program should work. I acted quite foolishly and made just a large array of objects that kept the sentences, and at the same time there was an opportunity to raise the question from one sentence to another. The idea was this - first the user writes the answers - i.e. fragment of the abstract itself. Then the program forces him to put a question to each line, and, thus, most of the abstract can be pulled out with the help of questions. But it was a very bad idea. In addition to everything, the program often crashed with a typical error “the program performed an illegal operation and will be closed” - somewhere there were errors with pointers. However, the basic idea was implemented and worked, I sat on QIronBrain a couple of months in early 2013. He already began to bring substantial benefits. How he looked, you can look at the screenshot below.
What QIronBrain looked like Then I realized that I needed just two RichTextEditor for questions and answers. It was necessary to radically change the architecture of the application, ideally - completely redo it. That's exactly what I did. Using the same small knowledge of C ++ / Qt, I wrote the working Examiner prototype in less than a week from scratch - having pulled out the only successful idea from QIronBrain. It was this reincarnation of IronBrain that I used for more than a year afterwards, creating about 600 tickets in it for various topics. And the paradox is that I did not modify it at all - I used it in the form in which I released the first version. She almost never took off, turned out very oak and reliable. The data, as in QIronBrain, was stored as a single XML file. As a basis, the QTextEdit class was used, which allowed receiving its contents in the form of HTML and building it on the basis of HTML.
What did Examiner look like? All that the Examiner did was create tickets and a hierarchy for them, and also allowed them to drive tickets linearly out of a certain section. That was more than enough. In the middle of 2013 I decided to choose a certain reference programming language and study it in depth, since my knowledge was scattered superficially and in different languages. Initially, I thought C ++ would become such a language. However, after much thought, thoughtful reading holivar, analysis of vacancies on various sites and ratings, I came to the conclusion that I need Java. No sooner said than done. For half a year, I read and outlined more than half of Schildt’s book, and also drove a lot of different tests, ranging from Quizful to Enthuware. By the way, from the tests I received almost as much knowledge as I did from the book, and this was an expanded knowledge of the subtleties of the language - I thoroughly analyzed incomprehensible questions and composed tickets for them. In total, I created about 500 tickets for Java SE 6 and brought my knowledge to a whole new level. It gave me the opportunity to pass the “Java SE 6 Programmer Certified Professional” exam on a rather hardcore simulator, which is very cool, and then to pass the “Java SE 7 Programmer I” already in a real certification center, which was quite simple (since it is based on) , but opened the way to Oracle certification for Java and the possibility of further passing the steeper exams.
At the beginning of 2014, I became interested in android and created about 100 more tickets for android. Admittedly, the android is not studied very well by the book. Or maybe I took a book that was too complicated. In any case, I could quite successfully create tickets on the basis of the experience gained or infatuated, but the Examiner was strictly hierarchical — I could not create a ticket from scratch and tie it to several areas of knowledge. In the middle of 2014, I came to the conclusion that it would not hurt to finalize the Examiner and let it go to the people - to write an article on a Habré about the whole thing. I decided that I would rewrite the program in Java / Swing and add a number of convenient features, such as searching the base of tickets and adding a ticket outside the hierarchy.
In about 2 months of work, I created a working prototype of JIronBrain, in which new functions were implemented and many things were improved. However, I realized that I had made a fundamental mistake. Those GUI tools that I used were considered far from the best. When I developed Examiner on Qt, it turned out that the QtWidgets library, in which QTextEdit was dear to me, is not going to be further developed. The replacement comes QtQuickControls, which did not give at that time much of what I wanted. And it is not known when they will be refined to this level. I was hoping that in Java / Swing there would be no such thing. However, it turned out that Swing is also considered an outdated library and has not been finalized for a long time, critical bugs are not fixed, and Oracle positions JavaFX as a replacement for Swing. I personally ran into a problem in JTextPane when the user enters several spaces in a row and they are lost with setHtml (getHtml ()). Of course, you can fix all this with crutches, but is there really no better way? I was thinking of rewriting the interface in JavaFX, but then I realized that this would also be a critical error.
What did JIronBrain look like The right decision was to do IronBrain on the web. As it turned out, the contenteditable attribute exists for quite a while, which gives me the very ideal RichTextEditor that I wanted. And HTML5 is definitely not going anywhere. Moreover, this RichTextEditor works fine both under different desktop browsers and under android. And Swing under Android is almost impossible to run. This fact hurt me very much, and I realized what they mean when they say that the future belongs to the web. A web application is a kind of transformer - it can work in client-server mode, and you can run it as a desktop program without having access to the Internet.
I took out an A4 sheet and wrote an analysis of my Java / Swing application and what benefits would I get when switching to a web architecture. They were very significant, ranging from a very promising technology to building a GUI (HTML5), ending with convenience for the end user - no need to download, install, and so on. I realized that it makes sense to rewrite IronBrain again. Fourth time. For the mistake of choosing the wrong technology, I had to pay dearly with time and effort. But the transition is worth it.
Indeed, HTML5 has given me everything and more. This, apparently, is the most advanced technology in the world for constructing GUI of small and medium complexity, although, given modern processors and fast browsers, I think you can build an interface of almost any complexity on HTML. I even could not imagine that it has a very powerful built-in RichTextEditor. In almost all the forums in which I worked, you must first enter the code, and only then it is visualized in the "preview" mode. In addition, many sites are terribly slow, and I thought that my system would also slow down. But the WIronBrain hosted on the VPS also worked almost instantly! In addition, in an extreme case, I could run it locally, then in terms of speed, it will be the same as desktop applications.
In about a couple of months I developed WIronBrain from scratch, with the server part in Java / Spring, and the client part in HTML5 / CSS / JS. The old database was overtaken in MySQL, and by the way I am very pleased.
What does wIronBrain look like Idea
Training is of great importance in our life, especially for an IT specialist. If you are constantly learning something new, then you probably face the problem of losing valuable information -
it is
human nature to forget . Everyone tries to solve this problem in his own way - for example, using an outline or notebook.
I offer you a special format for storing knowledge - in the form of tickets.
All your knowledge and skills, almost all your life experience can be expanded in the form of tickets . What is a ticket? This is a set of questions and answers to them. It can be both theoretical questions and tasks with a detailed answer. You only need to learn how to compose them - and so that it becomes a habit.
If you forget something from a certain area, you can cut tickets for this area, compiled by you and drive them away in the form of a test. The huge advantage of tickets over re-reading a book or abstract -
they make you think . A lot to think, remember and analyze. You check yourself - whether your answer corresponds to what you have planned and choose whether this ticket will appear again in the current test. And after a long reflection on the questions of a forgotten ticket - you can easily recall it after looking at the answers.
The IronBrain system allows you to automate the creation of tickets, organize their cutting and search for them, as well as many other useful functions. If you regularly study something, you can remember before each new lesson completely the main points of the previous lesson thanks to questions. You can look at IronBrain as a teacher who, before each new lesson, throws you questions for the past and explains if you have made a mistake somewhere. And also makes you learn the main points. This is the main benefit of IronBrain. Learning will become much more interesting and enjoyable, as you will see your progress and think a lot. One of the most important advantages of IB is to increase the pleasure of learning and as a result - a steep increase in your productivity. In fact,
to experience the main advantages of IronBrain and see the difference with the classical approach to training, you need only 3-4 days, each for 1-1.5 hours . Just try it.
The subtleties of using the system do not make sense to describe within this article, you can read about them in the section “Documentation -> User Guide” inside IB.
Specific Applications
Learning a general purpose programming language
HTML / CSS / JS can be studied on the go, without reading books or manuals (as most freelancers do), at a level sufficient to create small sites to order. With more complex programming languages, such as C ++ or Java, this approach is not effective. If you study them in the course of project development, you run the risk of making architectural mistakes, for which you will then pay dearly. Of course, everything can be studied through practice and on its mistakes - but it will take years, while you can learn from the experience of others from the books much faster.
The algorithm is as follows - take a book on C ++ / C # / Objective-C / Java or in another industrial language. You open IB, go to the [Tickets] → [Groups] section and create a section for your language and there is a section for the book. In it, build a hierarchy - as you prefer - from section to chapter and subsections. They already - directly tickets themselves. You read the book, outline the theory, then practice - enter the code and play with it, change it and look at the result. Be sure to check ALL the supplied material in practice, so typos are revealed, interesting points and useful features. For all the learned knowledge and subtleties that you discovered - make up tickets, such as "how to write such a program, what are the subtleties." And the area for the ticket is not affixed. Better for each chapter, specify the area for the name of the language. This will allow you to later, if necessary, pull out this set of tickets and connect it with the tickets obtained empirically on the same topic with other books.
Be sure each time before a new lesson, run the tickets that you created in the last lesson - then knowledge will be much better fit, there will be a rethinking of many things. It is this repetition of tickets that is the main benefit of IB in this particular case. Your learning programming will be much more efficient and enjoyable. Use number 2 - through the search you can easily easily find your tickets and use the database as a personal FAQ.
Quite often it happens that you start to read a new, complex chapter, and it’s a conceptual one that is complex - new concepts, approaches and principles. Sometimes you read and just do not understand what and why. IB helps to gradually “take” such chapters without much difficulty. You only need to make 3-4 tickets with the theory, at least with the simplest definitions. And the next day - get rid of and learn these tickets. Then, continuing the training, you will notice that a lot has cleared up and the training will go uphill. It arises because your summary — squeezing the theory — provides a kind of “framework” for your thinking, a “basis” from which you can build and put everything in its place.
Using IB, I learned Java SE at a fairly decent level and still use this knowledge in several ways. About 300 tickets were compiled from the book "Shieldt Java 7 Complete Guide." It was not at all difficult, as you might think at first glance. And very productive. On the day you need to do about 1.5-2 hours, amounting to about 4-6 tickets.
Exploring the package for working with graphics
In 2013, I was interested in the theme of creating games, I wanted to create my own little indie game, albeit not complicated, but executed from beginning to end. But the lack of knowledge of the 3D modeling software pulled back. Usually, in such cases, they take an individual person-designer, but first I would like to try this area myself.
Licensed 3D max cost a lot of money, but I didn’t want to use a hacked version and, besides, not a cross-platform one. I saw that there was a worthy replacement - Blender - and decided to study it. I downloaded a very good series of video courses in Russian on it, began to view and experiment. And also - in parallel to create tickets for the knowledge gained. Then QIronBrain did not allow to insert screenshots, but they were not very necessary for me. It was enough to formulate a question in the text, for example, “How to extrude a landfill?” Or “How to collapse three points?” - and the answers in the form of hot keys, or a description of where the necessary buttons are located. In addition to questions and answers on elementary topics, I also asked purely technological questions and answers, for example, “How to make a cup through 2D drawing and rotation 360 degrees” - and then the description of the algorithm by items. The training took about 2 weeks, almost every day I worked on average 1.5-2 hours.
I learned the basics of a blender, but put off the project of creating the game for the future, as there were many other tasks. And six months later, in the new semester, I had a term paper on computer graphics. This is where the great benefits of IronBrain have affected. I opened Blender and realized that I don’t remember 60% of what I studied, and 30% still remember extremely vaguely. For half a year I didn’t practice 3D modeling, and I never practiced my knowledge at all - I studied and forgot. What to do? Time spent on training was well. Reviewing the same video courses for the second time was tedious and unproductive. Of course, the re-study of the material goes much faster - I would be able to review and remember all this in a week - 1.5-2 hours every day. But there was a more efficient way.
Running all the Blender tickets took me about 3 days, 2 hours each day. This is two times less than if I repeatedly watched the video course. And three times more pleasant, because, again, questions make you think. I created excellent 3D models (for coursework) and passed it without any problems. A year has passed since then and I have forgotten everything again, but if I again need Blender, I can also remember it easily.
In addition to that, a search for your tickets in this case gives great advantages. If in the case of books you could still download an electronic version and search for it, then for most video courses text search is not possible, and scrolling back and forth in search of the desired fragment is a very tedious task.
Algorithm such - take video courses (they are most effective for studying graphic packages), create in the [Tickets] section a new section "Computer graphics". It contains a section on the name of your package, for example, Photoshop, Gimp, 3D max, etc. There is a section by the name of the video course - and there are sections already on it - sections with tickets. Everything is similar to taking notes from a book.
Preparation for testing
When I was learning Java, after reading the book, I decided to delve into the tests. The Quizful site is just a huge collection of tests on Java SE and they contain a lot of knowledge and experience. Many examples can be called overly intricate, but nevertheless they sometimes contain practical experience, which is not written about in books and which can really come in handy. In someone else's code and not so can be found. In addition, Java is well standardized and 95% of these very linguistic “jokes” are strictly determined by the language specification. If they are defined there, then someone needs them, is not it?Suppose you decide to test on some site and make work on the bugs. You meet with some new features of the language or its libraries that you did not know about before. Open IDE, experiment. Now you need to write down this feature somewhere, so as not to forget. It can be useful to you on a real test, or at an interview - there they often like to ask all sorts of tricks. And finally, there are practically useful points in the tests.But where do you write down this knowledge, so that later it was easy to remember? IronBrain comes to the rescue. Yes, you will create tickets based on tickets. It may seem strange to you at first glance, but this is quite normal. In your ticket you put your vision and understanding of the problem. I repeat - you can not just copy the question and answer from the test. You need to explore it yourself, check it out, think it over, remake it and make your ticket. Let each IronBrain user create his own collection of tickets. It's like a notebook - you can not use someone else's.The algorithm is significantly different. The test is not a book or a video course. He has no structure. There, everything is randomly mixed and there is no point in trying to reduce it to a hierarchy. Just create an independent ticket by clicking on the "+ Ticket" menu. But do not forget to tie it to at least one area.In theory, this approach can be used to prepare for almost any test on any topic. Or to extract useful practical information from tests, if there is one.Storing source code fragments
Once upon a time I published an article about CodePaster in Habr . I myself have used this program for a long time, but over time I scored on it when I did a normal search in IB. Yes, code snippets can also be stored as tickets. And add a list of questions to the fragment, according to the general logic of the work or specific methods. And this by the way really helps when you use search - the list of questions explains what this code does. Those.
code snippets can simply be added as tickets, then DO NOT chase them in the form of a test, only to find through the search.Super preparation for the interview [Assumption]
Suppose you are a mobile application programmer. You studied Java SE for a certain book and made a lot of tickets for it. You studied android video course and also made up the tickets. Then you raised your VPS server and gained a lot of useful practical knowledge on Linux - having solved most of the administration problems through a search engine and third-party sites. And all this knowledge you also turned into tickets. Then you did the project “for yourself” under the android, and in the process of development you came across a lot of things that are not written in books and courses - both in Java and in android. All these practical skills you also overtook tickets. Each ticket that you created, one way or another, entered into an area, directly or indirectly. Then you went to the Linux courses and they told you a lot of interesting things,which you also then checked at home and overtook tickets. Then you read some interesting articles on Habré about Git and noted a few things for you - a couple of new tickets.The result - you have the following IB-areas - Java SE, Android, Linux, Git - and in each area there are tickets. Regions can sometimes intersect - when a ticket affects unique knowledge from both regions. You are looking for vacancies and find among them those that roughly correspond to your knowledge, for example, a vacancy in a certain MobileMegaSoft company.You create an IB-direction, which includes all these areas and call it "MobileMegaSoft direction". From now on it includes ALL the tickets that you previously made up and included in these areas. And most importantly - it calculates the percentage of tickets that you remember at the moment, and also allows you to cut those tickets that you most likely forgot. For example, you can, for a couple of weeks, every day take a couple of hours, slice and chase your tickets, remembering your experience, as well as reading in the books and hearing on the courses. All this knowledge will be brought together in your head, and in addition, during repetition, you will have a different view on many things and new ideas, an understanding of what used to be muddy. It is quite possible that you will even make new conclusions and get new knowledge by repeating old ones. Not for nothing they saythat repetition is the mother of learning. IronBrain allows you to "lift into the air" all your knowledge that you have accumulated over the years on various topics.Thus, you get almost perfect preparation for the interview. At least it should be in theory. So far I have not been a student and I didn’t get involved in large companies, and so I took small part-time jobs. Therefore, I cannot say that I was taken to such a cool company because I was preparing through IB. Maybe in a couple of years, when I graduate, I will try to do it.Any job that requires extensive knowledge [Assumption]
Imagine that your knowledge is airplanes at an aerodrome. If you do not use them for a long time, they are idle without work and eventually become useless. Suddenly you need to keep your entire fleet in the air? With the traditional approach, this requires very large labor costs and effort ...All theoretical and practical knowledge can be expanded in the form of tickets. No matter what source of this knowledge - someone taught you, you learned from a book, came to this yourself, or read it in some forum. I will give a simple example. IT specialist always needs to know a lot. And here IB can essentially help you. If you work as a programmer, as a rule you are dealing with a large stack of technologies. And for each technology you can create an IB-area, and create an IB-direction that collects all the areas necessary for your work. In this way you will outline a lot of tickets that contain the knowledge you need for your work. Yes, this knowledge may be redundant, you can use only 10% of all repeated knowledge. But this redundancy is inevitable and natural. To make the right choice among the three libraries,the programmer must know at least at the level of fundamentals all three libraries. And the mistake of choice, as you know, can be costly.IronBrain allows you to maintain a certain set of knowledge constantly "in the air." The slicing function allows you to choose random ones from a certain set of tickets, but to choose from those that you don’t remember. And when you answer each ticket - you choose when to remember it, in a day, a month, a year, etc. Admittedly, I myself created the “IB Developer” direction and included the areas of Java SE, Tomcat, HTML, JS, CSS and Linux. When I learn something new - I add tickets to the relevant areas. However, I have not been able to apply this cutting technology abruptly, and I don’t presume to say whether it will help you or not. If you can - be sure to write about it. IronBrain has beta features, and this is one of them.I heard that the work of a lawyer implies knowledge of the theory in a very large volume - and the success of the work directly depends on this volume. I want to make the assumption that IronBrain can be used very effectively for the study of legal sciences and when working in this area. But this, again, an assumption, and I could be wrong. At the moment I have no friends who have used IB effectively in this direction. I will make a similar assumption for medical sciences ...Technical implementation
I have been thinking for a long time about choosing Java VS PHP for the IB server part. This fundamental holivar, which, like the VS Freelance Office, did not dare inside me and may never be solved. Well, except that if I finish my studies at the university and try myself fully in both directions. I tried to choose the Java side and I’m going to build my future career on it, but I don’t know if I made the right decision. PHP opens up, as it seems to me, fantastic opportunities for freelancing, which Java does not have. Maybe it was worth choosing PHP. But I knew Java at a decent level and chose this platform for the server part.IB is based on Java / Spring / Hibernate. This is a classic stack that is used quite often. I have studied the basics of Spring and Hibernate in about 2 weeks. These are very complex industrial technologies, and I did not have the time and opportunity to practice them normally anywhere, therefore, most likely, there are a lot of stocks, architectural and not only. It takes years, both theory and practical work in companies, to study them. So do not judge strictly.Once I had a tradition to open the source code of sites from friends of web programmers and say how everything is crooked and oblique. Now, when I essentially released my first website, I understand that my frontend is built, perhaps even worse than the web programmer’s friends. HTML / CSS / JS require separate study and hard work, and I specialize more in the server part than in the client part. Maybe it was worth using libraries like GWT, or at least AngularJS to connect. But I did a thin client on traditional HTML / CSS / JS + jQuery. In architectural terms, the code is just awful, but I didn’t know how to do it differently when I started development.I could release JIronBrain as a desktop application with a Java / Swing interface. There it would be significantly more difficult to get to the bottom of the code, but the program would not receive the huge benefits of a web application. Therefore, I laid its foundations on the web.Anyway, the current implementation of WIronBrain, having not the best architecture on the client, works BETTER and COOL than all previous implementations. HTML5 gave me fantastic possibilities, ranging from contenteditable properties to support for web sockets. I repeat once again - the current version of IronBrain, although beta, but it works fine if used correctly and can already be used for training.MySQL is used as a DBMS, and all data is stored in it. A very interesting fact - in the source code there is not a single line written in SQL. All work with the database goes through the ORM Hibernate layer and it must be admitted that it is very convenient. Thus, the project is not tied to a specific DBMS and in theory it can be used with any relational DBMS. And the server itself is raised on a budget VPS running Debian OS.Conclusion
I apologize if the article turned out to be big, I just wanted to lay out everything related to IB to the maximum. I have long wanted, by the way, to write this article ... Thesource code of the system is completely open and available on GitHub .If you manage to apply IronBrain in any of the areas of your life, be sure to email me your story in detail at kciray8@gmail.com . You can do it anonymously or indicate that I did not post it in public access. But, in any case, I will be glad to any feedback.In addition, I would be very interested to hear about your personal training system, how you learn, what methods and so on. Write ...Best regards, Yaroslav aka KciRay .UPDATE:It was generally received by email. I will understand you.For registrations for 4 days.Interesting Fact of The - the ironbrain.org server by never Fell and the site not DID AT SLOW down all, successfully sustaining the effect Habra.