<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>e0ne's comments</title>
    <link>https://blog.e0ne.info/</link>
    <description>Recent content on e0ne's comments</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 03 Jan 2022 23:13:06 +0200</lastBuildDate>
    <atom:link href="https://blog.e0ne.info/index.xml" rel="self" type="application/rss+xml"/>
    <xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
      <title>Go 1.18: new features</title>
      <link>https://blog.e0ne.info/post/go-1-18-new-features/</link>
      <pubDate>Mon, 03 Jan 2022 23:13:06 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/go-1-18-new-features/</guid>
      <description>&lt;p&gt;While it’s not release yet, it’s just a reminder to myself to not forget come back to it in February and read about these features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://golang.org/issue/44551"&gt;Fuzzing library&lt;/a&gt; - should be useful for everybody who writes unit-tests. I don’t  like tests in Go but this thing could help a lot&lt;/li&gt;
&lt;li&gt;net/netip package - this is a definitely good thing to have it in a standard library&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;go get&lt;/code&gt; behaviour - nothing critical but the new features should be adopted&lt;/li&gt;
&lt;li&gt;Generics - I think almost everybody waits for it. They should help to avoid a lot of duplicated code. I hope, it will be at least the so good as in .NET&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Official release notes got Go 1.18 could be found &lt;a href="https://tip.golang.org/doc/go1.18"&gt;here&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Всё будет Kubernetes</title>
      <link>https://blog.e0ne.info/post/everything-will-be-kubernetes/</link>
      <pubDate>Sun, 02 Jan 2022 23:06:52 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/everything-will-be-kubernetes/</guid>
      <description>&lt;p&gt;Лучше поздно, чем никогда, но я решил написать своё мнение про использование K8S. Традиционно, мнение автора может не совпадать с мнением читателей и может быть абсолютно ошибочным.&lt;/p&gt;
&lt;p&gt;Я не буду описывать плюсы и минусы Kubernetes в этом посте. Тут не будет никаких технических деталей. Я просто поделюсь своим мнением, по его использованию. Сейчас всё больше и больше людей используют Kubernetes для развертывания всевозможных приложений начиная от статических сайтов, заканчивая запуском драйверов в контейнерах. Первое кажется стрельбой “пушкой по воробьям”, а второе - как, мягко говоря, очень странное использование технологии не так, как изначально задумывалось. Запуск веб-приложение – это, наверное, один из самых распространенных и простых способов использования K8S.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2022 Relaunch</title>
      <link>https://blog.e0ne.info/post/2022-relaunch/</link>
      <pubDate>Sat, 01 Jan 2022 22:55:01 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/2022-relaunch/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s a time to relaunch the blog. I hope it will be a successful blogging year.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know what exactly topics will be covered, but it should be interesting for sure.&lt;/p&gt;
&lt;p&gt;Stay tuned and happy New Year.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Everyday Blogging</title>
      <link>https://blog.e0ne.info/post/everyday-blogging/</link>
      <pubDate>Thu, 14 Mar 2019 23:57:11 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/everyday-blogging/</guid>
      <description>&lt;p&gt;After 2.5 months I&amp;rsquo;m thinking about wrap up the everyday blogging activity. It
was an interesting challenge. It helped me to restore a blog. But it’s really
hard for me to do such things on a daily basis. I prefer quality instead of
quantity. That means I need more time to write more interesting posts. I don’t
know how I’ll do it in the future but I hope you’ll get more interesting posts
soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I don't want this CI</title>
      <link>https://blog.e0ne.info/post/i-dont-want-this-ci/</link>
      <pubDate>Wed, 13 Mar 2019 22:36:17 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/i-dont-want-this-ci/</guid>
      <description>&lt;p&gt;I love CI and I’m sure that it’s a required part of the software development.
It helps a lot to test software to find issues as soon, as possible. CI save
thousands of person-hours by automatically project testing. It works almost in
the background and guides you to the next steps: go forward or step back and
fix the issue.&lt;/p&gt;
&lt;p&gt;Everything is written above is valid only for good CI. It should not be too
noisy. It tesh every change in a automatic way. It’s stupid if you need to run
some tests on “CI” manually. It’s not CI. A lot of false-positive jobs makes CI
annoying. If there&amp;rsquo;s a lot of non-voting jobs, it’s not useful at all. You’ll
ignore such jobs in the future if they fail on a regular basis. All tests
results should show you the current status of a project or a patch. If tests
results are not clear, it means that CI or tests should be changed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why GitHub's pull requests are not good for code review</title>
      <link>https://blog.e0ne.info/post/why-githubs-pull-requests-are-not-good-for-code-review/</link>
      <pubDate>Tue, 12 Mar 2019 22:48:09 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/why-githubs-pull-requests-are-not-good-for-code-review/</guid>
      <description>&lt;p&gt;I hope many of you at lease once created or received pull requests in GitHub.
Usually, before pull request is merged some code review process happens. Even
after &lt;a href="https://github.com/features/code-review/"&gt;the last changes&lt;/a&gt;, code review
functionality in GitHub is not really cool for day to day activities.&lt;/p&gt;
&lt;p&gt;I think it’s mostly because of pull requests are not designed for code review.
It just allows you to add a few comments to the code. It was designed to allow
contributors to propose their patches from fork to the original repository.
Usually, in small and maybe in a mid-size project, the code review process is
a pretty quick and not frequent activity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The difference between frameworks and libraries</title>
      <link>https://blog.e0ne.info/post/the-difference-between-frameworks-and-libraries/</link>
      <pubDate>Mon, 11 Mar 2019 23:35:05 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/the-difference-between-frameworks-and-libraries/</guid>
      <description>&lt;p&gt;NOTE: I didn’t google definition either for ‘library’ nor for ‘framework’ for
years. I even didn’t read Wikipedia articles during the last 3-5 years. That
means that thoughts are my own, so you could disagree with me.&lt;/p&gt;
&lt;p&gt;For me, the difference between a library and a framework is in architecture
freedom.&lt;/p&gt;
&lt;p&gt;A framework provides you a skeleton for your project with some basic
architecture. It would be a low-level architecture like ‘how to work with IO’
or a high-level MVC implementation. Each framework provides you a very limited
number of solutions for a particular problem. It benefits you in a good
structure for each project based on the chosen framework. If you do not
with a proposed way to follow, in most cases it leads to a pretty hacky and
complicated solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>bat: a cat clone with wings</title>
      <link>https://blog.e0ne.info/post/bat-a-cat-clone-with-wings/</link>
      <pubDate>Sun, 10 Mar 2019 23:09:00 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/bat-a-cat-clone-with-wings/</guid>
      <description>&lt;p&gt;Finally switched from cat, less and vim (omg!) for reading files in a console.
If you still didn’t try &lt;a href="https://github.com/sharkdp/bat"&gt;bat&lt;/a&gt; it’s the right
time to try it. It’s a powerful CLI tool which works like cat+less out of the
box, has syntax highlight like vim (honestly, I used vim to view file contents
just because it has syntax highlight), supports themes and is configurable,
so you can tune it as you want.&lt;/p&gt;</description>
    </item>
    <item>
      <title>webpack: devserver proxy configuration</title>
      <link>https://blog.e0ne.info/post/webpack-devserver-proxy-configuration/</link>
      <pubDate>Sat, 09 Mar 2019 22:10:24 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/webpack-devserver-proxy-configuration/</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/webpack/webpack-dev-server"&gt;Webpack’s devserver&lt;/a&gt; is a very
helpful tool. It helps a lot by setting web server for application during
development.&lt;/p&gt;
&lt;p&gt;Usually, you need to communicate with your API (backend) from the client-side
via some URL. To avoid cross-site scripting and
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS"&gt;CORS&lt;/a&gt; configuration on
your backend or web server(I hope, it’s Nginx:)), you can use a built-in proxy
server in the webpack devserver.&lt;/p&gt;
&lt;p&gt;You use it you need just to update webpack config or &lt;code&gt;vue.conf.js&lt;/code&gt; if you use
&lt;code&gt;vue-cli&lt;/code&gt; with such options:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UUIDs usage in /etc/fstab</title>
      <link>https://blog.e0ne.info/post/uuids-usage-in-etc-fstab/</link>
      <pubDate>Fri, 08 Mar 2019 22:58:17 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/uuids-usage-in-etc-fstab/</guid>
      <description>&lt;p&gt;&lt;code&gt;/etc/fstab&lt;/code&gt; is a &lt;a href="http://man7.org/linux/man-pages/man5/fstab.5.html"&gt;config file&lt;/a&gt; to store static information about file system. It’s a native place to add disks information you would like to mount automatically on each system start. It has a pretty simple format:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[device] [mountpoint]    [filesystem]    [options]   [dump]  [fscheck pass count]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I used such format for the years and it worked before:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/dev/sdb1       /opt/media       ext4    defaults        0       0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don’t know how many people do the same. I think this is the most used way to mount partitions during the startup. The main issue is that you have to specify the correct device name like &lt;code&gt;/dev/sdb1&lt;/code&gt; for each partition. It means you have to have the same disk names even after the system upgrade or just after pulling out and plugin again your hard drive or SSD.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ansible vs Bash for Quick Automation</title>
      <link>https://blog.e0ne.info/post/ansible-vs-bash-for-quick-automation/</link>
      <pubDate>Thu, 07 Mar 2019 23:04:41 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/ansible-vs-bash-for-quick-automation/</guid>
      <description>&lt;p&gt;I don’t want to argue on this topic. I really believe that it’s better to use
Ansible if possible even for some ‘home’ automation. But looking on my scripts
for some development automation (setup VMs, clone sources, install some
software) I realized that there&amp;rsquo;s a mix of Ansible playbooks, Bash and Python
scripts.&lt;/p&gt;
&lt;p&gt;It becomes to be hard for maintaining from one side, but it works as expected
for me from another side. I didn’t spend a lot of time making a decision on
what to use. I just choose the first and the fastest solution I’d got. It works
pretty well if I have even several dozens independent simple scripts/playbooks
but it’s really hard to get everything working together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install Docker Using Ansible With One Command</title>
      <link>https://blog.e0ne.info/post/install-docker-using-ansible-with-one-command/</link>
      <pubDate>Wed, 06 Mar 2019 23:34:39 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/install-docker-using-ansible-with-one-command/</guid>
      <description>&lt;p&gt;It’s boring to install Docker and Docker Compose on any host I need. Maybe
Kubernetes is the right weight to di such things but Docker fits all my needs
at the moment, so I use it for some development scenarios.&lt;/p&gt;
&lt;p&gt;I’ve got a simple &lt;code&gt;docker_bootstrap.sh&lt;/code&gt; script to install Ansible if it’s not
installed yet and setup Docker on the same host:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/bin/bash

pip install ansible
ansible-galaxy install nickjj.docker

