aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2024-09-05 00:16:37 +0300
committerValentin Popov <valentin@popov.link>2024-09-05 00:16:37 +0300
commit7eff3fde5720eb23449e2f8c8ea0b8218efe4dde (patch)
treefbaedd693902c1a6d56a005b28b189ef76fe23f4 /src
parentecf9a15e77509d344ab4ee02ae0dbf8a116021f1 (diff)
downloadpopov.link-7eff3fde5720eb23449e2f8c8ea0b8218efe4dde.tar.xz
popov.link-7eff3fde5720eb23449e2f8c8ea0b8218efe4dde.zip
Initial Astro project
Diffstat (limited to 'src')
-rw-r--r--src/content/blog/create-lib-file-from-dll.md51
-rw-r--r--src/content/blog/electron-reload.md60
-rw-r--r--src/content/blog/example-content.md133
-rw-r--r--src/content/blog/getting-source-code-of-chromium.md185
-rw-r--r--src/content/blog/installing-moodle-to-fedora.md23
-rw-r--r--src/content/blog/rust-and-tl-mr3020.md172
-rw-r--r--src/content/config.ts13
-rw-r--r--src/env.d.ts1
-rw-r--r--src/layouts/BaseLayout.astro27
-rw-r--r--src/layouts/PageLayout.astro7
-rw-r--r--src/layouts/PostLayout.astro7
-rw-r--r--src/pages/blog/[...slug].astro20
-rw-r--r--src/pages/index.astro18
13 files changed, 717 insertions, 0 deletions
diff --git a/src/content/blog/create-lib-file-from-dll.md b/src/content/blog/create-lib-file-from-dll.md
new file mode 100644
index 0000000..54b61e2
--- /dev/null
+++ b/src/content/blog/create-lib-file-from-dll.md
@@ -0,0 +1,51 @@
+---
+title: 'Create ".lib" file from ".dll" (archive)'
+author: "Adrian Henke"
+pubDate: "2023-05-04"
+description: "Learn how to generate a *.lib file from a *.dll with this comprehensive guide. Using the Visual Studio Command Prompt and Microsoft's recommended tools, this article walks you through the steps for a seamless process. Perfect for developers working with 3rd party win dll's."
+---
+
+> This's a copy of a non-my post. The original article [is here](https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/) ([archive](https://web.archive.org/web/20161118122539/https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/)).
+
+When working with 3rd party win dll's you sometimes miss the according to the `*.lib` file required to compile against it. There is an [Microsoft KB-Q131313](http://support.microsoft.com/?scid=kb%3Ben-us%3B131313&x=1&y=15) ([archive](https://jeffpar.github.io/kbarchive/kb/131/Q131313/)) article showing how to generate a `*.lib` file from a `*.dll` however the required steps are not described detailed enough I think. So here is my quick guide.
+
+Open the "Visual Studio Command Prompt", you find its shortcut in "_Start_" -> "_Programs_" -> "_Microsoft Visual Studio Tools_". Now run the `dumpbin` command to get a list of all exported functions of your dll:
+
+```bash
+dumpbin /exports C:\\yourpath\\yourlib.dll
+```
+
+This will print quite a bit of text to the console. However, we are only interested in the functions:
+
+```
+ordinal hint RVA name
+
+1 0 00017770 jcopy_block_row
+2 1 00017710 jcopy_sample_rows
+3 2 000176C0 jdiv_round_up
+4 3 000156D0 jinit_1pass_quantizer
+5 4 00016D90 jinit_2pass_quantizer
+6 5 00005750 jinit_c_coef_controller
+...etc
+```
+
+Now copy all those function names (only the names!) and paste them into a new text file. Name the next file `yourlib.def` and put the line "EXPORTS" at its top. My `yourlib.def` file looks like this:
+
+```
+EXPORTS
+jcopy_block_row
+jcopy_sample_rows
+jdiv_round_up
+jinit_1pass_quantizer
+jinit_2pass_quantizer
+jinit_c_coef_controller
+...
+```
+
+Now from that definition file, we can finally create the `*.lib` file. We use the `lib` tool for this, so run this command in your "Visual Studio Command Prompt":
+
+```bash
+lib /def:C:\\mypath\\mylib.def /OUT:C:\\mypath\\mylib.lib
+```
+
+That's it, happy coding πŸ™‚
diff --git a/src/content/blog/electron-reload.md b/src/content/blog/electron-reload.md
new file mode 100644
index 0000000..a07d274
--- /dev/null
+++ b/src/content/blog/electron-reload.md
@@ -0,0 +1,60 @@
+---
+title: "Горячая ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ElectronJS прилоТСния"
+author: "Valentin Popov"
+pubDate: "2019-08-15"
+description: "Руководство ΠΏΠΎ автоматичСской ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Electron с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² electron-reload ΠΈ electron-webpack. ΠžΠ±Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ использованиС HMR для renderer процСсса."
+---
+
+## Main процСсс
+
+Для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ основного процСсса ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ [electron-reload]. Или ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ срСдствами ΠΏΠ°ΠΊΠ΅Ρ‚Π° [electron-webpack].
+
+Если сборщик ΠΊΠΎΠ΄Π° ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ WebPack ΠΈΠ»ΠΈ Π½Π΅Ρ‚ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ инструмСнтом [nodemon]. Команда запуска Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
+
+```bash
+nodemon --watch ./assets/main.js --exec 'electron .'
+```
+
+ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ модификациях ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.
+
+## Renderer процСсс
+
+Для обновлСния renderer процСсса, ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅Ρ‚ нСобходимости. Достаточно ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ страницу. Π‘Π°ΠΌΡ‹ΠΉ простой способ, горячиС клавиши: `Ctrl` + `F5`. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π½Π΄Π΅Ρ€ процСсс ΠΏΠΎ своСй сути являСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ [HMR] Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты.
+
+МнС симпатичСн способ использования ΠΏΠ°ΠΊΠ΅Ρ‚Π° [electron-reload]. Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π»Π΅ΠΆΠΈΡ‚ простоС слСТСниС Π·Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠΊΠΎΠ½ прилоТСния.
+
+Но мною Π±Ρ‹Π»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° досадная [ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°], Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСрсии `1.5.0` ΠΈ `1.4.1` со сборщиком WebPack, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.
+
+РСшСниС Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅:
+
+```javascript
+import { app } from "electron";
+import chokidar from "chokidar";
+
+const browserWindows = [];
+
+app.on("browser-window-created", (event, window) => {
+ browserWindows.push(window);
+
+ window.on("closed", () => {
+ const index = browserWindows.indexOf(window);
+ browserWindows.splice(index, 1);
+ });
+});
+
+if (process.env.NODE_ENV !== "production") {
+ const watcher = chokidar.watch(__dirname, { ignored: [/node_modules|[/\\]\./] });
+
+ watcher.on("change", () => {
+ browserWindows.forEach((window) => {
+ window.webContents.reloadIgnoringCache();
+ });
+ });
+}
+```
+
+[HMR]: https://webpack.js.org/concepts/hot-module-replacement/
+[electron-reload]: https://www.npmjs.com/package/electron-reload
+[electron-webpack]: https://www.npmjs.com/package/electron-webpack
+[nodemon]: https://www.npmjs.com/package/nodemon
+[ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°]: https://github.com/yan-foto/electron-reload/issues/66
diff --git a/src/content/blog/example-content.md b/src/content/blog/example-content.md
new file mode 100644
index 0000000..68b09e5
--- /dev/null
+++ b/src/content/blog/example-content.md
@@ -0,0 +1,133 @@
+---
+title: "Example Content"
+author: "Example User"
+pubDate: "2018-01-01"
+description: "Howdy! This is an example blog post that shows several types of HTML content supported in this theme."
+---
+
+Cum sociis natoque penatibus et magnis <a href="#">dis parturient montes</a>, nascetur ridiculus mus. _Aenean eu leo quam._ Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum.
+
+> Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+Etiam porta **sem malesuada magna** mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.
+
+## Inline HTML elements
+
+HTML defines a long list of available inline tags, a complete list of which can be found on the [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/HTML/Element).
+
+- **To bold text**, use `<strong>`.
+- _To italicize text_, use `<em>`.
+- Abbreviations, like <abbr title="HyperText Markup Langage">HTML</abbr> should use `<abbr>`, with an optional `title` attribute for the full phrase.
+- Citations, like <cite>&mdash; Mark otto</cite>, should use `<cite>`.
+- <del>Deleted</del> text should use `<del>` and <ins>inserted</ins> text should use `<ins>`.
+- Superscript <sup>text</sup> uses `<sup>` and subscript <sub>text</sub> uses `<sub>`.
+
+Most of these elements are styled by browsers with few modifications on our part.
+
+## Heading
+
+Vivamus sagittis lacus vel augue rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
+
+### Code
+
+Cum sociis natoque penatibus et magnis dis `code element` montes, nascetur ridiculus mus.
+
+```js
+// Example can be run directly in your JavaScript console
+
+// Create a function that takes two arguments and returns the sum of those arguments
+var adder = new Function("a", "b", "return a + b");
+
+// Call the function
+adder(2, 6);
+// > 8
+```
+
+Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.
+
+### Gists via GitHub Pages
+
+Vestibulum id ligula porta felis euismod semper. Nullam quis risus eget urna mollis ornare vel eu leo. Donec sed odio dui.
+
+{% gist 5555251 gist.md %}
+
+Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec sed odio dui. Vestibulum id ligula porta felis euismod semper.
+
+### Lists
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
+
+- Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
+- Donec id elit non mi porta gravida at eget metus.
+- Nulla vitae elit libero, a pharetra augue.
+
+Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.
+
+1. Vestibulum id ligula porta felis euismod semper.
+2. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+3. Maecenas sed diam eget risus varius blandit sit amet non magna.
+
+Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.
+
+<dl>
+ <dt>HyperText Markup Language (HTML)</dt>
+ <dd>The language used to describe and define the content of a Web page</dd>
+
+ <dt>Cascading Style Sheets (CSS)</dt>
+ <dd>Used to describe the appearance of Web content</dd>
+
+ <dt>JavaScript (JS)</dt>
+ <dd>The programming language used to build advanced Web sites and applications</dd>
+</dl>
+
+Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nullam quis risus eget urna mollis ornare vel eu leo.
+
+### Images
+
+Quisque consequat sapien eget quam rhoncus, sit amet laoreet diam tempus. Aliquam aliquam metus erat, a pulvinar turpis suscipit at.
+
+![placeholder](http://placehold.it/800x400 "Large example image") ![placeholder](http://placehold.it/400x200 "Medium example image") ![placeholder](http://placehold.it/200x200 "Small example image")
+
+### Tables
+
+Aenean lacinia bibendum nulla sed consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+<table class="table">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Upvotes</th>
+ <th>Downvotes</th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td>Totals</td>
+ <td>21</td>
+ <td>23</td>
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <td>Alice</td>
+ <td>10</td>
+ <td>11</td>
+ </tr>
+ <tr>
+ <td>Bob</td>
+ <td>4</td>
+ <td>3</td>
+ </tr>
+ <tr>
+ <td>Charlie</td>
+ <td>7</td>
+ <td>9</td>
+ </tr>
+ </tbody>
+</table>
+
+Nullam id dolor id nibh ultricies vehicula ut id elit. Sed posuere consectetur est at lobortis. Nullam quis risus eget urna mollis ornare vel eu leo.
+
+---
+
+Want to see something else added? <a href="https://github.com/poole/poole/issues/new">Open an issue.</a>
diff --git a/src/content/blog/getting-source-code-of-chromium.md b/src/content/blog/getting-source-code-of-chromium.md
new file mode 100644
index 0000000..e1568f5
--- /dev/null
+++ b/src/content/blog/getting-source-code-of-chromium.md
@@ -0,0 +1,185 @@
+---
+title: 'ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° "Chromium Projects"'
+author: "Valentin Popov"
+pubDate: "2012-01-30"
+description: "Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ исходных ΠΊΠΎΠ΄ΠΎΠ² Chromium: ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° систСмы ΠΈ установка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ инструкции ΠΏΠΎ установкС Microsoft Visual Studio, Cygwin, Python ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΡΠ½Π²Π°Ρ€ΡŒ-Ρ„Π΅Π²Ρ€Π°Π»ΡŒ 2012 Π³ΠΎΠ΄Π°."
+---
+
+> ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ [ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ](https://adeptus-mechanicus.blogspot.com/2012/01/chromium-projects.html) 2012 Π³ΠΎΠ΄Π° ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ [старого Π±Π»ΠΎΠ³Π°](https://adeptus-mechanicus.blogspot.com/) ([Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ](https://web.archive.org/web/20160217052148/http://adeptus-mechanicus.blogspot.com/)).
+
+**Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь, ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ!**
+
+Π’ послСдниС Π΄Π½ΠΈ Π²Ρ‹Π΄Π°Π»ΠΎΡΡŒ свободноС врСмя, ΠΈ я Ρ€Π΅ΡˆΠΈΠ» ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ исходныС ΠΊΠΎΠ΄Ρ‹ "[The Chromium Projects](http://www.chromium.org/)". Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исходники, оказалось нСдостаточным просто ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ Π² "Visual Studio 2010". Π― Π±Ρ‹Π» ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΎΠΏΠ΅Ρ‡Π°Π»Π΅Π½ отсутствиСм Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ русской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, поэтому восполню ΠΏΡ€ΠΎΠ±Π΅Π» ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρƒ всю ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ исходных ΠΊΠΎΠ΄ΠΎΠ².
+
+**\_P.S.** Chromium являСтся Π±Ρ‹ΡΡ‚Ρ€ΠΎΡ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ Open Sources ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.\_ _Данная инструкция Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° Π½Π° ΡΠ½Π²Π°Ρ€ΡŒ-Ρ„Π΅Π²Ρ€Π°Π»ΡŒ 2012 Π³ΠΎΠ΄Π°._
+
+Для Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ввСдСния. Π’Π΅ΡΡŒ процСсс ΠΎΡ‚ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ систСмы, Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ я условно Ρ€Π°Π·Π΄Π΅Π»ΡŽ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΡƒΠ½ΠΊΡ‚Π°, это:
+
+- ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, установка стандартных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°;
+- Установка ΠΈ настройка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ "Cygwin";
+- Установка ΠΈ настройка ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot_tools";
+- ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ исходных ΠΊΠΎΠ΄ΠΎΠ² "Chromium";
+
+## ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
+
+НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ список ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ:
+
+- "**Microsoft Visual Studio 2010**" β€” Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, трСбуСтся для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Microsoft Visual Studio 2008 ΠΈ Microsoft Visual C++ Express 2010'Π³ΠΎ ΠΈ 2008'Π³ΠΎ Π³ΠΎΠ΄ΠΎΠ² соотвСтствСнно. БСсплатныС Express вСрсии ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π½Π° [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС](http://www.microsoft.com/express) Microsoft.
+
+- "**Microsoft Windows SDK**" β€” ΠŸΠ°ΠΊΠ΅Ρ‚ для прСдоставлСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, компиляторов ΠΈ ΠΏΡ€. для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Windows. ВрСбуСтся для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ сборки ΠΈ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ Windows систСму. БСсплатно ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ с [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницы](https://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b).
+
+- "**Microsoft DirectX SDK**" β€” ΠŸΠ°ΠΊΠ΅Ρ‚ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΎΠΉ подсистСмы DirectX. ВрСбуСтся для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ сборки ΠΈ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. БСсплатно доступСн Π½Π° [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС](http://msdn.microsoft.com/en-us/directx/default.aspx).
+
+- "**Python 2.x**" β€” ВысокоуровнСвый язык программирования. ВрСбуСтся для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ исходных ΠΊΠΎΠ΄ΠΎΠ². Установка Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ, Π½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ. ΠŸΡ€ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Python ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅Ρ‚, Ρƒ мСня установлСны ΠΎΠ±Π΅ вСрсии для ΠΎΠΏΡ‹Ρ‚ΠΎΠ² ΠΈ "Path" систСмы Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. Установку Python ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ Ρ€Π°Π·Π±Π΅Ρ€Ρƒ Π½ΠΈΠΆΠ΅. Python бСсплатно ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π½Π° [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС](http://python.org/).
+
+- "**Cygwin**" β€” Unix-подобная срСда ΠΈ интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для систСм Microsoft Windows. ВрСбуСтся для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ, ΠΈΡ… ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ошибки. Π‘Π°ΠΌ инструмСнт бСсплатно доступСн Π½Π° [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницС](http://www.cygwin.com/). Π•Π³ΠΎ установку я Ρ€Π°ΡΠΏΠΈΡˆΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ….
+
+- "**TortoiseSVN**" β€” ΠšΠ»ΠΈΠ΅Π½Ρ‚ Subversion ΠΏΠΎΠ΄ систСму Windows. Установка Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ, Π½ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ. ВрСбуСтся для Π±ΠΎΠ»Π΅Π΅ простого обновлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot_tools" ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория SVN ΠΎΡ‚ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠΈ Google. БСсплатно доступСн Π½Π° [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ страницС](http://tortoisesvn.net/).
+
+Над установкой Microsoft Visual Studio, Microsoft Windows SDK ΠΈ Microsoft DirectX SDK я ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Ρƒ. Установка Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΎΠ² проста, ΠΈ особой слоТности Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π°. Π’ случаС возникновСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ сообщСства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ с установкой.
+
+**На установкС ΠΏΠ°ΠΊΠ΅Ρ‚Π° Python'Π° я ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡΡŒ ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:**
+
+Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡƒΡ‚ΡŒ установки Python'Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ русскоязычный тСкст, это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ошибок.
+
+Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, послС установки основного ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² список ΠΏΡƒΡ‚Π΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ опСрационная систСма ΠΈΡ‰Π΅Ρ‚ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, трСбуСтся:
+
+1. ЗапуститС "_ПанСль УправлСния_" ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ "_БистСма_";
+2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ "_Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки систСмы_";
+3. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ "_Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ_" ΠΈ Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ "_ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды_";
+4. Π’ содСрТимом ΠΎΠΊΠ½Π° "_БистСмныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅_" Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ строку "_Path_";
+5. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ‚ΡƒΠ΄Π° ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ вашСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Python.
+
+Π’ ΠΌΠΎΡ‘ΠΌ случаС этот ΠΏΡƒΡ‚ΡŒ выглядСл Ρ‚Π°ΠΊ: `C:\Program Files (x86)\Python2`. ΠŸΡƒΡ‚ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π·Π½Π°ΠΊΠΎΠΌ `;`, ΠΏΠΎ этому Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄ послСдним записанным ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ `;` (Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ);
+
+Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ языка Python Π² Π’Π°ΡˆΠ΅ΠΉ систСмС сразу послС установки, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Windows ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
+
+```bash
+python --version
+```
+
+На экранС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ сообщСниС с вСрсиСй Python, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π’Π°ΡˆΠ΅ΠΉ систСмС ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
+
+**Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ.** ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ исходных ΠΊΠΎΠ΄ΠΎΠ² Π² ΠΌΠΎΡ‘ΠΌ случаС располагаСтся Π½Π° дискС `C:\`, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² ΠΏΡƒΡ‚ΠΈ адрСса Π΄ΠΎ исходных ΠΊΠΎΠ΄ΠΎΠ² ΠΈ ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС состоит ΠΈΠ· русскоязычных символов.
+
+На дискС `C:\` я создал ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `OpenSource`, Π² Π½Ρ‘ΠΌ я создал ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `ChromiumProjects`, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ появилось Π΄Π²Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° `depot_tools` ΠΈ `trunk`. Π’.Π΅. систСма ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² выглядит Ρ‚Π°ΠΊ:
+
+- `C:\OpenSource\ChromiumProjects\depot_tools` β€” ΠŸΠ°ΠΊΠ΅Ρ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ;
+- `C:\OpenSource\ChromiumProjects\trunk` β€” ΠœΠ΅ΡΡ‚ΠΎ хранСния исходных ΠΊΠΎΠ΄ΠΎΠ²;
+
+Π’ случаС использованиС Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² вашСй систСмС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ собствСнныС ΠΏΡƒΡ‚ΠΈ, подставляя ΠΈΡ… Π² ΠΌΠΎΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.
+
+Π’Π°ΠΊ ΠΆΠ΅ ΠΊΡ€Π°ΠΉΠ½Π΅ рСкомСндуСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ индСксированиС систСмы Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ошибки Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot*tools". Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ "*ПанСль управлСния*", Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ "*ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ индСксирования*", Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ "*Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ\_" ΠΈ снимитС Π³Π°Π»ΠΎΡ‡ΠΊΡƒ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, содСрТащий ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ "depot_tools".
+
+ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ установку ΠΈ настройку систСмы ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠΉ. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ.
+
+## Установка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ "Cygwin"
+
+ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ установочный Ρ„Π°ΠΉΠ» послСднСй вСрсии ΠΏΠΎ этой [ссылкС](http://cygwin.com/setup.exe). Установочный Ρ„Π°ΠΉΠ» Π²ΠΎ врСмя установки скачиваСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°. Когда запуститС Ρ„Π°ΠΉΠ», слСдуйтС инструкциям. ПослС Π²Ρ‹Π±ΠΎΡ€ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π’Π°ΠΌ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ список доступных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с Π·Π΅Ρ€ΠΊΠ°Π»Π°. ВрСбуСтся Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ для установки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹:
+
+- `apache`;
+- `bc`;
+- `bison`;
+- `curl`;
+- `diffutils`;
+- `e2fsprogs`;
+- `emacs`;
+- `flex`;
+- `gcc`;
+- `gperf`;
+- `keychain`;
+- `make`;
+- `nano`;
+- `openssh`;
+- `patch`;
+- `perl`;
+- `perl-libwin32`;
+- `python`;
+- `rebase`;
+- `rsync`;
+- `ruby`;
+- `subversion`;
+- `unzip`;
+- `vim`;
+- `zip`;
+
+ИмСна ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ поиском ΠΏΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΌ Π² саму ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ установки. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ сильно ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ.
+
+ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ список ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ…ΡΡ для установки, Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² [ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ скриптС](http://trac.webkit.org/browser/trunk/Tools/CygwinDownloader/cygwin-downloader.py) установки, Π² ΠΏΠΎΠ»Π΅ `required_packages`.
+
+ПослС установки прилоТСния, трСбуСтся внСсти ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ с исполняСмыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ "Path". Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Π² точности, ΠΊΠ°ΠΊ послС установки ΠΏΠ°ΠΊΠ΅Ρ‚Π° Python'Π°, описанного Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. Волько Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Python'Π°, трСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ `bin`, находящСйся Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ прилоТСния "Cygwin". Π’ ΠΌΠΎΡ‘ΠΌ случаС этот ΠΏΡƒΡ‚ΡŒ выглядСл Ρ‚Π°ΠΊ: `C:\Program Files (x86)\Cygwin\bin`.
+
+ПослС установки ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ прилоТСния "Cygwin", ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ, настройкС ΠΈ установки ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot_tools".
+
+## Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot_tools"
+
+1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π’Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ для хранСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot_tools";
+2. ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ Π² любом свободном мСстС ΠΈ контСкстном мСню Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡƒΠ½ΠΊΡ‚ "_SVN Checkout_";
+3. Π’ ΠΏΡƒΡ‚ΠΈ URL рСпозитория, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ: `http://src.chromium.org/svn/trunk/tools/depot_tools`;
+
+Если ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ установка послСднСй Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ скачивания ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π° слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ "Path", ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ "Cygwin" ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ "Python". Π’ ΠΌΠΎΡ‘ΠΌ случаС, ΠΏΡƒΡ‚ΡŒ выглядСл Ρ‚Π°ΠΊ: `C:\OpenSource\ChromiumProjects\depot_tools`.
+
+Если всё ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ, получСния ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° исходных ΠΊΠΎΠ΄ΠΎΠ² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° "Chromium".
+
+## ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° исходных ΠΊΠΎΠ΄ΠΎΠ²
+
+ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ [ссылкС](http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html) ΠΈ скачайтС Π°Ρ€Ρ…ΠΈΠ² с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π°Ρ€Ρ…ΠΈΠ² с ΠΈΠΌΠ΅Π½Π΅ΠΌ "_chromium.r**XXXXX**.tgz_", Π³Π΄Π΅ **XXXXX** β€” Π½ΠΎΠΌΠ΅Ρ€ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ послСднСй вСрсии.
+
+РаспакуйтС ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° ΠΏΠ°ΠΏΠΊΡƒ `src` Π² наш ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `trunk`. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°ΠΉΠΌΡ‘Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌ исходных ΠΊΠΎΠ΄ΠΎΠ² ~4 Π“Π±. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ распаковки, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» "Cygwin".
+
+Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ `src`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ получится послС распаковки исходных ΠΊΠΎΠ΄ΠΎΠ². ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ осущСствляСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ `cd`. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° диск `C:\`, трСбуСтся Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
+
+```bash
+cd "C:/"
+```
+
+Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π²Ρ‹ΡˆΠ΅, трСбуСтся Π½Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
+
+```bash
+cd ..
+```
+
+Π’ Unix-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ обратная косая Ρ‡Π΅Ρ€Ρ‚Π°. По этому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π½Π° ΠΌΠΎΡ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:
+
+```bash
+cd "C:/OpenSource/ChromiumProjects/trunk/src"
+```
+
+Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ настройки исходных ΠΊΠΎΠ΄ΠΎΠ². Для этого Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
+
+```bash
+gclient sync --force
+```
+
+ПослС выполнСния Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, трСбуСтся ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ исходныС ΠΊΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с "_Visual Studio 2010_". Для этого Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
+
+```bash
+gclient runhooks --force
+```
+
+По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ выполнСния Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ исходныС ΠΊΠΎΠ΄Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π’Π°ΡˆΡƒ "Visual Studio", Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ "_ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚_" ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `chrome.sln`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² ΠΏΠ°ΠΏΠΊΠ΅ `chrome`, находящСйся Π² ΠΏΠ°ΠΏΠΊΠ΅ исходных ΠΊΠΎΠ΄ΠΎΠ². Π’ ΠΌΠΎΡ‘ΠΌ случаС, ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π° выглядит Ρ‚Π°ΠΊ: `C:\OpenSource\ChromiumProjects\trunk\src\chrome\chrome.sln`.
+
+На этом Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠΉ.
+
+## ОбновлСниС
+
+Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ "depot*tools", трСбуСтся Π·Π°ΠΉΡ‚ΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, содСрТащий Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, Ρ‰Ρ‘Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈ Π² контСкстном мСню Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ "\_SVN Update*". "TortoiseSVN" ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π΄ΠΎ послСднСй Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.
+
+Для обновлСния исходных ΠΊΠΎΠ΄ΠΎΠ² "Chromium", трСбуСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» "Cygwin", ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΈ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
+
+```bash
+gclient sync
+```
+
+## Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
+
+Бпасибо, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈ большоС спасибо, Ссли воспользовались ΠΌΠΎΠ΅ΠΉ инструкциСй. Π― всСгда Ρ€Π°Π΄ Π’Π°ΡˆΠΈΠΌ коммСнтариям с вопросами, уточнСниями ΠΈ прСдлоТСниями.
+
+## ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки
+
+- [http://dev.chromium.org/Home](http://dev.chromium.org/Home) β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ страница ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° "The Chromium Projects";
+- [http://dev.chromium.org/developers/how-tos/build-instructions-windows](http://dev.chromium.org/developers/how-tos/build-instructions-windows) β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ страница ΠΏΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows, ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с исходными ΠΊΠΎΠ΄Π°ΠΌΠΈ;
+- [http://dev.chromium.org/developers/how-tos/get-the-code](http://dev.chromium.org/developers/how-tos/get-the-code) β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ инструкция ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ, настройкС ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ исходных ΠΊΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° "The Chromium Projects";
+- [http://dev.chromium.org/developers/how-tos/install-depot-tools](http://dev.chromium.org/developers/how-tos/install-depot-tools) β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ инструкция ΠΏΠΎ установкС ΠΈ настройкС ΠΏΠ°ΠΊΠ΅Ρ‚Π° "depot_tools";
+- [http://dev.chromium.org/developers/how-tos/cygwin](http://dev.chromium.org/developers/how-tos/cygwin) β€” Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° ΠΏΠΎ установки ΠΈ настройкС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° "Cygwin";
+- [http://groups.google.com/a/chromium.org/group/chromium-discuss/topics](http://groups.google.com/a/chromium.org/group/chromium-discuss/topics) β€” ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ дискуссия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° "Chromium";
diff --git a/src/content/blog/installing-moodle-to-fedora.md b/src/content/blog/installing-moodle-to-fedora.md
new file mode 100644
index 0000000..fe42af9
--- /dev/null
+++ b/src/content/blog/installing-moodle-to-fedora.md
@@ -0,0 +1,23 @@
+---
+title: "Установка Moodle Π² Fedora"
+author: "Valentin Popov"
+pubDate: "2018-07-23"
+description: "РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ установки Moodle ΠΈΠ·-Π·Π° SELinux: ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° доступа для устранСния ошибок Π² Π²Π΅Π±-интСрфСйсС ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с cURL. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ совСты ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹."
+---
+
+Π’ΠΎ врСмя установки Moodle, ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΡˆΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:
+
+- Π’Π΅Π±-интСрфСйс Π½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ установку послС настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…;
+- Если ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ интСрфСйс, ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹;
+- НСт доступа ΠΊ сСти, появляСтся ошибка `unexpected cURL error`.
+
+Главная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, это [SELinux](https://en.wikipedia.org/wiki/Security-Enhanced_Linux). РСшСниС, это Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° доступа:
+
+```bash
+# Доступ ΠΊ сторонним ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ ΠΈ сСти
+/usr/sbin/setsebool -P httpd_can_network_connect true
+/usr/sbin/setsebool -P httpd_enable_homedirs true
+# Π‘ΠΌΠ΅Π½Π° контСкста бСзопасности
+/usr/bin/chcon -R -h -t httpd_sys_content_t /path/to/moodle
+/usr/bin/chcon -R -h -t httpd_sys_script_rw_t /path/to/moodle_data
+```
diff --git a/src/content/blog/rust-and-tl-mr3020.md b/src/content/blog/rust-and-tl-mr3020.md
new file mode 100644
index 0000000..301078f
--- /dev/null
+++ b/src/content/blog/rust-and-tl-mr3020.md
@@ -0,0 +1,172 @@
+---
+title: "ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Rust Π½Π° TL-MR3020"
+author: "Valentin Popov"
+pubDate: "2023-05-01"
+description: 'Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Rust для кросс-компиляции Π½Π° TP-Link TL-MR3020 с использованиСм Fedora Linux 38 ΠΈ OpenWrt 22.03.4. Π¨Π°Π³ Π·Π° шагом ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ "Hello, World!" Π΄ΠΎ асинхронного TCP сСрвСра.'
+---
+
+Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° для дистрибутива [Fedora Linux 38](https://docs.fedoraproject.org/en-US/releases/f38/), ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ [OpenWrt 22.03.4](https://openwrt.org/releases/22.03/notes-22.03.4) ΠΈ устройства [TP-Link TL-MR3020](https://www.tp-link.com/en/home-networking/3g-4g-router/tl-mr3020/) Ρ€Π΅Π²ΠΈΠ·ΠΈΠΈ v3.20.
+
+ΠŸΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ΡΡ:
+
+- УстановлСнный [rustup](https://rustup.rs/) инструмСнтарий.
+- УстановлСнный ΠΏΠ°ΠΊΠ΅Ρ‚ [cross-rs](https://github.com/cross-rs/cross) для кросс-компиляции.
+- Π£ΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² [upx](https://github.com/upx/upx).
+- ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ‚ΠΎΡ€ [Docker](https://docs.docker.com/engine/install/) (рСкомСндуСтся) ΠΈΠ»ΠΈ [Podman](https://podman.io/getting-started/installation).
+- SSH ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρƒ.
+- УстановлСнный [SFTP сСрвСр](https://openwrt.org/docs/guide-user/services/nas/sftp.server) Π½Π° TL-MR3020.
+
+> ВрСбуСтся rustup инструмСнтарий с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта. Rust ΠΈ Cargo ΠΈΠ· рСпозитория дистрибутива Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚. ΠŸΠ°ΠΊΠ΅Ρ‚ кросс-компиляции Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ rustup, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² рСпозиториях дистрибутива отсутствуСт.
+
+## "Hello, World!" ver. 1
+
+НачнСм с Π±Π°Π·Ρ‹. Π‘ΠΎΠ±Π΅Ρ€Π΅ΠΌ ΠΈ запустим "Hello, World" Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Rust:
+
+```bash
+cargo init --bin ramips-rs
+```
+
+Π”Π°Π»Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ процСссора:
+
+```bash
+cat /proc/cpuinfo
+# system type : MediaTek MT7628AN ver:1 eco:2
+# machine : TP-Link TL-MR3020 v3
+# processor : 0
+# cpu model : MIPS 24KEc V5.5
+# BogoMIPS : 385.84
+# wait instruction : yes
+# microsecond timers : yes
+# tlb_entries : 32
+# extra interrupt vector : yes
+# hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
+# isa : mips1 mips2 mips32r1 mips32r2
+# ASEs implemented : mips16 dsp
+# Options implemented : tlb 4kex 4k_cache prefetch mcheck ejtag llsc pindexed_dcache userlocal vint perf_cntr_intr_bit perf
+# shadow register sets : 1
+# kscratch registers : 0
+# package : 0
+# core : 0
+# VCED exceptions : not available
+# VCEI exceptions : not available
+```
+
+Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ процСссор Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ MIPS. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ для компиляции:
+
+```bash
+rustup target list | grep mips
+# mips-unknown-linux-gnu
+# mips-unknown-linux-musl
+# mips64-unknown-linux-gnuabi64
+# mips64-unknown-linux-muslabi64
+# mips64el-unknown-linux-gnuabi64
+# mips64el-unknown-linux-muslabi64
+# mipsel-unknown-linux-gnu
+# mipsel-unknown-linux-musl
+```
+
+ΠžΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ опрСдСляСм, Ρ‡Ρ‚ΠΎ Π² случаС с TL-MR3020 v3.20 ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° `mipsel-unknown-linux-musl`. Π”Π°Π»Π΅Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ:
+
+```bash
+cross build --release --target mipsel-unknown-linux-musl
+```
+
+ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ исполняСмый Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈ запускаСм Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅. Π’Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π² Ρ€Π°Π·Π΄Π΅Π» `/tmp`, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ доступной памяти Π½Π° основном Ρ€Π°Π·Π΄Π΅Π»Π΅ мСньшС Π΄Π²ΡƒΡ… ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚.
+
+```bash
+scp ./target/mipsel-unknown-linux-musl/release/ramips-rs openwrt:/tmp/
+ssh openwrt /tmp/ramips-rs
+# Hello, world!
+```
+
+## ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°
+
+ПослС сборки ΠΈ запуска "Hello, World" ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ исполняСмый Ρ„Π°ΠΉΠ» вСсит **4.1 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°**. Для устройства с 8 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°ΠΌΠΈ постоянной памяти это катастрофичСски ΠΌΠ½ΠΎΠ³ΠΎ.
+
+УмСньшим Ρ€Π°Π·ΠΌΠ΅Ρ€ исполняСмого Ρ„Π°ΠΉΠ»Π° Π΄ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°. Для этого настроим release ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ сборки ΠΈ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ Cargo.toml Ρ„Π°ΠΉΠ»:
+
+```toml
+[profile.release]
+strip = true # Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Π΄ΠΎ 383K
+lto = "fat" # Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Π΄ΠΎ 334K
+opt-level = "z" # Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Π΄ΠΎ 326K
+panic = "abort" # Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Π΄Π° 332K
+codegen-units = 1 # Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°
+```
+
+ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ исполняСмый Ρ„Π°ΠΉΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² **332 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°**. Π”Π°Π»Π΅Π΅ сТимаСм исполняСмый Ρ„Π°ΠΉΠ» инструмСнтом upx:
+
+```bash
+upx --best --lzma target/mipsel-unknown-linux-musl/release/ramips-rs
+```
+
+И ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ исходный Ρ„Π°ΠΉΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² **118 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚**. ΠŸΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.
+
+БильнСС ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·ΠΎΠΌ ΠΎΡ‚ стандартной std Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ unsafe ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠΎΠ΅ΠΌ случаС.
+
+## "Hello, World!" ver. 2
+
+Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π΅ΠΉ. НапримСр, асинхронный TCP сСрвСр. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ зависимости:
+
+```toml
+[dependencies]
+hyper = { version = "1.0.0-rc.3", features = ["full"] }
+tokio = { version = "1", features = ["full"] }
+http-body-util = "0.1.0-rc.2"
+```
+
+ПишСм код:
+
+```rust
+use std::convert::Infallible;
+use std::net::SocketAddr;
+
+use http_body_util::Full;
+use hyper::body::Bytes;
+use hyper::server::conn::http1;
+use hyper::service::service_fn;
+use hyper::{Request, Response};
+use tokio::net::TcpListener;
+
+async fn hello(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, Infallible> {
+ Ok(Response::new(Full::new(Bytes::from("Hello, World!"))))
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
+ let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
+ let listener = TcpListener::bind(addr).await?;
+
+ loop {
+ let (stream, _) = listener.accept().await?;
+
+ tokio::task::spawn(async move {
+ if let Err(err) = http1::Builder::new()
+ .serve_connection(stream, service_fn(hello))
+ .await
+ {
+ println!("Error serving connection: {:?}", err);
+ }
+ });
+ }
+}
+```
+
+ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ сТимаСм. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² **236 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚**. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π² устройство, запускаСм ΠΈ провСряСм:
+
+```bash
+scp ./target/mipsel-unknown-linux-musl/release/ramips-rs openwrt:/tmp/
+ssh openwrt /tmp/ramips-rs
+
+curl -L "http://10.0.0.2:3000"
+# Hello, World!
+```
+
+Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΈ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ.
+
+## ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки ΠΈ источники
+
+- [Building Rust code for my OpenWrt Wi-Fi router](https://blog.dend.ro/building-rust-for-routers/)
+- [Cross Compile Rust For OpenWRT](https://www.kiloleaf.com/posts/cross-compile-rust-for-openwrt/)
+- [Minimizing Rust Binary Size](https://github.com/johnthagen/min-sized-rust)
+- [ΠšΡ€ΠΎΡΡ-компиляция ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Rust для запуска Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅](https://dzen.ru/media/nuancesprog.ru/krosskompiliaciia-programm-rust-dlia-zapuska-na-marshrutizatore-5f6457b8bdfa745d402cd1ec)
diff --git a/src/content/config.ts b/src/content/config.ts
new file mode 100644
index 0000000..00f60c9
--- /dev/null
+++ b/src/content/config.ts
@@ -0,0 +1,13 @@
+import { defineCollection, z } from "astro:content";
+
+const blog = defineCollection({
+ type: "content",
+ schema: z.object({
+ author: z.string(),
+ description: z.string(),
+ pubDate: z.coerce.date(),
+ title: z.string(),
+ }),
+});
+
+export const collections = { blog };
diff --git a/src/env.d.ts b/src/env.d.ts
new file mode 100644
index 0000000..e16c13c
--- /dev/null
+++ b/src/env.d.ts
@@ -0,0 +1 @@
+/// <reference path="../.astro/types.d.ts" />
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
new file mode 100644
index 0000000..c100dad
--- /dev/null
+++ b/src/layouts/BaseLayout.astro
@@ -0,0 +1,27 @@
+---
+
+---
+
+<html>
+ <head>
+ <!-- Meta tags -->
+ <meta content="IE=edge" http-equiv="X-UA-Compatible" />
+ <meta content="text/html; charset=utf-8" http-equiv="content-type" />
+ <meta content="width=device-width, initial-scale=1" name="viewport" />
+ <meta content="index, follow" name="robots" />
+
+ <!-- Title / Description -->
+ <meta content="Description" name="description" />
+ <title>Title</title>
+
+ <!-- RSS -->
+ <link href="#" rel="alternate" title="RSS" type="application/atom+xml" />
+
+ <!-- Canonical URL -->
+ <link href="#" rel="canonical" />
+ </head>
+
+ <body>
+ <slot />
+ </body>
+</html>
diff --git a/src/layouts/PageLayout.astro b/src/layouts/PageLayout.astro
new file mode 100644
index 0000000..3730334
--- /dev/null
+++ b/src/layouts/PageLayout.astro
@@ -0,0 +1,7 @@
+---
+import BaseLayout from "./BaseLayout.astro";
+---
+
+<BaseLayout>
+ <slot />
+</BaseLayout>
diff --git a/src/layouts/PostLayout.astro b/src/layouts/PostLayout.astro
new file mode 100644
index 0000000..ed2c900
--- /dev/null
+++ b/src/layouts/PostLayout.astro
@@ -0,0 +1,7 @@
+---
+import BaseLayout from "../layouts/BaseLayout.astro";
+---
+
+<BaseLayout>
+ <slot />
+</BaseLayout>
diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro
new file mode 100644
index 0000000..c94fe52
--- /dev/null
+++ b/src/pages/blog/[...slug].astro
@@ -0,0 +1,20 @@
+---
+import { type CollectionEntry, getCollection } from "astro:content";
+import Layout from "../../layouts/PostLayout.astro";
+
+export async function getStaticPaths() {
+ const posts = await getCollection("blog");
+ return posts.map((post) => ({
+ params: { slug: post.slug },
+ props: post,
+ }));
+}
+type Props = CollectionEntry<"blog">;
+
+const post = Astro.props;
+const { Content } = await post.render();
+---
+
+<Layout>
+ <Content />
+</Layout>
diff --git a/src/pages/index.astro b/src/pages/index.astro
new file mode 100644
index 0000000..bc98c67
--- /dev/null
+++ b/src/pages/index.astro
@@ -0,0 +1,18 @@
+---
+import Layout from "../layouts/PageLayout.astro";
+import { getCollection } from "astro:content";
+
+const posts = await getCollection("blog");
+---
+
+<Layout>
+ <ul>
+ {
+ posts.map((post) => (
+ <li>
+ <a href={`/blog/${post.slug}`}>{post.data.title}</a>
+ </li>
+ ))
+ }
+ </ul>
+</Layout>