diff --git a/en/game/index.html b/en/game/index.html index c79ce13..61ff54d 100644 --- a/en/game/index.html +++ b/en/game/index.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/game/index.template b/en/game/index.template index 87cd551..c6b48ea 100644 --- a/en/game/index.template +++ b/en/game/index.template @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/game/item.template b/en/game/item.template index 45934d5..77c50e7 100644 --- a/en/game/item.template +++ b/en/game/item.template @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/game/mahjong.html b/en/game/mahjong.html index a3bcc7e..8c82d24 100644 --- a/en/game/mahjong.html +++ b/en/game/mahjong.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/game/ogs-mahjong-1.html b/en/game/ogs-mahjong-1.html index 2f9f180..ef55fee 100644 --- a/en/game/ogs-mahjong-1.html +++ b/en/game/ogs-mahjong-1.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2014-another-year-passed.html b/en/news/2014-another-year-passed.html index e4df340..86ba068 100644 --- a/en/news/2014-another-year-passed.html +++ b/en/news/2014-another-year-passed.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2015-roadmap.html b/en/news/2015-roadmap.html index f9e92bc..9c2e04b 100644 --- a/en/news/2015-roadmap.html +++ b/en/news/2015-roadmap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2016-august-recap.html b/en/news/2016-august-recap.html index 4cdc6a1..1ca53a5 100644 --- a/en/news/2016-august-recap.html +++ b/en/news/2016-august-recap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2016-november-recap.html b/en/news/2016-november-recap.html index 48104b4..d589a58 100644 --- a/en/news/2016-november-recap.html +++ b/en/news/2016-november-recap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2016-october-recap.html b/en/news/2016-october-recap.html index 549d301..93f659d 100644 --- a/en/news/2016-october-recap.html +++ b/en/news/2016-october-recap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2016-roadmap.html b/en/news/2016-roadmap.html index a3d6222..a41c376 100644 --- a/en/news/2016-roadmap.html +++ b/en/news/2016-roadmap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2016-september-recap.html b/en/news/2016-september-recap.html index b6c0187..db36ee3 100644 --- a/en/news/2016-september-recap.html +++ b/en/news/2016-september-recap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2016-tech-showcases.html b/en/news/2016-tech-showcases.html index e1d68c2..1402b8e 100644 --- a/en/news/2016-tech-showcases.html +++ b/en/news/2016-tech-showcases.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2017-happy-new-year.html b/en/news/2017-happy-new-year.html index 79eb581..0f14469 100644 --- a/en/news/2017-happy-new-year.html +++ b/en/news/2017-happy-new-year.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2017-summary.html b/en/news/2017-summary.html index c0f595b..bbf1b52 100644 --- a/en/news/2017-summary.html +++ b/en/news/2017-summary.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2019-year-of-rethinking.html b/en/news/2019-year-of-rethinking.html index 72e1175..d906220 100644 --- a/en/news/2019-year-of-rethinking.html +++ b/en/news/2019-year-of-rethinking.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/2020-05-03_git-budget.md b/en/news/2020-05-03_git-budget.md new file mode 100644 index 0000000..f56d1e3 --- /dev/null +++ b/en/news/2020-05-03_git-budget.md @@ -0,0 +1,126 @@ +Title: Why I keep track of spendings in a personal app made with Git+JS +Date: 2020-05-03 00:00 +Category: News +Slug: git-budget +Lang: en + +![GitBudget][снимок] + +In this article Michael shares his experience of using Git+JS. + +Hi, folks, let me share my experience of creating an application to keep track of my spendings. Specifically, let me do it by answering the following questions: + +1. Why keep track of spendings in an application? +1. Why did I create the application as a personal project? +1. Why does the project use Git+JS? + +**1. Why keep track of spendings in an application?** + +I, like many people out there, wanted to become rich and [successful][успех]. To become rich, one is often advised to run a personal budget, that's what I started to do several years ago. I'd like to point out that running my personal budget hasn't made me rich and successful, and I increased income simply by moving to the capital of my home country. + +I think I started to run the budget somewhere around 2012. By that time I already had a professional programmer deformation, which can be described as "made by someone else = bad" formula and is usually manifested by a strong desire to rewrite everything from scratch. However, I had no experience with budgeting back then, so I decided to try a "professional" solution and purchased [YNAB][ynab] (You Need A Budget) to use the application on both PC and mobile. + +I tried to do my best to set out budget plans and fulfill them in the course of three years. However, somewhere around 2015 the authors released a new application version and **demanded money for the upgrade**, the old version was no longer functioning. I had to choose one of the options: + +1. Pay for the upgraded version and use a completely new "shiny" user interface. +1. Stop their ripoff, keep my money and lose the history of spendings. + +I concluded that: + +1. I already paid for the application; +1. the old version was suitable for me; +1. I did not ask for an upgrade; +1. if I would know I have to pay for each upgrade, I would have never purchased their application in the first place; +1. I didn't want to sponsor this boorishness; + +so I stopped the ripoff and **lost my history of spendings**. + +This was a very disappointing situation for me, so I stopped tracking my spendings for about a year. However, I was once experiencing a "painful synchronization" (also known as "figuring things out" with a wife). I failed to defend myself against a financial vocal attack like "you're a waster, you always waste money on junk". Then I realized I really need to keep track of my spendings. + +This time I decided not to repeat my mistake of giving all my data to someone with the risk of losing it, so I started to track my spendings with simple phone notes. The format was simple and looked like this: + + + +I used the notes solely on the phone until mid-2018. Then, a new need arose: I wanted to be able to **work on my spendings from a PC** to analyze them. I took the time to see through the solutions that would allow me to work with my spendings on both PC and mobile **free of charge**. A calendar turned out to be such a solution: + + + + + +I used a Google account to access [Apps Script][apps-script] (a clone of JavaScript) to analyze the spendings. Working with spendings in Apps Script turned out to be quite daunting because calendar records are not designed to host spendings. Data ownership question was still unresolved: my data was still dusting on an unknown server I don't control, and I could only access my data through an API, **which might change in the future by someone else's decision**. + +While I was using a calendar, I've had the following ideas frequently visiting me: + +1. it would be nice to keep all my data in Git to be able to easily analyze the spendings; +1. it would be nice to have a convenient user interface without all the noise that prevents me from quickly adding a record. + +Autumn 2019 I discovered [Isomorphic-Git][isomorphic-git], which allows JavaScript to work with Git, quickly verified the ability to work with Git, and realized I found my Holy Grail. Recently I've finished creating the first version of GitBudget application, you can see its functionality here: + + + +That's how the spendings look like on my phone now: + + + +Git data looks like this: [https://gitlab.com/kornerr/git-budget-sample-data/-/blob/me/gb.log](https://gitlab.com/kornerr/git-budget-sample-data/-/blob/me/gb.log) + +Let me highlight a few important issues: + +* Git repository above reflects actions performed in the video above; +* I keep my spendings in a private repository, you should do the same; +* the application runs completely on the device and has no back-end: GitHub Pages hosting is used; +* the application talks to the outside world only during synchronization with Git; +* password is kept by a browser, the application only uses it for synchronization with Git; +* the application should be loaded over HTTP because the currently used Isomorphic-Git version (0.70.0) makes some requests (metadata) to Git over HTTP, and browsers prohibit HTTP requests from HTTPS nowadays. + +**2. Why did I create the application as a personal project?** + +I spent 40 hours of my life during the first quarter of 2020, i.e., on average, I worked for about half an hour each day. + +Personal projects have the following benefits over those done at work: + +1. You can do whatever you want and learn from your mistakes. +1. Nobody's breathing down your neck and restricting your fantasy. +1. The above two points keep you calm and give you the strength to perform any stupid activity that might be required at work. +1. Mistakes you own drastically widen your horizons. + +Personal projects have drawbacks, too: + +1. Nobody in the world cares about your project but you. +1. Nobody would pay you for your project. +1. You have to find time to do the project every day. +1. Your wife won't thank you for the project, even if she would use it herself. + +It's easy to note that all drawbacks of the personal project are balanced with the benefits of the work project. And all drawbacks of the work project are balanced with the benefits of the personal project. Yin and Yang. + +**3. Why does the project use Git+JS?** + +Keeping data in Git instead of an unknown back-end/API has the following benefits: + +1. Git is the most widespread solution for decentralized source version control among developers, i.e., almost every developer has experience with Git. +1. You don't need a new API to work with Git: you just work with files. +1. There are numerous services offering Git free of charge if you're not too crazy about security and don't want to pay for the service. +1. Of course, a Git service provider might be [acquired by a large corporation][поглощение] one day, however, it's easy to move your Git data wherever you want. +1. For maximum security you can always host your own Git server. + +Usage of JS with HTML/CSS over Swift/Kotlin/C#/Python has the following benefits: + +1. Your application runs everywhere: PC, tablet, mobile phone. +1. You don't need to pass AppStore reviews to get to every device. +1. HTML/CSS/JS standards are international, so [no single company may stop supporting it][opengl] or [change its API][swift]; this may result in backward compatibility of [20 years][долговечные-приложения] or more. +1. Since there's no back-end, all logic resides in JS executed on the client, so you can save the version of the application that best suits you and forget about recurrent updates that [usually only hamper usability][обновления]. + +GitBudget is the first attempt to see what Git+JS can do. I can only imagine the possibilities lying ahead. + + +[снимок]: ../../images/2020-05-06_гит-бюджет_снимок.png + +[успех]: https://youtu.be/7RchntYFtSE +[ynab]: https://www.youneedabudget.com +[apps-script]: https://developers.google.com/apps-script +[isomorphic-git]: https://isomorphic-git.org/ +[поглощение]: https://github.blog/2018-06-04-github-microsoft/ +[opengl]: https://arstechnica.com/features/2018/09/macos-10-14-mojave-the-ars-technica-review/12/ +[swift]: https://medium.com/@DoorDash/tips-and-tricks-for-migrating-from-swift-2-to-swift-3-c67a8520dbac +[долговечные-приложения]: on-the-way-to-durable-applications.html +[обновления]: https://hardforum.com/threads/anyway-to-turn-off-the-damn-automatic-driver-updates-in-windows-10.1948410/ diff --git a/en/news/back-to-social-networks.html b/en/news/back-to-social-networks.html index 6898e9a..69001d0 100644 --- a/en/news/back-to-social-networks.html +++ b/en/news/back-to-social-networks.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/back-to-the-static.html b/en/news/back-to-the-static.html index 3bd8910..f7e1831 100644 --- a/en/news/back-to-the-static.html +++ b/en/news/back-to-the-static.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/bye-desura-hello-humblebundle.html b/en/news/bye-desura-hello-humblebundle.html index 86c277f..e2d3adb 100644 --- a/en/news/bye-desura-hello-humblebundle.html +++ b/en/news/bye-desura-hello-humblebundle.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/defending-availability.html b/en/news/defending-availability.html index a6f22bd..2a3bda5 100644 --- a/en/news/defending-availability.html +++ b/en/news/defending-availability.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/editor-0.4.0-and-0.5.0-plans.html b/en/news/editor-0.4.0-and-0.5.0-plans.html index e31b68e..cff998b 100644 --- a/en/news/editor-0.4.0-and-0.5.0-plans.html +++ b/en/news/editor-0.4.0-and-0.5.0-plans.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/editor-0.4.0-plans.html b/en/news/editor-0.4.0-plans.html index 35501e2..3c970b9 100644 --- a/en/news/editor-0.4.0-plans.html +++ b/en/news/editor-0.4.0-plans.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/editor-06-roadmap.html b/en/news/editor-06-roadmap.html index 789a7b5..ca5eb42 100644 --- a/en/news/editor-06-roadmap.html +++ b/en/news/editor-06-roadmap.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/editor-06.html b/en/news/editor-06.html index 32b3c3a..6adcd0e 100644 --- a/en/news/editor-06.html +++ b/en/news/editor-06.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/example-driven-development.html b/en/news/example-driven-development.html index 95b9434..6daea35 100644 --- a/en/news/example-driven-development.html +++ b/en/news/example-driven-development.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/examples-and-dependencies.html b/en/news/examples-and-dependencies.html index ff7b242..3e50f8a 100644 --- a/en/news/examples-and-dependencies.html +++ b/en/news/examples-and-dependencies.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/git-budget.html b/en/news/git-budget.html new file mode 100644 index 0000000..9392218 --- /dev/null +++ b/en/news/git-budget.html @@ -0,0 +1,201 @@ + + + +
+ + + + ++ 2020-05-03 00:00 +
+In this article Michael shares his experience of using Git+JS.
+Hi, folks, let me share my experience of creating an application to keep track of my spendings. Specifically, let me do it by answering the following questions:
+1. Why keep track of spendings in an application?
+I, like many people out there, wanted to become rich and successful. To become rich, one is often advised to run a personal budget, that's what I started to do several years ago. I'd like to point out that running my personal budget hasn't made me rich and successful, and I increased income simply by moving to the capital of my home country.
+I think I started to run the budget somewhere around 2012. By that time I already had a professional programmer deformation, which can be described as "made by someone else = bad" formula and is usually manifested by a strong desire to rewrite everything from scratch. However, I had no experience with budgeting back then, so I decided to try a "professional" solution and purchased YNAB (You Need A Budget) to use the application on both PC and mobile.
+I tried to do my best to set out budget plans and fulfill them in the course of three years. However, somewhere around 2015 the authors released a new application version and demanded money for the upgrade, the old version was no longer functioning. I had to choose one of the options:
+I concluded that:
+so I stopped the ripoff and lost my history of spendings.
+This was a very disappointing situation for me, so I stopped tracking my spendings for about a year. However, I was once experiencing a "painful synchronization" (also known as "figuring things out" with a wife). I failed to defend myself against a financial vocal attack like "you're a waster, you always waste money on junk". Then I realized I really need to keep track of my spendings.
+This time I decided not to repeat my mistake of giving all my data to someone with the risk of losing it, so I started to track my spendings with simple phone notes. The format was simple and looked like this:
+ +I used the notes solely on the phone until mid-2018. Then, a new need arose: I wanted to be able to work on my spendings from a PC to analyze them. I took the time to see through the solutions that would allow me to work with my spendings on both PC and mobile free of charge. A calendar turned out to be such a solution:
+ + +I used a Google account to access Apps Script (a clone of JavaScript) to analyze the spendings. Working with spendings in Apps Script turned out to be quite daunting because calendar records are not designed to host spendings. Data ownership question was still unresolved: my data was still dusting on an unknown server I don't control, and I could only access my data through an API, which might change in the future by someone else's decision.
+While I was using a calendar, I've had the following ideas frequently visiting me:
+Autumn 2019 I discovered Isomorphic-Git, which allows JavaScript to work with Git, quickly verified the ability to work with Git, and realized I found my Holy Grail. Recently I've finished creating the first version of GitBudget application, you can see its functionality here:
+ +That's how the spendings look like on my phone now:
+ +Git data looks like this: https://gitlab.com/kornerr/git-budget-sample-data/-/blob/me/gb.log
+Let me highlight a few important issues:
+2. Why did I create the application as a personal project?
+I spent 40 hours of my life during the first quarter of 2020, i.e., on average, I worked for about half an hour each day.
+Personal projects have the following benefits over those done at work:
+Personal projects have drawbacks, too:
+It's easy to note that all drawbacks of the personal project are balanced with the benefits of the work project. And all drawbacks of the work project are balanced with the benefits of the personal project. Yin and Yang.
+3. Why does the project use Git+JS?
+Keeping data in Git instead of an unknown back-end/API has the following benefits:
+Usage of JS with HTML/CSS over Swift/Kotlin/C#/Python has the following benefits:
+GitBudget is the first attempt to see what Git+JS can do. I can only imagine the possibilities lying ahead.
++ 2020-05-03 00:00 +
+In this article Michael shares his experience of using Git+JS.
+Hi, folks, let me share my experience of creating an application to keep track of my spendings. Specifically, let me do it by answering the following questions:. . .
+- 2018-08-21 00:00 -
-This article describes two new OpenSceneGraph cross-platform examples and the change in handling dependencies.
-Examples of HTTP client and node selection
-Once we finished working on the remote debugging example and reported its completion, we were surprised by the fact that secure HTTP connection between a debugged application and debug broker was only working in the web version of the example. Desktop and mobile versions only worked with insecure HTTP.. . .
-Page 1 of 7
diff --git a/en/news/index.template b/en/news/index.template index 42ed0ef..de78598 100644 --- a/en/news/index.template +++ b/en/news/index.template @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/en/news/index2.html b/en/news/index2.html index 16bee9c..ac38853 100644 --- a/en/news/index2.html +++ b/en/news/index2.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,23 @@
+ 2018-08-21 00:00 +
+This article describes two new OpenSceneGraph cross-platform examples and the change in handling dependencies.
+Examples of HTTP client and node selection
+Once we finished working on the remote debugging example and reported its completion, we were surprised by the fact that secure HTTP connection between a debugged application and debug broker was only working in the web version of the example. Desktop and mobile versions only worked with insecure HTTP.. . .
+- 2017-08-16 00:00 -
-This article describes scripting research in July 2017.
-Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.. . .
-Page 2 of 7
diff --git a/en/news/index3.html b/en/news/index3.html index a71006d..9dbc0db 100644 --- a/en/news/index3.html +++ b/en/news/index3.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,22 @@
+ 2017-08-16 00:00 +
+This article describes scripting research in July 2017.
+Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.. . .
+- 2016-11-19 00:00 -
-This article describes how we spent a month building OpenSceneGraph (OSG) for Android: the first attempt to build OSG, the search for OSG alternatives, and the success in building OSG.. . .
-Page 3 of 7
diff --git a/en/news/index4.html b/en/news/index4.html index 90de962..6d4692d 100644 --- a/en/news/index4.html +++ b/en/news/index4.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,21 @@
+ 2016-11-19 00:00 +
+This article describes how we spent a month building OpenSceneGraph (OSG) for Android: the first attempt to build OSG, the search for OSG alternatives, and the success in building OSG.. . .
+- 2016-08-10 00:00 -
-We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools' purpose was. So we decided to start small: create a game first.. . .
-Page 4 of 7
diff --git a/en/news/index5.html b/en/news/index5.html index 5b940a6..33fb4d7 100644 --- a/en/news/index5.html +++ b/en/news/index5.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,20 @@
+ 2016-08-10 00:00 +
+We started Opensource Game Studio project a long time ago. We wanted to provide open source community with tools to create games. However, it was unclear what tools' purpose was. So we decided to start small: create a game first.. . .
+- 2015-11-15 00:00 -
-If you missed the live session, you can watch it here: -https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/. . .
-Page 5 of 7
diff --git a/en/news/index6.html b/en/news/index6.html index 6370d15..1c37795 100644 --- a/en/news/index6.html +++ b/en/news/index6.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,21 @@
+ 2015-11-15 00:00 +
+If you missed the live session, you can watch it here: +https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/. . .
+- 2015-01-13 00:00 -
-The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you're planning to make a convenient tool.. . .
-Page 6 of 7
diff --git a/en/news/index7.html b/en/news/index7.html index 16b6d44..6bd399b 100644 --- a/en/news/index7.html +++ b/en/news/index7.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,20 @@
+ 2015-01-13 00:00 +
+The development of Editor 0.3.0 showed us, that usage of custom GUI was not a perfect idea. A few months ago, custom GUI seemed as a simpler way to do things, but it turned out to lack many little features, that are crucial if you're planning to make a convenient tool.. . .
++ 2020-05-03 00:00 +
+В этой статье Михаил поделится опытом использования Git+JS.
+Здравствуйте, господа, в этой статье я поделюсь опытом создания приложения учёта трат, в частности отвечу на следующие вопросы:
+1. Зачем мне приложение учёта трат?
+Как и многие другие люди я давно хотел стать богатым и практиковать успешный успех. Одной из рекомендаций в таких случаях часто выступает предложение вести собственный бюджет, чем я и занялся несколько лет назад. Скажу сразу, что ведение бюджета не сделало меня богатым и успешным, а своё материальное положение я улучшил обычным переездом в столицу.
+Вести бюджет я начал, если не изменяет память, где-то в 2012-м году. В то время у меня уже была профессиональная деформация программиста, выражающаяся формулой "сделано не мной" и попыткой написать всё самому. Тем не менее, по неопытности я решил начать с "проверенных" решений и приобрёл YNAB (You Need A Budget), т.к. приложение позволяло работать и с ПК, и с телефона.
+Я честно пытался задавать план трат на месяц и укладываться в него года три. Однако, где-то в 2015-м году авторы выпустили новую версию приложения, за которую опять хотели денег, старую же версию эти недальновидные капиталисты выкинули на обочину истории. В итоге мне пришлось выбирать из двух вариантов:
+Я рассудил, что:
+и выбрал второй вариант: послал их нафиг и потерял историю трат.
+Эта ситуация меня довольно сильно разочаровала, поэтому я забросил ведение бюджета где-то на год. Однако, в один из дней "болезненной синхронизации" (также известной как "выяснение отношений") я не смог отбить финансовый наброс вида "ты транжира, вечно тратишь деньги на ерунду", после чего ясно осознал важность учёта трат.
+В этот раз я решил не повторять ошибку и не отдавать свои данные неизвестно куда с потенциальной возможностью их потерять, поэтому начал вести учёт трат в самых обычных заметках телефона. Формат был довольно простым и выглядел следующим образом:
+ +Заметки продержались у меня до середины 2018-го, пока я всё-таки не захотел иметь возможность работать с тратами на ПК, чтобы анализировать их. Я решил поискать решение, которое позволит мне бесплатно работать с историей трат и на ПК, и на телефоне. Таким решением оказался обычный календарь:
+ + +В календаре я использовал учётку Google, чтобы иметь доступ к Apps Script (фактически JavaScript) для анализа записей. Делать скрипты оказалось не очень удобно, т.к. формат хранения календарных записей мало подходит для трат. Вопрос владения данными также оставался нерешённым: мои данные опять пылились на неизвестном и неподконтрольном мне сервере, а доступ к ним был лишь через неподконтрольный мне и изменяющийся по чужой прихоти API.
+Во время использования календаря меня периодически посещали две мысли:
+Осенью 2019-го я наткнулся на проект Isomorphic-Git, позволяющий работать с Git из JavaScript, бегло проверил его работоспособность и понял, что нашёл свой Святой Грааль. Недавно я завершил создание первой версии приложения ГитБюджет, функциональность которого можно увидеть в следующем видео:
+ +В итоге, сейчас учёт трат на телефоне у меня выглядит следующим образом:
+ +Данные в Git выглядят cледующим образом: https://gitlab.com/kornerr/git-budget-sample-data/-/blob/me/gb.log
+Отмечу некоторые важные моменты:
+2. Почему это личный проект?
+На ГитБюджет я потратил 40 часов своей жизни в течение первого квартала 2020-го, т.е. в среднем каждый день я тратил около получаса.
+Личный проект обладает следующими преимуществами по сравнению с рабочим:
+У личного проекта также есть и недостатки:
+Легко заметить, что все недостатки личного проекта перекрываются преимуществами рабочего проекта. А все недостатки рабочего проекта перекрываются преимуществами личного проекта. Инь и янь.
+3. Почему проект на Git+JS?
+Хранение данных в Git вместо неизвестного сервера/API даёт следующие преимущества:
+Использование JS с HTML/CSS вместо Swift/Kotlin/C#/Python даёт следующие преимущества:
+ГитБюджет является лишь первым испытанием возможностей Git+JS. Посмотрим, что удастся сделать ещё.
++ 2020-05-03 00:00 +
+В этой статье Михаил поделится опытом использования Git+JS.
+Здравствуйте, господа, в этой статье я поделюсь опытом создания приложения учёта трат, в частности отвечу на следующие вопросы:. . .
+- 2018-08-21 00:00 -
-Эта статья описывает два новых кросс-платформенных примера OpenSceneGraph и изменение в работе с зависимостями.
-Примеры клиента HTTP и выбора узла сцены
-После окончания работы над примером удалённой отладки и сообщения об этом мы с удивлением обнаружили, что безопасное соединение HTTPS между отлаживаемым приложением и брокером отладки работало лишь в веб-версии примера. Десктопная и мобильная версии работали лишь с помощью обычного соединения HTTP.. . .
-Страница 1 из 7
diff --git a/ru/news/index.template b/ru/news/index.template index 20b5e81..86e8e18 100644 --- a/ru/news/index.template +++ b/ru/news/index.template @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table diff --git a/ru/news/index2.html b/ru/news/index2.html index a0f7f40..a00c91b 100644 --- a/ru/news/index2.html +++ b/ru/news/index2.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,23 @@
+ 2018-08-21 00:00 +
+Эта статья описывает два новых кросс-платформенных примера OpenSceneGraph и изменение в работе с зависимостями.
+Примеры клиента HTTP и выбора узла сцены
+После окончания работы над примером удалённой отладки и сообщения об этом мы с удивлением обнаружили, что безопасное соединение HTTPS между отлаживаемым приложением и брокером отладки работало лишь в веб-версии примера. Десктопная и мобильная версии работали лишь с помощью обычного соединения HTTP.. . .
+- 2017-08-16 00:00 -
-Эта статья описывает изучение скриптования в июле 2017.
-Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.. . .
-Страница 2 из 7
diff --git a/ru/news/index3.html b/ru/news/index3.html index 6ac3547..2ccc4da 100644 --- a/ru/news/index3.html +++ b/ru/news/index3.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,22 @@
+ 2017-08-16 00:00 +
+Эта статья описывает изучение скриптования в июле 2017.
+Наша основная цель использования скриптового языка - это наличие платформо-независимого кода, выполняемого без изменений на каждой поддерживаемой платформе.. . .
+- 2016-11-19 00:00 -
-Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.. . .
-Страница 3 из 7
diff --git a/ru/news/index4.html b/ru/news/index4.html index dc398d8..2da5ca7 100644 --- a/ru/news/index4.html +++ b/ru/news/index4.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,21 @@
+ 2016-11-19 00:00 +
+Эта статья описывает, как мы потратили месяц на сборку OpenSceneGraph (OSG) под Android: первая попытка собрать OSG, поиск альтернатив OSG и успех в сборке OSG.. . .
+- 2016-08-10 00:00 -
-Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру.. . .
-Страница 4 из 7
diff --git a/ru/news/index5.html b/ru/news/index5.html index 1139ec8..37a8b7c 100644 --- a/ru/news/index5.html +++ b/ru/news/index5.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,20 @@
+ 2016-08-10 00:00 +
+Мы начали проект Opensource Game Studio очень давно. Мы хотели дать сообществу свободного программного обеспечения средства для создания игр. Правда, тогда не было ясно, что они из себя должны представлять. Поэтому решили начать с малого: создать игру.. . .
+- 2015-11-15 00:00 -
-Если вы пропустили живую сессию, вы можете посмотреть ее здесь: -https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/. . .
-Страница 5 из 7
diff --git a/ru/news/index6.html b/ru/news/index6.html index bb77592..5da2907 100644 --- a/ru/news/index6.html +++ b/ru/news/index6.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,21 @@
+ 2015-11-15 00:00 +
+Если вы пропустили живую сессию, вы можете посмотреть ее здесь: +https://www.livecoding.tv/video/kornerr/playlists/whac-a-mole-from-scratch/. . .
+- 2015-01-13 00:00 -
-Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент.. . .
-Страница 6 из 7
diff --git a/ru/news/index7.html b/ru/news/index7.html index bca5c9e..e99849a 100644 --- a/ru/news/index7.html +++ b/ru/news/index7.html @@ -60,10 +60,13 @@ { width: 720px; } + .mobile + { + width: 320px; + } a { color: #3A91CB; - text-decoration: none; } table @@ -94,6 +97,20 @@
+ 2015-01-13 00:00 +
+Разработка Editor 0.3.0 показала нам, что использование кастомного GUI не было столь хорошей идеей, как показалось на первый взгляд. Несмотря на более простую реализацию, кастомный GUI лишен множества мелких достоинств, которые оказываются практически необходимы, если задаться целью сделать удобный инструмент.. . .
+