ansible-playbook ./site.yml -t docker
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I use Ansible from pip because it’s not supposed to be installed on
a production environment. If you want to install Ansible using operating system
packages, for Debian-based distros you can do something like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>I still like blogs and RSS</title>
      <link>https://blog.e0ne.info/post/i-still-like-blogs-and-rss/</link>
      <pubDate>Tue, 05 Mar 2019 23:10:37 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/i-still-like-blogs-and-rss/</guid>
      <description>&lt;p&gt;RSS is a great thing for news and blog reading. It’s good structured (not like
a Facebook), contains everything needed (do you really like threads in
Twitter?) and has good enough tools for offline reading during flights or a
train ride (that’s why Telegram channels don’t fit my needs.&lt;/p&gt;
&lt;p&gt;RSS gives you a lot of freedom on what content do you want to receive and
doesn’t force you to read it right at this moment because you won’t be able to
find this later. I use Feedly+Pocket to read what and where I want.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Internal Bash Variables</title>
      <link>https://blog.e0ne.info/post/internal-bash-variables/</link>
      <pubDate>Mon, 04 Mar 2019 22:01:58 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/internal-bash-variables/</guid>
      <description>&lt;p&gt;I didn’t pay attention to some variables I used in bash script before. I just
realized that there are a lot of variables I don’t see in the output of &lt;code&gt;env&lt;/code&gt;
or &lt;code&gt;export&lt;/code&gt; commands.&lt;/p&gt;
&lt;p&gt;There a lot of
&lt;a href="http://tldp.org/LDP/abs/html/internalvariables.html"&gt;internal bash variables&lt;/a&gt;
you can use or change. I don’t have a lot of bash scripts in my sources.
Usually, I don’t write scripts bigger than 10-20 lines. TBH, most of scripts
are copy-pasted from somewhere with minor changes. I prefer to you Python where
it’s possible and reasonable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clone Your GitHub Repos</title>
      <link>https://blog.e0ne.info/post/clone-your-github-repos/</link>
      <pubDate>Sun, 03 Mar 2019 23:00:41 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/clone-your-github-repos/</guid>
      <description>&lt;p&gt;Since GitHub allows to store unlimited private repositories, I moved everything
there. It’s really great to have such sources storage for free.&lt;/p&gt;
&lt;p&gt;Once I pushed everything to GitHub, I need to sync my repositories over all
environments I have.  I wrote a simple Python script below to clone all my
GitHub repositories:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;My use case could not fit everyone, but you can adjust my script to cover your
use cases. Everything I need is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue.js Components Registration</title>
      <link>https://blog.e0ne.info/post/vuejs-components-registration/</link>
      <pubDate>Sat, 02 Mar 2019 23:43:06 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/vuejs-components-registration/</guid>
      <description>&lt;p&gt;I can’t add anything from the technical point of view to the
&lt;a href="https://vuejs.org/v2/guide/components-registration.html"&gt;official documentation&lt;/a&gt;
but I would like to drop a few lines about local vs global components
registration.&lt;/p&gt;
&lt;h3 id="global-registration"&gt;Global registration&lt;/h3&gt;
&lt;p&gt;I prefer to use it mostly for the 3rd-party libraries which are used a lot.
E.g. vue-fontawesome, bootstrap-vue, etc. It’s reasonable to use global
registration for own components if they are used on the most pages.&lt;/p&gt;
&lt;h3 id="local-registration"&gt;Local registration&lt;/h3&gt;
&lt;p&gt;I think it’s reasonable to use it as a default solution for component
registration. It allows you to do it on demand, so you always will know what
does some custom tag do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic method generation with default arguments</title>
      <link>https://blog.e0ne.info/post/dynamic-method-generation-with-default-arguments/</link>
      <pubDate>Fri, 01 Mar 2019 23:00:38 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/dynamic-method-generation-with-default-arguments/</guid>
      <description>&lt;p&gt;NOTE: please, be sure that you really need such things in your project. It
could be useful if you understand how it works. You can also spend hours or
even days to understand what is going wrong if you don’t understand how method
generation works in the project.&lt;/p&gt;
&lt;p&gt;NOTE: this post is based on
&lt;a href="https://governance.openstack.org/tc/reference/projects/horizon.html"&gt;OpenStack Horizon&lt;/a&gt;
&lt;a href="https://github.com/openstack/horizon/tree/master/openstack_dashboard/test/integration_tests"&gt;integration tests&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We use method generation in our tests framework to generate methods like
‘go_to_some_page’. It’s pretty useful because we don’t need to implement such
methods manually for each page.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TypeScript: forgot to compile</title>
      <link>https://blog.e0ne.info/post/typescript-forgot-to-compile/</link>
      <pubDate>Thu, 28 Feb 2019 23:13:37 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/typescript-forgot-to-compile/</guid>
      <description>&lt;p&gt;I’m working too much time with script languages like Python, JavaScript, and
even bash. I almost forgot that sometimes I need to compile my sources.
A stupid mistake was made on TypeScript project I’m working on: I didn’t add
a job on CI which will compile sources to JavaScript.&lt;/p&gt;
&lt;p&gt;Of course, I use &lt;code&gt;npm run build&lt;/code&gt; build to make a production bundle. I see
TypeScript compile errors in my console when I run the code. But there are
no checks on CI yet:(.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dependencies List for My Project</title>
      <link>https://blog.e0ne.info/post/dependencies-list-for-my-project/</link>
      <pubDate>Wed, 27 Feb 2019 23:16:07 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/dependencies-list-for-my-project/</guid>
      <description>&lt;p&gt;Time to time you need to get all dependencies for a project you work with.
It’s good if you have an up-to-date list in the requirements.txt file. In
another case, you can always use &lt;code&gt;pip freeze&lt;/code&gt; command in your virtualenv.
It provides a flat list of all installed dependencies. To get the dependencies
tree, it’s I use &lt;a href="https://pypi.org/project/pipdeptree/"&gt;pipdeptree&lt;/a&gt; package.
It provides a simple CLI tool to get dependencies tree with version constraints
for packages where they are specified.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cast JavaScipt object to TypeScript classes</title>
      <link>https://blog.e0ne.info/post/cast-javascript-object-to-typescript-classes/</link>
      <pubDate>Tue, 26 Feb 2019 23:54:14 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/cast-javascript-object-to-typescript-classes/</guid>
      <description>&lt;p&gt;TypeScript could give you a false hope that I’ve got a strong-typed code and
everything will work as expected with JavaScript. In reality, TypeScript
doesn’t do anything after sources are compiled to JavaScript. It means, in
runtime, you’ll face good-known JavaScript with it dynamic typing.&lt;/p&gt;
&lt;p&gt;The lack of any runtime type checking is a big minus for TypeScript. You’ll
lose all your type at the same moment when browser executes code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keep Your Tests Clean: Refactoring</title>
      <link>https://blog.e0ne.info/post/keep-your-tests-clean-refactoring/</link>
      <pubDate>Mon, 25 Feb 2019 17:35:12 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/keep-your-tests-clean-refactoring/</guid>
      <description>&lt;p&gt;Refactoring tests could be painful a lot. But it could also give you a lot of
fun too. During refactoring unit tests, I’ve found a log of issues to be
resolved. Also, it gives me more knowledge about how the project works.&lt;/p&gt;
&lt;p&gt;Refactoring tests could be harder than refactoring rest of code because it
could affect not only tests.&lt;/p&gt;
&lt;p&gt;Since there are no tests for tests, there is only one way to understand if
refactoring didn’t lead to less test coverage. It’s required to measure testsc
overage before and after refactoring. New tests coverage should be equal to or
more than the old one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Run Django Tests in Parallel</title>
      <link>https://blog.e0ne.info/post/run-django-tests-in-parallel/</link>
      <pubDate>Sun, 24 Feb 2019 21:57:35 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/run-django-tests-in-parallel/</guid>
      <description>&lt;p&gt;I’m wondering that in 2019 we still have a lot of tasks which are not
parallelized yet. I’m pretty sure, that almost all laptops, desktops and even
smartphones have more than one core on board.&lt;/p&gt;
&lt;p&gt;In the meantime, I just realized that Django runs tests using only one
process/core on my desktop. I’m disappointed but I think I know why it happens.&lt;/p&gt;
&lt;p&gt;Many of us are not used to write concurrent code. Speaking about unit tests,
it’s even worse. If you have a old project with a big amount of tests,
I’m pretty sure that some tests could not be executed in a parallel. I’ll be
happy if I’m wrong. But I think it’s only one reason that Django doesn’t
add &lt;code&gt;--parallel&lt;/code&gt; by default.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flask Upgrades Support</title>
      <link>https://blog.e0ne.info/post/flask-upgrades-support/</link>
      <pubDate>Sat, 23 Feb 2019 19:00:30 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/flask-upgrades-support/</guid>
      <description>&lt;p&gt;Upgrading flask-based project from flask v.0.12.x to 1.0.x I realized that
Flask itself doesn’t ready for upgrades yet.&lt;/p&gt;
&lt;p&gt;There is no documentation about 0.x -&amp;gt; 1.0 upgrade at all. There is
&lt;a href="http://flask.pocoo.org/docs/1.0/upgrading/"&gt;some documentation&lt;/a&gt; about
upgrades prior 1.0 but nothing about 1.0 at all!
&lt;a href="http://flask.pocoo.org/docs/1.0/changelog/"&gt;Change log&lt;/a&gt; isn’t helpful a lot.&lt;/p&gt;
&lt;p&gt;It’s one more argument to use Django instead of Flask. It has great
&lt;a href="https://docs.djangoproject.com/en/2.1/releases/2.0/"&gt;release notes&lt;/a&gt;
with detailed &lt;a href="https://docs.djangoproject.com/en/2.1/releases/2.0/#backwards-incompatible-changes-in-2-0"&gt;backward incompatible&lt;/a&gt;
and &lt;a href="https://docs.djangoproject.com/en/2.1/releases/2.0/#features-deprecated-in-2-0"&gt;deprecation&lt;/a&gt; sections.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Text Editor or IDE?</title>
      <link>https://blog.e0ne.info/post/text-editor-or-ide/</link>
      <pubDate>Fri, 22 Feb 2019 22:04:33 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/text-editor-or-ide/</guid>
      <description>&lt;p&gt;A short Friday’s holy war about IDEs, text editors and vim:). I don’t really
like bikeshedding about text editors, but I was asked about my favorite one too
much to not drop a note here.&lt;/p&gt;
&lt;p&gt;I spent most of the time in editors with Python code, a bit less with
JavaScript/TypeScript. Of course, a lot of json and yaml, sometimes bash
scripts and Ansible playbooks are opened by me too. I strongly believe that for
each task there is the best tool somewhere. All-in-one tools are line swiss
knife: they are useful to by by the hand, but it’s not so comfortable to work
with day by day.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Right Way to Setup Jenkins in Docker</title>
      <link>https://blog.e0ne.info/post/right-way-to-setup-jenkins-in-docker/</link>
      <pubDate>Thu, 21 Feb 2019 22:30:11 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/right-way-to-setup-jenkins-in-docker/</guid>
      <description>&lt;p&gt;I was for this solution for months. Almost any guide I’ve found was about using
an official &lt;a href="https://github.com/jenkinsci/docker"&gt;Docker image&lt;/a&gt; with few
plugins installed. It works pretty well if you agree with a manual initial
configuration like configure admin user and password. It doesn’t work at all if
you deploy Jenkins in an automated way.&lt;/p&gt;
&lt;p&gt;Here is a &lt;code&gt;Dockerfile&lt;/code&gt; to get installed and ready to use Jenkins:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;FROM jenkins/jenkins:lts

# https://github.com/jenkinsci/docker/blob/master/README.md

# Jenkins configuration
ENV JAVA_OPTS=&amp;#34;-Djenkins.install.runSetupWizard=false&amp;#34;
COPY security.groovy /usr/share/jenkins/ref/init.groovy.d/security.groovy

# Jenkins plugins
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh &amp;lt; /usr/share/jenkins/ref/plugins.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;security.groovy&lt;/code&gt; content:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Releases</title>
      <link>https://blog.e0ne.info/post/python-releases/</link>
      <pubDate>Thu, 21 Feb 2019 00:09:43 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/python-releases/</guid>
      <description>&lt;p&gt;Since I switched to Python 3.5 as my default and I need to keep backward compatibility with Python 2.7 one year more, I don’t follow new features and releases a lot. Originally, Python 3.5 was released about 3.5 years ago. Looking throw release notes, I think I’ll switch to Python 3.6 just for the projects where I don’t need to support 2.7. There are not a lot of features in newer releases but some of them seem to be useful for me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embedded React App on Your Site</title>
      <link>https://blog.e0ne.info/post/embedded-react-app-on-your-site/</link>
      <pubDate>Tue, 19 Feb 2019 23:08:08 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/embedded-react-app-on-your-site/</guid>
      <description>&lt;p&gt;It’s great if you’re able to start development from scratch and you can
implement SPA using the latest technologies. But sometimes you can only extend
existing functionality. In such a case, it makes sense to embed your React app
into the existing web site.&lt;/p&gt;
&lt;p&gt;The idea is pretty simple: you need to add your react-based application to the
existing page.&lt;/p&gt;
&lt;p&gt;The easiest way is to add some &lt;code&gt;&amp;lt;div id=&amp;quot;reactApp&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; to your page and add
the script with a production build of your react application.
E.g.: &lt;code&gt;&amp;lt;script src=”main.3d23bdc2.js”&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing tests: boring, but useful job</title>
      <link>https://blog.e0ne.info/post/fixing-tests-boring-but-useful-job/</link>
      <pubDate>Mon, 18 Feb 2019 22:34:33 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/fixing-tests-boring-but-useful-job/</guid>
      <description>&lt;p&gt;Fighting with tests during the last two days, I would like to drop a short note
of why I usually do this job.&lt;/p&gt;
&lt;p&gt;First of all, it’s a great chance to understand how the project works. Even if
test coverage is not good enough, usually you can learn a lot about project
architecture.&lt;/p&gt;
&lt;p&gt;The next reason is that almost every project team doesn’t have enough time to
improve or extend the current tests. Test-driven development helps a bit with
unit tests coverage, but it doesn’t require any other tests to be implemented
first. I’m not talking about QA practices here, I’m talking from the developers
perspective. Slow unit tests or too complicates integration tests could be
found to improve in any project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploy Hugo Sites With Jenkins</title>
      <link>https://blog.e0ne.info/post/deploy-hugo-sites-with-jenkins/</link>
      <pubDate>Sun, 17 Feb 2019 20:54:46 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/deploy-hugo-sites-with-jenkins/</guid>
      <description>&lt;p&gt;I’ll describe how I do my &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;-based blog updates with
Jenkins, but it’s pretty similar to any other static site generator.&lt;/p&gt;
&lt;h2 id="pre-requirements"&gt;Pre-requirements&lt;/h2&gt;
&lt;p&gt;Jenkins installation is out of the scope of this post. Also, you need to have
installed and configured
&lt;a href="https://jenkins.io/doc/pipeline/steps/publish-over-ssh/"&gt;Publish Over SSH&lt;/a&gt;
plugin.&lt;/p&gt;
&lt;p&gt;Also, I use
&lt;a href="https://docs.openstack.org/infra/jenkins-job-builder/"&gt;Jenkins Job Builder (JJB)&lt;/a&gt;
to configure Jenkins jobs from yaml file.&lt;/p&gt;
&lt;p&gt;I’ll describe my blog-jobs.yaml config for my blog below.&lt;/p&gt;
&lt;h2 id="jenkins-configuration"&gt;Jenkins configuration&lt;/h2&gt;
&lt;h3 id="views"&gt;Views&lt;/h3&gt;
&lt;p&gt;If you have a lot of jobs or just want to group them by project, it makes sense
to create a view:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Click - Implement CLI Without Pain</title>
      <link>https://blog.e0ne.info/post/click-implement-cli-without-pain/</link>
      <pubDate>Sat, 16 Feb 2019 22:30:52 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/click-implement-cli-without-pain/</guid>
      <description>&lt;p&gt;I didn’t write reviews for libraries for a while. Honestly, I don’t want to
write a review for &lt;a href="https://click.palletsprojects.com/en/7.x/"&gt;click&lt;/a&gt; because
a reading of it will require more time than you try it.&lt;/p&gt;
&lt;p&gt;It’s an awesome library which is really easy to use. E.g.:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@click.command()
@click.option(&amp;#39;--command&amp;#39;, prompt=&amp;#39;command name: clone or update&amp;#39;,
              help=&amp;#39;Clone or update repos&amp;#39;)
def main(command):
    if command == &amp;#39;clone&amp;#39;:
        clone()

    elif command == &amp;#39;update&amp;#39;:
        update()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I didn’t find anything like this for Python. I will use it and recommend
anybody who needs CLI for his service or application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choosing CI server for local needs</title>
      <link>https://blog.e0ne.info/post/choosing-ci-server-for-local-needs/</link>
      <pubDate>Fri, 15 Feb 2019 22:23:49 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/choosing-ci-server-for-local-needs/</guid>
      <description>&lt;p&gt;Implementing &lt;a href="https://blog.e0ne.info/post/everything-as-a-code/"&gt;everything-as-a-code&lt;/a&gt;
initiative, I need some CI server up and running on my desktop. I don’t want to
use cron directly or implement something myself because of I don’t have enough
time for it.&lt;/p&gt;
&lt;p&gt;That’s mean, I can’t use &lt;a href="https://drone.io/"&gt;Drone&lt;/a&gt;,
&lt;a href="https://circleci.com/pricing/"&gt;Circle CI&lt;/a&gt;, or &lt;a href="https://travis-ci.org/"&gt;Travis CI&lt;/a&gt;
because of pricing. I tried &lt;a href="https://buildbot.net/"&gt;Buildbot&lt;/a&gt; and
&lt;a href="https://www.gocd.org/"&gt;GoCD&lt;/a&gt; and they look pretty good but not mature enough.&lt;/p&gt;
&lt;p&gt;I really like &lt;a href="https://about.gitlab.com/product/continuous-integration/"&gt;GitLab CI&lt;/a&gt;
but it requires a lot of resources and looks like too powerful for my simple
tasks. I can say the same about &lt;a href="https://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt;.
It’s one of the best CI servers I ever used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code Coverage and Cyclomatic Complexity</title>
      <link>https://blog.e0ne.info/post/code-coverage-and-cyclomatic-complexity/</link>
      <pubDate>Thu, 14 Feb 2019 23:38:30 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/code-coverage-and-cyclomatic-complexity/</guid>
      <description>&lt;p&gt;Code coverage for unit tests and
&lt;a href="https://en.wikipedia.org/wiki/Cyclomatic_complexity"&gt;cyclomatic complexity&lt;/a&gt;
could be extremely useful metrics for your code. They help you to understand
if something is not tested at all by unit tests. A combination of these metrics
allows you to understand how many unit tests you should implement and what is
your code complexity. I’m pretty sure, that everybody agrees that more coverage
and less complexity is that you should aim for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenStack Cinder Performance Testing Approach Part 1 of 2</title>
      <link>https://blog.e0ne.info/post/cinder-performance-testing-approach-part-1-of-2/</link>
      <pubDate>Wed, 13 Feb 2019 21:24:20 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/cinder-performance-testing-approach-part-1-of-2/</guid>
      <description>&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: This post was initially written a few years ago, so something could
be outdated.&lt;/p&gt;
&lt;h2 id="what-is-cinder"&gt;What is Cinder&lt;/h2&gt;
&lt;h3 id="high-level-cinder-architecture"&gt;High-level Cinder Architecture&lt;/h3&gt;
&lt;p&gt;Cinder contains 3 main components: Cinder API (c-api), Cinder Scheduler
(c-sched) and Cinder Volume (c-vol). Cinder Backup is a bit different and will
be described later.&lt;/p&gt;
&lt;p&gt;All Cinder components communicate between each other using RPC protocol. In our
case, it’s an AMPQ protocol with RabbitMQ backend. All data is stored in the
database (MySQL DB).&lt;/p&gt;</description>
    </item>
    <item>
      <title>TypeScript vs JavaScript</title>
      <link>https://blog.e0ne.info/post/typescript-vs-javascript/</link>
      <pubDate>Tue, 12 Feb 2019 21:41:33 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/typescript-vs-javascript/</guid>
      <description>&lt;p&gt;&lt;a href="https://www.typescriptlang.org/"&gt;TypeScript&lt;/a&gt; is a typed superset of
JavaScript. I like this language for it type system over “standard” JavaScript.
Since it’s just a extension to JavaScript it’s easy to start it. Other type
checkers like &lt;a href="https://flow.org/"&gt;Flow&lt;/a&gt; look less native for me.&lt;/p&gt;
&lt;p&gt;I prefer to use TypeScript instead of JavaScript because it’s simple to use and
doesn’t require a lot of knowledge from the beginning.&lt;/p&gt;
&lt;p&gt;From the other side, I like JavaScript because it’s a dynamic typed language
with allows you to do everything you need. The backside of this benefit is that
it makes code less maintainable and harder to change without quality loss.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some usefeul JavaScript articles (if you didn't use Javascript suring the last 5 years)</title>
      <link>https://blog.e0ne.info/post/some-usefeul-javascript-articles/</link>
      <pubDate>Mon, 11 Feb 2019 21:59:17 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/some-usefeul-javascript-articles/</guid>
      <description>&lt;p&gt;If you like me didn’t write any lines of code in JavaScript during the last 5
years, you will be surprised how it changed.&lt;/p&gt;
&lt;p&gt;I won’t re-write all existing blog posts and manuals because of two reasons:
I’m too lazy for these things and I’m not feeling that I can do it better.&lt;/p&gt;
&lt;p&gt;I’ll leave the references for two topics I’ve found useful for me: variables
declarations and modules. I like &lt;a href="https://developer.mozilla.org/en-US/"&gt;MDN&lt;/a&gt;,
so I’ll use it for references.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Object-oriented Design</title>
      <link>https://blog.e0ne.info/post/object-oriented-design/</link>
      <pubDate>Sun, 10 Feb 2019 21:42:01 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/object-oriented-design/</guid>
      <description>&lt;p&gt;It’s mostly a reminder to myself that it’s a time to read this book again.&lt;/p&gt;
&lt;p&gt;I the past, when I used C# instead of Python in my daily job, I read a lot of
books about object-oriented programming and design, patterns and software
architecture. C# like a Java is object-oriented programming language. It means
you have to create objects for everything. It seems very heavyweight, so I
switched to Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I don't believe performance tests results</title>
      <link>https://blog.e0ne.info/post/i-dont-believe-performance-tests-results/</link>
      <pubDate>Sat, 09 Feb 2019 21:55:21 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/i-dont-believe-performance-tests-results/</guid>
      <description>&lt;p&gt;Performance testing is one of the most complex and hard types of testing. It’s
really hard to make fair tests which fit everyone. There are a lot of things
which can impact the measurement result. That’s why I don’t believe any
particular test result which I found on the Internet.&lt;/p&gt;
&lt;p&gt;If you are a software or hardware vendor, it’s a big temptation to test only
your strengths. Even if you want to get fair results, you can miss something
during the testing or don’t have enough results to see a performance impact.
If you test your application with only one core/process but it’ll have two
cores/processes on a production environment your tests could not show
application performance on production.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I don't like React</title>
      <link>https://blog.e0ne.info/post/why-i-dont-like-react/</link>
      <pubDate>Fri, 08 Feb 2019 23:19:56 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/why-i-dont-like-react/</guid>
      <description>&lt;p&gt;I wanted to name this post as ‘pros and cons of React’, but I didn’t find good
benefits that would push me to use this library.&lt;/p&gt;
&lt;p&gt;One thing I like that it tries to promote reactive programming, but it does it
not really good, IMO. I like Rxjs and I really think that there are a lot of
great things which could be borrowed from Rxjs to React to make it more
functional.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Get Hardware Info in MacOS From CLI</title>
      <link>https://blog.e0ne.info/post/how-to-get-hardware-info-in-macos-from-cli/</link>
      <pubDate>Thu, 07 Feb 2019 23:15:45 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/how-to-get-hardware-info-in-macos-from-cli/</guid>
      <description>&lt;p&gt;I know that most MacOS users use GUI instead of CLI but sometimes it’s faster
to use CLI. A also prefer command line when I need to copy results: it’s easier
to copy text rather than do snapshots even with hotkeys and send it.&lt;/p&gt;
&lt;p&gt;There are two tools I use to get hardware info: &lt;code&gt;system_profiler&lt;/code&gt; and &lt;code&gt;sysctl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I do not like to copy the documentation, so I just drop a few most interesting
for me commands:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build VM for Devstack</title>
      <link>https://blog.e0ne.info/post/build-vm-for-devstack/</link>
      <pubDate>Wed, 06 Feb 2019 18:25:33 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/build-vm-for-devstack/</guid>
      <description>&lt;p&gt;I posted already about
&lt;a href="https://blog.e0ne.info/post/diskimage-builder-in-docker/"&gt;diskimage-builder&lt;/a&gt;
and Docker integration. This is a follow-up post about it and
&lt;a href="https://blog.e0ne.info/post/everything-as-a-code/"&gt;Everything-as-a-code&lt;/a&gt;
approach. Since it takes more time than expected (honestly, I didn’t to any
estimations but it seems that it could be done faster), I’ll post you some tips
I use for my development environment automation even if it’s not
&lt;code&gt;a production-ready solution&lt;/code&gt;, but it already could be used if somebody needs
it.&lt;/p&gt;
&lt;p&gt;Almost any work with upstream OpenStack starts with VM setup with
&lt;a href="https://github.com/openstack-dev/devstack"&gt;Devstack&lt;/a&gt; and required
configuration. That’s mean even small automation of routine tasks will make me
a bit more happy:).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Boring and Routine Tasks</title>
      <link>https://blog.e0ne.info/post/boring-and-routine-tasks/</link>
      <pubDate>Tue, 05 Feb 2019 23:01:10 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/boring-and-routine-tasks/</guid>
      <description>&lt;p&gt;Nobody likes boring and routine tasks at all. It’s a good idea to do something
interesting and challenging each day. I’m sure that you can find such a task on
any kind of job you have. You just need to find 5-10 minutes for it and you’ll
find something interesting to do.&lt;/p&gt;
&lt;p&gt;I failed today. Only boring ad routine tasks during the day. I’ll do my best to
fix this tomorrow and post something interesting for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenStack Horizon: integration tests for plugins (part 2, CI)</title>
      <link>https://blog.e0ne.info/post/openstack-horizon-integration-tests-for-plugins-ci/</link>
      <pubDate>Mon, 04 Feb 2019 22:30:34 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/openstack-horizon-integration-tests-for-plugins-ci/</guid>
      <description>&lt;p&gt;It’s a small addition to my previous
&lt;a href="https://blog.e0ne.info/post/openstack-horizon-integration-tests-for-plugins/"&gt;post&lt;/a&gt;.
I don’t like to edit my previous posts. The only exception is when I have to
fix some typos, spelling error, links, etc.&lt;/p&gt;
&lt;p&gt;During the previous post, I described how to implement integration tests for
the Horizon plugins, but I didn’t have enough time to implement and verify CI
for it. It’s time to fix this.&lt;/p&gt;
&lt;p&gt;We’ve got really awesome CI in the OpenStack. &lt;a href="https://www.zuul-ci.org/"&gt;Zuul&lt;/a&gt;
works great for OpenStack needs and allows to configure cross-project jobs.
A big thank you to our Infra team for the help during CI setup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using JSX outside React application</title>
      <link>https://blog.e0ne.info/post/using-jsx-outside-react-application/</link>
      <pubDate>Sun, 03 Feb 2019 22:17:47 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/using-jsx-outside-react-application/</guid>
      <description>&lt;p&gt;I’m not a fan of the &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; at all. I prefer to use
&lt;a href="https://vuejs.org/"&gt;VueJS&lt;/a&gt; wherever it’s possible. But React is really one of
the most popular JavaScript libraries now. There are a lot of people who use it
and like it.&lt;/p&gt;
&lt;p&gt;One of the most important parts of React is
&lt;a href="https://reactjs.org/docs/jsx-in-depth.html"&gt;JSX&lt;/a&gt; -  “a syntax extension to
JavaScript. It is similar to a template language, but it has full power of
JavaScript”. Honestly, it’s the one reasons why I don’t like React. But if
you’re using React, it’s really painful to not use JSX too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dependencies management: versioning</title>
      <link>https://blog.e0ne.info/post/dependencies-management-versioning/</link>
      <pubDate>Sat, 02 Feb 2019 22:59:29 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/dependencies-management-versioning/</guid>
      <description>&lt;p&gt;It’s a really complicated topic. Almost everyone has own opinion on it. I’ll
try to describe you several patterns with pros and cons for each.&lt;/p&gt;
&lt;p&gt;It doesn’t matter if it’s a python dependency in requirements.txt or a
javascript one in package-lock.json file.&lt;/p&gt;
&lt;p&gt;What could go wrong? First of all, there are several approaches how dependency
could be described:&lt;/p&gt;
&lt;h2 id="case-1-without-version"&gt;Case 1: without version&lt;/h2&gt;
&lt;p&gt;It’s a great approach for development on early stages. You always use the
latest version and you’ll be notified soon if your application stopped to work.
On the other hand, it’s a nightmare for production deployment. Everything could
stop work at any moment after any operating system update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenStack Horizon: integration tests for plugins</title>
      <link>https://blog.e0ne.info/post/openstack-horizon-integration-tests-for-plugins/</link>
      <pubDate>Fri, 01 Feb 2019 23:00:05 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/openstack-horizon-integration-tests-for-plugins/</guid>
      <description>&lt;p&gt;Ideally, I need to push this post into the Horizon documentation, but I would
like to publish it here as HOTO for me before everything will be approved and I
move this into the official documentation.&lt;/p&gt;
&lt;p&gt;About one week ago we, finally, included integration
&lt;a href="https://review.openstack.org/#/c/580469/"&gt;tests job&lt;/a&gt; to our gates in
non-voting mode. A big thanks to everyone who helped to get this done. We’ve
got about 80 integrations tests in the horizon
&lt;a href="https://github.com/openstack/horizon/tree/master/openstack_dashboard/test/integration_tests"&gt;repository&lt;/a&gt;.
Also, it could be used as a base framework to implement tests for plugins.
Unfortunately, these tests work only with python2 now, but we’re going to fix
it soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>One Month of Blogging</title>
      <link>https://blog.e0ne.info/post/one-month-of-blogging/</link>
      <pubDate>Thu, 31 Jan 2019 18:38:12 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/one-month-of-blogging/</guid>
      <description>&lt;p&gt;It was some kind on New Year challenge for me to write a post every day.
Something went good, something not but I feel pretty good on this initiative
and want to continue. It’s really hard to post something every day. I started
to post some notes that don’t feet into Twitter’s limit. There are a lot of
drafts in progress so I’ll try post more technical things next month.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Config Inheritance</title>
      <link>https://blog.e0ne.info/post/config-inheritance/</link>
      <pubDate>Wed, 30 Jan 2019 23:09:38 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/config-inheritance/</guid>
      <description>&lt;p&gt;Continuing the topic from the
&lt;a href="https://blog.e0ne.info/post/default-config-options/"&gt;previos post&lt;/a&gt; about
project configuration, I would like to metion one more important thing. It’s a
config inheritance or config overriding. I don’t want to argue if my approach
is good or not. I just like it and I try to follow it wherever it’s possible.&lt;/p&gt;
&lt;p&gt;I will write about possible configuration location in the order where the next
level will override the previous one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Default values in the code. It’s a common location for defaults if it’s
possible. Sometimes you can’t have any default value due to the different
reasons.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Price of Open Source Software</title>
      <link>https://blog.e0ne.info/post/the-price-of-open-source-software/</link>
      <pubDate>Tue, 29 Jan 2019 22:08:26 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/the-price-of-open-source-software/</guid>
      <description>&lt;p&gt;Open source software is not free. Sometimes it’s not cheap at all. It even
could be more expensive than some proprietary software with any high price.&lt;/p&gt;
&lt;p&gt;I like Open Source. I use it. I contribute to some open source project even on
my personal time. But you must know, that price for the open source software
could be very high.&lt;/p&gt;
&lt;p&gt;You always need to think about how many time do you spend during
troubleshooting/deploying/fixing or improving some open source software. It
could take a lot of time for it. Sometimes it’s better and cheaper than open
source.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Default Config Options</title>
      <link>https://blog.e0ne.info/post/default-config-options/</link>
      <pubDate>Mon, 28 Jan 2019 18:21:28 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/default-config-options/</guid>
      <description>&lt;p&gt;Once your project becomes a bit bigger than ‘Hello, World’, you need to add an
ability to configure it. It could be config in the code like in Django or
Flask, pass environment variables, CLI arguments or a special config file
located somewhere in the filesystem.&lt;/p&gt;
&lt;p&gt;At this point, everyone should ask themselves this question: What should I
consider as a default option? Should it be production-like or developers
friendly options?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code review: why do we need it?</title>
      <link>https://blog.e0ne.info/post/code-review-why-do-we-need-it/</link>
      <pubDate>Sun, 27 Jan 2019 22:10:35 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/code-review-why-do-we-need-it/</guid>
      <description>&lt;p&gt;I don’t want to argue about necessary of code review now. It’s to each team to
specify rules on how to do it. I just want to share with you my opinion why do
we need it on each project.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First of all, it’s about code knowledge sharing. It’s a great chance to share
knowledge about the project with a team. More code reviews you do - more
knowledge about the project you’ve got.&lt;/li&gt;
&lt;li&gt;To learn something new. New practices, approaches, etc - you may know a lot
of interesting doing the code review.&lt;/li&gt;
&lt;li&gt;To be on the same page with a team. More code reviews mean more
communications between team members. It helps you to understand what the team
expects from you and how to write good code for the particular project. It’s
kind of formal type of communications which helps to build a good Team.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Work with Gerrit: git review-update</title>
      <link>https://blog.e0ne.info/post/work-with-gerrit-git-review-update/</link>
      <pubDate>Sat, 26 Jan 2019 23:12:56 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/work-with-gerrit-git-review-update/</guid>
      <description>&lt;p&gt;If you work with &lt;a href="https://www.gerritcodereview.com/"&gt;Gerrit&lt;/a&gt; you use its CLI
tool &lt;a href="https://docs.openstack.org/infra/git-review/usage.html"&gt;git review&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Working with OpenStack, I use it a lot every day. I need to update the last
patch and send it to the Gerrit very often. That’s why I created one line
script to execute &lt;code&gt;git commit -a --amend &amp;amp;&amp;amp; git review&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;I put it into the &lt;code&gt;/usr/local/bin/git-review-update&lt;/code&gt; file with a following
content:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; #!/bin/sh

git commit -a --amend &amp;amp;&amp;amp; git review
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, I can use &lt;code&gt;git review-update&lt;/code&gt; command to update the last patch and send it
to Gerrit. It’s a good example of the simplest and fastest solutions which
works for me during the last two years. Of course, I have to read
&lt;a href="https://docs.openstack.org/infra/git-review/developing.html"&gt;Contributing guide&lt;/a&gt;
and propose a new command to &lt;code&gt;git-review&lt;/code&gt; at some point.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code Search for Your Repos</title>
      <link>https://blog.e0ne.info/post/code-search-for-your-repos/</link>
      <pubDate>Fri, 25 Jan 2019 21:32:33 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/code-search-for-your-repos/</guid>
      <description>&lt;p&gt;Once you have more than one repository with sources you starting to search
across all of them. You can use IDE and/or your favorite text editor to search
across an open project. Usually,  I use ‘grep’ to search in my &amp;lsquo;~/src&amp;rsquo;
directory.&lt;/p&gt;
&lt;p&gt;It works pretty well when you have a few repos. But once you’ve got tens of
them, it’s it’s time to find something convenient than &amp;lsquo;grep&amp;rsquo;. This way is good
only if you prefer GUI rather than CLI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I need more (fake) disks</title>
      <link>https://blog.e0ne.info/post/i-need-more-fake-disks/</link>
      <pubDate>Thu, 24 Jan 2019 21:52:22 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/i-need-more-fake-disks/</guid>
      <description>&lt;p&gt;Sometime I need some additional disks or volume groups to do some testing.
E.g. it’s widely used for &lt;a href="https://github.com/openstack/cinder"&gt;OpenStack Cinder&lt;/a&gt;
testing with LVM driver.&lt;/p&gt;
&lt;p&gt;Usually, I don’t have additional disks to work with:(. That’s why I use
loopback devices instead. It’s an easy to configure solution. Of course, it
works a but slower than on a real hardware but it’s absolutely acceptable for
many scenarios.&lt;/p&gt;
&lt;p&gt;I’ll show you an example based on &lt;a href="https://github.com/openstack-dev/devstack/blob/e812d284b8970d0242f35b3d15b923d246fa7308/lib/lvm#L123"&gt;Devstack&lt;/a&gt;
solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benefits of the Automation</title>
      <link>https://blog.e0ne.info/post/benefits-of-the-automation/</link>
      <pubDate>Wed, 23 Jan 2019 21:48:28 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/benefits-of-the-automation/</guid>
      <description>&lt;p&gt;Nobody will argue that Automation is great. I hope it’s obvious for everybody.
Even simple automation which saves you a few minutes every day helps a lot to
not do some boring routing things.&lt;/p&gt;
&lt;p&gt;Since I created some simple scripts to publish new blog posts, create
containers or virtual machines for required environments, it saves me a lot of
time to do something interesting or read about new technologies which I can or
even cannot bring to my current projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flask WEB_ROOT Support</title>
      <link>https://blog.e0ne.info/post/flask-webroot-support/</link>
      <pubDate>Tue, 22 Jan 2019 21:20:01 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/flask-webroot-support/</guid>
      <description>&lt;p&gt;Impressed by &lt;a href="https://github.com/openstack/horizon"&gt;OpenStack Horizon&lt;/a&gt;
&lt;a href="https://docs.openstack.org/horizon/latest/configuration/settings.html#webroot"&gt;WEBROOT&lt;/a&gt;
config option I decided to add the same for my Flask-based project. TBH, I was
sure that it’s an option from Django. It works great and it’s extremely useful.&lt;/p&gt;
&lt;p&gt;From the Horizon’s documentation:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WEBROOT&lt;/strong&gt; - Specifies the location where the access to the dashboard is
configured in the web server. For example, if you’re accessing the Dashboard
via &lt;strong&gt;https://&lt;!-- raw HTML omitted --&gt;/dashboard&lt;/strong&gt;, you would set thisto
&lt;strong&gt;&amp;quot;/dashboard/&amp;quot;&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>KISS Principle in a Practice</title>
      <link>https://blog.e0ne.info/post/kiss-principle-in-a-practice/</link>
      <pubDate>Mon, 21 Jan 2019 23:28:31 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/kiss-principle-in-a-practice/</guid>
      <description>&lt;p&gt;I hope everybody is familiar with [“Keep It Simple, Stupid” (KISS) principle]
(&lt;a href="https://en.wikipedia.org/wiki/KISS_principle)"&gt;https://en.wikipedia.org/wiki/KISS_principle)&lt;/a&gt;. If not, it’s a good time to
read about it.&lt;/p&gt;
&lt;p&gt;It a software engineering, it means that you need to keep your software as
simple as possible. Your software architecture should do things that are
required &lt;strong&gt;at this moment&lt;/strong&gt;. Please, do not do premature optimization just
because you think it’s a good idea. You don’t need tons of patterns implemented
and dozens of layers in your software on early stages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Personal Tests Anti Rating</title>
      <link>https://blog.e0ne.info/post/personal-tests-anti-rating/</link>
      <pubDate>Sun, 20 Jan 2019 22:21:46 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/personal-tests-anti-rating/</guid>
      <description>&lt;p&gt;Here is my personal test anti-rating. If I see something from this list, for me
it means that the testing process on this project is not ideal.&lt;/p&gt;
&lt;h3 id="5-you-cant-run-tests-on-your-development-environment"&gt;5. You can’t run tests on your development environment&lt;/h3&gt;
&lt;p&gt;It depends on a project ad kind of tests, but you should be able to run unit
tests at least on your development environment. Otherwise, you’ll waste your
time and CI resources waiting for tests results&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Image Collection</title>
      <link>https://blog.e0ne.info/post/docker-image-collection/</link>
      <pubDate>Sat, 19 Jan 2019 22:43:46 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/docker-image-collection/</guid>
      <description>&lt;p&gt;NOTE: There is a new format for my posts. Something like really short reviews.
I call it ‘notes’. I’ll publish such posts time to time to share something
great with you and to not lost links to them.&lt;/p&gt;
&lt;p&gt;Somebody likes everything in Docker/container principle, somebody doesn’t. I
like this idea more and more each day. I even think that I started looking into
the containers too late.&lt;/p&gt;
&lt;p&gt;Nevertheless, I move a lot of services to Docker just because it’s easier than
having 10-15-20+ repos in my apt.sources and get everything working on a single
PC. I think the next big thing for me is to build home Kubernetes cluster. But
it’s a totally different story.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Not a DNS Server for Libvirt</title>
      <link>https://blog.e0ne.info/post/not-a-dns-server-for-libvirt/</link>
      <pubDate>Fri, 18 Jan 2019 22:36:28 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/not-a-dns-server-for-libvirt/</guid>
      <description>&lt;p&gt;Sometimes I’m too lazy to repeat the same task so I do some automation to make
my life easier. Unfortunately, I don’t have enough time to do it well each time.
That’s why I prefer ‘good enough’ way. I implement something good enough for me
and refactor it once I have time.&lt;/p&gt;
&lt;p&gt;I use virtual machines on my desktop a lot. Usually, I have several of them up
and running. I don’t like to remember an IP address for each of them, that’s
why I prefer to use hostnames. Based on this, I’ve googled to some
&lt;em&gt;lightweight&lt;/em&gt; solution to have something like DNS server for my KVM instances
and &lt;em&gt;it must work inside corporate network&lt;/em&gt;. That’s why I can’t use dnsmasq or
something else.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Diskimage-builder in Docker</title>
      <link>https://blog.e0ne.info/post/diskimage-builder-in-docker/</link>
      <pubDate>Thu, 17 Jan 2019 21:08:04 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/diskimage-builder-in-docker/</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.openstack.org/diskimage-builder/latest/index.html"&gt;diskimage-builder&lt;/a&gt;
is a tool for automatically building customized operating-system images for use
in clouds and other environments.&lt;/p&gt;
&lt;p&gt;Unfortunately, I can&amp;rsquo;t do everything in Docker so I have to use VMs a lot.
diskimage-builder helps me a lot to build basic VM images with pre-installed
packages, my SSH key, etc.&lt;/p&gt;
&lt;p&gt;Since I try to have my development environment as clean, as possible I do not
install additional packages on my desktop. Any Python package I install in the
virtualenv. For system-level packages (deb/rpm) I try to use Docker and
Virtual Machines.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Everything as a Code</title>
      <link>https://blog.e0ne.info/post/everything-as-a-code/</link>
      <pubDate>Wed, 16 Jan 2019 22:33:35 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/everything-as-a-code/</guid>
      <description>&lt;p&gt;Infrastructure as a code… I hear about it during at least last 5-7 years. There are a lot of activities in each company (I hope) to introduce configuration management like Ansible, Puppet, Chef, etc to achieve Continuous Integration and Continuous Deployment(Delivery) aka CI/CD.&lt;/p&gt;
&lt;p&gt;I saw a lot of successful implementations for CI/CD for small and mid-size projects. It’s harder to introduce full automation on big projects but it’s absolutely doable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue.js, global variables and TypeScript</title>
      <link>https://blog.e0ne.info/post/vuejs-global-variables-and-typescript/</link>
      <pubDate>Tue, 15 Jan 2019 23:07:27 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/vuejs-global-variables-and-typescript/</guid>
      <description>&lt;p&gt;It’s pretty easy to pass some environment variable to Vue.js application using &lt;a href="https://webpack.js.org/plugins/define-plugin/"&gt;webpack.DefinePlugin&lt;/a&gt;. You just need to have something like a sample below in your &lt;code&gt;webpack.config.js&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;var webpack = require(&amp;#39;webpack&amp;#39;)

module.exports = {
 // ...
 plugins: [
   // ...
   new webpack.DefinePlugin({
     &amp;#39;BUILD&amp;#39;: JSON.stringify(0.0.1&amp;#39;)
   })
 ]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It’s a common way to pass some environment variable into your JavaScript application. Technically, &lt;code&gt;webpack.DefinePlugin&lt;/code&gt; injects a global variable into your JavaScript application. You may need it for some &lt;a href="https://github.com/petehunt/webpack-howto#6-feature-flags"&gt;feature flags&lt;/a&gt; or some global configuration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Front End Development Is Too Complicated</title>
      <link>https://blog.e0ne.info/post/front-end-development-is-too-complicated/</link>
      <pubDate>Mon, 14 Jan 2019 23:13:55 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/front-end-development-is-too-complicated/</guid>
      <description>&lt;p&gt;It becomes more and more complicated. Single Page Applications (SPA) are a great thing. I’m pretty sure that all users like it. I don’t know if many developers like it or not. Personally, I think that its development is too complicated.&lt;/p&gt;
&lt;p&gt;Maybe it’s not so complicated as I think if you are Front-end Engineer or even full-stack JavaScript Developer. But it becomes extremely hard if you need to integrate your SPA with Python-based API with is working behind Nginx in Docker or Kubernetes. In such case, you have to be able to configure all this stuff. Of course, you may say that there are special guys in your team called DevOps or Deployment Engineers to do all configurations in a correct way but it doesn’t allow you to not understand how it works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easy SVG image manipulations</title>
      <link>https://blog.e0ne.info/post/easy-svg-image-manipulations/</link>
      <pubDate>Sun, 13 Jan 2019 17:44:42 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/easy-svg-image-manipulations/</guid>
      <description>&lt;p&gt;If you decided to use SVG images as icons in your UI it becomes extremely important to have these images with different colors. E.g. you need resource status icons for ‘available’ and ‘not available’ states. You can use the same SVG for both of these states but fill it with red or green color depending on the state.&lt;/p&gt;
&lt;p&gt;It’s one of the possible use cases which could be covered by &lt;a href="https://github.com/JetBrains/svg-mixer/tree/master/packages/svg-transform-loader"&gt;svg-transform-loader&lt;/a&gt; library. It’s really small and useful webpack plugin loader for SVG manipulations. You can fill or stroke your SVG image inside css, scss, less or even JavaScript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software Development Is Like a Puzzle</title>
      <link>https://blog.e0ne.info/post/software-development-is-like-a-puzzle/</link>
      <pubDate>Sat, 12 Jan 2019 21:42:25 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/software-development-is-like-a-puzzle/</guid>
      <description>&lt;p&gt;Software development often looks like a puzzle assembling. You need to fit a few pieces together to make something working.&lt;/p&gt;
&lt;p&gt;It’s OK when you need to create something fast. Like a new web site on an existing engine with several new features. There are a lot of libraries, frameworks, engines almost for any case.&lt;/p&gt;
&lt;p&gt;I’m happy that I still can create something new. Something I can’t google about. Something nobody asked and answered on StackOverflow. There are a lot of interesting and hard tasks to resolve which I can resolve with software engineering skills.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some Useful Git Commands</title>
      <link>https://blog.e0ne.info/post/some-useful-git-commands-en/</link>
      <pubDate>Fri, 11 Jan 2019 23:04:16 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/some-useful-git-commands-en/</guid>
      <description>&lt;p&gt;Since I started blogging in English, I think I can translate some useful posts even they were written a few years ago. It’s a translation of the same post in &lt;a href="https://blog.e0ne.info/post/git-some-useful-commands/"&gt;Russian&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m tired to blog the same so I created this blog post to have everything in one place.&lt;/p&gt;
&lt;h3 id="set-usernameemail-for-git"&gt;Set username/email for git:&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$ git config --global user.email &amp;quot;e0ne@e0ne.info&amp;quot; $ git config --global user.name &amp;quot;e0ne&amp;quot;&lt;/code&gt;
You can omit to set it &lt;code&gt;global&lt;/code&gt; and it will be set only for the current repository.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some Useful Docker Commands</title>
      <link>https://blog.e0ne.info/post/some-useful-docker-commands/</link>
      <pubDate>Thu, 10 Jan 2019 22:11:42 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/some-useful-docker-commands/</guid>
      <description>&lt;p&gt;Five years ago I wrote the post &lt;a href="https://blog.e0ne.info/post/git-some-useful-commands/"&gt;Git: some useful commands&lt;/a&gt; (in Russian).
Probably, it’s a good idea to translate it into English too but it’s a
different story.&lt;/p&gt;
&lt;p&gt;I used that post as a handbook for some git commands which I had to use really
rare. Now I would like to create a similar list for Docker. Some of these
commands you can easily find in the manual and help but if you’re such lazy as
me, you would like to get such list noted somewhere.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I'm too lazy to not use Bootstrap</title>
      <link>https://blog.e0ne.info/post/i-m-too-lazy-to-not-use-bootstrap/</link>
      <pubDate>Wed, 09 Jan 2019 22:00:02 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/i-m-too-lazy-to-not-use-bootstrap/</guid>
      <description>&lt;p&gt;I never liked hit with CSS. I hate to deal with HTML make up a lot. I prefer to work with JavaScript and omit styles if possible. Maybe it’s only because I’m not an expert in this area.&lt;/p&gt;
&lt;p&gt;That’s why I use &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt; framework where it’s possible. It allows everybody to create pretty good UI’s for web application with minimal knowledge of styles and CSS.&lt;/p&gt;
&lt;p&gt;In a real word, I don’t even want to use Bootstrap directly in web applications based on modern libraries and frameworks like &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; and &lt;a href="https://vuejs.org/"&gt;Vue.js&lt;/a&gt;. These tools force you to use components instead of code and layout duplication. There are great projects like &lt;a href="https://bootstrap-vue.js.org/"&gt;Bootstrap + Vue&lt;/a&gt; and &lt;a href="https://react-bootstrap.github.io/"&gt;React-Bootstrap&lt;/a&gt; which do all wrapping around Bootstrap to provide us ready to use components.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue.js + Python API + Docker in Development Environment</title>
      <link>https://blog.e0ne.info/post/vuejs-python-docker-in-development-environment/</link>
      <pubDate>Tue, 08 Jan 2019 23:18:15 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/vuejs-python-docker-in-development-environment/</guid>
      <description>&lt;h2 id="note"&gt;NOTE:&lt;/h2&gt;
&lt;p&gt;All things described in this post could be not 100% correct. I just described my development environment for a simple project with JavaScript fronted and Python backend. Everything located in the same repository to make example less complicated but it also could work well for small projects and/or when backend and frontend are implemented by the same team. Any contributions are welcome!&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;It’s a story about how I tried to create a simple development environment for web project with Python-based backend and frontend written on Vue.js with typescript. Also, there are containers with database and web server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimal OpenStack Cinder setup</title>
      <link>https://blog.e0ne.info/post/minimal-openstack-cinder-setup/</link>
      <pubDate>Mon, 07 Jan 2019 23:31:24 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/minimal-openstack-cinder-setup/</guid>
      <description>&lt;p&gt;During OpenStack Cinder development you may want to have some minimal working configuration to run the only Cinder on your environment. If you don’t need to test full volume attach flow with Nova, you may need to run only Cinder(cinder-api, cinder-scheduler, and cinder-volume, even cinder-backup is optional), RabbitMQ, and MySQL.&lt;/p&gt;
&lt;p&gt;Usually, for Cinder development, I don’t need full OpenStack up and running on my virtual machine. I just need to have only Cinder itself and such required things like database and message queue.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Re-launch</title>
      <link>https://blog.e0ne.info/post/blog-re-launch/</link>
      <pubDate>Sun, 06 Jan 2019 22:04:43 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/blog-re-launch/</guid>
      <description>&lt;p&gt;After more or less technical blog I’m ready to say it’s successfully re-launched. I hope, it’ll be interesting to read.&lt;/p&gt;
&lt;p&gt;I’m going to blog about the following topics this year:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;OpenStack&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;JavaScript (Vue.js and React.js)&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’ll try to publish new posts regularly and make them interesting to read.&lt;/p&gt;
&lt;p&gt;Enjoy the reading!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Click and Double Click in JavaScript</title>
      <link>https://blog.e0ne.info/post/click-double-click-in-javascript/</link>
      <pubDate>Sat, 05 Jan 2019 21:37:53 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/click-double-click-in-javascript/</guid>
      <description>&lt;p&gt;Spent a few hours on a simple task: create different handlers for ‘click’ and ‘double click’ events on the same element, onclick handler should not be executed if a double click event is raised.&lt;/p&gt;
&lt;p&gt;I hope, there is a better solution but I didn’t find it. I leave it here in case if somebody helps me with it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;html&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;body&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;a&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;#&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;clickMe&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Click&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Me&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;/a&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;script&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        &lt;span style="color:#75715e"&gt;/* click or double click */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        &lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;link&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;getElementById&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;clickMe&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        &lt;span style="color:#a6e22e"&gt;link&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;addEventListener&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, (&lt;span style="color:#a6e22e"&gt;e&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;            &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt; &lt;span style="color:#f92672"&gt;===&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                &lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                    &lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                    &lt;span style="color:#a6e22e"&gt;alert&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                    &lt;span style="color:#a6e22e"&gt;e&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;preventDefault&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                }, &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        &lt;span style="color:#a6e22e"&gt;link&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;addEventListener&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;dblclick&amp;#39;&lt;/span&gt;, (&lt;span style="color:#a6e22e"&gt;e&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;            &lt;span style="color:#a6e22e"&gt;clearTimeout&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;            &lt;span style="color:#a6e22e"&gt;timeout&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;            &lt;span style="color:#a6e22e"&gt;alert&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;double click&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;            &lt;span style="color:#a6e22e"&gt;e&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;preventDefault&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        })
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;/script&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;/body&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;/html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I use pure JavaScript to not depend on any framework in this example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learned About Pystone</title>
      <link>https://blog.e0ne.info/post/learned-about-pystone/</link>
      <pubDate>Fri, 04 Jan 2019 15:27:15 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/learned-about-pystone/</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/blackberry/Python/blob/master/Python-3/Lib/test/pystone.py"&gt;pystone&lt;/a&gt;
is a simple Python benchmark which is included in a standard library.&lt;/p&gt;
&lt;p&gt;As any other benchmark you need to be careful with its&amp;rsquo; results. It was
interestings how fast are my environments. All tests were done using &lt;code&gt;python3 -m test.pystone&lt;/code&gt; command.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Intel Core i5 4590 @ 3.30GHz:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pystone(1.2) time for 50000 passes = 0.19486
This machine benchmarks at 256594 pystones/second&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;
* Intel Core i7 2600 @ 3.40GHz:

```python
Pystone(1.2) time for 50000 passes = 0.315069
This machine benchmarks at 158695 pystones/second
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Intel Core i5 7567U @ 3.50GHz (MacBook Pro (13-inch, early 2013)):&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Easiest Way to Parse Xml in Python</title>
      <link>https://blog.e0ne.info/post/the-easiest-way-to-parse-xml-in-python/</link>
      <pubDate>Thu, 03 Jan 2019 16:12:35 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/the-easiest-way-to-parse-xml-in-python/</guid>
      <description>&lt;p&gt;I would like to add this as a note here. I really hope that we will not use XML
anymore in the nearest future but in case if somebody needs it, you have to use
untangle. &lt;a href="https://github.com/stchris/untangle"&gt;untangle&lt;/a&gt; is awesome pure
python library to parse XML withoud pain. You just need to try if if XML still
exists in your world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pros and Cons of Vue.js</title>
      <link>https://blog.e0ne.info/post/pros-and-cons-of-vuejs/</link>
      <pubDate>Wed, 02 Jan 2019 16:27:02 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/pros-and-cons-of-vuejs/</guid>
      <description>&lt;p&gt;Since I started to learn Vue.js a few months ago, I realized that it has some benefits I like and some things which I really hate. I’m not an expert in this framework, but I would like to share my thoughts about it.&lt;/p&gt;
&lt;h2 id="pros"&gt;Pros:&lt;/h2&gt;
&lt;h3 id="simplicity"&gt;Simplicity&lt;/h3&gt;
&lt;p&gt;It is really easy to integrate it into your existing web application by just adding one more ~20KB-size JavaScript library. It allows you to start using it with an old or legacy web site like you did with jQuery in the past! You don’t need all that npm and Single Page Application (SPA) stuff in your (mostly python or something else) project. If you need to start only with a simple grid or ‘Load more’ button - you’ll do exactly what you need without tons of JavaScript libraries and npm packages nightmare.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Engine</title>
      <link>https://blog.e0ne.info/post/new-engine/</link>
      <pubDate>Tue, 01 Jan 2019 19:27:19 +0200</pubDate>
      <guid>https://blog.e0ne.info/post/new-engine/</guid>
      <description>&lt;p&gt;Actually, it was done some time ago but I think it&amp;rsquo;s time to make it more
official. This blog was finally migrated from outdated blogengine.net to new
&lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is still a log of work in progress: restore images, fix theme, RSS and
re-enable comments. I hope, it&amp;rsquo;ll help me to create more awesome posts this
year.&lt;/p&gt;
&lt;p&gt;All sources are available now at GitHub::&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/e0ne/blog.e0ne.info"&gt;https://github.com/e0ne/blog.e0ne.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/e0ne/e0ne-hugo"&gt;https://github.com/e0ne/e0ne-hugo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>How to get hardware info in Linux console/CLI</title>
      <link>https://blog.e0ne.info/post/how-to-get-hardware-info-in-linux-console-cli/</link>
      <pubDate>Tue, 02 Oct 2018 12:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/how-to-get-hardware-info-in-linux-console-cli/</guid>
      <description>&lt;p&gt;Sometimes it’s needed to get hardware information on your Linux desktop or server using the command line only. Of course, you can do everything via CLI in Linux. Here just some reminders for myself how to do it.&lt;/p&gt;
&lt;p&gt;Most of the information you can get using the following three commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lspci - list all PCI devices&lt;/li&gt;
&lt;li&gt;lshw - list hardware&lt;/li&gt;
&lt;li&gt;dmidecode - DMI table decoder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using multiple keys to these CLI tools you can get everything you need.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to run CKAN tests</title>
      <link>https://blog.e0ne.info/post/how-to-run-ckan-tests/</link>
      <pubDate>Thu, 04 Jan 2018 16:49:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/how-to-run-ckan-tests/</guid>
      <description>&lt;p&gt;CKAN is an open-source DMS (data management system) for powering data hubs and data portals. CKAN makes it easy to publish, share and use data. It powers datahub.io, catalog.data.gov and europeandataportal.eu/data/en/dataset among many other sites. &lt;a href="http://ckan.org/"&gt;http://ckan.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open source world is interesting and challenging. Sometimes it’s easy and cheap. Sometimes it’s hard to contribute and costs a lot. Looking into the CKAN I was surprised that it’s used by government portals. That’s why I tried to use it a bit. Here is my short manual that extends an &lt;a href="http://docs.ckan.org/en/latest/contributing/test.html"&gt;official one&lt;/a&gt; how to run functional and unit tests.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remote console via SSH with own bashrc</title>
      <link>https://blog.e0ne.info/post/remote-console-via-ssh-with-own-bashrc/</link>
      <pubDate>Wed, 09 Aug 2017 22:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/remote-console-via-ssh-with-own-bashrc/</guid>
      <description>&lt;p&gt;I think, most of us have customized bash or zsh environment. I&amp;rsquo;m too lazy to switch from bash to zsh, so I use bash on my laptop. There are some benefits: bash is still the more popular shell, so it exists on mostly Linux-based servers.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why I try to use my &lt;a href="https://github.com/e0ne/dot-files/blob/master/.bashrc"&gt;&lt;code&gt;.bashrc&lt;/code&gt;&lt;/a&gt; wherever it&amp;rsquo;s possible. But on a remote server, sometimes you don&amp;rsquo;t have the own user account. That&amp;rsquo;s why I&amp;rsquo;ve added a very simple alias for &lt;code&gt;ssh&lt;/code&gt; command to mine &lt;code&gt;[.bashrc&lt;/code&gt;](&lt;a href="https://github.com/e0ne/dot-files/blob/master/.bashrc#L51"&gt;https://github.com/e0ne/dot-files/blob/master/.bashrc#L51&lt;/a&gt;) file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>This test is too slow</title>
      <link>https://blog.e0ne.info/post/this-test-is-too-slow/</link>
      <pubDate>Fri, 28 Jul 2017 13:48:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/this-test-is-too-slow/</guid>
      <description>&lt;p&gt;Sometimes we need to understand why unit-test is so slow. Sometimes I’m to lazy to go deep to understand why.&lt;/p&gt;
&lt;p&gt;That’s why I’ve created a very simple profiled class to make unit-tests profiling fast and simple. I used only cProfile, so it will work on any Python project. It’s so simple, so I can’t talk about it more. You can install it via ‘pip install ProfiledTest’ and use it like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using OpenStack Cinder with LIO target</title>
      <link>https://blog.e0ne.info/post/using-openstack-cinder-with-lio-target/</link>
      <pubDate>Thu, 23 Feb 2017 19:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/using-openstack-cinder-with-lio-target/</guid>
      <description>&lt;p&gt;What is &lt;strong&gt;LIO target&lt;/strong&gt;? Linux-OI Target is a Linux SCSI target introduced in a kernel v.2.6.38 and supports different fabrics modules like &lt;strong&gt;FibreChannel, iSCSI, iSER&lt;/strong&gt;, etc. It works in a kernel space, so it’s faster than tgtd which is used in Cinder by default. Why do we still use &lt;strong&gt;tgtd&lt;/strong&gt; instead of more faster LIO in Cinder by default? It’s only because we have to support rolling upgrades and we don’t know how to migrate from TGTd to LIO in a such way and pass Grenade successfully.&lt;/p&gt;</description>
    </item>
    <item>
      <title>iTerm2 - The Best Terminal App</title>
      <link>https://blog.e0ne.info/post/iterm2-the-best-terminal-app/</link>
      <pubDate>Mon, 15 Aug 2016 22:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/iterm2-the-best-terminal-app/</guid>
      <description>&lt;p&gt;I don’t like to post reviews. But this app is amazing! I use it more than 3 years and just want to share with you a list of my favorite features:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Split Panes - I started use iTerm2 because of it. Just press Cmd+d to split current panel. Cmd+Alt+Arrow to move between the panels&lt;/li&gt;
&lt;li&gt;Search - Cmd+f to search throm commands and their output it work for the all session history&lt;/li&gt;
&lt;li&gt;Inline images - seriously,  you can view images in your terminal. You need just to download ‘imgcat’ script and enjoy it&lt;/li&gt;
&lt;li&gt;Download file from remote host - no need to use scp more, just ‘it2dl filename’ and it will download a file to ~/Downloads directory&lt;/li&gt;
&lt;li&gt;Open list of most popular directories - Cmd+Alt+/ and select what you need. It’s real fast and useful&lt;/li&gt;
&lt;li&gt;Restore the last session - no comments are needed here&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P.S. Don’t forget to enable ‘Show Tip of the Day’ feature to enjoy more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Attach Cinder Volume to the Ironic Instance without Nova</title>
      <link>https://blog.e0ne.info/post/attach-cinder-volume-to-the-ironic-instance-without-nova/</link>
      <pubDate>Wed, 13 Jan 2016 21:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/attach-cinder-volume-to-the-ironic-instance-without-nova/</guid>
      <description>&lt;p&gt;OpenStack Cinder provides an API to attach/detach volume to Nova instances. This is public, but not documented API which is used only by Nova now.  In scope of “Attach/detach volumes without Nova” [1] blueprint we introduce new python-cinderclient extension to provide attach/detach API not only for Nova called python-brick-cinderclient-ext. Before Mitaka release everybody who want to use Cinder volumes not only with Nova instances have to create hardening scripts based on python-cinderclient and os-brick [3] projects to make it done.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A very short manual named How to run OpenStack Horizon integration tests or How to run Selenuim tests without GUI</title>
      <link>https://blog.e0ne.info/post/a-very-short-manual-named-how-to-run-openstack-horizon-integration-tests-or-how-to-run-selenuim-tests-without-gui/</link>
      <pubDate>Thu, 03 Sep 2015 23:36:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/a-very-short-manual-named-how-to-run-openstack-horizon-integration-tests-or-how-to-run-selenuim-tests-without-gui/</guid>
      <description>&lt;p&gt;Didn&amp;rsquo;t google &amp;ldquo;how to run horizon integration tests&amp;rdquo; unswer in 10 seconds. Making note how to do it.&lt;/p&gt;
&lt;p&gt;My development environment usually looks like: macbook + VM with Ubuntu Server or CentOS without GUI. I try to run all tests inside VMs. In case of Selenium tests, I need some preparation for it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**$ sudo apt-get install firefox&lt;!-- raw HTML omitted --&gt;**this command will install FireFox. Selenium has WebDriver for it out of the box&lt;/li&gt;
&lt;li&gt;**$ sudo apt-get install xvfb&lt;!-- raw HTML omitted --&gt;**install Virtual Frame Buffer for X Server (&lt;a href="https://en.wikipedia.org/wiki/Xvfb"&gt;https://en.wikipedia.org/wiki/Xvfb&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/"&gt;http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.openstack.org/developer/horizon/ref/run_tests.html#i-just-want-to-run-the-tests"&gt;http://docs.openstack.org/developer/horizon/ref/run_tests.html#i-just-want-to-run-the-tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>How to exdend your VM's drive size in 8 steps</title>
      <link>https://blog.e0ne.info/post/how-to-exdend-your-vms-drive-size-in-8-steps/</link>
      <pubDate>Mon, 31 Aug 2015 22:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/how-to-exdend-your-vms-drive-size-in-8-steps/</guid>
      <description>&lt;p&gt;&lt;strong&gt;It’s my first try to blog in English. Feel free to comment for any typo, grammar errors, etc.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are nothing new, nothing innovative below. There are just a step-by-step guide to not forget and to not google each time when I need it.&lt;/p&gt;
&lt;p&gt;Usually, on my dev environment, I’ve got KVM instances with disk images in QCOW format. So time to time I need to extend my virtual disks to get more free space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пятничное: рабочий день программиста</title>
      <link>https://blog.e0ne.info/post/developers-working-day/</link>
      <pubDate>Fri, 31 Jul 2015 14:46:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/developers-working-day/</guid>
      <description>&lt;p&gt;Все нижесказанное является выдумкой автора. Все совпадения с действительностью являются абсолютно случайными. И, как говортся: в каждой шутке есть доля шутки.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;11:00. Пришел на работу. Нужно сделать кофе.&lt;/p&gt;
&lt;p&gt;11:10. Хорошо, теперь можно пописать код.&lt;/p&gt;
&lt;p&gt;11:11. Что за [IMPORTANT] письмо такое свалилось?&lt;/p&gt;
&lt;p&gt;12:30. Разгреб почту, ответил начальству, поддержке и коллегам. Можно писать код.&lt;/p&gt;
&lt;p&gt;12:45. Синк-ап.&lt;/p&gt;
&lt;p&gt;13:00. Нужно написать недельный репорт чем занимался.&lt;/p&gt;
&lt;p&gt;13:30. Обед - не сегодня, лучше попишу код.&lt;/p&gt;
&lt;p&gt;13:35. Опять тесты на CI завалились.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://blog.e0ne.info/about-me/</link>
      <pubDate>Wed, 09 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://blog.e0ne.info/about-me/</guid>
      <description>&lt;p&gt;Всем привет. Меня зовут Колодяжный Иван и я автор этого блога. Если верить моему резюме :), то я уже более как 4 года работаю разработчиком, в осномном, web. Что-то о себе ещё нужно будет написать, выложить фото, а пока о моём нике - e0ne.&lt;/p&gt;
&lt;p&gt;Нику уже более 5-ти лет, т.ч. нолик в нём появился, наверное, в большей части из-за того, что так приколько и более уникальни и, в меншьшей, что в те времена в сети было модным использовать всякие символы на замену букв.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://blog.e0ne.info/contact/</link>
      <pubDate>Wed, 09 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://blog.e0ne.info/contact/</guid>
      <description>&lt;p&gt;Location: Kharkiv, Ukraine&lt;/p&gt;
&lt;p&gt;Phones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;+380-91-9050629&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Website:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://notacash.com/"&gt;http://notacash.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kharkivpy.org.ua/"&gt;http://kharkivpy.org.ua/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E-Mail: &lt;a href="mailto:e0ne@e0ne.info"&gt;e0ne@e0ne.info&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resume</title>
      <link>https://blog.e0ne.info/resume/</link>
      <pubDate>Wed, 09 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://blog.e0ne.info/resume/</guid>
      <description>&lt;p&gt;Please, read my resume at LinkedIn: &lt;a href="http://ua.linkedin.com/in/ivankolodyazhny"&gt;http://ua.linkedin.com/in/ivankolodyazhny&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>SQLAlchemy и значения по умолчанию</title>
      <link>https://blog.e0ne.info/post/sqlalchemy-and-default-values/</link>
      <pubDate>Sun, 23 Feb 2014 23:55:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/sqlalchemy-and-default-values/</guid>
      <description>&lt;p&gt;Проблема пришла от туда, от куда не ждали. А именно от таких 5-ти строчек кода:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;class CustomModel(Base):&lt;!-- raw HTML omitted --&gt;    &lt;strong&gt;tablename&lt;/strong&gt; = &amp;lsquo;custom_model&amp;rsquo;&lt;!-- raw HTML omitted --&gt;    id = Column(Integer,)&lt;!-- raw HTML omitted --&gt;    name = Unicode(100)&lt;!-- raw HTML omitted --&gt;    datetime = Column(DateTime, default=datetime.now())&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Когда-то давно я или неправильно понял доку, недочитал или прочитал не то, но был уверен в том, что этот код “компилируется” в примерно такой SQL (код приведен только в целях примера и может не работать:) ):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Enterprise vs OpenSource на примере Travis CI</title>
      <link>https://blog.e0ne.info/post/enterprise-vs-opensource-and-travis-ci-as-example/</link>
      <pubDate>Thu, 16 Jan 2014 17:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/enterprise-vs-opensource-and-travis-ci-as-example/</guid>
      <description>&lt;p&gt;Выбор версии языка программирования, фреймворка - сложный вопрос, который всегда бурно обсуждался и будет обсуждаться. В enterprise мире часто, но не всегда, используют старые и проверенные инструменты. В то время как Python 2.7 все еще нет из коробки в RedHat/CentOS/др дистрибутивах, в некоторых уже используется Python 3.3, пусть и не в качестве системного. В мире opensource - наоборот, часто используют только самое-самое новое. Но это правило не относится к разным фреймворкам. Представьте, что завтра, например, Django будет поддерживать только Python 3.4, который еще не зарелизился. Никто им пользоваться не будет. Вот и приходится поддерживать несколько версия языка программирования. Похожая ситуация с paramiko, nose и другими популярными проектами/инструментами/библиотеками.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Снова о типах данных в Python: объекты, значения и типы (object, values and types)</title>
      <link>https://blog.e0ne.info/post/again-about-data-types-in-python-object-values-and-types/</link>
      <pubDate>Fri, 10 Jan 2014 23:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/again-about-data-types-in-python-object-values-and-types/</guid>
      <description>&lt;p&gt;Если коротко, то типы в Python делятся либо на встроенные и пользовательские, либо на mutable и immutable (сразу так и не подобрал подходящего перевода на русский язык). Ну а если немного подробнее, то как-то так:&lt;/p&gt;
&lt;p&gt;Рассмотрим простой пример кода (здесь и далее примеры кода будут писаться и выполняться в ipython’е):&lt;/p&gt;
&lt;p&gt;In [1]: a =** 1000&lt;!-- raw HTML omitted --&gt;In [2]: a&lt;!-- raw HTML omitted --&gt;Out[2]: 1000&lt;!-- raw HTML omitted --&gt;In [3]: type(a)&lt;!-- raw HTML omitted --&gt;Out[3]: int**&lt;/p&gt;</description>
    </item>
    <item>
      <title>О времени и выборе инструментов для разработки</title>
      <link>https://blog.e0ne.info/post/about-time-and-devtools-selection/</link>
      <pubDate>Thu, 09 Jan 2014 19:22:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/about-time-and-devtools-selection/</guid>
      <description>&lt;p&gt;Безусловно, выбор языка программироания, текстового редактора, IDE, операционной системы и многого другого лежит на плечах каждого отдельно взятого разработчика. Даже если он работает в команде.&lt;/p&gt;
&lt;p&gt;По сути, всем все-равно в какой IDE пишете код, если он работает так, как надо и написан вовремя. Унификация средст разработки внутри компании/команды лишь облегчает жизть менеджерам, ИТ, новым членам команды и упрощает коммуникацию между разработчиками. Ведь на много легче один раз написать инструкцию по установки всего нужного для запуска проекта ПО, например, для Ubuntu 13.10 x64 и запуск проекта в PyCharm, чем каждый раз сталкиваться с проблемой как запустить X в окружении Y.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сборка mod_security для nginx под Ubuntu</title>
      <link>https://blog.e0ne.info/post/compile-mod_security-for-nginx-and-ubuntu/</link>
      <pubDate>Wed, 08 Jan 2014 22:02:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/compile-mod_security-for-nginx-and-ubuntu/</guid>
      <description>&lt;p&gt;Всегда недолюбливал Apache из-за формата его конфига. Конфиг Nginx’а мне вседа было порще читать и писать. Да и статику им раздавать хорошо и быстро, поэтому от Apache я, по возможности, отказываюсь. Но частая проблема с nginx в том, что приходится собирать необходимые модули из исходников самому, со всемы вытикаюющими плюсами и минусами. И, как полагается любому популярному и быстро развивающемуся проекту, документация по сборке этих самих модулей не всегда полная и актуальная.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мысли в слух о новых технологиях, фреймворках и time to market</title>
      <link>https://blog.e0ne.info/post/thoughts-about-new-frameworks-thechnologies-and-time-to-market/</link>
      <pubDate>Thu, 26 Dec 2013 22:48:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/thoughts-about-new-frameworks-thechnologies-and-time-to-market/</guid>
      <description>&lt;p&gt;Как всегда, в рубрике “мысли в слух” звучит только исключительно мнение автора и может не соответствовать действительности.&lt;/p&gt;
&lt;p&gt;Безусловно, всем, ну ладно, почти всем, хочется писать только на самых последний версиях фреймворков, использовать самые новые технологии и навсегда забыть о так называемом legacy code. Но мало кто из разработчиков думает о том, когда и зачем это нужно, а когда - невозможно. Разберем пример выбора фреймворка Х на примере нескольких случаев.&lt;/p&gt;
&lt;p&gt;Случай #1. Работает - не трожь!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Selenium Webdriver работает без Java</title>
      <link>https://blog.e0ne.info/post/selenium-webdriver-works-without-java/</link>
      <pubDate>Fri, 22 Nov 2013 15:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/selenium-webdriver-works-without-java/</guid>
      <description>&lt;p&gt;Вот так неожиданно для себя узнал что Selenium Webdriver работает без Java. До этого всегда был уверен, что такого не может быть. Возможно, это произошло с релизом Selenium 2, возможно нет. Но мой мир уже не будет таким как прежде. &lt;/p&gt;
&lt;p&gt;Не поверил, пока сам не убедился в этом. Пришлось ставить виртуалку без Java и проверять следующий код:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Build succeeded, 156 warnings</title>
      <link>https://blog.e0ne.info/post/build-succeeded-156-warnings/</link>
      <pubDate>Mon, 18 Nov 2013 22:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/build-succeeded-156-warnings/</guid>
      <description>&lt;p&gt;Запустил “make build” и получил 156 ворнингов:(&amp;hellip; Хотя, достаточно быстро получил более радужное число - 69, что тоже не мало. Нужно фиксить дальше, а пока - немного очень IMHO на эту тему.&lt;/p&gt;
&lt;p&gt;Отключать или нет параметр “mark warnings as errors” (название может отличаться, но суть остается той же) - часто решают для конкретного проекта и/или команды. Иногда это не мешает работы продукта. Я бы сказал что в 98% случаев это не мешает, зато остаются 2%. И баги, попавшие в те самые 2%, часто являются самыми трудновоспроизводимимы и затратными по времени на исправления.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Параллельные билды в Jenkins</title>
      <link>https://blog.e0ne.info/post/concurrent-builds-in-jenkins/</link>
      <pubDate>Fri, 15 Nov 2013 14:16:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/concurrent-builds-in-jenkins/</guid>
      <description>&lt;p&gt;Разберем ситуацию, ставшую достаточно распространенной в наше время. Есть распределенная команда, допустим в двух городах (А и Б), которая работает над одним крупным проектом. Сборка проекта происходит на Jenkins’е в городе А и длится, например 3 минут. Скачать готовый продукт из города А в город Б можно в среднем за 30 минут (в зависимости от времени суток, загрузки канала, фазы луны и т.д.). Итого: команде из города Б нужно ждать час(60 минут) чтобы запустить/протестировать свежий билд. Очевидно, это достаточно много. Нужно ускорять.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как быстро поднять простой HTTP-сервер</title>
      <link>https://blog.e0ne.info/post/how-to-quickly-setup-simple-http-server/</link>
      <pubDate>Tue, 08 Oct 2013 23:54:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/how-to-quickly-setup-simple-http-server/</guid>
      <description>&lt;p&gt;Скорее заметка для себя. Постоянно забываю об этом ключе.&lt;/p&gt;
&lt;p&gt;Иногда нужно &lt;strong&gt;очень&lt;/strong&gt; быстро поднять HTTP-сервер с минимальным функционалом. Например, нужно проверить HTML+JavaScript, который работает только через веб-сервер. Я, конечно понимаю, что у меня под рукой всегда есть, как минимум nginx, и поднять на нем сайт, который будет раздавать статические фалы, делов на 5-10 минут. Но, во-первых, это долго, а во-вторых, этот самый nginx у меня находится на виртуалке, пусть и включенной в 90% времени на ноутбуке. А тут прийдется не только веб-сервер настроить, но и расшаренные папки в VirtualBox-е, и так далее&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Подводные камни при использовании Fabric(SSH) и Jenkins</title>
      <link>https://blog.e0ne.info/post/problems-with-using-fabric-ssh-and-jenkins/</link>
      <pubDate>Mon, 16 Sep 2013 23:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/problems-with-using-fabric-ssh-and-jenkins/</guid>
      <description>&lt;p&gt;Или мне так не везет, или для всех это совершенно очевидные вещи, но я, при выполнении простой fabric task&amp;rsquo;и копирования содержимого директорий, столкнулся на ряд проблем, которые хоть и казались простыми и распростаренными, но были описаны в найденных мной блогах и мануалах в плной мере.&lt;/p&gt;
&lt;h2 id="проблема-1---неправильный-пользователь"&gt;Проблема #1 - неправильный пользователь&lt;/h2&gt;
&lt;p&gt;Не всегда бывает что имя локального пользователя совпадает с удаленным. Ситуация распространенная и описанная всеми, кому не лень. Решение простое - указывем нужного пользователя в переменной env.user:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Настройка PHP+Nginx для 'Hello, world'</title>
      <link>https://blog.e0ne.info/post/setup-php-nginx-for-hello-world/</link>
      <pubDate>Fri, 06 Sep 2013 23:52:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/setup-php-nginx-for-hello-world/</guid>
      <description>&lt;p&gt;Иногда приходится делать удивительные и неожиданные для себя вещи. Например, писать что-то на PHP. Но написать мало - надо еще проверить что написанный код работает. В моем случае приложение было немного сложнее классического &amp;ldquo;hello, world&amp;rdquo;, но все-равно требовалось проверить его работоспособность.&lt;/p&gt;
&lt;p&gt;Т.к. это всего-лишь тестовая версия/PoC или что-то такое, интересовала самая простая схема его запуска. Apache не виртуалке c Ubuntu не стоял, под руку попал Nginx. Далее все происходило так:&lt;/p&gt;</description>
    </item>
    <item>
      <title>MacOS Case-Sensitive FIle System</title>
      <link>https://blog.e0ne.info/post/macos-case-sensitive-file-system/</link>
      <pubDate>Sun, 13 Jan 2013 23:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/macos-case-sensitive-file-system/</guid>
      <description>&lt;p&gt;Какое-то время назад, для меня было удивительно, что в Mac OS X, в отличии от Linux, стоит Case-Insensitive файловая система. Т.е. файловая система не чувствительная к регистру файлов и директорий. В большинстве случаев, это не причиняет вреда, но иногда приносит достаточно досадные проблемы. Что бы избавиться от этого можно либо создать раздел с Case-Sensitive файловой системой, либо создать временный (или не очень) виртуальный диск. Плюс второго способа в том, что этот диск будет храниться одним файлом и, при необходимости, если легко будет удалить.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Типы проектов со стороны разработчика</title>
      <link>https://blog.e0ne.info/post/project-types-from-developer-side/</link>
      <pubDate>Sat, 12 Jan 2013 23:52:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/project-types-from-developer-side/</guid>
      <description>&lt;p&gt;Суббота, вечер, пишу очень IMHO. Мнение атора может не совпадать с мнениями других и действительностью.&lt;/p&gt;
&lt;p&gt;С моей точки зрения, как разработчика проекты делятся на:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>TestFixtures - маленькая, но очень полезная библиотека</title>
      <link>https://blog.e0ne.info/post/testfixtures-a-small-but-very-useful-lib/</link>
      <pubDate>Fri, 11 Jan 2013 23:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/testfixtures-a-small-but-very-useful-lib/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Давно решил не писать отзывы к библиотекам/фреймворкам, но эта поражает меня уже второй раз так, что в твиттере не помещается вся мысль.&lt;/p&gt;
&lt;p&gt;TestFixtures (&lt;a href="http://packages.python.org/testfixtures/"&gt;http://packages.python.org/testfixtures/&lt;/a&gt;) - приятное дополнение, а в некоторых случаях, и замена Mock.&lt;/p&gt;
&lt;p&gt;То, что она умеет делать mock’и объектов - этим никого не удивишь. Вся прелесть TestFixtures в том, что в ней уже из коробки доступны те самые вещи, которые часто приходится писать самому, тем самым изобретать свой велосипед:(.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Немного о внутренностях DNS (Domain Name Service)</title>
      <link>https://blog.e0ne.info/post/few-words-about-dns-domain-name-service-inside/</link>
      <pubDate>Thu, 10 Jan 2013 23:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/few-words-about-dns-domain-name-service-inside/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Проводя небольшой рефакторинг кода, свазаного с работой DNS, решил больше узнать о нем и поделиться со всеми полезной (или не очень) информацией.&lt;/p&gt;
&lt;p&gt;DNS (Domain Name Service) - служба доменных имен. С ним (DNS) все сталкивались, но далеко не все знают как он работает и что может. В простейшем случае - это сервис, который переводит доменное имя в IP адрес, а вот что у него внутри - читайте ниже.&lt;/p&gt;
&lt;p&gt;Как и большинство протоколов, DNS имеет свою спецификацию, описанную в &lt;a href="http://www.ietf.org/rfc/rfc1035.txt"&gt;RFC 1035&lt;/a&gt; и RFC &lt;a href="http://tools.ietf.org/html/rfc1706"&gt;1706&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django 1.5 Release Candidate</title>
      <link>https://blog.e0ne.info/post/django-15-release-candidate/</link>
      <pubDate>Wed, 09 Jan 2013 23:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/django-15-release-candidate/</guid>
      <description>&lt;p&gt;4 января вышел релиз кандидат fullstack-фрейморка для разработки веб-приложения Django. Обзоры, наверено, не писали/читали только ленивые. Но пишут, в основном, про мажорные фичи, из-за которых и выпускают релиз. Я перевел свой небольшой прототипчик одного приложения на Django 1.5 RC и поюзал некоторые минорные нововведения, о которых пишут мало, но которые почти делают каждый релиз тем, из-за чего часто хочется использовать именно его. Из того, что мне понравилось - это:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.djangoproject.com/weblog/2013/jan/04/15-rc-1/"&gt;https://www.djangoproject.com/weblog/2013/jan/04/15-rc-1/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.djangoproject.com/en/dev/releases/1.5/"&gt;https://docs.djangoproject.com/en/dev/releases/1.5/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Больше велописедов, хороших и разных</title>
      <link>https://blog.e0ne.info/post/do-it-again/</link>
      <pubDate>Tue, 08 Jan 2013 23:02:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/do-it-again/</guid>
      <description>&lt;p&gt;Читая серию заметок Кости Данилова &amp;ldquo;&lt;a href="http://koder-ua.blogspot.com/2012/01/libvirt-co-3.html"&gt;Облака &amp;lsquo;на коленке&amp;rsquo;&lt;/a&gt;&amp;rdquo; подумалось: велосипеды - это хорошо. Но, что б это было хорошо, они должны соответствовать таким требованиям (1 или более):&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;ul&gt;
&lt;li&gt;разрабочик чего-то не знает&lt;!-- raw HTML omitted --&gt;или&lt;/li&gt;
&lt;li&gt;разработчик думает, что занет все :).&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>GIT: некоторые полезные команды</title>
      <link>https://blog.e0ne.info/post/git-some-useful-commands/</link>
      <pubDate>Mon, 07 Jan 2013 23:32:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/git-some-useful-commands/</guid>
      <description>&lt;p&gt;NOTE: English translation is &lt;a href="https://blog.e0ne.info/post/some-useful-git-commands-en/"&gt;here&lt;/a&gt;.
 &lt;/p&gt;
&lt;p&gt;Надоело постоянно гуглить одно и то же, решил записать в отдельную заметку.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Установить значения username/email:&lt;!-- raw HTML omitted --&gt;&lt;strong&gt;$ git config &amp;ndash;global user.email &amp;ldquo;&lt;a href="mailto:e0ne@e0ne.info"&gt;e0ne@e0ne.info&lt;/a&gt;&amp;rdquo;&lt;!-- raw HTML omitted --&gt;$ git config &amp;ndash;global user.name &amp;ldquo;e0ne&amp;rdquo;&lt;!-- raw HTML omitted --&gt;&lt;/strong&gt;&lt;!-- raw HTML omitted --&gt;через .gitconfig это делать не всегда удобно, т.к. иногда нужно разные name/email для разных upstream repos&lt;/li&gt;
&lt;li&gt;Установить upstream branch:&lt;!-- raw HTML omitted --&gt;$ git branch &amp;ndash;set-upstream master upstream/master&lt;/li&gt;
&lt;li&gt;Поменять последний коммит:&lt;!-- raw HTML omitted --&gt;$ git commit &amp;ndash;amend -a&lt;/li&gt;
&lt;li&gt;Поменять автора нескольких коммитов:&lt;!-- raw HTML omitted --&gt;$ git filter-branch &amp;ndash;commit-filter &amp;lsquo;&lt;!-- raw HTML omitted --&gt;        if [ &amp;ldquo;$GIT_COMMITTER_NAME&amp;rdquo; = &amp;ldquo;&lt;!-- raw HTML omitted --&gt;&amp;rdquo; ];&lt;!-- raw HTML omitted --&gt;        then&lt;!-- raw HTML omitted --&gt;                GIT_COMMITTER_NAME=&amp;quot;&lt;!-- raw HTML omitted --&gt;&amp;quot;;&lt;!-- raw HTML omitted --&gt;                GIT_AUTHOR_NAME=&amp;quot;&lt;!-- raw HTML omitted --&gt;&amp;quot;;&lt;!-- raw HTML omitted --&gt;                GIT_COMMITTER_EMAIL=&amp;quot;&lt;!-- raw HTML omitted --&gt;&amp;quot;;&lt;!-- raw HTML omitted --&gt;                GIT_AUTHOR_EMAIL=&amp;quot;&lt;!-- raw HTML omitted --&gt;&amp;quot;;&lt;!-- raw HTML omitted --&gt;                git commit-tree &amp;ldquo;$@&amp;rdquo;;&lt;!-- raw HTML omitted --&gt;        else&lt;!-- raw HTML omitted --&gt;                git commit-tree &amp;ldquo;$@&amp;rdquo;;&lt;!-- raw HTML omitted --&gt;        fi&amp;rsquo; HEAD&lt;!-- raw HTML omitted --&gt;$ git push&lt;/li&gt;
&lt;li&gt;После мерджа пометить конфиликт как resolved:&lt;!-- raw HTML omitted --&gt;$ git add file&lt;/li&gt;
&lt;li&gt;Откатить локальные коммиты:&lt;!-- raw HTML omitted --&gt;reset &amp;ndash;soft HEAD^&lt;/li&gt;
&lt;li&gt;Переместить тег на другой коммит:&lt;!-- raw HTML omitted --&gt;$ git tag -d ver_0.1&lt;!-- raw HTML omitted --&gt;$ git push origin :refs/tags/ver_0.1&lt;/li&gt;
&lt;li&gt;Лучший мануал по git’у:&lt;!-- raw HTML omitted --&gt;&lt;a href="http://git-scm.com/book"&gt;http://git-scm.com/book&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Мой .gitconfig лежит тут: &lt;a href="https://github.com/e0ne/dot-files/blob/master/.gitconfig"&gt;https://github.com/e0ne/dot-files/blob/master/.gitconfig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Мой .gitignore лежит тут: &lt;a href="https://github.com/e0ne/dot-files/blob/master/.gitignore"&gt;https://github.com/e0ne/dot-files/blob/master/.gitignore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cоздаем branch из tag&amp;rsquo;а: &lt;a href="http://blog.e0ne.info/post/Git-create-branch-from-tag.aspx"&gt;http://blog.e0ne.info/post/Git-create-branch-from-tag.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Мерджим апдейты с другого репозитория: &lt;a href="http://korenkov.info/fetching-updates-from-another-git-repo"&gt;http://korenkov.info/fetching-updates-from-another-git-repo&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;[Updated 26.04.13]&lt;/li&gt;
&lt;li&gt;Обновить исходники, затирая локальные изменения:&lt;!-- raw HTML omitted --&gt;$ git fetch &amp;ndash;all&lt;!-- raw HTML omitted --&gt;$ git reset &amp;ndash;hard origin/master&lt;/li&gt;
&lt;li&gt;Удалить все недобавленные в репозиторий файлы и директории:&lt;!-- raw HTML omitted --&gt;$ git clean -f -d&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>Network namespace - виртуальный сетевой стек в linux</title>
      <link>https://blog.e0ne.info/post/network-namespace-virtual-network-stack-in-linux/</link>
      <pubDate>Sun, 06 Jan 2013 22:53:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/network-namespace-virtual-network-stack-in-linux/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Почему-то, информации на тему “что такое network namespace” я практически не нашел, что в очередной раз доказыват: английский - основной язык для ИТ.&lt;/p&gt;
&lt;p&gt;Network namespace - это логически отделенный от других стек сетевых протоколов в Linux. Такая себе контейнерная виртуализация для сетевых интервейсов, когда chroot LXC и нужна виртуализация только сетевых интерфейсов. Эмулируется полностью сетевой стек: сетевые интерфейсы, таблица маршрутизации, файрволл и т.д. Так, как это работает на уровне ядра и для определенных процессов, то вполне можно получить рабочую конфигурации, когда на одной машине есть несколько сетевых интерфейсов с одинаковыми IP-адресами и ничто не конфликтует. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Статический анализ динамического кода: мысли вслух</title>
      <link>https://blog.e0ne.info/post/static-analysis-of-dynamic-code-thinking-out-loud/</link>
      <pubDate>Sat, 05 Jan 2013 22:52:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/static-analysis-of-dynamic-code-thinking-out-loud/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;&lt;strong&gt;from quantum.openstack.common import cfg&lt;!-- raw HTML omitted --&gt;&amp;hellip;&lt;!-- raw HTML omitted --&gt;from quantum.plugins.openvswitch.common import config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;И pylint “ругался” на 2-й импорт, который нигде больше не использовался. Но если посмотреть на код этого модуля (&lt;a href="https://github.com/openstack/quantum/blob/master/quantum/plugins/openvswitch/common/config.py"&gt;https://github.com/openstack/quantum/blob/master/quantum/plugins/openvswitch/common/config.py&lt;/a&gt;) и вспомнить как работает механизм импорта в Python’е, то становится ясно, какие проблемы могут быть: при загрузке модуля config, он устанавливает значения по умолчанию настроек. А так, как со всемы настройками принято работать через общий интерфейс cfg, и не импортировать можуль config, то, с большой вероятностью, где-то в runtime у нас произойдет исключение. &lt;/p&gt;</description>
    </item>
    <item>
      <title>KharkivPy ищет докладчиков</title>
      <link>https://blog.e0ne.info/post/kharkivpy-looking-for-speakers/</link>
      <pubDate>Fri, 04 Jan 2013 16:33:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/kharkivpy-looking-for-speakers/</guid>
      <description>&lt;p&gt;В этор раз идет подготовка сразу к двум &lt;a href="http://kharkivpy.org.ua/"&gt;KhakrivPy&lt;/a&gt;, соответственно докладчиков нужно найти больше.&lt;/p&gt;
&lt;p&gt;26-го января пройдет KharkivPy #0, посвященный функциональным языкам программирования (Erlang, Lisp, Haskel, Scala, etc). На данный момент к нам в гости с докладом согласился приехать из Киева Владимир Кирилов (&lt;a href="http://kirillov.im/"&gt;http://kirillov.im/&lt;/a&gt;, &lt;a href="http://twitter.com/darkproger"&gt;@darkproger&lt;/a&gt;) с докладом про Erlang, тема уточняется.&lt;/p&gt;
&lt;p&gt;Ищем докладчиков, которые расскажут что-то интересное о других языках и/или про Erlang. Опыт в продкашн приветствуется.&lt;/p&gt;
&lt;p&gt;2-го марта традиционный KharkivPy #7, на который тоже ищутся докладчики.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Установка Open vSwitch на RHEL/CentOS 6.3 в 10 шагов</title>
      <link>https://blog.e0ne.info/post/install-open-vswitch-on-rhel-and-centos-63-in-10-steps/</link>
      <pubDate>Thu, 20 Dec 2012 23:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/install-open-vswitch-on-rhel-and-centos-63-in-10-steps/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Open vSwitch (&lt;a href="http://openvswitch.org/"&gt;http://openvswitch.org/&lt;/a&gt;) - это виртуальный свитч, котороый позволяет вам строить виртуальную сеть (SDN) поддерживает различные протоколы для мониторнига и управления (NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag и др). Приставка “open” означает что он является opensource продуктом со всеми вытекающими плюсами и минусами.  На просторах интернета найти документацию по нему и руководства по установки не проблема, если вы знаете английский язык. На русском практически ничего нет:(. Далее я расскажу процесс установки его с исходников на Red Hat Enterprise Linux 6.3 (RHEL) и основанной на базе него бесплатной CentOS 6.3 с ядром 2.6.32-279.el6.x86_64. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Lettuce и Python3</title>
      <link>https://blog.e0ne.info/post/lettuce-and-python3/</link>
      <pubDate>Mon, 03 Dec 2012 23:43:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/lettuce-and-python3/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Решил я для своих маленьких и уютных домашних проектов (pet project&amp;rsquo;ов) использовать Python 3.3. Казалось бы, ничто не предвещало беды. Ну кроме как отсутстие поддержки Python 3.x у некоторых библиотек. В частности, Lettuce(&lt;a href="http://lettuce.it/"&gt;http://lettuce.it/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Но так, как я уже выбрал не самый простой, на данный момент, путь (да, я про python3), то отступать было не куда, решил портировать Lettuce под Python 3.3. Возможно, свою роль в этом сыграли еще свежие воспоминания о UA Pycon 2012, в частности, доклад Михаила Коробова “Как всем перейти на Python 3.x” (&lt;a href="http://ua.pycon.org/talks/26"&gt;http://ua.pycon.org/talks/26&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Краткой описание сетевых интерфейсов в Linux</title>
      <link>https://blog.e0ne.info/post/short-description-of-linux-network-interfaces/</link>
      <pubDate>Thu, 29 Nov 2012 18:43:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/short-description-of-linux-network-interfaces/</guid>
      <description>&lt;p&gt;Посмотрим какие сетевые интерфейсы бывают и какие есть на конкретном хоте. Делается это командой “ifconfig” или “ip link show”. У каждого тут будет разный список, в моем случае, команда “ip link show” выводит следующее:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Рассмотрим подробнее типы интерфейсов:&lt;/p&gt;
&lt;p&gt;lo - local loopback interface, виртуальный интерфейс, который присутствует в ядре, отвечает на адрес 127.0.0.1. Весь пакеты, отправленные на него будут автоматически отправлены обратно на тот же интерфес(адрес), с какого отправили.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Избавляемся от ошибки ValueError: unknown locale</title>
      <link>https://blog.e0ne.info/post/fix-valueerror-unknown-locale/</link>
      <pubDate>Mon, 08 Oct 2012 22:04:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/fix-valueerror-unknown-locale/</guid>
      <description>&lt;p&gt;Переодически сталкиваюсь с этой проблемой и приходится гуглить. Решил, записать, что бы проще искать.&lt;/p&gt;
&lt;p&gt;Собственно, проблема выглядит так:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;File &amp;ldquo;/&lt;strong&gt;home/e0ne/src/project/.venv&lt;/strong&gt;/ap&lt;strong&gt;p/lib/python2.7/locale.py&amp;rdquo;, line 496, in getdefaultlocale&lt;!-- raw HTML omitted --&gt;return _parse_localename(localename)&lt;!-- raw HTML omitted --&gt;File &amp;ldquo;/home/e0ne/src/project/.venv/app/lib/python2.7/locale.py&amp;rdquo;, line 428, in _parse_localename&lt;!-- raw HTML omitted --&gt;raise ValueError, &amp;lsquo;unknown locale: %s&amp;rsquo; % localename&lt;!-- raw HTML omitted --&gt;ValueError: unknown locale: UTF-8&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Проблема заключается в том, что для текущего сеанса шелла(bash, etc) не настроена системная локаль. Ошибка позникала как под Linux(Ubuntu, RHEL-based), так под Mac OS. Фиксится просто:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Private Clouds: что? где? зачем?</title>
      <link>https://blog.e0ne.info/post/private-clouds-what-where-why/</link>
      <pubDate>Tue, 02 Oct 2012 12:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/private-clouds-what-where-why/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Так как в последнее время я часто слышу вопросы вида “зачем нужны частные облака и что это такое?”, то решил написать этот пост, на который смогу ссылаться.&lt;/p&gt;
&lt;p&gt;Итак, вначеле уже традиционное определение из Wikipedia:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Частное облако&lt;/strong&gt; (англ. private cloud) — инфраструктура, предназначенная для использования одной организацией, включающей несколько потребителей (например, подразделений одной организации), возможно также клиентами и подрядчиками данной организации. Частное облако может находиться в собственности, управлении и эксплуатации как самой организации, так и третьей стороны (или какой-либо их комбинации), и оно может физически существовать как внутри, так и вне юрисдикции владельца.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenStack и Quantum: начало</title>
      <link>https://blog.e0ne.info/post/openstack-and-quantum-begining/</link>
      <pubDate>Tue, 11 Sep 2012 13:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/openstack-and-quantum-begining/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Из wiki.openstack.org:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quantum is an OpenStack project to provide &amp;ldquo;network connectivity as a service&amp;rdquo; between interface devices (e.g., vNICs) managed by other Openstack services (e.g., nova).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Из описания можно предположить, что в будущем это станет заменой nova network, что не далеко от правды. Ниже я расскажу об установки OpenStack + Quantum и немного о самом Quantum.&lt;/p&gt;
&lt;p&gt;Установка OpenStack c помощью скриптов &lt;a href="http://devstack.org/"&gt;devstack&lt;/a&gt; является одной из самых простых и быстрых. В простейшем случае, это выглядит так:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Создание своего локального PyPI репозитория</title>
      <link>https://blog.e0ne.info/post/create-local-pypi-reposiroty/</link>
      <pubDate>Tue, 12 Jun 2012 13:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/create-local-pypi-reposiroty/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Создать свой PyPI репозиторий для рабочего проекта мне пришлось сразу по нескольким причинам: начиная от архитектурных особенностей, заканчивая простотой удобством такого решения. Началось все с того, что наше приложение состоит из набора независимых между собой частей, packages. Соответственно, каждый такой пакет может зависить от любого числа других - как самописных так и нет. В таком случае создавать для каждого пакета свой файл pip-requirements для разворачивания окружения стало сложно и неудобно. Следующая причина - это сделать возможность установки любого пакета нужной верисии не имея доступа к нашей системе контроля версий (mercurial). Все-таки набрать команду “&lt;strong&gt;pip install my-package-name&lt;/strong&gt;” намного проще и быстрее, чем указывать путь к исходникам или source control. И последняя причина для меня была в том, что необходимо следить за всеми зависимостями к внешним библиотекам: не только использовать нужную версию, устанавливать пропатченную, но и иметь список всего используемого в проекте (с этим пунктом возникло больше всего трудностей).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пролемы с компиляцией (Xcode) после перехода на Mac OS Lion</title>
      <link>https://blog.e0ne.info/post/problems-with-compilation-xcode-after-update-to-mac-os-lion/</link>
      <pubDate>Mon, 30 Apr 2012 23:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/problems-with-compilation-xcode-after-update-to-mac-os-lion/</guid>
      <description>&lt;p&gt;После перехода на Mac OS X Lion многие приложения, которые нужно устанавливать с исходноков перестали компилироваться с примерно такой ошибкой:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;error trying to exec &amp;lsquo;cc1plus&amp;rsquo;: execvp: No such file or directory&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;В список таких приложений попали macports, MacVim, питоновские библиотеки, которые имели расширения на C и т.д. Суть проблемы заключается в том, что Xcode 4.3 или предыдущая версия (Xcode&amp;rsquo;ом не польщуюсь, поэтому особо не слежу за апдейтами) начал ставиться со всеми зависимостями и тулами в другую папку, а именно в &lt;strong&gt;&lt;strong&gt;/Applications/Xcode.app/Contents/Developer/&lt;/strong&gt;&lt;/strong&gt; вместо &lt;strong&gt;&lt;strong&gt;/Developer/&lt;/strong&gt;&lt;/strong&gt;. А так, как у меня стояла предыдущая версия, то новая, по каким-то причинам оставило старую как дефолтную. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Отключение кеширования статических файлов в Tornado</title>
      <link>https://blog.e0ne.info/post/disable-static-files-cache-in-tornado/</link>
      <pubDate>Thu, 05 Apr 2012 02:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/disable-static-files-cache-in-tornado/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Статические файлы (картинки, скрипты, css), как правило кешируются для более быстрой работы сайтов (уменьшение трафика - это уже скорее побочное явление). И в этом, казалось бы, нет ничего плохого. За исколючением одного - когда это самое кеширование мешает разработке. В моем случае используется стандартная связка nginx для статики + Tornado для всего остального. Но так как создавать вторую версию конфигурации nginx’а с отключенным кешированием мне не хотелось, да и в процессе разработке во многих случаях можно обойтить самим лишь Tornado, то я решил отключить кеширование в Tornado.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CPython: bytecode -  что, где, зачем?</title>
      <link>https://blog.e0ne.info/post/cpython-bytcode-what-where-why/</link>
      <pubDate>Tue, 03 Apr 2012 10:28:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/cpython-bytcode-what-where-why/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Это компиляция в bytecode - низкоуровневый платформонезависимый язык, который выполняется внутри Python Virtual Machine (PVM). Более полное и официалное определение с сайта python.org:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Python source code is compiled into bytecode, the internal representation of a Python program in the CPython interpreter. The bytecode is also cached in .pyc and .pyo files so that executing the same file is faster the second time (recompilation from source to bytecode can be avoided). This “intermediate language” is said to run on a virtual machine that executes the machine code corresponding to each bytecode. Do note that bytecodes are not expected to work between different Python virtual machines, nor to be stable between Python releases.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Восстанавливаем работу Mercurial и MacOS Lion + Python 2.7</title>
      <link>https://blog.e0ne.info/post/fix-mercurial-on-macos-lion-withpython-27/</link>
      <pubDate>Wed, 21 Mar 2012 18:55:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/fix-mercurial-on-macos-lion-withpython-27/</guid>
      <description>&lt;p&gt;Уже не помню когда у меня перестал ратотать клиент к mercurial (hg) - после перехода на Python 2.7 или апгрейда дла Lion. Но так, как я им не пользовался, то решил не тратить время на восстановлние работоспособности. Но тут на проекте решили использовать Mercurial в качестве source control. Соответственно пришлось разбираться с hg. Сразу скажу что установка &lt;strong&gt;последней версии&lt;/strong&gt; проблему &lt;strong&gt;не&lt;/strong&gt; решила.&lt;/p&gt;
&lt;p&gt;Шаг 1. Выполняем команду hg и получаем ошибку:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Интересная особенность типа bool</title>
      <link>https://blog.e0ne.info/post/interesting-feature-of-bool-type/</link>
      <pubDate>Tue, 06 Mar 2012 18:43:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/interesting-feature-of-bool-type/</guid>
      <description>&lt;p&gt;На днях узнал об одной интересной особенности типа bool в python:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;raquo;&amp;gt; b = True&lt;!-- raw HTML omitted --&gt;&amp;raquo;&amp;gt; b + 1&lt;!-- raw HTML omitted --&gt;2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Поведение достатчно логичное, если учесть, что:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;raquo;&amp;raquo; isinstance(b, int)&lt;!-- raw HTML omitted --&gt;True&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Всё дело в том, что тип bool - это всего-лишь синтаксический сахар и наследник от типа int**,** который, для удобства использования, может иметь всего два значения - 0 (False) и 1 (True). Пример выше врядли встретится в коде, но зать об этом стоит на случай если где-то случайно поменяется тип переменной с bool на int или наоборот.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Материалы доклада про XSS на QAClub (Харьков)</title>
      <link>https://blog.e0ne.info/post/xss-presentation/</link>
      <pubDate>Tue, 06 Mar 2012 12:52:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/xss-presentation/</guid>
      <description>&lt;p&gt;Сама презентация:&lt;/p&gt;
&lt;p&gt;Невоторые полезные ссылки&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;http://en.wikipedia.org/wiki/Cross-site_scripting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ha.ckers.org/xss.html"&gt;http://ha.ckers.org/xss.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/XSS-Attacks-Scripting-Exploits-Defense/dp/1597491543/ref=sr_1_1?ie=UTF8&amp;amp;qid=1331027707&amp;amp;sr=8-1"&gt;http://www.amazon.com/XSS-Attacks-Scripting-Exploits-Defense/dp/1597491543/ref=sr_1_1?ie=UTF8&amp;amp;qid=1331027707&amp;amp;sr=8-1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)"&gt;https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/tivoli/library/s-csscript/"&gt;http://www.ibm.com/developerworks/tivoli/library/s-csscript/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://support.microsoft.com/kb/252985"&gt;http://support.microsoft.com/kb/252985&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/what-is-xss/"&gt;http://css-tricks.com/what-is-xss/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://habrahabr.ru/blogs/infosecurity/139453/"&gt;http://habrahabr.ru/blogs/infosecurity/139453/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Доклад про XSS на QAClub (Харьков)</title>
      <link>https://blog.e0ne.info/post/xss-presentation-at-qaclub-kharkiv/</link>
      <pubDate>Mon, 27 Feb 2012 23:41:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/xss-presentation-at-qaclub-kharkiv/</guid>
      <description>&lt;p&gt;Уже послезавтра (ну ладно, почти послезавтра) я буду делать доклад на очередной встрече харьковских QA - &lt;a href="http://qaclub.com.ua/"&gt;QAClub&lt;/a&gt;&amp;lsquo;е. И все было бы ничего, если б в анонсе встречи не были добавлены следующие строчки:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;Докладчики постараются рассказать на уровне, который будет доступен и для людей, только знакомящихся с темой безопасности web-приложений. Для понимания доклада про XSS (cross site scripting) знание JavaScript не обязательно&amp;rdquo;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;После этого некоторые самые вкусные интересные вещи о XSS решил не рассказывать. Возможно, если доклад получится хорошим и будут желающие - будет вторая чать, более хардкорная, а пока планирую рассказать следующее:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Тестирование в Python: nose vs pytest</title>
      <link>https://blog.e0ne.info/post/testing-in-python-nose-vs-pytest/</link>
      <pubDate>Sat, 25 Feb 2012 00:34:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/testing-in-python-nose-vs-pytest/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Продолжаю сравнивать различные python-библиотеки. На этот раз выбор пал на два тест-фреймворка: &lt;a href="http://readthedocs.org/docs/nose/en/latest/"&gt;nose&lt;/a&gt; и &lt;a href="http://pytest.org/latest/"&gt;pytest&lt;/a&gt;. Первый позиционирует себя как unit test framework, второй - как для модульных, так и для функциональных и других тестов. Но так, как грань между модульными, интеграционными и функциональными тестами достаточно тонкая, то ее часто не замечают. Поэтому, эти библиотеки можно использовать для всех вышеперечисленных тестов.&lt;/p&gt;
&lt;p&gt;Краткое сравнение функциональности фреймворков (тут я выбрал наиболее важные для меня вещи):
| |nose|pytest
|Репозиторий |https://github.com/nose-devs/nose|https://bitbucket.org/hpk42/pytest/
|Дата последнего изменения|15.02.2012|6.02.2012 
|Последняя версия|1.1.3|2.2.3 
|Лицензия| |As is 
|Документация| +, подробная, легко разобраться|+, подробная, легко разобраться 
|Запуск определенного набора тестов|+|+ 
|Генерация отчета в формате xUnit|+|+ 
|Настройка детализации отчетов |+| 
|Изменение стандартного наименования|&lt;!-- raw HTML omitted --&gt;|+
|Поддержка fixtures|fixeures, setup* и *teardown методы|+, parametrized tests 
|Интеграция с django|+, сторонний плагин|+, сторонний плагин 
|Соответствие PEP8 |+|+ 
|Расширяемость|+, механизм плагинов|+, механизм плагинов 
|Интеграция с setuptools |+ |+/- &lt;/p&gt;</description>
    </item>
    <item>
      <title>Сравнение библиотек pika и kombu на примере работы с RabbitMQ</title>
      <link>https://blog.e0ne.info/post/rabbitmq-clients-comparison-pika-and-kombu/</link>
      <pubDate>Tue, 21 Feb 2012 23:26:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/rabbitmq-clients-comparison-pika-and-kombu/</guid>
      <description>&lt;p&gt;&lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt; - одна из реализаций сервера для обмена сообщениями на базе протокола AMPQ(&lt;a href="http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol"&gt;http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol&lt;/a&gt;, &lt;a href="http://amqp.org/"&gt;http://amqp.org/&lt;/a&gt;). Подробно описывать его работу, достоинства и недостатки я сейчас не буду. Цель этого поста - сравнить две библиотеки для работы с ним с помощью Python. На самом деле, этих библиотек значительно больше, краткий список их доступен на сайте RabbitMQ: &lt;a href="http://www.rabbitmq.com/devtools.html#python-dev"&gt;http://www.rabbitmq.com/devtools.html#python-dev&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Сравнивал по принципу &amp;ldquo;нужно это, это и еще вооон то&amp;rdquo;. Детальное описание фич на сайте - ниже только те, которые были критичные для меня.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Конфигурация сетевых интерфейсов в RHEL-based операционных системах</title>
      <link>https://blog.e0ne.info/post/network-interface-on-rhel-bases-os/</link>
      <pubDate>Wed, 15 Feb 2012 20:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/network-interface-on-rhel-bases-os/</guid>
      <description>&lt;p&gt;Еще один пост из серии &amp;ldquo;чтоб не забыть и знать где искать&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;По умолчанию, RHEL 6.x и любой другой, основанный на нём (CentOS, Scientific Linux), кроме Fedora, дистрибутив в минимальной установки (в других не проверял) после запуска не поднимает доступные ему сетевые интерфейсы. Для их работоспособности необходимо сделать следующее:&lt;/p&gt;
&lt;h1 id="ifup-eht0-dhclient-eth0"&gt;ifup eht0&lt;!-- raw HTML omitted --&gt;# dhclient eth0&lt;/h1&gt;
&lt;p&gt;Первая команда включает сетевой интерфейс eth0, вторая - запускает DHCP Client. &lt;/p&gt;
&lt;p&gt;Рабочую сеть мы получили, но теперь прийдется выполнять данные команды после каждой перезагрузки, что не есть хорошо. Для устранения этого нгедостатка меняем конфиг&lt;/p&gt;</description>
    </item>
    <item>
      <title>Избавляемся от ошибки socket.error: [Errno 98] Address already in use в python</title>
      <link>https://blog.e0ne.info/post/socket-error-errno-98-address-already-in-use-in-python/</link>
      <pubDate>Wed, 08 Feb 2012 13:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/socket-error-errno-98-address-already-in-use-in-python/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Время от времени, при разработке очередного API, которое работает поверх HTTP или создается Socket-сервер после остановки и попытки запуска сервера получаю ошибку:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;socket.error: [Errno 98] Address already in use&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Проблема заключается в том, что при аварийном (Ctrl+Z) завершении сервера в операционной системе остается запущенным процесс, который слушает нужный мне порт. В разных ОС время жизни такого процесса разное: в RHEL это около двух минут, в Ubuntu - больше. &lt;/p&gt;
&lt;p&gt;Решение достаточно простое. Т.к. при нажатии клавиш Ctrl+Z процесс получает команду “keyboard interrupt”, то достаточно обработать нужное исключение и корректно завершить процесс:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Переквалификация программиста - так ли это просто?</title>
      <link>https://blog.e0ne.info/post/decelopers-skills-conversion-does-it-esay/</link>
      <pubDate>Wed, 25 Jan 2012 16:48:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/decelopers-skills-conversion-does-it-esay/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Так как периодически сталкиваюсь с этой темой решил высказать свое мнение и заодно поспорить на тему “Насколько легко программисту выучить новый язык и писать на нем”.&lt;/p&gt;
&lt;p&gt;Я неоднократно слышал утверждения о том, что хорошему программисту выучить новый язык и писать на нем качественный софт/код не составит труда. Со своей стороны, я уже второй раз поменял основной язык, на котором пишу/зарабатываю на хлеб с маслом. Сначала был C#/.NET, как правило, это был веб, ASP.NET/ASP.NET MVC. Часто приходилось писать на JavaScript, потом практически полностью ушел от серверной части и писал Front-end на JS. Переход на JavaScript был для меня безболезненным, даже не смотря на поддержку IE6 :). Тем временем познакомился с Python и через какое-то время перешел полностью на него. Исходя из такого, пусть и небольшого, программерского опыта утверждаю что переход на другой язык программирования - это почти всегда обучение с нуля, переход, грубо говоря, от Senior (которым я себя никогда не считал) к Junior.&lt;/p&gt;</description>
    </item>
    <item>
      <title>virtualenv + pip как альтернатива buildout</title>
      <link>https://blog.e0ne.info/post/virtualenv-and-pip-instead-of-buildout/</link>
      <pubDate>Wed, 04 Jan 2012 14:01:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/virtualenv-and-pip-instead-of-buildout/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Мне всегда казалось, что для небольших проектов использование buildout - это как с пушки по воробьям: долго, сложно и неудобно. Хотелось чего-то более простого и понятного. И таким оказалась связка virtualenv + pip.&lt;/p&gt;
&lt;p&gt;Про virtualenv я уже писал &lt;a href="http://blog.e0ne.info/post/Python-and-virtualenv.aspx"&gt;тут&lt;/a&gt;. &lt;a href="http://www.pip-installer.org/"&gt;pip&lt;/a&gt; - это замена &lt;a href="http://peak.telecommunity.com/DevCenter/EasyInstall"&gt;easy_install&lt;/a&gt;, менеджер пакетов для python, который позволяет быстро и удобно устанавливать, обновлять и удалять пакеты. Более подробно можно почитать на официальном сайте. Сейчас же меня интересует возможность быстрого развертывания необходимого окружения для запуска проекта. В двух словах, задача выглядит так:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мысли в влух о модульности Django</title>
      <link>https://blog.e0ne.info/post/thoughts-about-django-modularity/</link>
      <pubDate>Tue, 03 Jan 2012 15:10:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/thoughts-about-django-modularity/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Я всегда считал и продолжаю это делать, что Django - не очень-то и модульный фреймворк. Он расширяемый, но не модульный, IMHO. В моем понимании модульный фреймворк, это фреймворк, который состоит из ядра (core), и каких-то модулей, которые можно к нему подключать при желании/необходимости. Но и без них будет доступна минимальная функциональность. В случае же Django - выкинуть из него некоторые модули (e.g. models, template engine) достаточно сложно. Что-бы сделать что-то подобное, необходимо самостоятельно удалять ненужные куски кода, что тянет за собой проверку работоспособности оставшихся частей и прочие неприятности в виде сложной поддержки полученного кода и обновление фреймворка.&lt;/p&gt;</description>
    </item>
    <item>
      <title>2012-й: успеть до конца света</title>
      <link>https://blog.e0ne.info/post/2012-before-the-end-of-the-world/</link>
      <pubDate>Sun, 01 Jan 2012 23:58:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/2012-before-the-end-of-the-world/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Небольшой список того, что хотелось бы сделать в этом году:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;дочитать книги &lt;a href="http://www.amazon.com/Learning-Python-Powerful-Object-Oriented-Programming/dp/0596158068/"&gt;Learning Python&lt;/a&gt; &amp;amp; &lt;a href="http://www.amazon.com/Programming-Python-Mark-Lutz/dp/0596158106/"&gt;Prorgamming Python&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;опрделиться до конца с форматом блога;&lt;/li&gt;
&lt;li&gt;вывести со статуса beta &lt;a href="http://notacash.com"&gt;notacash.com&lt;/a&gt; и доделать там всё, что планировал;&lt;/li&gt;
&lt;li&gt;разобраться с CQRS и дописать брошенное django-cqrs;&lt;/li&gt;
&lt;li&gt;ещё больше перейти на лицензионный контент (в первую очередь софт, книги, музыка);&lt;/li&gt;
&lt;li&gt;прочитать всё из  &lt;a href="http://www.etnogenez.ru/book/marusya-3/"&gt;http://www.etnogenez.ru/&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;сделать регулярными встречи &lt;a href="http://kharkivpy.org.ua/"&gt;KharkivPy&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;закончить начатое в 2011-м.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenStack + RHEL + iptables = buffer overflow detected</title>
      <link>https://blog.e0ne.info/post/openstack-and-rhel-and-iptables-and-buffer-overflow-detected/</link>
      <pubDate>Fri, 30 Dec 2011 02:42:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/openstack-and-rhel-and-iptables-and-buffer-overflow-detected/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;**Никогда не знаешь, где упадет OpenStack(c) **&lt;!-- raw HTML omitted --&gt;Я, в процессе очередного дебагга.&lt;/p&gt;
&lt;p&gt;Те, кто читает мой твиттер (&lt;a href="http://twitter.com/e0ne"&gt;@e0ne&lt;/a&gt;), должны знать, что в последнее время я работаю с &lt;a href="http://openstack.org"&gt;OpenStack&lt;/a&gt;’ом, а именно занимаюсь(конечно, не один я) попытками его запуска на Red Hat Enterprise Linux (RHEL), CentOS, Scientific Linux, etc. Т.к. все это построено на базе полной и непросветной enterpise в виде RHEL, то сборка нового дистрибутива, как правило, у меня начинается со сборки именно под эту ОС. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Мобильные сайты на Django</title>
      <link>https://blog.e0ne.info/post/mobile-sites-on-django/</link>
      <pubDate>Tue, 27 Dec 2011 15:53:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/mobile-sites-on-django/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Сразу оговорюсь, что вопрос мобильной верстки сейчас затрагивать не буду.&lt;/p&gt;
&lt;p&gt;Исходя из этого списка, шаблоны, которые предназначенные для мобильных устройст будут выглядеть, примерно, так:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;{% if request.mobile %}&lt;!-- raw HTML omitted --&gt;    Mobile&lt;!-- raw HTML omitted --&gt;{% else %}&lt;!-- raw HTML omitted --&gt;    Not mobile&lt;!-- raw HTML omitted --&gt;{% endif %}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Или же наша view поменяет вид на такой:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;def index(request):&lt;!-- raw HTML omitted --&gt;    if not request.mobile:&lt;!-- raw HTML omitted --&gt;        return render_to_response(&amp;lsquo;index.html’)&lt;!-- raw HTML omitted --&gt;    else:&lt;!-- raw HTML omitted --&gt;        return render_to_response(&amp;lsquo;mobile_index.html’)&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Объекты в Python: equals or not equals</title>
      <link>https://blog.e0ne.info/post/python-objects-equals-or-not-equals/</link>
      <pubDate>Thu, 22 Dec 2011 15:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/python-objects-equals-or-not-equals/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Рассмотрим задачу сравнения двух инстансов простого класса A в Python. Сам класс A выглядит так:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;class A(object):&lt;!-- raw HTML omitted --&gt;    def &lt;strong&gt;init&lt;/strong&gt;(self, int_param):&lt;!-- raw HTML omitted --&gt;        self.int_value = int_param&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;В данном случае, если мы выполним такой код:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a1 = A(1)&lt;!-- raw HTML omitted --&gt;a2 = A(1)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;то инстансы этого классы не будут равны между собой:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a1 == a2 - False&lt;!-- raw HTML omitted --&gt;a1 is a2 - False&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git: создаем branch из tag'а</title>
      <link>https://blog.e0ne.info/post/git-create-branch-from-tag/</link>
      <pubDate>Wed, 21 Dec 2011 15:27:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/git-create-branch-from-tag/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Любая source control система (TFS, SVN, Git и т.д.) умеет работать с такими вещами, как branch (ветка) и tag (метка). Ветки нужны для разработки каких-то фич, исправления багов и т.д., что бы в это время не ломать уже работающий код. Тэги, в свою очередь, нужны для заморозки какой-то версии кода без возможности последующих исправлений. Грязные хаки вроде залезть в базу данных source control чтобы поменять файл с каким-то тэгом я не рассматриваю по понятным причинам.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Качество кода</title>
      <link>https://blog.e0ne.info/post/code-quality/</link>
      <pubDate>Mon, 12 Dec 2011 02:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/code-quality/</guid>
      <description>&lt;p&gt;Качественного кода нельзя добиться в случае:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Качество кода</title>
      <link>https://blog.e0ne.info/post/code-quality.ru/</link>
      <pubDate>Mon, 12 Dec 2011 02:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/code-quality.ru/</guid>
      <description>&lt;p&gt;Качественного кода нельзя добиться в случае:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Form submit: что может быть проще? Часть 1</title>
      <link>https://blog.e0ne.info/post/form-submit-what-could-be-easier-part-1/</link>
      <pubDate>Tue, 22 Nov 2011 13:36:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/form-submit-what-could-be-easier-part-1/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Казалось бы, отправить (засабмитить) HTML форму на сервер - стандартная задача, которая не должна вызывать никаких проблем и/или вопросов. Но так, как мы не занимаемся сферическим программированием в вакууме, то время от времени появляются трудности, вопросы, проблемы.&lt;/p&gt;
&lt;p&gt;Сегодня на повестки для такая задача:&lt;/p&gt;
&lt;p&gt;Есть страница для бронирования мест в театре/кино и т.д. Выглядит она, примерно, так:&lt;/p&gt;
&lt;p&gt;Можно выбрать несколько мест и нажать кнопку “Зарезервировать”. При этом данные на странице постоянно обновляются (ajax) для отображения актуальной информации о свободных местах. Еще одна проблема - процесс брони места является достаточно долгим, например, 5-10-15 секунд.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Первая встреча харьковского Python Community Kharkiv.Py</title>
      <link>https://blog.e0ne.info/post/kharkivpy-1/</link>
      <pubDate>Wed, 09 Nov 2011 13:06:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/kharkivpy-1/</guid>
      <description>&lt;p&gt;В Киеве ежегодно проходит PyCon, переодически собираются встречи Kyiv.Py - жизнь python community по немного идет своим ходом. А вот в Харькове, к сожалению, ничего подобного не было (не считая DevTime прошедшей весной). Вот мне и хахотелось собрать харькоское python community для общения, обменом знаниями и опытом.&lt;/p&gt;
&lt;p&gt;Подробности на &lt;a href="http://kharkivpy.org.ua/"&gt;http://kharkivpy.org.ua/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Установка компилятора gcc на Mac OS Lion</title>
      <link>https://blog.e0ne.info/post/install-gcc-on-mac-os-lion/</link>
      <pubDate>Fri, 28 Oct 2011 14:47:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/install-gcc-on-mac-os-lion/</guid>
      <description>&lt;p&gt;При установке пакетов psycopg2 и lxml easy_install радостно падал с криками:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;unable to execute gcc-4.2: No such file or directory&lt;!-- raw HTML omitted --&gt;error: command &amp;lsquo;gcc-4.2&amp;rsquo; failed with exit status 1&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Вполне логично, т.к. gcc у меня не стоял :(. Странно только что в Snow Leopard все работало. Немного полазив по инету нашел, что gcc ставится вместе с XCode, который ставится бесплатно из Mac App Store. Но и это не сразу помогло. Ниже привожу список шагов, которые понадобились для установки gcc и psycopg2 после этого.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Тестирование проекта: должны ли все тесты проходить успешно</title>
      <link>https://blog.e0ne.info/post/project-testing-should-test-always-be-successful/</link>
      <pubDate>Thu, 27 Oct 2011 16:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/project-testing-should-test-always-be-successful/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Хорошо когда код покрыт тестами. Хорошо когда кроме модульных тестов есть еще интеграционные, функциональные, UI-тесты и другие. Но должны ли тесты &lt;em&gt;всегда&lt;/em&gt; проходить успешно? Казалось бы, очевидный ответ - да. Но не все так просто&amp;hellip;&lt;/p&gt;
&lt;p&gt;Хороший тест должен выполняться успешно, когда все работает и показывать ошибку если где-то что-то не так. Он должен тестировать только то, что задумывалось и кричать(зчк) сообщать если ожидаемый результат (expetced result) отличается от того, что мы получили при выполнении нашей программы. Но и из этого правила есть исключения. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Continuous integration (CI) - что это такое и с чем его едят</title>
      <link>https://blog.e0ne.info/post/continuous-integration-ci-what-is-it/</link>
      <pubDate>Wed, 26 Oct 2011 16:39:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/continuous-integration-ci-what-is-it/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Первую версию этого поста я начал писать еще 2009-01-05 и в ней должно было описываться что такое CI и как настроить CruiseConrol.NET для ежедневных билдов. Пока писал - на ДОУ(линк на хоум пейдж) вышла аналогичная статья, т.ч. в то время моему посту не суждено было быть опубликованным. Потом я считал что Continuous integration является обязательным для любого проекта чуть более чем “hello world” и эта простая истина всем понятна. Как оказалось нет&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пару слов о UA Pycon 2011</title>
      <link>https://blog.e0ne.info/post/a-few-words-about-pycon/</link>
      <pubDate>Tue, 25 Oct 2011 19:41:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/a-few-words-about-pycon/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;На прошедших выходных прошла уже вторая ежегодная конференция &lt;a href="http://ua.pycon.org/"&gt;Ua Pycon 2011&lt;/a&gt;. Как видно из названия - конференция посвящена языку программирования Python. Людей было действительно много, наверное 300+. Официальных цифр я не видел/не помню. Также, в отличии от прошлого года, было целых 2 потока докладов, что является доказательством того, что конференция растет, а вместе с ней растет и Python-сообщество Украины, что меня очень радует. На фоне этого хочется создать свое маленькое или не очень харьковской сообщество, т.ч. кому интересно - пишите мне :).&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenStack - opensource IaaS платформа на Python</title>
      <link>https://blog.e0ne.info/post/openstack-opensource-iaas-platform-on-python/</link>
      <pubDate>Thu, 13 Oct 2011 16:54:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/openstack-opensource-iaas-platform-on-python/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Сейчас только ленивый не писал об облаках. То, что раньше было просто веб-сервисом - сайчас SaaS. Вот раньше я пользовался gmail просто как почтой, теперь мне навязывают что это SaaS и поэтому это еще лучше. Как пользователю - мне все-равно как оно устроено.  Но вернемся ближе к теме поста и посмотрим какие облака вообще бывают.&lt;/p&gt;
&lt;p&gt;Наиболее распространенные типы облаков (clouds) это (точные определения можно найти на Википедии, я говорю так, как выглядит это для меня):&lt;/p&gt;</description>
    </item>
    <item>
      <title>UA Pycon. Киев, 22-23 октября</title>
      <link>https://blog.e0ne.info/post/uapycon-kyiv-october-22-23/</link>
      <pubDate>Tue, 27 Sep 2011 23:49:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/uapycon-kyiv-october-22-23/</guid>
      <description>&lt;p&gt;Очередное мероприятие под названием &lt;a href="http://ua.pycon.org/"&gt;PyCon&lt;/a&gt; будет в Киеве уже менее чем через месяц. Мой очень короткий отчет о том, что было в прошлом году находится тут: &lt;a href="http://blog.e0ne.info/post/UaPycon-how-it-was.aspx"&gt;http://blog.e0ne.info/post/UaPycon-how-it-was.aspx&lt;/a&gt;. В этом году должно быть еще больше и лучше.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;В этом году мы планируется провести двухдневную конференцию в два потока — включая доклады, мастер-классы, панельные дискуссии и lighting talks. Кроме того, будет проведена «recruiting session» — у желающих будет возможность больше узнать о украинских компаниях, которые разрабатывают на питоне, об их проектах и побеседовать с их представителями.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django и jQuery Template</title>
      <link>https://blog.e0ne.info/post/django-d0b8-jquery-template/</link>
      <pubDate>Wed, 21 Sep 2011 14:56:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/django-d0b8-jquery-template/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;По отдельность Django и плагин &lt;a href="http://api.jquery.com/category/plugins/templates/"&gt;jQuery Template&lt;/a&gt; у меня работали хорошо. А вот вместе возникли небольшие проблемы. Вот только не знаю: это все из-за моей невнимательности или данная фича/бага плагина тоже сыграла свою роль.&lt;/p&gt;
&lt;p&gt;Вначале просто  data binding работал отлично и никаких проблем не предиделось. Но стоило только появиться необходимости использовать тег {{if}} из jQuery Template, встретились первые неожиданности.&lt;/p&gt;
&lt;h3 id="неожиданность-номер-раз"&gt;Неожиданность номер раз:&lt;/h3&gt;
&lt;p&gt;Не совсем, конечно, неожиданность, а, скорее, первая меленькая проблемка. Конструкция “{{“ - совпадает с синтаксисом шаблонов в Django, от чего мы получаем ошибку что у нас неправильный темплейт. Пришлось открыть доки django и найти там что такое &lt;a href="https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#templatetag"&gt;template tag&lt;/a&gt; и как им пользоваться.&lt;/p&gt;</description>
    </item>
    <item>
      <title>День программиста: больше, чаще, веселее!</title>
      <link>https://blog.e0ne.info/post/developers-day-2001/</link>
      <pubDate>Tue, 13 Sep 2011 00:18:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/developers-day-2001/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;P.S. Всех с прошедшим в пятницу днем QA.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Когда нужно использовать Django</title>
      <link>https://blog.e0ne.info/post/when-you-should-use-django/</link>
      <pubDate>Wed, 31 Aug 2011 21:24:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/when-you-should-use-django/</guid>
      <description>&lt;p&gt;Выбор веб-фреймворка не в .NET стеке для нового проекта достаточно нетривиальная задача. Их много - больших, маленьких, хороших и не очень, горячих и зелёных. Так как при работе с Python больше сталкивался с Django, то для себя, т.е. &lt;strong&gt;очень IMHO&lt;/strong&gt;, сделал несколько правил.&lt;/p&gt;
&lt;p&gt;Использовать Django &lt;strong&gt;нужно&lt;/strong&gt; когда: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;нужно получить опыт с Django;&lt;/li&gt;
&lt;li&gt;нужно сделать быстро сайт с админской частью (блог, CMS и т.д.);&lt;/li&gt;
&lt;li&gt;есть хорошее готовое приложение/модуль для Django и его нужно сомсем &lt;strong&gt;немного&lt;/strong&gt; доточить напильником;&lt;/li&gt;
&lt;li&gt;нет необходимости заморачиватья с DAL (data access layer) и стандартного ORM вполне достаточно;&lt;/li&gt;
&lt;li&gt;какие-то из модулей Django уж &lt;strong&gt;ооочень&lt;/strong&gt; хорошо подходят для текущей задачи;&lt;/li&gt;
&lt;li&gt;нужно сделать что-то очень &lt;strong&gt;быстро&lt;/strong&gt; и &lt;strong&gt;нет&lt;/strong&gt; опыта с другими фреймворками.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>jQuery Ajax Table - небольшой плагин для jQuery</title>
      <link>https://blog.e0ne.info/post/jquery-ajax-table/</link>
      <pubDate>Tue, 30 Aug 2011 22:43:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/jquery-ajax-table/</guid>
      <description>&lt;p&gt;То, о чём писал в твиттере, но не мог написать в блоге раньше. &lt;/p&gt;
&lt;p&gt;Была небольшая и, на первый взгляд, достаточно простая задача - показать на странице таблицу, с возможностью сортировки и автообновления. Ну ещё и поиск по ней. После некоторого времени, потраченного на поиск и попытки исправления существующих решений стало понятно, что написать с нуля будет быстрее и дешевле (тут имеется в виду также дальнейшая поддержка всего этого). Готовые реализации javasctipt-библиотек и плагинов к jQuery были или слишком уж навороченный для данной задачи или, мягко говоря, очень плохо справлялись с обновлением таблицы и последующей сортировкой. Результатом этого всего стало написание плагина для jQuery c нуля.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eventlet - concurrent-библиотека для Python</title>
      <link>https://blog.e0ne.info/post/eventlet-concurrent-library-for-python/</link>
      <pubDate>Wed, 17 Aug 2011 17:16:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/eventlet-concurrent-library-for-python/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;&lt;strong&gt;Давно не писал обзоры приложений и библиотек, но эта мне так понравилась, что не удержался.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Работа с потоками всегда была не самым лёгким занятием для программистов. А если брать особенность работы с потоками в Python ветки 2.x и 3.x (не считая версий 3.2 и 2.7), то кроме потоков нам на голову падали ещё проблемы в GIL (Global Interpreter Lock). Но прогресс не стоит на месте и многопоточность используется уже практически везде. Проблема с cuncerrency встречается всё чаще и решать её приходится так же часто. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Agile и документация в проектах</title>
      <link>https://blog.e0ne.info/post/agile-and-project-documentation/</link>
      <pubDate>Mon, 15 Aug 2011 11:20:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/agile-and-project-documentation/</guid>
      <description>&lt;p&gt;На последнем &lt;a href="http://it-talk.dataart.com.ua"&gt;IT Talk&lt;/a&gt; в Харькове один из докладчиков поднял интересную тему. Он сказал что документация в проектах, которые разрабатываются по методологии Agile всё-таки нужна. Тема интересная и достойна отдельного неблоьшого холливара. Ведь все вокруг говорят, что один из достоинств Agile - это отсутствие документации на проекте. Но так ли это на самом деле? По моему мнению, врядли существует хоть один проект сложнее чем “hello world”, в котором &lt;strong&gt;полностью&lt;/strong&gt; отсутствует документация.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Стартапы. Взгляд со стороны разработчика</title>
      <link>https://blog.e0ne.info/post/startup-for-developer-what-is-it/</link>
      <pubDate>Fri, 01 Jul 2011 14:47:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/startup-for-developer-what-is-it/</guid>
      <description>&lt;p&gt;О стартапах пока не написал только ленивый. Говорят о них много, громко, красиво. Если раньше говорили только об успешных, то сейчас, кроме success stories все чаще слышно и об обратной стороны медали - провалах. Как маленьких, так и настоящих epic fail’ах.&lt;/p&gt;
&lt;p&gt;Если верить википедии, то стартап - это:&lt;/p&gt;
&lt;p&gt;Стартап или стартап-компания (от** англ. start-up — запускать) — компания с короткой историей операционной деятельности. Как правило, такие компании созданы недавно, находятся в стадии развития или исследования перспективных рынков. Термин стартап стал популярным во времена пузыря доткомов, когда было создано большое количество доткомов. Новые проекты в отраслях высоких технологий часто называют хайтек стартап. Также нужно отметить что хотя этот термин можно применять ко всем сферам деятельности, однако преимущественно он получил распространение в сфере IT и интернет проектов.&lt;!-- raw HTML omitted --&gt;**&lt;a href="http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D1%80%D1%82%D0%B0%D0%BF"&gt;&lt;strong&gt;http://ru.wikipedia.org/wiki/Стартап&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript и константы</title>
      <link>https://blog.e0ne.info/post/javascript-and-contants/</link>
      <pubDate>Thu, 09 Jun 2011 09:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/javascript-and-contants/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Все знают, что JavaScript - динамический язык, что несет за собой некоторые особенности, например, отсутствие констант. Правильнее было бы сказать, что отсутствие констант - это проблема не самого JavaScript, а браузеров. &lt;/p&gt;
&lt;p&gt;Согласно спецификации ECMAScript 5th Edition, ECMA Script (для простоты понимания и удобства буду использовать термин JavaScript) у объекта Object должен быть метод freeze, который принимает объект и создает на его основе новый неизменяемый (inmutable) объект, у которого все свойства становятся read only и пропадает возможность удалить и/или изменять свойства объекта.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Модели в Django - простые вещи делаются просто</title>
      <link>https://blog.e0ne.info/post/models-in-django-make-simple-things-easy/</link>
      <pubDate>Tue, 07 Jun 2011 04:33:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/models-in-django-make-simple-things-easy/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Иногда я просто поражаюсь, как некоторые простые вещи приходится делать сложно. Опыт работы с C# в целом и ASP.NET в частности нередко мешают при использовании связки Python + Django. Все-таки скриптовый язык - отличается от строготипизированного не только синтаксисом. Тут нужно мыслить по-другому. &lt;/p&gt;
&lt;p&gt;Возьму для наглядности такой пример: есть какая-то абстрактная модель, которая хранит в себе данные о первых трех местах какого-либо соревнования и нужно быстро сделать минимальный интерфейс для ввода и отображения данных. Пример, конечно, надуманный и делается легко и на ASP.NET WebForms/MVC, но, меня поразила такое свойство моделей в Django, как “choices field”. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Google App Engine 1.5.0: backends, Go и другие изменения</title>
      <link>https://blog.e0ne.info/post/google-app-engine-1-5-0-backends-go-and-other-changes/</link>
      <pubDate>Tue, 10 May 2011 21:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/google-app-engine-1-5-0-backends-go-and-other-changes/</guid>
      <description>&lt;p&gt;Сегодня вышел Google App Engine 1.5.0. Кроме большого числа пофикшенных багов, появилось несколько достаточно интересных изменений.&lt;/p&gt;
&lt;p&gt;Среди них стоит отметить такие:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backends - постоянно запущенный инстанс одной из четырех конфигураций, который не связан с запросами (http requests) и может занимать до 1GB памяти. Один из способов применения - генерация отчетов, которая занимает много времени или другие ресурсоемкие задач&lt;/li&gt;
&lt;li&gt;Изменения в Task Queue - поддержка pull-запросов, увеличение лимита на используемую память&lt;/li&gt;
&lt;li&gt;Размер HTTP Request и Response увеличен до 32MB&lt;/li&gt;
&lt;li&gt;High Replication Datastore теперь является хранилищем по умолчанию для новых приложений&lt;/li&gt;
&lt;li&gt;Много изменений, связанных с квотами - некоторые были увеличены, а некоторые, наоборот - уменьшены&lt;/li&gt;
&lt;li&gt;К моему сожалению, Full Text Search еще не закончили :(. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>[Audio] Субъективные мысли вслух о JavaScript</title>
      <link>https://blog.e0ne.info/post/subjectively-about-javascript-audio/</link>
      <pubDate>Sun, 08 May 2011 11:59:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/subjectively-about-javascript-audio/</guid>
      <description>&lt;p&gt;Выступать на публике с докладами и говорить в микрофон - совсем не то, что обсуждать что-то в курилке или за чашкой чая. Без подготовки сделать это, как показала практика, значительно сложнее. Я решил попрактиковаться в создании аудио-версии своего блога. Первый блин, как всегда, комом, но буду стараться и практиковаться дальне. Из первых впечатлений:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Субъективные мысли вслух о JavaScript:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Недостатки JavaScript (куда же без них?)&lt;/li&gt;
&lt;li&gt;Немного слов о RIA&lt;/li&gt;
&lt;li&gt;Попытки избавиться от JavaScript &lt;/li&gt;
&lt;li&gt;Разработка под Android и iPhone&lt;/li&gt;
&lt;li&gt;JavaScript - самый низкоуровневый язык программирования для веб&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET и несколько форм на одной странице</title>
      <link>https://blog.e0ne.info/post/aspnet-and-few-forms-on-the-page/</link>
      <pubDate>Thu, 05 May 2011 14:41:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-and-few-forms-on-the-page/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Рассказ о “странном” баге и о том, как влияет верстка работу всего приложения.&lt;/p&gt;
&lt;p&gt;При работе с ASP.NET Webforms мы постоянно сталкиваемся с формами. По умолчанию, это одна серверная форма &lt;strong&gt;&lt;!-- raw HTML omitted --&gt;&lt;/strong&gt;, расположенная сразу же за тегом &lt;strong&gt;&lt;!-- raw HTML omitted --&gt;&lt;/strong&gt;. Но это, можно сказать, классический пример - такую заготовку делает нам Visual Studio при создании другого проекта. На практике же всё может сильно отличаться.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Следует отметить, что на странице вы не можете создать более одной серверной формы (с атрибутом** runat=”server”**). Такое уж ограничение архитектуры ASP.NET. Почему так - догадаться не сложно, но&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dev Time #4: Python - 2.5 недели спустя</title>
      <link>https://blog.e0ne.info/post/dev-time-4-python-two-and-half-weeks-later/</link>
      <pubDate>Sat, 30 Apr 2011 21:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/dev-time-4-python-two-and-half-weeks-later/</guid>
      <description>&lt;p&gt;DevTime прошел, а отчёт так и не был написан. В этот раз писать буду мало и только об одном докладчике. Вообщем могло быть и хуже, могло быть и лучше. Если коротко - сказывается недостаток выступлений на публику. Это был 3-й доклад, предыдущие два были для UNETA. Буду стараться в будущем делать лучше и больше.&lt;/p&gt;
&lt;p&gt;Собстенно, сам доклад (видео):&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Презентация:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Примеры кода, уже традиционно, на github: &lt;a href="https://github.com/e0ne/events/tree/master/devtime/tipfy"&gt;https://github.com/e0ne/events/tree/master/devtime/tipfy&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dev Time #4 - Python</title>
      <link>https://blog.e0ne.info/post/dev-time-4-python/</link>
      <pubDate>Thu, 31 Mar 2011 14:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/dev-time-4-python/</guid>
      <description>&lt;p&gt;Среда, 13 апреля этого года должна была пройти так же, как и остальные среды, но не тут-то было. В этот день состоится очередная встреча харьковского сообщества разработчиков &lt;a href="http://dev-time.org/"&gt;Dev Time&lt;/a&gt; (мой отчет с первой встречи: &lt;a href="http://blog.e0ne.info/post/First-Kharkov-DevTime-event-summary.aspx"&gt;http://blog.e0ne.info/post/First-Kharkov-DevTime-event-summary.aspx&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;Особенностью этой встречи будет то, что это первое подобное события на моей памяти в Харькове, посвященное языку программирования Python. О Python будет говорить Настя Хоменко aka &lt;a href="http://twitter.com/eva__brown"&gt;@Eva__Brown&lt;/a&gt; с докладом &amp;ldquo;Python Tips&amp;rdquo; (детали уточняются). Вторым докладчиком буду я. И поговорю я о Google App Engine и web фреймворке &lt;a href="http://www.tipfy.org/"&gt;tipfy&lt;/a&gt;. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Логирование ошибок в ASP.NET с помощью elmah</title>
      <link>https://blog.e0ne.info/post/exception-logging-in-aspnet-with-elmah/</link>
      <pubDate>Fri, 25 Feb 2011 21:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/exception-logging-in-aspnet-with-elmah/</guid>
      <description>&lt;p&gt;Чем дольше пользуюсь NuGet, тем больше интересных вещей с его нахожу. Одной из таких библиотек является &lt;a href="http://code.google.com/p/elmah/"&gt;elmah&lt;/a&gt;. Простота установки, особенно с использованием NuGet, и широкие возможности настройки подойдут к практически любому проекту. Я сам для этого раньше предпочитал использовать Logging модуль из Microsoft Enterprice Library, но сейчас понял что есть более гибкие и современные решения.&lt;/p&gt;
&lt;p&gt;Elmah создан специально для того, чтобы логировать ошибки в ASP.NET приложениях.&lt;/p&gt;
&lt;p&gt;Среди его функций есть такие:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Updated] Python 3.2 и новая версия PyCharm IDE</title>
      <link>https://blog.e0ne.info/post/python-3-2-and-new-version-of-pycharm-ide/</link>
      <pubDate>Tue, 22 Feb 2011 10:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/python-3-2-and-new-version-of-pycharm-ide/</guid>
      <description>&lt;p&gt;Буквально на днях вышло сразу два интеречных релиза: &lt;a href="http://python.org/download/releases/3.2/"&gt;Python 3.2&lt;/a&gt; и &lt;a href="http://blogs.jetbrains.com/pycharm/"&gt;PyCharm 1.2 EAP Build 105.13&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Так как сейчас в новых версиях Python изменений в синтаксисе нет (сделано это для ускорения перехода с ветки 2.x на 3.x), то все изменения сводятся к более стабильной работе, фиксам багов и всяким маленьким и не очень плюшкам.&lt;/p&gt;
&lt;p&gt;На фоне этого релиза новая версия PyCharm кроме некоторых небольших улучшений/изменений несет в себе одну достаточно важную функцию под названием &amp;ldquo;Python version compatibility inspection&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Интересная особенность конструкции foreach в языке C#</title>
      <link>https://blog.e0ne.info/post/one-interetsing-feature-of-the-foreach-statement/</link>
      <pubDate>Wed, 09 Feb 2011 11:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/one-interetsing-feature-of-the-foreach-statement/</guid>
      <description>&lt;p&gt;При написании кода на языке C# достаточно часто приходится использовать конструкцию &lt;strong&gt;foreach&lt;/strong&gt;. Ведь так на много удобнее проходить по коллекциям, по сравнению с использованием цикла &lt;strong&gt;for&lt;/strong&gt;. Безусловно, у каждого метода есть свои плюсы и минусы и выбор всегда зависит от конкретной задачи и ситуации. Но на днях меня удивила одни интересная особенность конструкции &lt;strong&gt;foreach&lt;/strong&gt;, а  именно то, как это работает.&lt;/p&gt;
&lt;p&gt;Рассмотрим простой пример:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;У нас есть некая коллекция элементов и с помощью **foreach **мы выводим на консоль имена всех элементов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Кэширование контента в процессе разработки средствами IIS</title>
      <link>https://blog.e0ne.info/post/content-caching-with-iis-on-development-environment/</link>
      <pubDate>Mon, 31 Jan 2011 10:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/content-caching-with-iis-on-development-environment/</guid>
      <description>&lt;p&gt;Наверняка любой разработчик, который пишет для web сталкивался с проблемой кэширования контента. При этом проблема может делится на две части: кэширование динамического контента и кэширование статического контента. Эти проблемы связанные с оптимизацией времени загрузки сайта. Я же подойду к этой проблеме с другой стороны: проблемы с кэшированием при разработке. Ведь все мы сталкивались с тем, что при изменении всего-лишь одной строке в javascript или изменении класса в CSS приходится в очередной раз очищать кэш браузера. И никакие магические сочетания Ctrl + F5 не помогают. В случае с Internet Explorer не всегда помогает даже очиситка кэша (Ctrl+R) в IE Developer Tools - приходится это делать стандартными средствами браузера.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[UDP] [Опрос] Несколько вопросов о тематике блога и RSS ленте</title>
      <link>https://blog.e0ne.info/post/some-questions-about-blog-topics/</link>
      <pubDate>Fri, 28 Jan 2011 13:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/some-questions-about-blog-topics/</guid>
      <description>&lt;p&gt;[Update]&lt;/p&gt;
&lt;p&gt;Теперь пункт &amp;ldquo;Ссылка на сайт(блог)&amp;rdquo; в анкете является необязательным.&lt;/p&gt;
&lt;p&gt;[/Update]&lt;/p&gt;
&lt;p&gt;Всем привет. Особый привет моим постоянным читателям и тем, кто активно комментирует.&lt;/p&gt;
&lt;p&gt;Так уж сложилось, что последние 4 года я занимаюсь разработкой веб-приложений на платформе .NET о чем пишу в своём блоге. Последний год начал интересоваться Python&amp;rsquo;ом, более активно им интересуюсь последние полгода. Из-за этого начали появляться посты о Python и связанными с ним вещами. Догадываюсь, что некоторым может быть это не интересно, а мне создавать отдельный блог для этого не хочу, но и терять .net-ориентированную аудиторию не хочется, особенно учитываю то, что со многими (или не многими :)) знаком за пределами online-пространства.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jQuery из исходников</title>
      <link>https://blog.e0ne.info/post/jquery-from-sources/</link>
      <pubDate>Thu, 27 Jan 2011 14:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/jquery-from-sources/</guid>
      <description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt; &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; - достаточно мощный и удобный javascript  framework. Последняя версия 1.4.4 имеет размер 179KB для разработчиков и  всего-лишь 26KB для использования в production. 26 килобайт кода не  много, но в таком сжатом формате разобраться практически не возможно  даже с помощью дебаггера. В неупакованный версии разобраться проще, в  дебаггере всё выглядит хорошо, но всё-равно все тонкости работы и  устройства jQuery проходят мимо нас. В 7180-ти строках javascript-кода  даже с помощью средств IDE и не менее мощной комбинации Ctrl+F  найти  нужный кусок кода не так уж и просто.&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;Что же делать тем, кто  хочет разобраться к том, как работает jQuery? Ответ достаточно простой:  скачать исходники. Звучит странно и непонятно. В голове возникает  вопрос: какие могут быть исходники у библиотеки, написанной на  javascript? Под фразой “исходники jQuery” я подразумеваю то, что лежит у  них в репозитории &lt;a href="http://github.com/jquery/jquery"&gt;http://github.com/jquery/jquery&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>tipfy - маленький, но мощьный web framework для GAE</title>
      <link>https://blog.e0ne.info/post/tipfy-small-but-powerful-framework-for-gae/</link>
      <pubDate>Mon, 17 Jan 2011 13:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/tipfy-small-but-powerful-framework-for-gae/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Так уж сложилось, что мне было необходимо выбрать framework для разработки небольшого приложения на python + GAE. Первым делом я посмотрел в сторону Django и немного огорчился, узнав что теперь GAE team рекомендуют использовать форк &lt;a href="http://www.allbuttonspressed.com/projects/django-nonrel"&gt;django-nonrel&lt;/a&gt; - практически тот же django, но дающий возможность простой работы с NoSQL базами данных. Так как django-nonrel все ещё не достиг версии 1.0 и имеет ряд недоработок, которые разработчики обещают исправить в ближайшее время. Из недостатков, которые для меня оказались решающими стоит отметить - не работает с GAE “из коробки”, соответственно необходимо многое доустанавливать-настраивать руками, на что не хотелось тратить время. Позже я обязательно напишу про этот фреймворк, но уже на примере django-nonrel + MongoDB. Тем временем мне порекомендовали посмотреть в сторону tipfy, на котором я остановился и о котором написан этот пост.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python и virtualenv - разные среды разработки без виртуальной машины</title>
      <link>https://blog.e0ne.info/post/python-and-virtualenv/</link>
      <pubDate>Mon, 03 Jan 2011 13:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/python-and-virtualenv/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Первой моей идеей было поднять разные виртуалки для тестирования, но немного погуглив наткнулся на такую замечательную вещь, как virtualenv. Как написано на &lt;a href="http://pypi.python.org/pypi/virtualenv"&gt;оффициальном сайте&lt;/a&gt; - “virtualenv is a tool to create isolated Python environments”, что в переводе звучит, примерно, так: “virtualenv - приложение для созданий изолированных рабочих сред для python”. Таким образом вы можете создать несколько окружений с разными версиями python и/или других библиотек. &lt;/p&gt;
&lt;p&gt;Установка virtualenv ничем не отличается от установки любой библиотеки, написанной на python. В моем случае установка выглядила так:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Модальные диалоги (popups) на HTML. Часть 2</title>
      <link>https://blog.e0ne.info/post/modal-popup-with-html-part-2/</link>
      <pubDate>Thu, 16 Dec 2010 13:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/modal-popup-with-html-part-2/</guid>
      <description>&lt;p&gt;Продолжение предыдущего поста: &lt;a href="http://blog.e0ne.info/post/Modal-popup-with-HTML.aspx"&gt;http://blog.e0ne.info/post/Modal-popup-with-HTML.aspx&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="часть-2-практика"&gt;Часть 2. Практика&lt;/h2&gt;
&lt;p&gt;Если есть проблема, то, обязательно, должно быть решение. Так как готового я не нашел (возможно, плохо искал), пришлось изобретать свое.  Решений, на самом деле, нашлось аж целых два, но так как я остановился лишь на одном, то это решение я рассмотрю более подробно и с примером.&lt;/p&gt;
&lt;p&gt;Для начала рассмотрю тот вариант, который я не стал реализовывать.&lt;/p&gt;
&lt;h3 id="решение-проблемы-1-манипуляции-с-свойством-tabindex"&gt;Решение проблемы #1: манипуляции с свойством tabIndex.&lt;/h3&gt;
&lt;p&gt;Те, кто сталкивался с необходимостью навигацией по сайту с помощью клавиатуры непременно сталкивались с таким свойством элементов, как tabIndex. По умолчанию, для всех элементов &lt;!-- raw HTML omitted --&gt; (кроме &lt;!-- raw HTML omitted --&gt;) и &lt;!-- raw HTML omitted --&gt; tabIndex равен 0. Для других элементов свойство или не определено, или задано значение “-1” (минус еденица) В таком случае переход по элементам осуществляется в порядке их расположения в DOM-моделе. Если необходимо сделать так, чтоб при навигации по странице с помощью кнопки tab фокус на элемент не попадал, то значение tabIndex необходимо сделать -1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Отчет о первой встреча харьковского сообщества DevTime</title>
      <link>https://blog.e0ne.info/post/first-kharkov-devtime-event-summary/</link>
      <pubDate>Thu, 09 Dec 2010 22:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/first-kharkov-devtime-event-summary/</guid>
      <description>&lt;p&gt;Сегодня вчера состоялась первая встреча харьковского сообщества разработчиков под названием &lt;a href="http://dev-time.org/"&gt;DevTime&lt;/a&gt;. Насколько я знаю, сейчас в Харькове активна лишь &lt;a href="http://uneta.com.ua/"&gt;UNETA&lt;/a&gt; - харьковская .NET User group. В отличии от UNETA, организаторы DevTime планируют не зацикливаться на какой-то конкретной технологии или языке программирования, а делать встречи, посвященные разным технологиям.&lt;/p&gt;
&lt;p&gt;Тематика первой встречи - Silverlight. Несмотря на то, что было целых три мини-доклада, докладчик был всего один - Андрей Каща (&lt;a href="http://twitter.com/#!/anvaka"&gt;@anvaka&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;Мини-доклад #1. Введение в Silverlight.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мысли вслух про качественный код, рефакторинг, TDD и немного XP</title>
      <link>https://blog.e0ne.info/post/thinking-about-good-code-refactorint-and-xp/</link>
      <pubDate>Fri, 03 Dec 2010 11:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/thinking-about-good-code-refactorint-and-xp/</guid>
      <description>&lt;p&gt;Споры по поводу качества кода никогда не прекращались. Все знают, что код должен быть качественным, но что такое качественный код никто точно сказать не может. По моему мнению - это достаточно субъективное понятие, которое зависит от многих факторов. Такими факторами могут быть: читабельность, наличие комментариев, количество изменений, необходимых для реализации новых фич и/или фиксов багов. Немаловажную роль играет и проект, который находится в разработке: в одном что-то может считаться отличным кодом, а в другом - этот же код будет просто ужасным. Но я хотел поговорить немного о другом&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обработка ошибок в JavaScript</title>
      <link>https://blog.e0ne.info/post/handle-javascript-errors/</link>
      <pubDate>Mon, 29 Nov 2010 13:10:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/handle-javascript-errors/</guid>
      <description>&lt;p&gt;На мой взгляд, обработке ошибок на JavaScript уделяется незаслуженно мало внимания. Если при написании серверного кода, конструкцию try-catch можно встретить достаточно часто, то на стороне клиента такой код скорее исключение, чем правило.&lt;/p&gt;
&lt;p&gt;Для начала немного теории.  Исключение (exception) - ошибка или нестандартное поведение программы во время её работы. Например, попытка открыть файл, которого не существует, или вызвать метод элемента DOM-модели, которого нет.&lt;/p&gt;
&lt;p&gt;В JavaScript существует конструкция try-catch-finaly, которая работает так же, как и в других языках программирования.  Логично предположить, что если есть try-catch, то должен быть и оператор throw. И такой оператор в JavaScript действительно есть. Рассмотрим пример (файл error-0.html):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Request validation в ASP.NET</title>
      <link>https://blog.e0ne.info/post/request-validation-in-aspnet/</link>
      <pubDate>Fri, 26 Nov 2010 12:32:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/request-validation-in-aspnet/</guid>
      <description>&lt;p&gt;Со времен ASP.NET 1.1, по умолчанию, у всех страниц свойство ValidateRequest было равно true. Это означает, что при вводе в поле ввода определенные спецсимволы (пример: &amp;lt;,&amp;gt;,&amp;amp;,#)  и отправки формы на сервер мы успешно получим HttpRequestValidationException.&lt;/p&gt;
&lt;p&gt;Непонятное, на первый взгляд, поведение объясняется достаточно просто - защита от XSS атак. XSS (cross site scripting) - один из типов атак на веб-сайт, целью которой является вставка (инъекция)  чужого javascript-кода на атакуемый сайт. Результатами такой атаки могут быть от показа пользователю ненужных ему сообщений, до кражи cookie и перенаправления на другой сайт, который может содержать вредоносный код. Пример такой ситуации можно посмотреть в XssSample.aspx.&lt;/p&gt;</description>
    </item>
    <item>
      <title>4 способа запустить JavaScript при загрузки страницы</title>
      <link>https://blog.e0ne.info/post/4-ways-to-run-javacript-on-page-load/</link>
      <pubDate>Mon, 22 Nov 2010 12:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/4-ways-to-run-javacript-on-page-load/</guid>
      <description>&lt;p&gt;Рано или поздно при написании JavaScript’а возникает необходимость в том, чтобы он был автоматически запущен при загрузке страницы. Нужно это, как правило, для следующих действий: инициализация интерфейса (UI) и отложенная загрузка данных (lazy load).&lt;!-- raw HTML omitted --&gt;Как часто бывает, для такой простой на первый взгляд задачи, есть несколько способов решения.&lt;/p&gt;
&lt;p&gt;Задача. После загрузки страницы, нам нужно каким-то образом проинициализировать меню функцией initiPageMenu(), которыя находится в файле menu.js.&lt;/p&gt;
&lt;p&gt;Способы решения:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Миграция сайта на .NET 4.0</title>
      <link>https://blog.e0ne.info/post/website-migration-to-dotnet-4/</link>
      <pubDate>Fri, 19 Nov 2010 14:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/website-migration-to-dotnet-4/</guid>
      <description>&lt;p&gt;Люди всегда делились на две категории: одни всегда &amp;ldquo;впереди планеты всей&amp;rdquo;, вторые их догоняют. В мире программирования всё происходит аналогично: одни используют новое ПО начиная с ранних CTP (Community Technology Preview) версий, вторые переходят на них, в лучшем случае, уже после релиза. Так сложилось и в ноём текущем проекте: .net framework 4.0 вышел достаточно давно, но перейти на него получилось только сейчас, и то не полностью.&lt;/p&gt;
&lt;p&gt;Несмотря на то, что, как правило, переход на новую версию .net framework не вызывает особых проблем (код с 3.5 успешно работает в среде 4.0), некоторые нюансы всё же есть. Нише привожу описание шагов и проблем, с которыми столкнулся.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сумашедший UI или нестандартное поведение стандартных элементов</title>
      <link>https://blog.e0ne.info/post/crazy-ui/</link>
      <pubDate>Thu, 18 Nov 2010 11:34:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/crazy-ui/</guid>
      <description>&lt;p&gt;На фоне быстрорастущей популярности всевозможных блогов, конференций, услуг и др. на тему usability вставлю и я свои &amp;ldquo;пять копеек&amp;rdquo;. Америку не открою, но выскажу своё мнение, поговорю о наболевшем. Возможно, начнется небольшое обсуждение написанного ниже.&lt;/p&gt;
&lt;p&gt;Нестандартное поведение стандартных элементов - большой кошмар как для разработчика, так и для пользователя. Разработчику приходится писать много &amp;ldquo;лишнего&amp;rdquo; кода, саппортить это во всех браузерах и фиксить баги, которые лезут со всех сторон. Пользователю приходится угадывать, привыкать и приспосабливаться к работе, казалось бы, одинаковых элементов управления на разных сайтах.И я не говорю уже о таких элементах, как выбор даты (с нетерпением жду поддержки этого элемента в HTML5). я говорю о таких простых вещах как ссылки, кнопки, поля для ввода текста.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UaPycon: как это было</title>
      <link>https://blog.e0ne.info/post/uapycon-how-it-was/</link>
      <pubDate>Thu, 28 Oct 2010 22:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/uapycon-how-it-was/</guid>
      <description>&lt;p&gt;В январе в Киеве была конференция &lt;a href="http://blog.e0ne.info/post/Late-report-about-Pycamp.aspx"&gt;Pycamp&lt;/a&gt;, о которой я уже писал. В эти выходные, опять-таки, в Киеве прошла уже двухдневная конференция под названием &lt;a href="http://ua.pycon.org/"&gt;UaPycon&lt;/a&gt;. Если не ошибаюсь, организовывали ее те же самые люди, но в этот раз, были учтены многие ошибки предыдущей конференции. Доклады были более интересные и более высокого уровня, особенно это касается западных докладчиков. О докладах немного позже, сейчас - коротко об организационных моментах:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;регистрация: квест под названием “найди свой бейджик” - не понравилось, хотя и прошел его быстро.&lt;/li&gt;
&lt;li&gt;следующий квест - найди WC был более интересный, чем предыдущий (похоже, что все ВУЗы в нашей стране имеют слишком запутанную архитектуру, для того, чтобы быстро находить нужные аудитории).&lt;/li&gt;
&lt;li&gt;место проведения конференции - слишком далеко от центра, зато не было не так далеко добираться от гостиницы :).&lt;/li&gt;
&lt;li&gt;очень большой недостаток - несоблюдение графика и отсутствие перерывов (5-10 мин) между докладами.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;О докладах писали уже много, поэтому не буду очень подробно описывать каждый из них. Были и хорошие, и не очень. Серьезные и смешные (кто следил за твиттер-трансляцией - понял о чем я). Доклады были разных уровней: от пересказа документации (Python Innards, который мне понравился, т.к. эти разделу документации я читал по диагонале), так и основанные на собственном опыте.&lt;!-- raw HTML omitted --&gt;Отдельно стоит выделить доклад от Michael Mahemoff из самого Google про HTML5. Доклад, тема которого, напрямую не связанная с языком программирования Python, но состоял из 3-х составляющих в правильных пропорциях: Google + HTML5 + подача и владение материала.&lt;!-- raw HTML omitted --&gt;Хотя сайт Uapycon’а был полностью на английском, доклады были и на русском, и на английском и на, скажем так, не очень хорошем английском, которые лучше бы было делать на русском.&lt;!-- raw HTML omitted --&gt;В целом конференция прошла успешно, мне понравилась. Бало много интересной и полезной информации, много интересных людей, after party, на котором мне о-о-о-очень долго несли мое пиво, но эта проблема, кажется, была только у меня.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Модальные диалоги (pop-up) на HTML</title>
      <link>https://blog.e0ne.info/post/modal-popup-with-html/</link>
      <pubDate>Thu, 28 Oct 2010 13:36:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/modal-popup-with-html/</guid>
      <description>&lt;h2 id="часть-1-теория"&gt;Часть 1. Теория&lt;/h2&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;Сейчас использование модальных и не только диалогов на веб-сайтах является вполне нормальным явлением, в следствии чего нам доступна масса уже готовых контролов как для asp.net/&amp;hellip;. (подставьте сюда ту технологию, которую вы используете в своих проектах), так и множество плагинов для популярных javascript-фреймворком, таких как jquery, moo tools, prototype и других. Для упрощения договоримся, что здесь под контролом я буду иметь в виду все что, что в итоге превращается в html-код и выглядит как привычное нам модальное диалоговое окно.&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;Реализация диалогового окна на html выглядит следующим образом:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Offtopic] Анонс сайта notacash.com</title>
      <link>https://blog.e0ne.info/post/offtopic-notacash-site-announcement/</link>
      <pubDate>Wed, 06 Oct 2010 21:55:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/offtopic-notacash-site-announcement/</guid>
      <description>&lt;p&gt;Те, кто фолловит меня в твиттере, уже знают о существовании сайта &lt;a href="http://notacash.com"&gt;notacash.com&lt;/a&gt;. Сейчас я хочу немного рассказать о нем.&lt;/p&gt;
&lt;p&gt;Более чем 3.5 года моя работа связана с технологиями Microsoft, в частности - .NET framework и платформа ASP.NET. Но  так, как кроме языка программирования C# существует ещё большое количество других - я решил попробовать что-то другой. Выбор пал на скриптовые языки,а именно - python. По мере приобретения теоретических знаний о python, появлялась необходимость в их практическом применении. Приложения уровня &amp;ldquo;Hello World!&amp;rdquo; быстро надоели и хотелось чего-то большего. Сначала хотел написать движок для блога, но лень взяла своё. Ближе к середине лета у меня появилась идея о создании сайта, которая в последствии переросла в сайт &lt;a href="http://notacash.com"&gt;notacash.com&lt;/a&gt;. Что это за сайт и для чего он нужен - писать тут не буду, всё это уже написано на странице &lt;a href="http://notacash.com/about/"&gt;About&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET Ajax. Часть 2: Client-side</title>
      <link>https://blog.e0ne.info/post/aspnet-ajax-part-2-client-side/</link>
      <pubDate>Wed, 15 Sep 2010 16:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-ajax-part-2-client-side/</guid>
      <description>&lt;h2 id="1-введение2-обзор-framework3-жизненный-цикл-страницы4-полезные-объекты-и-функции"&gt;&lt;a href="#intro"&gt;1. Введение&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;a href="#overview"&gt;2. Обзор framework&amp;rsquo;а&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;a href="#lifecycle"&gt;3. Жизненный цикл страницы&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;a href="#features"&gt;4. Полезные объекты и функции&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;h2 id="1-введение"&gt;1. Введение&lt;/h2&gt;
&lt;p&gt;В предыдущем посте из этой серии (&lt;a href="http://blog.e0ne.info/post/ASPNET-Ajax-Part1-Look-Inside.aspx"&gt;ASP.NET Ajax. Часть 1: что внутри?&lt;/a&gt;) я рассказал что такое AJAX и как Microsoft помогает нам его использовать. Сегодня я более подробно расскажу о его клиентской части. Частично из-за того, что эту информацию не так просто найти в MSDN, как хотелось бы, частично  из-за того, что в последнее время Microsoft уделяет этой части всё меньше внимания, агитируя использовать jQuery, многие разработчики даже на догадываются какой мощных инструмент находится у них в руках.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTML Decode/Encode и URL Decode/Encode - что, когда и зачем использовать?</title>
      <link>https://blog.e0ne.info/post/html-decodeencode-and-url-decodeencode-what-when-and-why-to-use/</link>
      <pubDate>Fri, 03 Sep 2010 11:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/html-decodeencode-and-url-decodeencode-what-when-and-why-to-use/</guid>
      <description>&lt;h2 id="html-decodeencode"&gt;HTML Decode/Encode.&lt;/h2&gt;
&lt;p&gt;Если кто-то слышал об такой атаке на веб-сайты, как XSS Injection, то он(она) знает что для предотвращение такой атаки необходимо использовать функции HtmlEncode/HtmlDecode. XSS Injection (Cross-site injection) - один из способов атак веб-приложений, главной идеей которого является вставка(инъекция) чужого javascript-кода на атакуемый веб-сайт. Как минимум, это может привести к краже печенек cookies и получении прав администратора сайта. &amp;hellip;&lt;/p&gt;
&lt;h3 id="11-aspnet"&gt;1.1. ASP.NET&lt;/h3&gt;
&lt;p&gt;Это происходит, примерно, так:&lt;!-- raw HTML omitted --&gt;Допустим, у нас есть форма для отправки комментарием, где пользователь вводит свой еmail и текст коммеентария. Самый простой обработчик кнопки добавить окмментарий будет выглядить так:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET - что почитать начинающему разработчику?</title>
      <link>https://blog.e0ne.info/post/aspnet-what-to-read-for-beginner-developer/</link>
      <pubDate>Tue, 17 Aug 2010 21:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-what-to-read-for-beginner-developer/</guid>
      <description>&lt;p&gt;В декабре прошлого года я написал пост по названием “&lt;a href="http://blog.e0ne.info/post/dotnetframework-how-to-start.aspx"&gt;Программирование на .NET: С чего начать?&lt;/a&gt;” на тему того, чтобы почитать начинающим разработчикам на платформе .NET. С того момента прошло достаточное количество времени и могло появиться желание или необходимость, начать писать веб-приложения на основе технологиеи ASP.NET. Не важно, будет это ASP.NET Webforms или ASP.NET MVC - в любом случаем, знание одной технологии не мешает познакомиться с другой. Далее я приведу список книг/блогов, которые рекомендую для знакомства с веб-разработкой на основе .NET Framework.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JQuery Tips: маленькие, но полезные скрипты</title>
      <link>https://blog.e0ne.info/post/jquery-tips-small-but-usefull-scripts/</link>
      <pubDate>Tue, 10 Aug 2010 22:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/jquery-tips-small-but-usefull-scripts/</guid>
      <description>&lt;p&gt;Те, кто с помощью &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; написал уже не одну сотню, а может и тысячу строк javascript-кода, в этом посте врядли найдут много нового и/или интересного. Пост рассчитан на разработчиков, которые только начинают знакомиться со всей мощью бтблиотеки &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;. В нем я дам несколько примеров скриптов, которые я время от времени использую с небольшим количеством изменений или вообще без таковых.&lt;/p&gt;
&lt;p&gt;[Добавлено перед публикацией поста]&lt;!-- raw HTML omitted --&gt;Все примеры достаточно просты, большинство (5 штук!) взяты из документации, но они активно используются мной и я решил сделать пост-заметку для себя. Может, еще кому-то будет полезно. Те, кто не использует &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; либо другую библиотеку (еще остались такие?) поймут, что эти несколько строк кода в каждом примере иногда заменяют десятки строк кода на javascript’е без использования сторонних библиотек и своих велосипедов.&lt;!-- raw HTML omitted --&gt;[/Добавлено перед публикацией поста]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visual Studio Debugger: одна интересная особенность</title>
      <link>https://blog.e0ne.info/post/visual-studio-debugger-one-interesting-feature/</link>
      <pubDate>Wed, 21 Jul 2010 15:10:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/visual-studio-debugger-one-interesting-feature/</guid>
      <description>&lt;p&gt;Когда приложение работает в дебаггере, но не работает в релизной сборке и/или не тестовом сервере - достаточно частое явление, а вот чтоб наоборот - значительно реже. Вернее я на днях с этим столкнулся чуть ли не в первые.&lt;/p&gt;
&lt;p&gt;Ситуация была довольно таки простая: есть некий wizard, шаги которого хранятся в поле типа Stack для удобного перемещения вперёд-назад. Естественно, в зависимости от текущего номера шага, нужно было выполнять определённые действия. И вот, после очередного багфикса, пришлось с помощь дебаггера разбираться что же там происходит&amp;hellip; Но, при дебагге время от времени (в начале мне было абсолютно непонятно из-за чего это происходит) я получал: &lt;strong&gt;&lt;strong&gt;System.InvalidOperationException: Stack empty&lt;/strong&gt;&lt;/strong&gt;. И это при том, что без дебаггера всё работало! Чтоб разобраться в чем дело, я решил написать маленькое консольное приложение (исходники, как всегда, прикреплены к посту), которое состояло из объявления стека, его наполнения и свойства класса StackItem:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Делаем Hover control с ипользованием ASP.NET и jQuery</title>
      <link>https://blog.e0ne.info/post/make-hover-control-with-aspnet-and-jquery/</link>
      <pubDate>Mon, 14 Jun 2010 15:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/make-hover-control-with-aspnet-and-jquery/</guid>
      <description>&lt;p&gt;В связи с тем, что я повсеместно пытаюсь избавиться от &lt;a href="http://www.asp.net/ajax/AjaxControlToolkit/Samples/"&gt;ASP.NET AJAX Control Toolkit (ACT)&lt;/a&gt; и перейти на использование &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, то от использования Hover Extender от ACT пришлось отказаться. Сразу же было найдено большое количество разнообразных плагинов для jQuery, но большинство из них имели недостаточную реализацию, из-за чегоостановился на &lt;a href="http://theezpzway.com/2009/3/17/jquery-plugin-ezpz-tooltip"&gt;jQuery plugin EZPZ Tooltip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Из основных достоинств данного плагина хочется выделить:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Чистый&amp;rdquo; HTML - не нужно добавлять специальные атрибуты для элементов, плагин завязывается на отдельный HTML элемент.&lt;/li&gt;
&lt;li&gt;Конфигурация через наименование (Convention over configuration) - поведение элементов зависит от из ID.&lt;/li&gt;
&lt;li&gt;Гибкие настройки - с помощью CSS можно настроить как внешний вид контрола, так и его позиционирование.&lt;/li&gt;
&lt;li&gt;Возможность замены стандартных эффектов путем перехвата соответствующих событий на jQuery.&lt;/li&gt;
&lt;li&gt;Удобство и простота работы.&lt;/li&gt;
&lt;li&gt;Маленький размер - 4.5K в сжатов виде.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Более подробно о всем этом можно почитать на &lt;a href="http://theezpzway.com/2009/3/17/jquery-plugin-ezpz-tooltip"&gt;странице&lt;/a&gt; проекта, а я хочу рассказать как можно его использовать в связке с ASP.NET на примере простого UserControl.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DevConf 2010</title>
      <link>https://blog.e0ne.info/post/devconf-2010/</link>
      <pubDate>Sun, 16 May 2010 12:01:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/devconf-2010/</guid>
      <description>&lt;p&gt;&lt;a href="http://devconf.ru/"&gt;DevConf &lt;/a&gt;2010 уже завтра. До поезда в Москву осталось чуть более 3-х часов. Посмотрел финальную програму и немного расстроился: даже не смотря на то, что едем мы вдвоём, из-за плотного расспеисания и немкольких паралельных потоков врядли получится попасть на все интересующие доклады :(. Надеюсь что организаторы запишут и выложут видео.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cеминар Бизнес в интернете</title>
      <link>https://blog.e0ne.info/post/imarketing/</link>
      <pubDate>Wed, 28 Apr 2010 17:14:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/imarketing/</guid>
      <description>&lt;p&gt;В прошлую субботу в запорожье прошел семинар &lt;a href="http://imarketing.zp.ua/"&gt;&amp;ldquo;Бизнес в интернете: практика создания и продвижения интернет-магазина&amp;rdquo;&lt;/a&gt;, который я посетил с моими друзьями из &lt;a href="http://compik.biz.ua/"&gt;Compik&lt;/a&gt;&amp;lsquo;a. Сразу же хочется отметить неудобный график поездов из Харькова: мы приехали в Запорожье, примерно, в 3:30 утра(ночи) и почти до 8 утра сидели на вокзале. Соответственно на протяжении большей части семинара усталость и плохой сон давали о себе знать.&lt;/p&gt;
&lt;p&gt;Дня за 4-5 организаторы у себя на сайте написали новость, что осталось всего 5 мест. Как оказалось, это был хороший рекламный ход, т.к. в помещение, где всё и происходило, вполне комфортно могло бы поместиться ещё 10-15 человек. Говоря о помещении хочется сказать что оно не сильно подходило для работы проектора: было слишком светло, а окна были без занавесок. Ещё из недостатков организации был то что докладчикам приходилось подавать какие-то знаки для того, чтоб им переключали слайды и не все были готовы к тому, что презентации будут показываться с помощью google docs. Ещё маленикий осадок оставило то, что программу семинара незначительно сдвинули по времени (5-10 минут) из-за чего мой органайзер напоминал о докладах не в то время.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNETA. Материалы доклада Introducing to DLR</title>
      <link>https://blog.e0ne.info/post/uneta--introducing-to-dlr-sources/</link>
      <pubDate>Mon, 19 Apr 2010 12:42:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/uneta--introducing-to-dlr-sources/</guid>
      <description>&lt;p&gt;В прошлую пятницу прошла очередная встреча юзер-группы &lt;a href="http://uneta.com.ua/"&gt;UNETA&lt;/a&gt;, На которой я делал доклад на тему &amp;ldquo;Введение в DLR&amp;rdquo; и затронул тему &lt;a href="http://ironpython.codeplex.com/"&gt;IronPython&lt;/a&gt;. Надеюсь, что вскоре найду время и напишу несколько более детельных постов на эту тему.&lt;/p&gt;
&lt;p&gt;P.S. Для запуска проекта необходима Visual Studio 2010 и IronPython 2.6.1. Также использовалась библиотека &lt;a href="http://json.codeplex.com/"&gt;json.codeplex.com/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.e0ne.info/file.axd?file=2010%2f4%2fIntroducing_to_DLR.ppt"&gt;Introducing_to_DLR.ppt (352.00 kb)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.e0ne.info/file.axd?file=2010%2f4%2fIntroducingToDLR.rar"&gt;IntroducingToDLR.rar (2.25 mb)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>QUnit - тестируем JavaScript</title>
      <link>https://blog.e0ne.info/post/qunit-unit-test-framework-for-javascript/</link>
      <pubDate>Fri, 12 Feb 2010 10:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/qunit-unit-test-framework-for-javascript/</guid>
      <description>&lt;p&gt;Разработчики JavaScript-фреймворка &lt;a href="http://jquery.com/"&gt;JQuery &lt;/a&gt;не перестают нас удивлять. После недавнего релиза &lt;a href="http://blog.jquery.com/2010/01/29/14-days-of-jquery-summary-days-8-14-jquery-1-4-1-released/"&gt;JQuery 1.4.1&lt;/a&gt; нам представили инструмент для unit-тестирования кода, написанного на JavaScript - &lt;a href="http://docs.jquery.com/QUnit"&gt;QUnit&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;В данный момент поддерживаются такие функции как expect(), equals(), ok(), same(), log() и асинхронные тесты. Вместе с фреймворком распространяется css-файл, с помощью которого можно быстро и красиво выводить результаты тестов. Также разработчики активно используют его для тестирования самого JQuery, поэтому можно посмотреть уже готовые приверы от авторов фреймворка.&lt;/p&gt;
&lt;p&gt;P.S. Что-то подсказывает мне что не загорами плагин для FireBug, по крайней мере, мне бы этого хотелось&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>IScriptControl - реализация Ajax Client Control</title>
      <link>https://blog.e0ne.info/post/iscriptcontrol-ajax-client-control-implementation/</link>
      <pubDate>Fri, 05 Feb 2010 13:20:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/iscriptcontrol-ajax-client-control-implementation/</guid>
      <description>&lt;p&gt;Почему-то, не смотря на свойственную для всех программистов лень (и не надо спорить, иначе бы мы не писаи кучу софта, который упрощает на жизнь и позволяет более легким способом добиться желаемого результата), все многие пытаются изобрести свой велосипед.&lt;/p&gt;
&lt;p&gt;Я и сам придумал не один способ, как обмениваться данными между серверной и клиентской частью контрола. Но всегда догадывался, что есть более простой и &amp;ldquo;правильный&amp;rdquo; путь, особенно, когда смотрел на реализацию контролов из набора AjaxControlToolkit,&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Offtopic] Заметка о кроссплатформенности</title>
      <link>https://blog.e0ne.info/post/crossplatform-software/</link>
      <pubDate>Fri, 05 Feb 2010 00:35:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/crossplatform-software/</guid>
      <description>&lt;p&gt;Устанавливая новое SDK для Google App Engine подумал о кроссплатформенности. Для себя решил что кроссплатформенность это:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;для пользователя: везде и на всех компьютерах вeсь необходимый ему софт выглядит и работает одинаково;&lt;/li&gt;
&lt;li&gt;для разработчика: код в любой среде компилируется с одними и теми же ключами для компилятора.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>Запоздалый отчёт о Pycamp</title>
      <link>https://blog.e0ne.info/post/late-report-about-pycamp/</link>
      <pubDate>Mon, 01 Feb 2010 17:08:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/late-report-about-pycamp/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Регистрация началась немного раньше 9:00, т.к. уже в 8:30 у входа уже набралось такое количество людей, что уже все не помещались в вестибюле. При регистрации дали расписание докладов и немного спонсорской рекламы. Получил в гардеробе жетончик с номером “1” :).&lt;/p&gt;
&lt;p&gt;10:00. Все ждут начала ивента, которое будет на 15 минут позже рннее заявленного времени. Есть весплатный wi-fi. В зале людй достаточно много, но всё-равно осталось много бейджиков для зарегистрированных участников.&lt;/p&gt;</description>
    </item>
    <item>
      <title>30 января - PyCamp Kyiv</title>
      <link>https://blog.e0ne.info/post/30-january-pycamp-kyiv/</link>
      <pubDate>Wed, 06 Jan 2010 12:53:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/30-january-pycamp-kyiv/</guid>
      <description>&lt;p&gt;30 января в Киеве пройдёт &lt;a href="http://pycamp.org.ua/"&gt;PyCamp&lt;/a&gt;. Вчера стал доступен список докладов, хотя и не полный. Не то, чтобы меня заинтересовали все темы, но всё-равно поеду. Надеюсь на то, что оранизация кампа пройдёт на достойном уровне и я не пожалею о зря потраченном времени.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Программирование на .NET: С чего начать?</title>
      <link>https://blog.e0ne.info/post/dotnetframework-how-to-start/</link>
      <pubDate>Wed, 16 Dec 2009 14:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/dotnetframework-how-to-start/</guid>
      <description>&lt;p&gt;Случилось так, что на работе попросили составить список из того, что нужно почитать/скачать/установить студентам, которые хотят писать на всеми любимом языке программирования C#. Решили, что раз они (студенты) этим интересуются, то вопрос &amp;ldquo;а оно нам(им) надо пропускаем.&lt;/p&gt;
&lt;p&gt;Для начала начала необходимо установить сам .NET framework и какуе-то IDE. C IDE вариантов не много: или бесплатные express версии (&lt;a href="http://www.microsoft.com/exPress/"&gt;http://www.microsoft.com/exPress/&lt;/a&gt;), или trial полнофункциональной Visual Studio (&lt;a href="http://www.microsoft.com/visualstudio/en-us/default.mspx"&gt;http://www.microsoft.com/visualstudio/en-us/default.mspx&lt;/a&gt;). Что дальше делать с триальной версией - каждый решает сам, но для студентов полно всяких програм, где можно получить всё это бессплатно и, главное, легально.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Offtopic] Установка PostgreSQL на MacOS X или ностальгия по MS DOS</title>
      <link>https://blog.e0ne.info/post/offtopic-setup-postgresql-on-macos-x/</link>
      <pubDate>Thu, 10 Dec 2009 23:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/offtopic-setup-postgresql-on-macos-x/</guid>
      <description>&lt;p&gt;Первая попытка установить PostgreSQL на MacOS X потерпела крах. Пошел читать &lt;strong&gt;readme&lt;/strong&gt;:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Вспомнились танцы с бубном в MS Dos, чтоб тот увидел больше 640К оперативной памяти, работа с extension memory (привет Паскалю). А чего стоит знаменитая фраза одного известного всем человека, о том, что нам таки хватит 640К ОЗУ. А ностальгия скорее не о ДОСе, а о том, как раньше писал код (некоторые и сейчас так пишут): оптимизировали память так, чтоб лишнего байта не занимало. А как доставалось тогда Windows&amp;rsquo;у? Лишние лишние файлы, процессы, записи в реестре дезжалостно удалялись для прибавления 1-2 мегабайт свободной оперативной памяти и нескольких десятков мег на винте. А сейчас словил OutOfMemoryException, когда процесс IIS&amp;rsquo;а в виртуалке начал есть более одного гига&amp;hellip; Завтра буду искать memory leaks&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>jQuery 1.4 Alfa 1</title>
      <link>https://blog.e0ne.info/post/jquery-14-alfa-1/</link>
      <pubDate>Mon, 07 Dec 2009 12:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/jquery-14-alfa-1/</guid>
      <description>&lt;p&gt;Несколько дней назад вышла новая версия популярного JavaScript framework&amp;rsquo;а jQuery, пока только альфа, которую сами разработчики не рекомендуют использовать в production. Официальная информация на блоге &lt;a href="http://blog.jquery.com/2009/12/04/jquery-14-alpha-1-released"&gt;http://blog.jquery.com/2009/12/04/jquery-14-alpha-1-released&lt;/a&gt;, а я расскажу о своих первых впечатлениях по сравнению с последней стабильной версией 1.3.2.&lt;/p&gt;
&lt;p&gt;Для начала сравним размеры файлов:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Видем что размер вырос, примерно, на 30 килобайт. Много это или мало - судите сами.&lt;/p&gt;
&lt;p&gt;Пока в целях тестирования подключил библиотеку к двум проектам, где jQuery спользуется не так активно, но, в моём случае, вся функциональнось работает как и работала, ничего не поламалось, плагины успешно работают. Сравнивать производительность с ранней считаю нецелесообразным, т.к. к релизу, а то и к следующим версиям всё может поменяться как в лучшую, так и худшую стороны.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Прошло два года...</title>
      <link>https://blog.e0ne.info/post/two-years-with-blog/</link>
      <pubDate>Fri, 04 Dec 2009 12:41:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/two-years-with-blog/</guid>
      <description>&lt;p&gt;В прошлом месяце болгу исполнилось 2 года. За это время поменялось 3 хостинга, 2 движка блога (после переезда с blogspot.com был выбран BlogEngine.NET). Сейчас свотрю всё больше в сторону WordPress, который написан на нелюбимом мной PHP, но не такой сырой, как движки на .NET или Python. Или прийдётся таки дописывать самостоятельно нужную функциональность к BlogEngine, но на это нужно время. Также изменился вид RSS-ленты: теперь в ней виден весь пост.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASPNET: Script Service</title>
      <link>https://blog.e0ne.info/post/aspnet-script-service/</link>
      <pubDate>Thu, 03 Dec 2009 23:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-script-service/</guid>
      <description>&lt;p&gt;Почему-то, всегда забываю синтаксис вызова script service/method. Руки так и тянуться написать:&lt;/p&gt;
&lt;p&gt;И каждый раз, после написания такого когда приходится лезть в MSDN/Google чтобы понять почему же оно не работает. После прочтения документации становится понятно &amp;ldquo;как&amp;rdquo; нужно писать вызов метода, но вопрос &amp;ldquo;почему&amp;rdquo; ответ, как правило, находится не сразу. Чтобы понять почему же всё работает именно так, достаточно посмотреть JavaScript код, который генерируется службой. Посмотреть это можно зайдя по адресу http://localhost:65456/AsmxService.asmx/js и сохранив себе js-файл следующего содержания:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Запуск 32-х битных веб сайтов на Windows Server 2008 x64</title>
      <link>https://blog.e0ne.info/post/running-x86-web-applications-on-windows-server-2008-x64/</link>
      <pubDate>Tue, 17 Nov 2009 15:17:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/running-x86-web-applications-on-windows-server-2008-x64/</guid>
      <description>&lt;p&gt;Всё началось с того, что на один из тестовых серверов поставили 64-х битную ОС. Особых проблем это не вызвало, за исключением того, что обна из сборок использует COM -объекты и появилась необходимость её сборки для платформы x86. Вот сдесь уже начали появляться первые подводные камни.&lt;/p&gt;
&lt;p&gt;Первым делом я в свойствах проекта поменял свойство Platform Target (посже оказалось что это нужно сделать для всех проектов в solution):&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.e0ne.info/file.axd?file=PlatrormTestWeb.zip"&gt;PlatrormTestWeb.zip (10.01 kb)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Байты, строки и кодировки</title>
      <link>https://blog.e0ne.info/post/bytes-symbols-and-encoding/</link>
      <pubDate>Fri, 16 Oct 2009 15:18:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/bytes-symbols-and-encoding/</guid>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  byte[]	byteArray = GetBytes();&amp;lt;br /&amp;gt;		var retval = Encoding.ASCII.GetString(byteArray);
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;И что самое страшное в этом, так это то, что если байты представляют собой символы латинского алфавита, то, в большинстве случаев, всё будет замечательно работать. А когда работать оно перестаёт в содержимое строки примерно такое:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  &amp;quot;\u0000&amp;quot;\u0000a\u0000&amp;quot;\u0000:\u00002\u00000....&amp;quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Тогда все начинают громко ругаться и рвать на себе волосы со словами: &amp;ldquo;Ну ведь работало же! Да и вот в этом(&lt;a href="http://www.google.com.ua/search?rlz=1C1GGLS_enUA335US335&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=c%23+byte+array+to+string"&gt;http://www.google.com.ua/search?rlz=1C1GGLS_enUA335US335&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=c%23+byte+array+to+string&lt;/a&gt;) примере так написано!&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Программания 2009: Вести с полей</title>
      <link>https://blog.e0ne.info/post/d09fd180d0bed0b3d180d0b0d0bcd0bcd0b0d0bdd0b8d18f-2009-d092d0b5d181d182d0b8-d181-d0bfd0bed0bbd0b5d0b8/</link>
      <pubDate>Sat, 10 Oct 2009 11:21:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09fd180d0bed0b3d180d0b0d0bcd0bcd0b0d0bdd0b8d18f-2009-d092d0b5d181d182d0b8-d181-d0bfd0bed0bbd0b5d0b8/</guid>
      <description></description>
    </item>
    <item>
      <title>Программания 2009</title>
      <link>https://blog.e0ne.info/post/d09fd180d0bed0b3d180d0b0d0bcd0bcd0b0d0bdd0b8d18f-2009/</link>
      <pubDate>Fri, 09 Oct 2009 12:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09fd180d0bed0b3d180d0b0d0bcd0bcd0b0d0bdd0b8d18f-2009/</guid>
      <description>&lt;p&gt;Завтра состоится очередной конкурс Программания. Другой формат. Не понятно зачем его таки делать. IMHO, лучше б уже не было. Заявку подал, но участие под вопросом.&lt;/p&gt;
&lt;p&gt;P.S. Верните нам IT-Contest!&lt;/p&gt;
&lt;p&gt;P.S.S. Получился не пост в блог, а сообщение для твиттера. &lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET + Mono + Apache</title>
      <link>https://blog.e0ne.info/post/aspnet-mono-and-apache/</link>
      <pubDate>Tue, 22 Sep 2009 01:23:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-mono-and-apache/</guid>
      <description>&lt;p&gt;Всё больше и больше можлно услышать о &lt;a href="http://go-mono.com/"&gt;Mono&lt;/a&gt;. Как изестно, основное его идеей является реализация действительно кроссплатформенной среды .NET. Таким образом, чеще всего Mono испльзуют в операционной системе, отличной от MS Windows. А если не Windows, то Linux или какой-то из Unix. И всё было бы хорошо, если б не 2 момента (в данном случае я не акцентрирую внимание на степень готовности реализации Mono: аналог WinForms и замена Internet Information Services (IIS).На за мену WinForms приходят GTK, QTи другие библиотеки. А вот с заменой IIS все не тах хорошо: либо Apache с соответствующими модуляли, либо &amp;ldquo;родной&amp;rdquo; для Mono веб-сервер XSP2. А так как Apache наиболее популярен, то будем пользоваться им.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Patterns &amp; Practices Roadshow</title>
      <link>https://blog.e0ne.info/post/patterns-and-practices-roadshow/</link>
      <pubDate>Thu, 17 Sep 2009 13:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/patterns-and-practices-roadshow/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Началось всё со вступительного слова представителя компании Microsoft Ukraine. Хотя, на самом деле всё началось с регистрации, где нам вдали пакеты с анкетой, ручкой и каким-то учебником для ВУЗов на украинском языке и кофе.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Вторым на сцену вышел Don
Smith, которого встретили бурными авациями в том числе и из-за его Mac Book Pro, на котором оказалась установленная Windows 7.
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
Тут доклады немного пеменялись местами и мы услышали  доклад &amp;ldquo;Руководство по архитектуре приложений: карта
вашего путешествия&amp;rdquo;, который должен был быть после обеда. Но хуже от этого не стало. Нам рассказали о &amp;ldquo;Application Architecture Guide&amp;rdquo;, котором написано, что он создан для разработки решений на платформе .NET, но, по сути, может быть использован при использовании и других технологий. Это же нам подтвердил Дон. Application Architecture Guide рассазывает нам о высокоарзхитектурных решениях, не вдаваясь в подробности реализации конкретных частей приложений. Думаю, что это будет интересно не только архитекторам, но и всем разработчикам. Поэтому рекомендую прочесть этот почти 400-страничный мануал.&lt;/p&gt;</description>
    </item>
    <item>
      <title>День программиста! Developer's Day!</title>
      <link>https://blog.e0ne.info/post/developers-day/</link>
      <pubDate>Sun, 13 Sep 2009 17:12:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/developers-day/</guid>
      <description></description>
    </item>
    <item>
      <title>А вы говорите индусский код...</title>
      <link>https://blog.e0ne.info/post/bad-usa-code/</link>
      <pubDate>Mon, 31 Aug 2009 16:47:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/bad-usa-code/</guid>
      <description>&lt;p&gt;internal class LinqConnection: BaseDatabaseConnection&lt;!-- raw HTML omitted --&gt;{&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;   /// &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;   /// Should never be called&lt;!-- raw HTML omitted --&gt;   /// &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;   internal LinqConnection()&lt;!-- raw HTML omitted --&gt;   {&lt;!-- raw HTML omitted --&gt;       throw new Exception();&lt;!-- raw HTML omitted --&gt;   }&lt;!-- raw HTML omitted --&gt;   &amp;hellip;&lt;/p&gt;
&lt;p&gt;} &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Написали программисты из США. И это ещё далеко не самый плохой кусок кода в проекте&amp;hellip;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog was hacked: vol.2 или разбор полётов</title>
      <link>https://blog.e0ne.info/post/blog-was-hacked-vol2/</link>
      <pubDate>Mon, 17 Aug 2009 23:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/blog-was-hacked-vol2/</guid>
      <description>&lt;p&gt;В то время, пока я не мог найти время разобраться что же случилось с моим блогом, это случилось снова! 2 раза за два дня - это слишком.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  		**2009-08-16 17:39:33 81.215.238.234 - W3SVC119 WINHOSTING2 194.54.88.53 80 PUT /index.html - 201 0 330 347 16 HTTP/1.0 Microsoft+Data+Access+Internet+Publishing+Provider+DAV+1.1 - -** 
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  		 
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Это случилось: Blog was hacked!</title>
      <link>https://blog.e0ne.info/post/my-blog-was-hacked/</link>
      <pubDate>Fri, 07 Aug 2009 12:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/my-blog-was-hacked/</guid>
      <description>&lt;p&gt;Да, это всё-таки случилось. Товарищ по имени ZoRRoKiN хакнул мой блог. Произошло это, судя по всему, из-за моей глупости: лёгкий пароль на админку + старая и бажная версия движка &lt;a href="http://www.dotnetblogengine.net/"&gt;BlogEngine.NET&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;А случилось вот что:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;На хочтинг были залиты файлы:
- default.html, zorrokin.htm, index.html с следующим содержанием:
 &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	ZoRRoKiN
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; 
-  ownz.htm с текстом:&lt;!-- raw HTML omitted --&gt;				Command Tribulation Ownz your b0x
 &lt;/p&gt;</description>
    </item>
    <item>
      <title>Project dependences и project references: делаем это правильно</title>
      <link>https://blog.e0ne.info/post/right-way-for-project-dependences-and-project-references/</link>
      <pubDate>Thu, 23 Jul 2009 15:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/right-way-for-project-dependences-and-project-references/</guid>
      <description>&lt;p&gt;Раньше всегда это делал настолько автоматически, что даже и не задумывался что это млжно делать по-другому. Но когда столкнулся с такой проблемой в текущем проекте - решил написать.&lt;/p&gt;
&lt;p&gt; Рассмотрим такую ситуацию: у нас есть главная сборка (Main), сборка с утилитными классами (Utils) и 3-rd party логгер (Logger):&lt;/p&gt;
&lt;p&gt; 
1. Добавляем в наш solution нужные нам проекты.																	1. Добавляем ссылки на проекты.
&lt;a href="https://blog.e0ne.info/file.axd?file=ReferencesSample.zip"&gt;ReferencesSample.zip (76.14 kb)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>SourceGear Vault и ошибка при коммите</title>
      <link>https://blog.e0ne.info/post/sourcegear-vault-commin-error/</link>
      <pubDate>Tue, 21 Jul 2009 15:27:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/sourcegear-vault-commin-error/</guid>
      <description>&lt;p&gt;На проекте приходится использовать SourceGear Vault - source control система, которая очень похожа на VSS. Сегодня наткнулся на очередной глюк:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>Интересная особенность Enum</title>
      <link>https://blog.e0ne.info/post/one-interesting-enum-feature/</link>
      <pubDate>Fri, 17 Jul 2009 13:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/one-interesting-enum-feature/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Те, кто знает на память книгу Дж.Рихтера C# via .NET, в этом врядли найдут для себя что-то новое/интересное.&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt; Всё началось с того, что было у меня два похожих enum&amp;rsquo;ов (к примеру Numbers и BigNumbers) и нужно было как-то переменные первого типа приводить к другом, и наоборот. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;** enum Numbers**&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;**     {**&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;**         One,**&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;**         Two,**&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;**         Three**&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;**     }**&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;**&lt;!-- raw HTML omitted --&gt; **&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript: удаляем элементы из массива</title>
      <link>https://blog.e0ne.info/post/javascript-remove-items-from-array/</link>
      <pubDate>Fri, 03 Jul 2009 10:18:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/javascript-remove-items-from-array/</guid>
      <description>&lt;p&gt;Решая на первый взгляд простую задачу я столкнулся с некоторыми поблемами. Задача состоит в том, чтобы из массива удалить один из его элементов. Оказалось, что стандартными средствами JavaScript этого не сделать.&lt;/p&gt;
&lt;p&gt;Итак, у нас есть исходный массив:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
&amp;lt;em&amp;gt;var arr = new Array();&amp;lt;br /&amp;gt;
arr.push('q');&amp;lt;br /&amp;gt;
arr.push('w');&amp;lt;br /&amp;gt;
arr.push('a');&amp;lt;br /&amp;gt;
arr.push('e');&amp;lt;br /&amp;gt;
arr.push('r');&amp;lt;br /&amp;gt;
arr.push('t');&amp;lt;br /&amp;gt;
arr.push('z');&amp;lt;br /&amp;gt;
arr.push('y'); &amp;lt;/em&amp;gt;
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Задача состоит в том, чтобы удалить из него элементы со значениями &amp;ldquo;a&amp;rdquo; и &amp;ldquo;z&amp;rdquo;. Первой же идеей было использование оператора delete:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET, сэссия и рестарт приложения</title>
      <link>https://blog.e0ne.info/post/aspnet-session-and-application-restart/</link>
      <pubDate>Tue, 09 Jun 2009 11:28:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-session-and-application-restart/</guid>
      <description>&lt;p&gt;Всё началось с того, что в спецификации к проекту написали примерно такое: &amp;ldquo;Время продолжительности сэссии пользователя на сайте должно составлять 120 минут&amp;rdquo;. После чего, в web.config была добавлена следующая строка: &lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
&amp;lt;em&amp;gt;&amp;lt;sessionState mode=&amp;quot;InProc&amp;quot; cookieless=&amp;quot;false&amp;quot; timeout=&amp;quot;120&amp;quot; /&amp;gt; 
&amp;lt;/em&amp;gt;
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;А на страницу был добавлен такой мета-тег:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
&amp;lt;strong&amp;gt;&amp;lt;meta http-equiv=&amp;quot;Refresh&amp;quot; content=&amp;quot;7200; URL=/EzRc/Pages/LogOn/SessionExpired.aspx&amp;quot; /&amp;gt; 
&amp;lt;/strong&amp;gt;
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Следует упомянуть конфигурацию  тестовых серверов: Windows Vista/2008, IIS7, .NET 3.5. Ничто не предвещало беды. Но, как и полагается, в один &amp;ldquo;прекрасный&amp;rdquo; день всеми людимые QA написали баг следующего содержания: &amp;ldquo;Session expiration occurs prior to 30 min (and as little as 10 min).&amp;rdquo; При этом повторить его было достаточно просто:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Встречаем новый язык программирования от Microsoft - Axum</title>
      <link>https://blog.e0ne.info/post/microsoft-axum/</link>
      <pubDate>Sun, 24 May 2009 14:33:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/microsoft-axum/</guid>
      <description>&lt;p&gt;Не успели мы ещё познакомитя с F# и новыми возможнастями .NET 4.0, как Microsoft представила новый язык программирования &lt;a href="http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx"&gt;Axum&lt;/a&gt; (на самом деле Axum был представлен ещё до выпуска первой бета-версии .NET 4.0). Раньше он имел коддовое название Maestro.&lt;/p&gt;
&lt;p&gt;Что же представляет собой Axum? Это язык для паралельной разработки (parallel model language), который позволяетлегко создавать легкомасштабируемые, распределённые и многопоточные приложения. Лично мне синтаксис этого языка напомнил &lt;a href="http://erlang.org/"&gt;Erlang&lt;/a&gt;, которые имеет изменённый синтаксис и является полностью .net-совместимым языком программирования. Текущяя версия - CTP. В данный момент не известно о дальнейшей судьбе и планах о релизе.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visual Studio 2010 and .NET Framework 4 Beta 1 доступны для скачивания</title>
      <link>https://blog.e0ne.info/post/visual-studio-2010-and-net-framework-4-beta-1/</link>
      <pubDate>Wed, 20 May 2009 22:43:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/visual-studio-2010-and-net-framework-4-beta-1/</guid>
      <description></description>
    </item>
    <item>
      <title>Pirates: to be or not to be.</title>
      <link>https://blog.e0ne.info/post/pirats-to-be-or-not-to-be/</link>
      <pubDate>Thu, 23 Apr 2009 16:11:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/pirats-to-be-or-not-to-be/</guid>
      <description>&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;Навеяно судовым процессом над The Pirate Bay.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Сейчас всё чаще от правообладателей звучат угрозы в сторону торрент трекеров в частности и пиратов в общем. Их позиция понятна: они теряют прибыль. Пользователям, с одной стороны - хорошо, надо тратить меньше денег, с другой - они получают менее качественный продукт, но &lt;!-- raw HTML omitted --&gt;на это многим наплевать&lt;!-- raw HTML omitted --&gt; многих это не беспокоит. А вот моё субъективное мнение.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visual Studio 2008: проблемы с генерацией .designer.cs для Web Application</title>
      <link>https://blog.e0ne.info/post/visual-studio-2008-problems-with-designer-cs-files-in-web-application/</link>
      <pubDate>Thu, 16 Apr 2009 13:03:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/visual-studio-2008-problems-with-designer-cs-files-in-web-application/</guid>
      <description>&lt;p&gt;Вчера столкнулся с интересным моментом при генерации *.designer.cs-файлов. Сначала подумал что это баг, но после недолгих размышлений пришел к выводу, что это не баг, а фича (&amp;ldquo;багофича&amp;rdquo; (с)). &lt;/p&gt;
&lt;p&gt;Всё началось с того, что на одной из страниц сайта нужно было создать некоторую функциональность, которая уже была доступна дадругой странице. Сразу же было решено поместить эу функциональность в UserControl.После достаточно стандартных действий, copy&amp;amp;pase нужной разметки из страницы в только что созданный контрол, уже собирался писать в нём логину, но&amp;hellip; Но студия ругалась на любое упоминание о вебконтроле, расположенном в mycontrol.ascx. &amp;ldquo;Странно&amp;rdquo; - подумал я и посмотрел содеримое файла mycontrol.ascx.designer.cs. В нём оказалось пусто. Тут же вспомнились похожие баги Visual Studio 2005 без установки на неё Service Pack 1 и было принято решение (как озакалось потом - ошибочное) руками дописать нужный код. Дописал. Сайт скомпилировался и даже попытался запуститься, но run-time ошибка не дала ему нормально функционировать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Offtopic: Архивы, архиваторы, Windows</title>
      <link>https://blog.e0ne.info/post/offtopic-d090d180d185d0b8d0b2d18b2c-d0b0d180d185d0b8d0b2d0b0d182d0bed180d18b2c-windows/</link>
      <pubDate>Mon, 13 Apr 2009 14:44:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/offtopic-d090d180d185d0b8d0b2d18b2c-d0b0d180d185d0b8d0b2d0b0d182d0bed180d18b2c-windows/</guid>
      <description>&lt;p&gt;На работе возникла необходимость отправить архив с &amp;hellip;, с чем-то очень важным. По привычке, быстро сделал rar-архив, прикрепил его к письму и уже собирался нажать кнопку Send, но вовремя остановился. Вспомнил что в одном из писем мне присылали файлы, запакованы в zip-архив. Быстро переархивировал нужные файлы отправил письмо и задумался о Windows, Microsoft и архивах.&lt;/p&gt;
&lt;p&gt;Вчера скачивал &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&amp;amp;displaylang=en"&gt;Internet Explorer Application Compatibility VPC Image&lt;/a&gt;. И там некоторые образы запакованы в rar-архив. Замечу, что это не первый случай, когда на сайте Microsoft лежат rar-архивы. Обратил я на это внимание потому, что сама ОС Windows &amp;ldquo;из коробки&amp;rdquo; может работать только с zip-архивами. И как это безобразие понимать? Microsoft рекламирует WinRar? Субъективно, было бы логичнее сжимать всё в zip, чтобы разработчики не искали нужное ПО, чтобы разархивировать нужные архивы. Или предполагается, что после покупки и установки OS Windows её пользователю необходимо ещё скачать/купить/установить n-е количество софта? Странно всё это&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Немного offtopic'а</title>
      <link>https://blog.e0ne.info/post/d09dd0b5d0bcd0bdd0bed0b3d0be-offtopicd0b0/</link>
      <pubDate>Sun, 12 Apr 2009 22:44:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09dd0b5d0bcd0bdd0bed0b3d0be-offtopicd0b0/</guid>
      <description></description>
    </item>
    <item>
      <title>ASP.NET Ajax. Часть 1: что внутри?</title>
      <link>https://blog.e0ne.info/post/aspnet-ajax-part1-look-inside/</link>
      <pubDate>Thu, 02 Apr 2009 12:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-ajax-part1-look-inside/</guid>
      <description>&lt;p&gt;На днях столкнулся такой ситуацией, что &lt;!-- raw HTML omitted --&gt;многие&lt;!-- raw HTML omitted --&gt; некоторые разработчики при упоминании Ajax имеют в виду компонент UpdatePanel и не понимают как она работает. Сегодня я решил попытаться исправить эту ситуацию и рассказать что такое и как устроен ASP.NET Ajax.&lt;/p&gt;
&lt;p&gt; Для начала обратимся Википедии и посмотрим, что такое Ajax:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
AJAX (Asynchronous Javascript and XML — «асинхронный JavaScript и XML») — это подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными.
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Для выполнения асинхронных запросов, на JavaSctipt необходимо создать объект XMLHttpRequest, который и будет взаимодействовать с сервером. В зависимости от браузера, объект создаётся разными способами, но можно написать универсальный метод для его создания:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пути использования Open Source</title>
      <link>https://blog.e0ne.info/post/ways-to-use-open-source/</link>
      <pubDate>Fri, 27 Mar 2009 14:37:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/ways-to-use-open-source/</guid>
      <description>&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  На мысль натолкнуло исправление очередного бага в Ajax Control Toolkit.
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Часто мы в проектах, чтобы не изобретать велосипед, используем уже готовые инструменты. Иногда это open source приложения/библиотеки. И что делать, если нам не хватает функциональности этих библиотек или надо срочно исправить какуе-то ошибку? Первая же мысль - это взять исходники, подправить/дописать, после чего скомпилировать и радоваться жизни. Но радоваться будем недолго, до выхода новой версии этой замечательной библиотеке, в которой есть необходимые изменения. Приходится качать исходники, опять вносить туда свои изменение, компилировать и т.д. В процессе этого пишуться письма авторам библиотеке, создаются новые запись в ихнем багтрекере, но необходимых изменений в очередной версии мы так и не получаем.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic Language Runtime: динамические языки в .NET</title>
      <link>https://blog.e0ne.info/post/dynamic-language-runtime-dynamic-languages-in-dot-net/</link>
      <pubDate>Sat, 21 Mar 2009 14:18:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/dynamic-language-runtime-dynamic-languages-in-dot-net/</guid>
      <description>&lt;p&gt;&lt;a href="http://www.codeplex.com/dlr"&gt;Dynamic Language Runtime (DLR)&lt;/a&gt; - позволяет создавать свои динамические языки на платформе .NET. Сейчас самыми популярными из них являются IronPython и IronRuby. Также на просторах CodePlex существует &lt;a href="http://ironlisp.codeplex.com/"&gt;IronLisp&lt;/a&gt; и другие динамические языки. Последняя версия DLR имеет номер 0.9 и была выпущена 10 декабря 2008 года.&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;Кроме того, что DLR позволяет создавать динамические языки, она также позволяет добавлять динамические элементы в уже сеществующие языки: C# 4.0 уже использует DLR - смотрите в сторону IDynamicObject.  Если я правильно понял документ DLR Overview, то DLR 1.0 будет частью Common Language Runtime (CLR), выход которой уже не за горами.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Делаем Build правильно</title>
      <link>https://blog.e0ne.info/post/make-build-correct/</link>
      <pubDate>Fri, 20 Mar 2009 11:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/make-build-correct/</guid>
      <description>&lt;p&gt;Осталось реализовать ещё несколько методов&amp;hellip; Сейчас допишу последнюю строчку&amp;hellip; Проект пока что не компилируется&amp;hellip; Ура! Вот эта заветная строчка в окне Output Visual Studio:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Теперь предстоит запустить проект. Но все не так просто. Часто для проектов, которые больше чем знаменитый &amp;ldquo;Неllo World!&amp;rdquo; и который пишет команда из нескольких человек, необходимы какие-то условия для запуска:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- скопировать конфигурационный файл;			
- запустить веб-службу;			
- отправить письмо о успешном билде;			
- и т.д. и т.п.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>Первый взгляд на Microsoft Sync Framework</title>
      <link>https://blog.e0ne.info/post/first-look-to-the-microsoft-sync-framework/</link>
      <pubDate>Thu, 19 Mar 2009 13:10:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/first-look-to-the-microsoft-sync-framework/</guid>
      <description>&lt;p&gt;Пока все делятся впечатлениями от новинок, представленными на &lt;a href="http://2009.visitmix.com/"&gt;MIX09&lt;/a&gt;, я решил написать о &lt;a href="http://code.msdn.microsoft.com/sync/"&gt;Microsoft Sync Framework&lt;/a&gt;. Исходя из того, что сказано на их сайте, можно синхронизировать всё.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;  Microsoft	Sync Framework – a comprehensive synchronization platform enabling	collaboration and offline for applications, services and devices with	support for any data type, any data store, any transfer protocol, and	network topology.	
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Для чего это может пригодиться? Например, у нас есть клиент-серверное приложение, которое работает со списком товаров в магазине. Сервер один, а клиентов может быть несколько, и все они работают со своей версией базы данных, которую нужно время от времени синхронизировать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>It Works!</title>
      <link>https://blog.e0ne.info/post/it-works/</link>
      <pubDate>Wed, 18 Mar 2009 13:13:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/it-works/</guid>
      <description>&lt;p&gt;После значитального перерыва блог снова возобновил свою работу. Теперь, наконец-то он расположен на нормальном хостинге. До этого он находился на моём домашнем сервере и временами не работал (выключили свет, завис комп, забыл заплатить за инет), но после смены провайдера пришлось расстаться с выделенными IP-адресом, а платить за свой домен на сервисах, предоставляющих dynamic dns не хочется, пришлось задомуться о покупке хостинга. Банально, но решающим фактором оказалась цена. Выбор пал на наш украинский &lt;a href="http://hosting.ua"&gt;hosting.ua&lt;/a&gt;. После двух недель использования жалоб на него нет, хороший, почти круглосуточный (на некоторые вопорсы можно получить ответы по Skype или MSN круглосуточно, но на более технические вопросы через панель управления мне отвечали в течении рабочего дня) саппорт.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Подключаем базу от SQL Server Express к SQL Server Developer Edition</title>
      <link>https://blog.e0ne.info/post/sql-server-express-db-to-sql-server-developer-edition/</link>
      <pubDate>Fri, 06 Feb 2009 16:32:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/sql-server-express-db-to-sql-server-developer-edition/</guid>
      <description>&lt;p&gt;SQL Server Express хоть и бесплатен, но обладает некоторыми недостатками. Мне кажется для разработчика один из главных - это то, что он не соответствеут боевым условиям. Ведь мало кто использует Express версию в production. Поэтому разработчики часто ставят SQL Server Developer Edition (опустим вопрос о лицензировании). Вот только тут появляются новые проблемы: скачал новый starter kit, а он в качестве СУБД использует SQL Server Expres. Не ставить же его из-за этого? Хотя можно и поставить&amp;hellip;  Но я для себя выбрал другой путь: подключить эту базу к полноценному MS SQL серверу.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3.0 и Django</title>
      <link>https://blog.e0ne.info/post/python-3-and-django/</link>
      <pubDate>Thu, 22 Jan 2009 11:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/python-3-and-django/</guid>
      <description>&lt;p&gt;Новое - не всегда означает хорошее. Я когда-то уже писал про &lt;a href="https://blog.e0ne.info/post/IT-d0b3d0bed0bdd0bad0b8-d0b3d0bbd0b0d0b7d0b0d0bcd0b8-d0bfd180d0bed0b3d180d0b0d0bcd0bcd0b8d181d182d0b0.aspx"&gt;IT-гонки глазами программиста&lt;/a&gt;. Основная идея поста - не стоит спешить переходить на новее, если в этом нет крайней необходимости.&lt;/p&gt;
&lt;p&gt;Вот и после очередного релиза Python, правильнее сказать после выхода новой версии языка Python 3.0 захотелось сразу опробоватьвсе гого &amp;ldquo;вкустности&amp;rdquo;. Вот только новая версия не полностью совместима с веткой 2.х. Поэтому возникает вопрос на какой версии начинать новые проекты? Популярный web framework&lt;a href="http://www.djangoproject.com/"&gt;&lt;/a&gt;&lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; все ещё не пожжерживает Python версии 3.0. Вот что пишут их разработчики:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Новый релиз Mono 2.2</title>
      <link>https://blog.e0ne.info/post/mono-22/</link>
      <pubDate>Wed, 21 Jan 2009 09:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/mono-22/</guid>
      <description>&lt;p&gt;Делюсь моими впечатлениями от знакомства с &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;На прошлой неделе вышел очередной релиз &lt;a href="http://www.mono-project.com"&gt;Mono&lt;/a&gt; - open source реализации .Net framework, разрабатываемый при поддержке компаний &lt;a href="http://www.novell.com/"&gt;Novell&lt;/a&gt; и &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;. Подробно но нововведения можно почитать на странице проекта &lt;a href="http://www.mono-project.com/Release_Notes_Mono_2.2"&gt;http://www.mono-project.com/Release_Notes_Mono_2.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Радует, что Mono в последних версиях поддерживает C# 3.0. Также есть &lt;a href="http://www.go-mono.com/moonlight/"&gt;Moonlight 1.0&lt;/a&gt;  - аналог Silverlight 2.0. Для миграции существующих проектов есть утилита Mono Migration Analyzer, которая позволяет узнать будет ли работать существующий код под Mono. Хочу сказать, что запуск небольшого WinForms приложения написаного на .Net framework 3.5 прошел порблем, а вот с web-приложением все немного хуже. Оффицияльня IDE MonoDevelop не поддерживает Web Application проекты, созданные в VS2008, поэтому для открытия каккого-ннибудь сужествующего проекти или StarterKit пришлось создавать новый проект и вручную добавлять в него все необходимые файлы. По удобству работы MonoDevelopв данный момент существенно проигрывает своему старшему брату и конкуренту - VisualStudio, но работать вполне можно. За время её использования MonoDevelop не разу не упала, аботала стабильно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unit тесты и наследование</title>
      <link>https://blog.e0ne.info/post/unit-tests-and-inheritance/</link>
      <pubDate>Tue, 23 Dec 2008 14:33:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/unit-tests-and-inheritance/</guid>
      <description>&lt;p&gt;При разработке unit тестов в Visual Studio часто хочется создать какой-то базовый клас для тестирования базовой лоники. Например у нас есть такой класс:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;        [TestClass]&lt;!-- raw HTML omitted --&gt;
        public class PersonTestBase&lt;!-- raw HTML omitted --&gt;
        {&lt;!-- raw HTML omitted --&gt;
            [TestMethod]&lt;!-- raw HTML omitted --&gt;
            public virtual void GetNameTest()&lt;!-- raw HTML omitted --&gt;
            {&lt;/p&gt;
&lt;p&gt;                //&amp;hellip;&lt;!-- raw HTML omitted --&gt;
            }&lt;!-- raw HTML omitted --&gt;
        }&lt;/p&gt;
&lt;p&gt; и его класс наследник:&lt;!-- raw HTML omitted --&gt;
        [TestClass]&lt;!-- raw HTML omitted --&gt;
    public class CustomerTest: PersonTestBase&lt;!-- raw HTML omitted --&gt;
    {&lt;!-- raw HTML omitted --&gt;
        [TestMethod]&lt;!-- raw HTML omitted --&gt;
        public override void GetNameTest()&lt;!-- raw HTML omitted --&gt;
        {&lt;!-- raw HTML omitted --&gt;
            base.GetNameTest();&lt;!-- raw HTML omitted --&gt;
        }&lt;!-- raw HTML omitted --&gt;
    }&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oxite - блог-дижок на ASP.NET MVC</title>
      <link>https://blog.e0ne.info/post/oxite-blog-engine-written-using-asp.net-mvc/</link>
      <pubDate>Tue, 16 Dec 2008 15:28:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/oxite-blog-engine-written-using-asp.net-mvc/</guid>
      <description>&lt;p&gt;В начале этого месяца на &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; появился новый проект - &lt;a href="http://www.codeplex.com/oxite"&gt;Oxite&lt;/a&gt;. Некоторые сразу его восприняли как аналог WordPress - но, как мне кажется, судить об этом ещё рано. Главная особенность заключается, конечно же, в том, что он написан на ASP.NET MVC Beta. Первые ощущениея при его испольщзовании - работает быстрее Blog Engine. Сразу захотелось увидеть его в действии в боевых условиях, в данный момент пока это только сайт &lt;a href="http://visitmix.com/"&gt;http://visitmix.com/&lt;/a&gt;. К слову на Mix 09 будет официально представлен Oxite.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Настройка совместной работы ASP.NET MVC и IIS 6</title>
      <link>https://blog.e0ne.info/post/configuration-aspnet-mvc-and-iis-6/</link>
      <pubDate>Sun, 30 Nov 2008 11:10:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/configuration-aspnet-mvc-and-iis-6/</guid>
      <description>&lt;p&gt;Уже немала было написано на эту тему, но в статье &lt;a href="http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx"&gt;http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx&lt;/a&gt; пошли немного дальше: теперь url rewriting настроен таким образом, что нет необходимости в имени контроллера в пути прописывать расширение. Не буду утверждать что это что-то новое, но я до этого использовал пути вроде &lt;a href="http://localhost/mvcsite/home.mvc"&gt;http://localhost/mvcsite/home.mvc&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>IronPython и ASP.NET</title>
      <link>https://blog.e0ne.info/post/ironpython-and-aspnet-mvc/</link>
      <pubDate>Thu, 30 Oct 2008 11:10:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/ironpython-and-aspnet-mvc/</guid>
      <description>&lt;p&gt;В предыдущем &lt;a href="https://blog.e0ne.info/post/Hello-World-with-IronPython.aspx"&gt;посте&lt;/a&gt; я рассказал как подружить Visual Studio и IronPython. Сегодня мы напишем первое приложение на ASP.NET на языке IronPython.&lt;/p&gt;
&lt;p&gt;Для начала необходимо скачать &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=17613"&gt;ASP.NET Dynamic Language Support&lt;/a&gt;, который включает в себя документацию и два примера: ASP.NET MVC IronPython Sample и ASP.NET Webforms IronPython Sample. Webforms sample- это обычный web site проект с такими файлами:&lt;/p&gt;
&lt;p&gt;  &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt; К сожалению, в текущей версии не поддердивается проект Web Application.&lt;/p&gt;
&lt;p&gt;C ASP.NET MVC Sample всё на много интереснее. Т.к. Python - это динамичский язык и не поддерживает атрибутов, то код контроллеров приходится писать на C#. С model и view всё значитально проще. Можно использовать IronPython, только во view нужно указать Language=&amp;ldquo;IronPython&amp;rdquo;. В остальном создание приложение ничем не отличается от такового на C#.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Live ID становится провайдером для Open ID</title>
      <link>https://blog.e0ne.info/post/windows-live-id-becomes-an-openid-provider/</link>
      <pubDate>Tue, 28 Oct 2008 16:50:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/windows-live-id-becomes-an-openid-provider/</guid>
      <description>&lt;p&gt;Об этом говорили, спорили, но это призошло. Тепрь не нужно выбирать между Live ID и Open ID - достаточно использовать Live ID Open ID Provider. В данный момент он находится в стадии Comunity Technology Preview (CTP) и поддерживает протокол Open ID 2.0. Пока нет точных планов выпуска финальной версии, изветсно только что она выйдет в 2009-м году.&lt;/p&gt;
&lt;p&gt;Оригиннальне сообщение &lt;a href="http://dev.live.com/blogs/devlive/archive/2008/10/27/421.aspx"&gt;здесь&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем Hello World на IronPython</title>
      <link>https://blog.e0ne.info/post/hello-world-with-ironpython/</link>
      <pubDate>Tue, 21 Oct 2008 10:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/hello-world-with-ironpython/</guid>
      <description>&lt;p&gt;&lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt; - динамический язык с поддержкой .NET. Полностью совместим с оригинальным &lt;a href="http://python.org/"&gt;Python&lt;/a&gt;, но, в тоже время, позволяет пользоваться всеми преимуществами .net framework. Проект развивается комьюнити и поддерживается Microsoft. Оффициальный блог - &lt;a href="http://blogs.msdn.com/ironpython"&gt;http://blogs.msdn.com/ironpython&lt;/a&gt;. Текущая стабильная версия - 1.1.2, но уже сейчас доступна вполне рабочая 2.0 Beta 5, которая включает в себя множетсво баг-фиксов и другие изменения.&lt;/p&gt;
&lt;p&gt;Чтобы начать программировать на этом языке достаточно всего лишь скачать его дистрибутив и запустить его консоль. Только таким образом мы избавим себя от таких удобств, как:удобная IDE, подсветка кода, дебаггер и всё то, что помагает нам каждый день в порцессе разработки прилижений.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET MVC Beta</title>
      <link>https://blog.e0ne.info/post/aspnet-mvc-beta/</link>
      <pubDate>Fri, 17 Oct 2008 11:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-mvc-beta/</guid>
      <description>&lt;p&gt;Вышла первая бета &lt;a href="http://www.asp.net/mvc/"&gt;ASP.NET MVC &lt;/a&gt;Beta.&lt;/p&gt;
&lt;p&gt;Список нововведений:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- Добавлено новое меню &amp;quot;Add View&amp;quot; в Visual Studio.
-  Появилась папка \Scripts и поддержка jQuery.
- Встроенная поддержка Model Binder для комплексных типов.
- Перестроена инфраструктура Model Binder.
- Улучшены методы UpdateModel и TryUpdateModel.
- Улучшено тестирование сценариев UpdateModel и TryUpdateModel.
- Типизирован атрибут AcceptVerbs и добавлено перечисление HttpVerbs.
- Улучшены сообщения об ошибках по умолчанию при валидации.
- Модифицированы некоторые хелпер методы. Изменено создание формы. Методы стали extension-методами класса HtmlHelper.
&amp;lt;li&amp;gt;Поддержка проектов с Silverlight 2, который, как изветсно теперь уже RTW (release to web).&amp;lt;br /&amp;gt;
&amp;lt;/li&amp;gt;
- [Можно скачать](http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&amp;amp;ReleaseId=18459) ASP.NET MVC Futures.
- Поддержка размещения сборок в GAC
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Доступен Open XML SDK 2.0 CTP</title>
      <link>https://blog.e0ne.info/post/open-xml-sdk-20-ctp/</link>
      <pubDate>Wed, 15 Oct 2008 21:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/open-xml-sdk-20-ctp/</guid>
      <description>&lt;p&gt;Как-то это осбытие осталось в тени выхода финальной версии Silverlight 2.  Вчера, 14 октября, стала доступна новая версия &lt;a href="http://msdn.microsoft.com/en-us/library/bb448854(office.14).aspx"&gt;Open XML SDK&lt;/a&gt;. Среди нововведений, по сравнению с первой версией стоит отметить:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- Strongly Typed Classes and Objects - теперь нам не нужно работать с &amp;quot;сырым&amp;quot; xml и появилась подсветка кода.
- Content Construction, Search, and Manipulation - поддержка LINQ со всемы вытекающими отсюда последствиями.
- Validation - к сожалению, не доступно в текущем релизе, но валидация Open Xml документов будет прекрасным дополнением к уже существующим функциям.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Скачать всё это можно &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c6e744e5-36e9-45f5-8d8c-331df206e0d0&amp;amp;DisplayLang=en"&gt;тут&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мелочь, а приятно.</title>
      <link>https://blog.e0ne.info/post/a-little-post/</link>
      <pubDate>Sat, 11 Oct 2008 17:21:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/a-little-post/</guid>
      <description></description>
    </item>
    <item>
      <title>Configuration Section Designer - дизайнер настроек</title>
      <link>https://blog.e0ne.info/post/configuration-section-designer-the-designer-of-settings/</link>
      <pubDate>Thu, 09 Oct 2008 20:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/configuration-section-designer-the-designer-of-settings/</guid>
      <description>&lt;p&gt;Почти год назад я писал о плагине для Visual Studio, под названием &lt;a href="http://www.codeplex.com/VLH2005/"&gt;Visual Local History 2005&lt;/a&gt; - мини система контролей версий на локальном компьютере. Не так давно на &lt;a href="http://www.codeplex.com/"&gt;www.codeplex.com&lt;/a&gt; был найден очередной интересный, а главное - полезный, проект под названием &lt;a href="http://www.codeplex.com/csd"&gt;Configuration Section Designer&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;После установки плагин добавляет новый тип проекта в Visual Studio, к котором подобно class diagram можно &amp;ldquo;рисовать&amp;rdquo; диаграммы конфигурационных файлов. После чего, плагин автоматически сгенерирует класс, который будет содержать в себе конфигурационную секцию, сделанную в диаграмме, доступ к настройкам будет состоять из доступа к свойствам класса.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Camp CEE 2008</title>
      <link>https://blog.e0ne.info/post/blog-camp-cee-2008/</link>
      <pubDate>Fri, 26 Sep 2008 07:25:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/blog-camp-cee-2008/</guid>
      <description>&lt;p&gt;&lt;a href="http://blogcampcee.com/uk/about/general"&gt;Blog Camp Central and Eastern Europe, CEE&lt;/a&gt; - пройдет 17-19 октября в Киеве. Одна из частей программы - конкурс блогов. Более подбробно читаем на &lt;a href="http://blogcampcee.com/"&gt;сайте&lt;/a&gt; и голосуем за понравившееся вам блоги.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogcampcee.com/uk/content/web-developer039s-blog"&gt;&lt;!-- raw HTML omitted --&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Несколько слов о ASP.NET и безопастности</title>
      <link>https://blog.e0ne.info/post/few-words-about-aspnet-and-security/</link>
      <pubDate>Tue, 23 Sep 2008 14:35:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/few-words-about-aspnet-and-security/</guid>
      <description>&lt;p&gt;Навеянно постом &amp;ldquo;&lt;a href="http://dev.net.ua/blogs/mikechaliy/archive/2008/09/17/6886.aspx"&gt;Asp.NET контроли і HtmlEncode&lt;/a&gt;&amp;rdquo;. Сейчас уже многие пользуются методами HtmlEncode/HtmlDecode и UrlEncode/UrlDecode для обработки данных, которые ввел пользователь. Но эти медоты используют базовый алгоритм, что может не подходить для частных случаев, таких как использование данных в качестве атрибутов html-тегов и других. Более спецефические методы нам предоставлены в библиотеке &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EFB9C819-53FF-4F82-BFAF-E11625130C25&amp;amp;displaylang=en"&gt;Microsoft Anti-Cross Site Scripting Library&lt;/a&gt;. Более подробно о ней и ещё преимуществах написано в документации.&lt;/p&gt;
&lt;p&gt;Также для нахождения Sql и XSS Injection предоставлены &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=47&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=efb9c819-53ff-4f82-bfaf-e11625130c25&amp;amp;u=details.aspx%3ffamilyid%3d58A7C46E-A599-4FCB-9AB4-A4334146B6BA%26displaylang%3den"&gt;Microsoft Source Code Analyzer for SQL Injection&lt;/a&gt; и &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=47&amp;amp;p=4&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=efb9c819-53ff-4f82-bfaf-e11625130c25&amp;amp;u=details.aspx%3ffamilyid%3d19A9E348-BDB9-45B3-A1B7-44CCDCB7CFBE%26displaylang%3den"&gt;XSS Detect Beta Code Analysis Tool&lt;/a&gt; соответственно. НЕ забываем прочитать базовые вседения о безопастности веб-приложений в целом и приложений, написанных на ASP.NET в частности.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Microsoft Silverlight 2 Beta 2 и Google Chrome</title>
      <link>https://blog.e0ne.info/post/microsoft-silverlight-2-beta-2-and-google-chrome/</link>
      <pubDate>Tue, 16 Sep 2008 15:40:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/microsoft-silverlight-2-beta-2-and-google-chrome/</guid>
      <description>&lt;p&gt;Не так давно начал знакомиться с технологией Silverlight. Знал что он работает в браузерах IE 6.0, 7.0, FireFox 2, 3, Apple Safari под MacOS. Но сегодня случайно ошибся окном и открыл страницу в Google Chrome. Первая мысль была: сейчас посмотрю как работает приложение без установленного плагна Silverlight, но не тут то было&amp;hellip; Chrome с радостью показал мне рабочие приложение.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>Ajax и загрузка файлов на сервер</title>
      <link>https://blog.e0ne.info/post/ajax-file-upload/</link>
      <pubDate>Sun, 14 Sep 2008 11:30:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/ajax-file-upload/</guid>
      <description>&lt;p&gt;Время от времени приходится организовывать возможность загрузки пользователями файлов на сервер: загрузка аватарок, файлов для галереи и т.д.  &lt;/p&gt;
&lt;p&gt;Для решения этой задачи существует стандартный ASP.NET компонент FileUpload, который, в свою очередь, педставляет html-тэг &lt;!-- raw HTML omitted --&gt;. В простнйшем случае код для загрузки файлов будет выглядеть так:
-  Default.aspx:&lt;!-- raw HTML omitted --&gt;				&lt;!-- raw HTML omitted --&gt;										&amp;lt;%@ Page Language=&amp;ldquo;C#&amp;rdquo; AutoEventWireup=&amp;ldquo;true&amp;rdquo; CodeBehind=&amp;ldquo;Default.aspx.cs&amp;rdquo; Inherits=&amp;ldquo;WebApplication1._Default&amp;rdquo; %&amp;gt;																		- 										 																		- 										&lt;!-- raw HTML omitted --&gt;																		- 										 																		- 										&amp;lt;&lt;a href="http://december.com/html/4/element/html.html"&gt;html&lt;/a&gt; xmlns=&amp;ldquo;&lt;a href="http://www.w3.org/1999/xhtml%22%3E"&gt;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;/a&gt;																		- 										&amp;lt;&lt;a href="http://december.com/html/4/element/head.html"&gt;head&lt;/a&gt; runat=&amp;ldquo;server&amp;rdquo;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/title.html"&gt;title&lt;/a&gt;&amp;gt;&amp;lt;/&lt;a href="http://december.com/html/4/element/title.html"&gt;title&lt;/a&gt;&amp;gt;																		- 										&amp;lt;/&lt;a href="http://december.com/html/4/element/head.html"&gt;head&lt;/a&gt;&amp;gt;																		- 										&amp;lt;&lt;a href="http://december.com/html/4/element/body.html"&gt;body&lt;/a&gt;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/form.html"&gt;form&lt;/a&gt; id=&amp;ldquo;form1&amp;rdquo; runat=&amp;ldquo;server&amp;rdquo;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/div.html"&gt;div&lt;/a&gt;&amp;gt;																		- 										        &lt;a href="http://december.com/html/4/element/input.html"&gt;input&lt;/a&gt; type=&amp;ldquo;submit&amp;rdquo; value=&amp;ldquo;Upload&amp;rdquo; /&amp;gt;																		- 										    &amp;lt;/&lt;a href="http://december.com/html/4/element/div.html"&gt;div&lt;/a&gt;&amp;gt;																		- 										    &amp;lt;/&lt;a href="http://december.com/html/4/element/form.html"&gt;form&lt;/a&gt;&amp;gt;																		- 										&amp;lt;/&lt;a href="http://december.com/html/4/element/body.html"&gt;body&lt;/a&gt;&amp;gt;																		- 										&amp;lt;/&lt;a href="http://december.com/html/4/element/html.html"&gt;html&lt;/a&gt;&amp;gt;																		- 										 																		- 										 																&lt;!-- raw HTML omitted --&gt;	&lt;!-- raw HTML omitted --&gt;				- Default.aspx.cs								&lt;!-- raw HTML omitted --&gt;										using System;																		- 										using System.Collections.Generic;																		- 										using System.Linq;																		- 										using System.Web;																		- 										using System.Web.UI;																		- 										using System.Web.UI.WebControls;																		- 										using System.IO;																		- 										 																		- 										namespace WebApplication1																		- 										{																		- 										    public partial class _Default : System.Web.UI.Page																		- 										    {																		- 										        protected void Page_Load(object sender, EventArgs e)																		- 										        {																		- 										            if (IsPostBack &amp;amp;&amp;amp; fu.FileContent != null)																		- 										            {																		- 										                fu.PostedFile.SaveAs(path);																		- 										            }																		- 										        }																		- 										    }																		- 										}																		- 										 																		- 										 																&lt;!-- raw HTML omitted --&gt;	- Default.aspx: &lt;!-- raw HTML omitted --&gt;				&lt;!-- raw HTML omitted --&gt;										&amp;lt;%@ Page Language=&amp;ldquo;C#&amp;rdquo; AutoEventWireup=&amp;ldquo;true&amp;rdquo; CodeBehind=&amp;ldquo;Default.aspx.cs&amp;rdquo; Inherits=&amp;ldquo;WebApplication1._Default&amp;rdquo; %&amp;gt;																		- 										 																		- 										&lt;!-- raw HTML omitted --&gt;																		- 										 																		- 										&amp;lt;&lt;a href="http://december.com/html/4/element/html.html"&gt;html&lt;/a&gt; xmlns=&amp;ldquo;&lt;a href="http://www.w3.org/1999/xhtml%22%3E"&gt;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;/a&gt;																		- 										&amp;lt;&lt;a href="http://december.com/html/4/element/head.html"&gt;head&lt;/a&gt; runat=&amp;ldquo;server&amp;rdquo;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/title.html"&gt;title&lt;/a&gt;&amp;gt;&amp;lt;/&lt;a href="http://december.com/html/4/element/title.html"&gt;title&lt;/a&gt;&amp;gt;																		- 										&amp;lt;/&lt;a href="http://december.com/html/4/element/head.html"&gt;head&lt;/a&gt;&amp;gt;																		- 										&amp;lt;&lt;a href="http://december.com/html/4/element/body.html"&gt;body&lt;/a&gt;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/script.html"&gt;script&lt;/a&gt; type=&amp;ldquo;text/javascript&amp;rdquo;&amp;gt;																		- 										        function onFormSubmit() {																		- 										            var formUpload = document.getElementById(&amp;lsquo;form1&amp;rsquo;);																		- 										            formUpload.target = &amp;lsquo;upload_target&amp;rsquo;;																		- 										            formUpload.action = &amp;lsquo;default.aspx&amp;rsquo;;																		- 										&lt;!-- raw HTML omitted --&gt;												- 										        }																		- 										    &amp;lt;/&lt;a href="http://december.com/html/4/element/script.html"&gt;script&lt;/a&gt;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/form.html"&gt;form&lt;/a&gt; id=&amp;ldquo;form1&amp;rdquo; onsubmit=&amp;ldquo;onFormSubmit();&amp;quot;&amp;gt;																		- 										    &amp;lt;&lt;a href="http://december.com/html/4/element/div.html"&gt;div&lt;/a&gt;&amp;gt;																		- 										        &amp;lt;&lt;a href="http://december.com/html/4/element/input.html"&gt;input&lt;/a&gt; id=&amp;ldquo;file1&amp;rdquo; type=&amp;ldquo;file&amp;rdquo; name=&amp;ldquo;file1&amp;rdquo; /&amp;gt; &amp;lt;&lt;a href="http://december.com/html/4/element/br.html"&gt;br&lt;/a&gt; /&amp;gt;																		- 										        &amp;lt;&lt;a href="http://december.com/html/4/element/input.html"&gt;input&lt;/a&gt; id=&amp;ldquo;file2&amp;rdquo; type=&amp;ldquo;file&amp;rdquo; name=&amp;ldquo;file2&amp;rdquo; /&amp;gt;																		- 										        																		- 										        &amp;lt;&lt;a href="http://december.com/html/4/element/input.html"&gt;input&lt;/a&gt; type=&amp;ldquo;submit&amp;rdquo; value=&amp;ldquo;Upload&amp;rdquo; /&amp;gt;																		- 										        																		- 										        &amp;lt;&lt;a href="http://december.com/html/4/element/iframe.html"&gt;iframe&lt;/a&gt; id=&amp;ldquo;upload_target1&amp;rdquo; name=&amp;ldquo;upload_target&amp;rdquo; src=&amp;rdquo;&amp;rdquo; style=&amp;ldquo;width:0;height:0;border:0px solid #fff;&amp;quot;&amp;gt;&amp;lt;/&lt;a href="http://december.com/html/4/element/iframe.html"&gt;iframe&lt;/a&gt;&amp;gt;																		- 										    &amp;lt;/&lt;a href="http://december.com/html/4/element/div.html"&gt;div&lt;/a&gt;&amp;gt;																		- 										    &amp;lt;/&lt;a href="http://december.com/html/4/element/form.html"&gt;form&lt;/a&gt;&amp;gt;																		- 										&amp;lt;/&lt;a href="http://december.com/html/4/element/body.html"&gt;body&lt;/a&gt;&amp;gt;																		- 										&amp;lt;/&lt;a href="http://december.com/html/4/element/html.html"&gt;html&lt;/a&gt;&amp;gt;																		- 										 							&lt;!-- raw HTML omitted --&gt;	&lt;!-- raw HTML omitted --&gt;				- Default.aspx.cs:&lt;!-- raw HTML omitted --&gt;				&lt;!-- raw HTML omitted --&gt;										using System;																		- 										using System.Collections.Generic;																		- 										using System.Linq;																		- 										using System.Web;																		- 										using System.Web.UI;																		- 										using System.Web.UI.WebControls;																		- 										using System.IO;																		- 										 																		- 										namespace WebApplication1																		- 										{																		- 										    public partial class _Default : System.Web.UI.Page																		- 										    {																		- 										        protected void Page_Load(object sender, EventArgs e)																		- 										        {																		- 										            if (IsPostBack)																		- 										            {																		- 										                HttpFileCollection uploads = HttpContext.Current.Request.Files;																		- 										                for (int i = 0; i &amp;lt; uploads.Count; i++)																		- 										                {																		- 										                    HttpPostedFile upload = uploads[i];																		- 										 																		- 										                    if (upload.ContentLength == 0)																		- 										                        continue;																		- 										 																		- 										                    upload.SaveAs(path);																		- 										                }																		- 										 																		- 										            }																		- 										        }																		- 										    }																		- 										}																		- 										 																		- 										 																&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Регистрация доменных имен с использованием национальных алфавитов</title>
      <link>https://blog.e0ne.info/post/international-domains/</link>
      <pubDate>Wed, 03 Sep 2008 18:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/international-domains/</guid>
      <description>&lt;p&gt;Вот так, неожиданно для меня теперь пожно зарегистировать домен www.моё_имя_на_русском_языке.net. С 2-го сентября 2008-го года &lt;a href="http://www.nic.ru/"&gt;RU-CENTER&lt;/a&gt; добавил возможность регистрировать доменные имена, содержащие символы таких национальных алфавитов: латинский, греческий, кириллица, армянский, иврит,
арабский, грузинский, бенгальский, ория, тамильский,
каннада, тайский, тибетский, бирманский, рунический,
монгольский, японские, китайские и корейские иероглифы. Стоит отметить, что каждому домену, содержащему символы национальных алфавитов, будет соответствовать домен из латинских символом. К примеру домен «xn&amp;ndash;b1alf1j.net» представляется как «київ.net».&lt;/p&gt;
&lt;p&gt;Так что теперь ждём новую волну перепродажи доменов и регистрируем свои, пока ещё свободно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chrome - браузер от Google</title>
      <link>https://blog.e0ne.info/post/googlechrome/</link>
      <pubDate>Tue, 02 Sep 2008 21:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/googlechrome/</guid>
      <description>&lt;p&gt;Практически только что появилась возможность скачать новый браузер от компании Google - &lt;a href="http://www.google.com/chrome/index.html?hl=uk&amp;amp;brand=CHMG&amp;amp;utm_source=uk-hpp&amp;amp;utm_medium=hpp&amp;amp;utm_campaign=uk"&gt;GoogleChrome&lt;/a&gt;. Пока делюсь первыми впечатлениями:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;	как всегда от Google - новый, но эт этого не менее понятный интерфейс;
&amp;lt;/li&amp;gt;
- каждая вкладка - отдельный процесс в системе - неожиданное для меня, но удобное решение;
- в отличии от IE8 beta - сайты открываются в таком виде, каком их одидаем увидеть;
&amp;lt;li&amp;gt;автоматически подхватились настройки с FireFox, что сделало передох более радостным.&amp;lt;br /&amp;gt;
&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>ASP.NET MVC как часть .NET Framework</title>
      <link>https://blog.e0ne.info/post/aspnet-mvc-as-a-part-of-dotnet-framework/</link>
      <pubDate>Tue, 02 Sep 2008 08:00:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-mvc-as-a-part-of-dotnet-framework/</guid>
      <description>&lt;p&gt;С момента выхода ASP.NET MVC идут обсуждения: будет ли он включен в состав .net framework или нет? Если верить слухам и некоторым сообщениям в msdn blogs, то рано или поздно это случится.&lt;/p&gt;
&lt;p&gt;Текущая его версия Preview 5, доступная на CodePlex, говорит что до релиза проект ещё не готов, хотя некоторые надеялись, что ASP.NET MVC будет частью .net 3.5 sp1. Надежы, в большей степени, не оправдались. Почему в большей? Потому что сборки System.Web.Abstractions.dll и System.Web.Routing.dll, ранее присутствующие только в ASP.NET MVC, вошли в .NET 3.5 Service Pack 1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мобильный веб</title>
      <link>https://blog.e0ne.info/post/mobile-web/</link>
      <pubDate>Thu, 28 Aug 2008 20:45:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/mobile-web/</guid>
      <description>&lt;p&gt;C каждым днём мобильный интернет становится всё более доступным. Мобильный телефон с gprs перестал быть диковиной. Даже wap постепенно уходит в прошлое. Wap перестаёт устраивать рядовых пользователей и заставляет разработчиков учитывать особенности мобильных браузеров.&lt;/p&gt;
&lt;p&gt;Всё больше сайты имеют свою облегчённую, мобильную версию. Но что нужно сделать чтоб и ваш сайт смог корректно отображаться на мобильном браузере?&lt;/p&gt;
&lt;p&gt;Для начала он должен соответствовать стандарту &lt;a href="http://www.w3.org/TR/xhtml1/"&gt;XHTML™ 1.0&lt;/a&gt;, т.к. большинство браузеров на мобильных телефонах и PDA могут корректно обработать такой контент. Также консорциум w3c месяц назад обнародовал &lt;a href="http://www.w3.org/TR/mobile-bp/"&gt;Mobile Web Best Practices 1.0&lt;/a&gt;, где находятся Guidelines по созданию сайтов для мобильных устройств. Многие верят в то, что вскоре это станет стандартом.&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET 3.5 SP1 и первые проблемы</title>
      <link>https://blog.e0ne.info/post/net-35-sp1-and-first-troubles/</link>
      <pubDate>Fri, 22 Aug 2008 10:15:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/net-35-sp1-and-first-troubles/</guid>
      <description>&lt;p&gt;Свершилось! Несколько дней назад вышел [&lt;!-- raw HTML omitted --&gt;8319-81da479ab0d7&amp;amp;displaylang=en&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;.net 3.5 service pack 1](&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ab99342f-5d1a-413d-"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=ab99342f-5d1a-413d-&lt;/a&gt;&amp;lt;script type=). В месте с ним мы получили ASP.NET Dynamic Data,  Entity Framework,  ADO.NET Data Services и много чего другого. Подообнее можно почитать &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Но, разумеется, в каждой бочке мёда найдётся своя ложка дёгтя. Ей стал &lt;a href="http://www.codeplex.com/AjaxControlToolkit"&gt;Ajax Control Toolkit&lt;/a&gt;, а именно одни из его базовых компонентов - ToolkitScriptManager. После установки .net 3.5 sp1 ToolkitScriptManager, входящий в состав Microsoft Ajax Control toolkit, перестал правильно функционировать. Разработчики компонентов достаточно быстро отреагировали  и выпустили новый релиз, который имеет совместимость с носледней версией .net framework. Так что ставим новую версию, и продолжаем использовать пусть и не лучшую, но уже ставшую достаточно популярной связку MS Ajax и Ajax Control Toolkit. Новую версию тулкита качает &lt;a href="http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=16488"&gt;здесь&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>.NET 3.5 и Web Service</title>
      <link>https://blog.e0ne.info/post/net-35-and-web-service/</link>
      <pubDate>Tue, 19 Aug 2008 23:11:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/net-35-and-web-service/</guid>
      <description>&lt;p&gt;После переходна на новую ферсию .net framework, как и следовало ожидать, некоторый код потерял свою работоспособность. Перестали работать веб-службы. Точнее одна из них.&lt;/p&gt;
&lt;p&gt;Серверный её код ничем не выделяется от остальных:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;font face=&amp;quot;Courier New&amp;quot; size=&amp;quot;2&amp;quot; color=&amp;quot;black&amp;quot;&amp;gt;[WebService(Namespace = &amp;lt;font color=&amp;quot;#a31515&amp;quot;&amp;gt;&amp;quot;myns&amp;quot;&amp;lt;/font&amp;gt;)]&amp;lt;br /&amp;gt;
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&amp;lt;br /&amp;gt;
[ScriptService]&amp;lt;br /&amp;gt;
&amp;lt;font color=&amp;quot;#0000ff&amp;quot;&amp;gt;public&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;#0000ff&amp;quot;&amp;gt;class&amp;lt;/font&amp;gt; MyService : WebService&amp;lt;br /&amp;gt;
{&amp;lt;br /&amp;gt;
  [WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)]&amp;lt;br /&amp;gt;
  &amp;lt;font color=&amp;quot;#0000ff&amp;quot;&amp;gt;public&amp;lt;/font&amp;gt; List&amp;lt;&amp;lt;font color=&amp;quot;#0000ff&amp;quot;&amp;gt;string&amp;lt;/font&amp;gt;&amp;gt; GetData()&amp;lt;br /&amp;gt;
  {&amp;lt;br /&amp;gt;
     List&amp;lt;&amp;lt;font color=&amp;quot;#0000ff&amp;quot;&amp;gt;string&amp;lt;/font&amp;gt;&amp;gt; result;&amp;lt;br /&amp;gt;
     &amp;lt;font color=&amp;quot;#008000&amp;quot;&amp;gt;//вся необходимая логика&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;
     &amp;lt;font color=&amp;quot;#0000ff&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt; result;&amp;lt;br /&amp;gt;
  }&amp;lt;br /&amp;gt;
}&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;1&amp;quot; color=&amp;quot;gray&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;/font&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt; Главное отличие её от других заключается в том, что обращение к ней идёт не с помощью ScriptManager и ServiceReference (в таком случае всё работает), а вызывается методом POST по url напрямую с javascript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Microsoft Sql Server 2008 RTM</title>
      <link>https://blog.e0ne.info/post/microsoft-sql-server-2008-rtm/</link>
      <pubDate>Thu, 07 Aug 2008 10:54:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/microsoft-sql-server-2008-rtm/</guid>
      <description>&lt;p&gt;Дождались! Этой ночь Microsoft выпустили RTM версию SQL Server 2008. Официальный источник: &lt;a href="http://www.microsoft.com/presspass/press/2008/aug08/08-06SQLServer2008PR.mspx"&gt;здесь&lt;/a&gt;. Доступны все версии, включая новую Web Edition  Compact Edition 3.5 SP. Подробное описание редакция - на &lt;a href="http://msdn.microsoft.com/uk-ua/library/cc645993(en-us,SQL.100).aspx"&gt;MSDN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;P.S. Надеюсь мой ключик для Developer Edition будет работать:).&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET и правильный выбор имен классов</title>
      <link>https://blog.e0ne.info/post/aspnet-and-correct-class-names/</link>
      <pubDate>Fri, 27 Jun 2008 14:21:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/aspnet-and-correct-class-names/</guid>
      <description>&lt;p&gt;На днях в очередной раз столкнулся с проблемой:  после разворачивания приложения на сервере на нескольких страницах появляется 500-я ошибка. Процесс развертывания приложения проходит следующим образом:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- разработка и отладка приложения на машине разработчика
- cборка проекта с помощью aspnet_compiler
- коирование на тестовый сервер
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;На этих шагах все работает отлично, а дальше получаем стандартную желтую страницу с ошибкой о невозможности найти нужный класс. В данном случае проблема была со страницей восстановления пароля, на которой находился только компонент PasswordRecovery. Т.к. проект был собрал в release-версии, отадка была сильно затруднена.  Далее выяснилось, что класс, реализующий эту страницу тоже назывался PasswordRecovery. Таким образом, компиляция происходит успешно, но на этапе выполнения происходит исключение. Проблема состоит в том, что в одной области видимости появляется два класса с одним именем, и .net не знает какой класс нужно использовать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Win the Web - 24 часа ада!</title>
      <link>https://blog.e0ne.info/post/win-the-web-24-hours-of-hell/</link>
      <pubDate>Thu, 24 Apr 2008 11:21:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/win-the-web-24-hours-of-hell/</guid>
      <description>&lt;p&gt;Осталоcь всего 7 дня до конца регистрации на конкурс &lt;a href="http://mswtw.com"&gt;Win the Web&lt;/a&gt;. Конкурс web-разработчиков на платформе Microsoft. Особенность его состоит в том, что он будет проходить непрерывно 24 часа! Проводится в два этапа: после локального этапа две команды (одна студенческая и вторая команда профессиональных разработчиков) едут на финал. Поко что от Украины зарегистрировано лишь две команды. Для участия нужно зарегистрироваться на &lt;a href="http://mswtw.com/"&gt;сайте&lt;/a&gt; и до первого мая загрузить mini application. Подробнее о правилах и об участии написано на их сайте.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MS Ajax и сторонние скрипты</title>
      <link>https://blog.e0ne.info/post/ms-ajax-third-party-javascript/</link>
      <pubDate>Sat, 05 Apr 2008 01:31:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/ms-ajax-third-party-javascript/</guid>
      <description>&lt;p&gt;Интеграция различных скриптов на страницу, где используется MS Ajax - задача нередкая, но единого решения для неё не существует. Я поделюсь с вами некоторыми методами, которые помогут интегрировать срипт в вашу страницу.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;

Никогда не подключайте скрипты с помощью тега &amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;lt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#a31515&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#a31515&amp;quot;&amp;gt;script&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt; &amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#ff0000&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#ff0000&amp;quot;&amp;gt;src&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;/&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#a31515&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#a31515&amp;quot;&amp;gt;script&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;. Вместо этого следует использовать копмонени ScriptManager либо ScriptManagerProxy. 

&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;

Что бы не говорили разработчики MS Ajax и AjaxControlToolkit, в конец каждого файла со скриптом следует добавить такой код:&amp;lt;br /&amp;gt;
&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt; (&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#0000ff&amp;quot;&amp;gt;typeof&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;(Sys) !== &amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#a31515&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#a31515&amp;quot;&amp;gt;'undefined'&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;) Sys.Application.notifyScriptLoaded();&amp;lt;br /&amp;gt;
&amp;lt;/font&amp;gt;Данный код указывает на то, что скрипт полностью загрущился и можно его выполнять. 

&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;

Если скрипт необходимо подгружать только в определённых ситуациях (например, добавление нового компонента на форму), то его следует регистрировать с помощью статических методов класса ScriptManager вида RegisterClientScriptXXX(). 

&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;

Для выполнения скрипта после загрузки на страницу есть несколько методов: &amp;lt;br /&amp;gt;
1) использовать клиентское событие EndRequest;&amp;lt;br /&amp;gt;
2) создать функцию с именем pageLoad() - метод аналогичен первому;&amp;lt;br /&amp;gt;
3) если скрипт необходимо зарегистрировать с помощью серверного кода, то используйте метод &amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#2b91af&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; color=&amp;quot;#2b91af&amp;quot;&amp;gt;ScriptManager&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;.RegisterStartupScript().&amp;lt;/font&amp;gt; 

&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Эти методы не являются панацеей от всех бед, но помогают экономить часть времени, необходимого на интеграцию скриптов. Иногда хватает только этого, иногда приходится часами отлаживать чужой javascript, но знать о них, как я думаю, должен каждый разработчик, использующий MS Ajax.&lt;/p&gt;</description>
    </item>
    <item>
      <title>От перемены мест слогаемых сумма меняется!</title>
      <link>https://blog.e0ne.info/post/search-feature/</link>
      <pubDate>Mon, 31 Mar 2008 22:24:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/search-feature/</guid>
      <description>&lt;p&gt;Законы математики, как показывает практика, действуют не всегда. В сфере программирования вообще и интернет поиска в частности, математика используется достаточно часто. Но интернет-поисковики пытаясь реализововать &amp;ldquo;человекообразный&amp;rdquo; алгоритм поиска в web&amp;rsquo;e иногда показывают забавные результаты: для примера вводим в поиске фразу &amp;ldquo;javascript+dhtml&amp;rdquo; (без кавычек), &lt;a href="http://search.live.com/results.aspx?q=javascript%2Bdhtml&amp;amp;go=Search&amp;amp;mkt=en-us&amp;amp;scope=&amp;amp;FORM=LIVSOP"&gt;http://search.live.com/results.aspx?q=javascript%2Bdhtml&amp;amp;go=Search&amp;amp;mkt=en-us&amp;amp;scope=&amp;amp;FORM=LIVSOP&lt;/a&gt;.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt; Т.к. поисковый движок считает что первая враза имеет больший вес, то при вводе &amp;ldquo;dhtml+javascript&amp;rdquo;, &lt;a href="http://search.live.com/results.aspx?q=dhtml%2Bjavascript&amp;amp;go=Search&amp;amp;mkt=en-us&amp;amp;scope=&amp;amp;FORM=LIVSOP"&gt;http://search.live.com/results.aspx?q=dhtml%2Bjavascript&amp;amp;go=Search&amp;amp;mkt=en-us&amp;amp;scope=&amp;amp;FORM=LIVSOP&lt;/a&gt; у нас получается другой результат.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
    </item>
    <item>
      <title>Новости блога</title>
      <link>https://blog.e0ne.info/post/d09dd0bed0b2d0bed181d182d0b8-d0b1d0bbd0bed0b3d0b0/</link>
      <pubDate>Tue, 25 Mar 2008 02:19:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09dd0bed0b2d0bed181d182d0b8-d0b1d0bbd0bed0b3d0b0/</guid>
      <description>&lt;p&gt;Блог переехал на новое место. Теперь он находится по адресу: &lt;a href="https://blog.e0ne.info/"&gt;http://blog.e0ne.info/&lt;/a&gt;. В данный момент блог работает в тестовом режиме, фиксятся баги.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Singularity - операционная система на .NET</title>
      <link>https://blog.e0ne.info/post/singularity-d0bed0bfd0b5d180d0b0d186d0b8d0bed0bdd0bdd0b0d18f-d181d0b8d181d182d0b5d0bcd0b0-d0bdd0b0-net/</link>
      <pubDate>Wed, 05 Mar 2008 02:13:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/singularity-d0bed0bfd0b5d180d0b0d186d0b8d0bed0bdd0bdd0b0d18f-d181d0b8d181d182d0b5d0bcd0b0-d0bdd0b0-net/</guid>
      <description></description>
    </item>
    <item>
      <title>Миграция unit tests на Visual Studio 2008</title>
      <link>https://blog.e0ne.info/post/d09cd0b8d0b3d180d0b0d186d0b8d18f-unit-tests-d0bdd0b0-visual-studio-2008/</link>
      <pubDate>Mon, 03 Mar 2008 02:12:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09cd0b8d0b3d180d0b0d186d0b8d18f-unit-tests-d0bdd0b0-visual-studio-2008/</guid>
      <description>&lt;p&gt;При миграции unit-тестов с Visual Studio 2005 на 2008 (.net 2.0) обнаружил интересный баг. Студия радостно отрапортовала об успешной конвертиции проектов, но при запустке тесты проваливались с такой ошибкой:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;Method SampleTest.ClassDBTest.MyClassInitialize has wrong signature. Parameter 1 should be of type Microsoft.VisualStudio.TestTools.UnitTesting.TestContext. 
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Microsoft vs. Google: Битва титанов</title>
      <link>https://blog.e0ne.info/post/microsoft-vs-google-d091d0b8d182d0b2d0b0-d182d0b8d182d0b0d0bdd0bed0b2/</link>
      <pubDate>Wed, 27 Feb 2008 02:09:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/microsoft-vs-google-d091d0b8d182d0b2d0b0-d182d0b8d182d0b0d0bdd0bed0b2/</guid>
      <description>&lt;p&gt;Этим постом я начинаю серию из 4 рассказов про on-line сервисы двух одних из наиболее влиятельных игроков на рынке програмного обеспечения. &lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
Часть 1. Введение.&lt;!-- raw HTML omitted --&gt;
Часть 2. Краткое описание сервисов Google.&lt;!-- raw HTML omitted --&gt;
Часть 3. Краткое описание сервисов Microsoft.&lt;!-- raw HTML omitted --&gt;
Часть 4. Подводим итоги.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;h2 id="часть-1-введение"&gt;Часть 1. Введение.&lt;/h2&gt;</description>
    </item>
    <item>
      <title>Hosting Roadshow: Windows Server 2008 and IIS 7.0</title>
      <link>https://blog.e0ne.info/post/hosting-roadshow-windows-server-2008-and-iis-70/</link>
      <pubDate>Tue, 26 Feb 2008 02:06:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/hosting-roadshow-windows-server-2008-and-iis-70/</guid>
      <description>&lt;h3&gt;&lt;a href="http://e0ne.blogspot.com/2008/02/hosting-roadshow-windows-server-2008.html"&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://bp0.blogger.com/_SbkQyMk08No/R8SCjlk4qfI/AAAAAAAAAAg/PA6Brqfjg3A/s1600-h/One+Day+In+Kiyv+162.JPG"&gt;&lt;!-- raw HTML omitted --&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;С большим опозданием, но всё же напишу про своих впечатлениях о мероприятии, которое проходило 14 февраля в Киеве.&lt;/p&gt;
&lt;p&gt;Конференция проходила в конференц-зале гостиницы Radisson SAS Hotel . Уровень гостиницы можно оценить тем фактом, что в тот же день в соседнем зале проходило мероприятие, если не ошибаюсь, ирландского посольства. Порадовал не совсем обычный подход к докладам: каждому учаснику представлялись рабочие места с PC (некоторым достались в качестве рабочих стинцих ноутбуки), за которыми мы и провели большую часть времени, т.к. короткие лекции сопровождались лабораторными работами.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebApp и Visual Studio 2008</title>
      <link>https://blog.e0ne.info/post/webapp-d0b8-visual-studio-2008/</link>
      <pubDate>Sun, 20 Jan 2008 02:05:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/webapp-d0b8-visual-studio-2008/</guid>
      <description>&lt;p&gt;В новой студии, по умолчанию, при создании веб-приложения на master page добавляется ещё один ContentPlaceHolder:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;br /&amp;gt;
&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;asp:ContentPlaceHolder ID=&amp;quot;head&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;/asp:ContentPlaceHolder&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;/head&amp;gt;&amp;lt;br /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;br /&amp;gt;
&amp;lt;title&amp;gt; Untitled Page &amp;lt;/title&amp;gt; &amp;lt;title&amp;gt;My page&amp;lt;/title&amp;gt;


&amp;lt;br /&amp;gt;
&amp;lt;li&amp;gt;Явно присвоить в коде свойству Title страницы название:&amp;lt;br /&amp;gt;
Title = “My page”;&amp;lt;/li&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;li&amp;gt;Указать атрибут страице:&amp;lt;br /&amp;gt;
&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; MasterPageFile=&amp;quot;~/MyMaster.Master&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeBehind=&amp;quot;MyPage.aspx.cs&amp;quot; Inherits=&amp;quot;MySite.Pages&amp;quot; Title=&amp;quot;My Page&amp;quot; %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;li&amp;gt;Установить тег title:&amp;lt;br /&amp;gt;
&amp;lt;blockquote&amp;gt;
	&amp;lt;br /&amp;gt;
	&amp;lt;asp:Content ID=&amp;quot;Content1&amp;quot; ContentPlaceHolderID=&amp;quot;head&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;
	&amp;lt;title&amp;gt;My Page
&amp;lt;/blockquote&amp;gt;
&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Приведение типов в C# 2.0</title>
      <link>https://blog.e0ne.info/post/d09fd180d0b8d0b2d0b5d0b4d0b5d0bdd0b8d0b5-d182d0b8d0bfd0bed0b2-d0b2-c-20/</link>
      <pubDate>Thu, 17 Jan 2008 01:48:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09fd180d0b8d0b2d0b5d0b4d0b5d0bdd0b8d0b5-d182d0b8d0bfd0bed0b2-d0b2-c-20/</guid>
      <description>&lt;p&gt;Приведение типов на практике встречается довольно часто. Из-за того, что в языке C# существует два оператора, позволяющих решить эту задачу, время от времени возникают InvalidCastException. Остановимся на этих операторах подробнее.&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;() оператор. На уровне IL-кода генерирует вызов функции castclass Выдержка из msdn: A cast explicitly invokes the conversion operator from one type to another; the cast fails if no such conversion operator is defined. &lt;!-- raw HTML omitted --&gt;
Оператор можно использовать только в том случае, если это предусмотрел разработчик. &lt;!-- raw HTML omitted --&gt;
Плюсы: простота в использовании, читабельность кода. Работает как с value, так и с reference типами.&lt;!-- raw HTML omitted --&gt;
Минусы: можно использовать не со всеми типами данных; источник InvalidCastException в случае неудачного вызова.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
&amp;lt;br /&amp;gt;
int? i1 = 2;&amp;lt;br /&amp;gt;
// вычисление значения i2&amp;lt;br /&amp;gt;
int i2 = (int)i1; // к этому моменту возможна ситуация, когда i1 будет равным null.
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;br /&amp;gt;
public void MyMethod(object intObj)&amp;lt;br /&amp;gt;
{&amp;lt;br /&amp;gt;
if (intObj != null)&amp;lt;br /&amp;gt;
{&amp;lt;br /&amp;gt;
int intO = (int) intObj;&amp;lt;br /&amp;gt;
// ...&amp;lt;br /&amp;gt;
}&amp;lt;br /&amp;gt;
}&amp;lt;br /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;string s = someObject as string;&amp;lt;br /&amp;gt;
if (s != null)&amp;lt;br /&amp;gt;
{&amp;lt;br /&amp;gt;
// someObject is a string.&amp;lt;br /&amp;gt;
}
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>IT-гонки глазами программиста</title>
      <link>https://blog.e0ne.info/post/it-d0b3d0bed0bdd0bad0b8-d0b3d0bbd0b0d0b7d0b0d0bcd0b8-d0bfd180d0bed0b3d180d0b0d0bcd0bcd0b8d181d182d0b0/</link>
      <pubDate>Thu, 20 Dec 2007 23:59:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/it-d0b3d0bed0bdd0bad0b8-d0b3d0bbd0b0d0b7d0b0d0bcd0b8-d0bfd180d0bed0b3d180d0b0d0bcd0bcd0b8d181d182d0b0/</guid>
      <description></description>
    </item>
    <item>
      <title>Локальная система контроля версий</title>
      <link>https://blog.e0ne.info/post/d09bd0bed0bad0b0d0bbd18cd0bdd0b0d18f-d181d0b8d181d182d0b5d0bcd0b0-d0bad0bed0bdd182d180d0bed0bbd18f-d0b2d0b5d180d181d0b8d0b8/</link>
      <pubDate>Thu, 15 Nov 2007 01:41:00 +0300</pubDate>
      <guid>https://blog.e0ne.info/post/d09bd0bed0bad0b0d0bbd18cd0bdd0b0d18f-d181d0b8d181d182d0b5d0bcd0b0-d0bad0bed0bdd182d180d0bed0bbd18f-d0b2d0b5d180d181d0b8d0b8/</guid>
      <description>&lt;p&gt;Если над проектом работает более одного человека, то рано или поздно наступает момент , когда им необходимо как-то обмениваться исходниками. Тут на помощь приходят CVS, SVN, Visual Source Safe, Team Foundation Server и другие. Одной из особенностей этих систем является то, что они хранят разные версии одних и тех же файлов. Стандартая ситуация: сдать файл в хранилище, сделать в нём изменения и&amp;hellip; и достать себе более старую, но правильную версию. Эта система работает до одного момента: исходники не компилируются, а текущее их состояние надо зафиксировать. Раньше мне приходилось копировать изменяемые файлы в отдельные папки, чтобы иметь возможность в любой момент выбрать нужную мне версию.&lt;!-- raw HTML omitted --&gt; Недавно на &lt;a href="http://www.codeplex.com/"&gt;www.codeplex.com/&lt;/a&gt; нашел маленький (41), но очень полезный прокет - &lt;a href="http://www.codeplex.com/VLH2005/"&gt;Visual Local History 2005.&lt;/a&gt; Он хранит все изменения файлов и даёт возможность в любой момент восстановить любую из доступных версий.&lt;!-- raw HTML omitted --&gt; После установки плагина для VS (поддерживается как Visual Studio 2005, так и 2008 Beta) в меню Tools появляется новый пункт меню, после выбора которого перед нами появляется окно плагина.&lt;a href="http://bp2.blogger.com/_SbkQyMk08No/Rzy0hAT4jtI/AAAAAAAAAAM/FEjaKmtAsZU/s1600-h/1.jpg"&gt;&lt;!-- raw HTML omitted --&gt;&lt;/a&gt;&lt;!-- raw HTML omitted --&gt; &lt;a href="http://bp2.blogger.com/_SbkQyMk08No/Rzy1fAT4juI/AAAAAAAAAAU/GBR4gHKaC_w/s1600-h/2.jpg"&gt;&lt;!-- raw HTML omitted --&gt;&lt;/a&gt;&lt;!-- raw HTML omitted --&gt; При открытии или создании проекта или solution в его папке создаётска скрытая папка с именем &amp;ldquo;.history&amp;rdquo;, куда&lt;!-- raw HTML omitted --&gt; после каждого сохранения файла записывается его предыдущее состояние.&lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt; Для восстановления нужной копии досточно лишь сделать правый клик по нужному файлу в окне Local History выбрать Restore.&lt;!-- raw HTML omitted --&gt; Простой интерфейс, скромный набор функций, но очень полезный плагин. Пользуюсь им уже около месяца и теперь не представляю как я раньше работал без него. Вместе с intellisense он экономит не только время, но и нервы. Всегда есть возможность посмотреть на то, как изменялся файл и вернуться к предыдущей точке.&lt;!-- raw HTML omitted --&gt; Как говорится, лучше один рах попробывать самому, а потом пользоваться &lt;a href="http://www.codeplex.com/VLH2005/Release/ProjectReleases.aspx?ReleaseId=8119"&gt;этим&lt;/a&gt; каждый день.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Archive page</title>
      <link>https://blog.e0ne.info/archive/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.e0ne.info/archive/</guid>
      <description></description>
    </item>
  </channel>
</rss>