Wanted: инвайт на Хабр
Господа, а поделитесь инвайтом на хабр.
Господа, а поделитесь инвайтом на хабр.
Recently Ukraine government made another move toward an open source software. As anyone would expect Microsoft has something to say and something to offer.
I can’t help but translate some FUD by Microsoft Ukraine CEO Dmitry Shimkiv
Can you elaborate on Microsoft’s position on using open source software in state institutions?
No doubt a government should consider an open source software as one of the possibilities. We always support this as it helps to raise an intellectual potential of Ukraine and facilitates exchange of code between local and foreign developers. But there are many questions. For example, lets consider rewards for time spent on generating ideas and implementing them. Ukrainian laws have provisions about rewarding author for his work. When there is a community around open source software everyone will do his part. This means emerging product will be non-commercial because if you implement your ideas and someone make billions on them sooner or later you’ll be asking “Can I have my $5k?”. And those questions will be asked constantly. As Ukraine laws protect the author I can sue and win the case if the open source software contains some lines of code written by me. If I can’t sue here in Ukraine I’ll do it abroad and still win. Somehow these questions are left without discussion. Few understand what open source means. It’s like open society. Everyone talks about it but hardly someone understands.
Suppose the company A wins a tender. Suppose they hire ukrainian developers and build a Linux distribution signing all necessary papers to have a right to distribute product.
This won’t be an open source anymore. Just this company’s product.
But what if they use open source software to build it. For example, base it on distributions like Ubuntu or RedHat?
Okay, but let’s consider possibilities. Tomorrow there will emerge a boy from Israel, Germany or USA and he will sue Ukraine for using his intellectual property. Do you understand inherent risks? Bomb is planted and primed. You’re going to take code intended only for non-commercial use and start to sell it.
But we can sign papers to transfer rights with every developer and pay a reward for it. Let’s say we pay $100 and there will be no further claims.
I can’t see a clear business model in this. Okay we gave them money. But what are you going to do if something work not as intended?
But there will be a company to carry all such requests.
Their reply will most likely be “We didn’t do those modifications” as this is open source. There were situations like this before. Let’s don’t forget other companies. Like Sun who can call and tell you “We are sorry but there are lines of code in your product we own or have a patent covering them. And we want money”. What will you do? Are you going to cut parts of product code base?
But Brasil or China have managed to avoid these problems before.
So what? There are no countries at the moment where governments are using an open source software exclusively.
Don’t you think this move was intended to soften Microsoft position? This is not a first time this happens. Five years ago Microsoft had offered better deal in response to an open source wave.
Government had some arrangements but done nothing. As ukrainian I’m very sorry for them if cooperation with Microsoft will stay as it is now. Also suppose government will finance development of a national open source operating system. By some guesses it will take at least four years. And all these years Ukraine is going to use pirated software. We have right to demand to cease such practice. What will you do then?
Есть у меня внешний USB 2.5” винт, на котором живут бекапы Time Machine. И есть у меня к нему два шнурка: один тонкий, а второй толстый, длинный и с двумя разъемами (второй — для доп. питания). Обычно я пользовался длинным солидным шнуром, а в последние пару дней стал пользоваться тонким. Логика простая: винт либо работает, либо не работает. Раз уж ему удалось раскрутиться на тонком проводе — значит, питания хватает и он работает. А тонкий провод удобнее:)
Оказалось, не все так просто. На интенсивных операциях на винте гаснет лампочка. При этом на слух винт как бы продолжает крутиться, а головки продолжают ездить. В операционной системе при этом происходит ужас, который можно остановить только выдергиванием шнурка: трансфер около одного МБ/с, операции с диском виснут без диагностики и блокируются.
На коротком проводе у меня полностью был разрушен раздел с бекапами Time Machine и едва выжил том с фотографиями (они сбекаплены в другом месте). Я переставил провод на толстый, создал новый раздел и все стало снова хорошо.
Моя гипотеза: на интенсивных операциях питания чуть-чуть недостает. Из-за этого на какое-то очень короткое время вырубается двигатель и головки паркуются на инерции движения блинов. Тут же моментально падает нагрузка по питанию, оно восстанавливается, двигатель банки снова запускается, блок головок снова ищет и находит адресные метки. И так — несколько раз в секунду или наоборот, раз в несколько секунд. Перепадов вращения блинов не слышно, а вот головки постоянно ездят и имитируют бурную деятельность. Электроника по питанию отключиться не успевает, а холостое вращение блинов, видимо, является штатной ситуацией, и поэтому винт ничего не сообщает операционке.
Вывод: USB-провод важен, и тот факт, что винт в принципе запустился на конкретном проводе — еще ничего не значит.
Дорогие радиослушатели, только что вы прослушали радиопостановку “Научный эксперимент”.
А теперь наш гость из MIT Gerald Jay Sussman расскажет, почему вводный курс “Структура и интерпретация компьютерных программ (SICP)” будет основан на языке Python вместо Scheme.
Инженер должен научиться проводить научные эксперименты для выявления принципов работы программного и аппаратного обеспечения, по крайней мере до степени, позволяющей решить возникшую задачу. (The engineer must learn to perform scientific experiments to find out how the software and hardware actually work, at least enough to accomplish the job at hand.)
Сдается мне, господа, что старые пердуны в чем-то правы.
А с другой стороны, такой подход только закрепит отношение к техническому образованию, как черной и белой магии.
'-._ ___.....___
`.__ ,-' ,-.`-,
`''-------' ( p ) `._ HAVE YOU READ
`-' \ YOUR SICP TODAY?
\
. \
\---..,--'
................._ --...--,
`-.._ _.-'
`'-----''
Oleg Leschinsky: Про C++x0 читал перелай?
dottedmag: нет
Oleg Leschinsky: Ссылку кинуть?
dottedmag: давай
…
dottedmag: ох%%ать
dottedmag: ну и синтакис у лямбд
dottedmag: “язык стал только выразительней, а никак не сложнее.”
dottedmag: ггг
dottedmag: Следующее предложение: “Таким образом, С++ вбирает в себя всё новые и новые идеи.” ))
dottedmag: “Несложно заметить, что С++ 0x — огромный шаг поближе к Haskell.”
dottedmag: АААААА!
dottedmag: initializer_list — ужос
dottedmag: capture lists жесть
dottedmag: ох%%ать. ещё один синтаксис для функций. с ->
dottedmag: http://en.wikipedia.org/wiki/C%2B%2B0x#Alternate_function_syntax
dottedmag: C++0x. Ещё больше костылей!
* dottedmag прочитал title в записи блога
dottedmag: C++ 0x уже сегодня? -> C++0 хуже сегодня? )
dottedmag: C, C++, C++0x/brainfuck/…
dottedmag: Further, concept maps can act as mini-types, with function definitions and other constructs commonly associated with classes:
dottedmag: мой мозг
dottedmag: бля. аксиомы
dottedmag: сцуко. они ж невычислимые
dottedmag: nullptr
dottedmag: аааа!
dottedmag: nullptr_t!!!
dottedmag: u"" и U""!!!!
dottedmag: utf-ные, не unicode-ные!!!
dottedmag: char32_t!
“Всем” известно, что default city — это Москва.
Те же “всем” кажется, что единственным славянским языком является русский.

Кое-кому не хватает сравнения значений в шаблонах Django.
Короткий ответ на предложенное решение: You’re Doing It Wrong.
Вынос логики приложения на уровень шаблонов только замедлит и без того небыстрый механизм.
Файл управляющего сценария с расширением .php содержит внутри такую конструкцию:
#!/bin/sh
echo [$0] ... > /dev/console
<?
код PHP
?>
Хочу понимать эту логику, пусть меня научат.
Рассматривая каталог ноутбуков заметил название eMachines. Сначала подумал, что какая-то новая китайчатина. Начал искать и обнаружил, что полное название выглядит как Acer eMachines. Помня, что хорошую вещь азером не назовут, производитель решил чуть-чуть внести изменения в схему именования. :)
А теперь о серьезном — посоветуйте ноутбук до $500, поддерживаемый последними Ubuntu (я буду ставить Debian). Предполагаемые задачи: самообразование (emacs, firefox, haskell, python), развлечения (фильмы).
Quote by Tim Peters, sixteen years ago(!):
“Python tricks” is a tough one, cuz the language is so clean. E.g., C makes an art of confusing pointers with arrays and strings, which leads to lotsa neat pointer tricks; APL mistakes everything for an array, leading to neat one-liners; and Perl confuses everything period, making each line a joyous adventure.
C++ is the steampunk of programming languages: modern ideas realized with victorian technology.
В pythonua@c.j.r xa4a поднял интересный вопрос о замыканиях в Python.
Код, ставший камнем преткновения:
l = []
for i in range(2):
for j in range(2):
l.append(lambda: i + j)
По идее, список l должен содержать анонимные функции, возвращающие 0, 1, 1, 2 (порядок в данном случае не важен).
Проверяем в ipython:
In [1]: l = []
In [2]: for i in range(2):
...: for j in range(2):
...: l.append(lambda: i + j)
In [3]: for x in range(4):
...: l[x]()
Out[3]: 2
Out[3]: 2
Out[3]: 2
Out[3]: 2
Облом.
Как одно из решений, была предложена конструкция следующего вида:
l = []
for i in range(2):
for j in range(2):
l.append(lambda i=i, j=j: i + j)
Проверяем.
In [3]: for x in range(4):
...: l[x]()
...:
...:
Out[3]: 0
Out[3]: 1
Out[3]: 1
Out[3]: 2
Работает.
Это пример простого и понятного всем неправильного решения.
Почему решение неправильное? Потому что в первом случае в список добавляются анонимные функции с 0 (нулем) аргументов и двумя свободными переменными. Во втором случае в список попадают уже анонимные функции от 2-х аргументов, для которых (аргументов) указаны значения по умолчанию. Для понятности второй вариант анонимной функции можно переписать так:
lambda n=i, m=j: n + m
То есть “мы шли на Одессу, а вышли к Херсону”.
Перед тем, как рассмотреть правильное решение, рассмотрим почему получается то, что получается.
In [1]: l = []
In [2]: i = 3
In [3]: f = lambda: i + 3
In [4]: f()
Out[4]: 6
In [5]: i = 5
In [6]: f()
Out[6]: 8
Очевидно, что i в анонимной функции и i снаружи от нее — смотрят в одно и то же место памяти, хотя я ждал, что i внутри функции переопределит i снаружи.
Что делать?
Правильное решение:
def lsum(n, m):
return lambda: n + m
l = []
for i in range(2):
for j in range(2):
l.append(lsum(i, j))
При использовании дополнительной функции значения i и j копируются, после её завершения ссылки на копии остаются только внутри анонимной функции, а циклы доступа к копии не имеют.
Проверяем:
In [4]: for x in range(4):
...: l[x]()
Out[4]: 0
Out[4]: 1
Out[4]: 1
Out[4]: 2
В PLT Scheme ситуация аналогичная:
(define i 3)
(define f (lambda () i))
(f)
3
(set! i 5)
(f)
5
но на фоне предпочтитения рекурсии циклам неожиданности возникают значительно реже.
Мораль придумайте сами.
В некоторой конторе новый админ от большого энтузиазма оставался на работе на час-полтора и даже в субботу выходил. А потом приоритеты поменялись и решил уйти вовремя, в шесть часов вечера.
Главный инженер такого финта в 18:30 не понял и потребовал уволить админа за отсутствие на рабочем месте.
Мораль придумайте сами.
В очереди новых пакетов Debian появилась бибилиотека eglibc, которая придет на замену glibc.
“Точно говорю вам, что небо налетит на земную ось!” (с)
Новая библиотека обеспечивает совместимость с API/ABI glibc (хотелось бы верить).
Из интересного лично мне в eglibc улучшена поддержка embedded архитектур.
Потому что Дреппер — такой Дреппер.