#include <stdio.h>
int main() {
int x = 3;
x += x++;
printf("%i\n", x);
return 0;
}
(kit)20:32:54 {ruzin@MacBook-Ruzin}$~> cc z.c (kit)20:32:58 {ruzin@MacBook-Ruzin}$~> ./a.out
7
=========
в С# не проверял.
Не пойму, почему x += n должно разворачиваться компилятором в x = x + n?
В ASM вроде есть добавления чего-то к чему-то уже существующему и сама операция += как раз сделана, чтобы минимизировать количество команд ASM.
=========
(kit)20:40:16 {ruzin@MacBook-Ruzin}$~> CFLAGS="-g -O0" make z
cc -g -O0 z.c -o z
(kit)20:40:49 {ruzin@MacBook-Ruzin}$~> gdb z
GNU gdb 6.3.50-20050815 (Apple version gdb-1822) (Sun Aug 5 03:00:42 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type «show copying» to see the conditions.
There is absolutely no warranty for GDB. Type «show warranty» for details.
This GDB was configured as «x86_64-apple-darwin»...Reading symbols for shared libraries… done
(gdb) break main
Breakpoint 1 at 0x100000f16: file z.c, line 4. (gdb) run
Starting program: /Users/ruzin/z
Reading symbols for shared libraries +… done
Ответьте себе на два вопроса:
— что мне нравится делать больше всего
— что у меня получается лучше всего (тут можно спросить у коллег/знакомых — в нейтральной обстановке)
Наибольшую удовлетворение для себя и пользу для других можно занимаясь этим (если ответы совпадают).
Если не совпадают, то надо зарабатывать на жизнь вторым, прокачивая скилы в первом. Тут тоже два варианта:
«плавный» — если есть обязательства (семья, пожилые родители и т.п.) или «по бразильской системе».
Каждый предприниматель, открывая свой первый бизнес, не умеет этого делать ;-)
Открывайте и учитесь!
Не могу дать ссылки на источники, но пара забавных моментов зафиксировалась в голове:
— первый год рождения празднует только 10% открытых бизнесов
— десятилетие празднуют 10% от выживших за первый год
— в среднем у предпринимателей 2,5-ный по счету бизнес успешный
Сколько (минимум!) вопросов надо задать, чтобы узнать, где крестик?
Ответ — «4». Во всех подобных играх минимальное число вопросов будет равно информационной энтропии.
При этом не имеет значения, какие вопросы задавать.
Правильно будет:
Сколько (минимум!) вопросов надо задать, чтобы гарантированно узнать, где крестик?
Ответ — «4». Во всех подобных играх минимальное число вопросов будет равно информационной энтропии.
При этом не имеет значения, какие вопросы задавать.
Очень даже имеет значение, какие вопросы задавать. Просто представьте, если задавать
вопросы типа: «а в первой клетке есть? а во второй есть?.. а в 16-й есть?»
По мне так это типичный пример плохой архитектуры.
Если у вас такое случилось, то надо сесть и подумать над сутью своих классов, возможно у них есть что-то общее.
Вот если бы компьютеры были бы аналоговыми — и вычисления производились «решением дифферециальных уравнений», то такие связи были бы уместны…
Предполагаю волну критики, но справедливости ради не могу молчать! :)
Давайте не путать язык программирования (синтаксис), API (спецификацию) и библиотеку (реализацию API).
Все три сущности — продукт интеллектуальной деятельности. Причем не абстрактная идея, а вполне себе конкретная реализация. Все три сущности могут и должны (на усмотрение автора) быть объектом защиты.
По-моим личным убеждениям, мир был бы лучше если бы патентов не было вообще, но в сегодняшних реалиях, чем отличается язык программирования от технологии получения специфичного сплава метталов или формулы таблетки для лечения простуды?
Если я правильно понял автора статьи, то претензии Oracle к Google не к языку программирования («пусть они (Google) используют синтаксис Java, но за наше API пасть порвем»), а к использованию спецификации-API (т.к. к реализации у них не может быть претензий — Google все переписал).
Помнится в свое время SUN заставил Microsoft использовать свою виртуальную машину, а не MS'овскую. Чем этот спор отличается от того, что происходит сейчас? (Oracle хочет много денег, SUN хотел пропихнуть свою разработку на Windows, не допустив размытия/фрагментации своей платформы).
Также можно вспомнить как долго IBM упрашивала SUN сделать Java открытой платформой.
Но, похоже, акционеры SUN не хотели терять деньги и вот, на тебе, нашелся таки покупатель, который сейчас встряхнет индустрию.
Кстати по российскому законодательству, если 20% (могу соврать, но по-моему эта цифра) произведения отличаются — то оно считается самостоятельным :) Т.е. Google достаточно поменять 20% API и все будет в шоколаде :)
В качестве прикола, а если перед каждым классом/методом поставить префикс g_… это уже будет считаться другим API? ;)
По уставу в армии запрещено наказывать взвод, за проступок одного военнослужащего.
Как на практие — не знаю, полагаю наказывают только-так.
(Про содержание устава знаю из военной кафедры).
Сами библиотеки не влияют на скорость исполнения, однако время на создание новых процессов, подтягивающих эти библиотеки (и высвобождение ресурсов), увеличивается.
Я лишь хотел намекнуть автору, что архитектура систем, приведенная на картинках, для обоих вариантов — одна и та же.
Node.JS не блокирует HTTP-запросы не потому, что у него «архитектура особая», а потому что он позволяет параллельно поднимать больше обслуживающих процессов/тредов.
Интерес же представляет «магия», которая происходит внутри Node.JS, которая позволяет экономично расходовать ресурсы ОС/сервера по сравнению с CGI/PHP.
И да, для того, чтобы обслуживать массу запросов, вовсе нет необходимости поднимать кучу процессов/тредов — посмотрите на тот же Nginx — если не изменяет память: 4 процесса по 1000 обслуживаемых соединений.
Я могу представить, что node.js потребляет меньше памяти, что он «как-то лучше организован в потоках», но, простите, как автор считает если Client (browser) подключается к Server (web-server) по HTTP, то сетевое соединение (TCP) оно продолжает держаться на «долгих запросах, использующих БД» или нет?
ИМХО отказом новых коннектов занимается именно веб-сервер, который принимает входящие запросы. Их предел установлен на уровне apache/nginx/lighttpd/etc. Что веб-сервер делает дальше с этим запросом (передает CGI-скрипту, запускает дочерний процесс/тред) никого не волнует.
Если автору на его nginx одновременно придет 16000 «долгих» запросов, для которых Node.Js будет ждать ответа от БД. Node.JS все равно «подвиснет» с 15000 и заблокирует все остальные 1000 «легких» (в очереди socket'а), если они вообще не будут отправлены «домой» (connection refused).
Более интересно понять почему Node.Js такой легкий и быстрый… Возможно потому что в нем почти ничего нет? (никаких библиотек)
Это как написать на С web-сервер, который на любой запрос будет отвечать «Hello, world!» и закрывать соединение. Таких и 100 000 в секунду можно обработать (если канал позволит)…
В свое время W3C со своим CSS2 очень сильно подкачала.
Пример: представьте, что вам прислали посылку по почте. Вы спрашиваете: «каков ее размер?» Вам говорят: «1,5 метра». Вы заказали Газель и приезжаете на почту. Вам вытаскивают вашу посылку но она в ширину 2 метра (не влезет в Газель)! Вы: «что за фигня?». А вам отвечают: «Ну как что, посылка 1,5 метра, еще по 24 см. пенопласта, и по 1 см. картона»…
Единственный браузер, где поколдовав с DOCTYPE, можно было установить ширину блока width == border+padding+inner_width был IE!!!
Я хотел бы знать по-фамильно, кто придумал, что блок width == inner_width, а сам элемент будет занимать width+padding+border? Там (в W3C) кто-нибудь хоть одну страничку руками сверстал?
Хорошо хоть в CSS3 догадались сделать возможность выбрать математику для блочной модели и сделать ее естественной.
— Теперь по сути статьи, поддержка де-факто «хитрых» фичей производителей браузеров, ИМХО, не является чем-то «УЖАС УЖАС УЖАС», это нормально. Важно только то, чтобы предполагаемое поведение (со всеми нюансами было задокументировано и публично открыто). А префикс -webkit- — ну пусть останется как памятник тем ребятам, которые придумали столь замечательную фишку :) W3C, если сочтет нужным, может этот префикс убрать и стандартизировать (пусть даже с исправлениями опубликовать на своем сайте, как часть стандарта). Производители браузеров добавят поддержку фич с префиксами -webkit- и без них по стандарту W3C.
И последнее. Собака лает — караван идет. Если Google/Apple считают, что им такие штуки нужны, а webmaster'а «потянулись» их использовать, то другим производителям ничего не остается — будут поддерживать -webkit-. Это — нормально!
Строго говоря в N-мерном пространстве треугольники останутся треугольниками (имеется ввиду декартово пространство). Мера «расстояния» между двумя точками — это некоторая функция F (я привел ее для плоскости, т.е. двухмерного пространства).
К сожалению, если исходить из моих уточнений к исходной формулировке Вашей задачи, мне в голову не приходит ни одного решения (алгоритма), кроме простого перебора: O(N^3) на поиск треугольников + O(N^2) на поиск групп точек по треугольникам O(N) на поиск наиболее подходящих скоплений.
16 млн ^ 3 — выглядит, как некоторая бесконечность :)
20:33:19 {ruzin@MacBook-Ruzin}$~> cat z.c
(kit)20:32:54 {ruzin@MacBook-Ruzin}$~> cc z.c
(kit)20:32:58 {ruzin@MacBook-Ruzin}$~> ./a.out
7
=========
в С# не проверял.
Не пойму, почему x += n должно разворачиваться компилятором в x = x + n?
В ASM вроде есть добавления чего-то к чему-то уже существующему и сама операция += как раз сделана, чтобы минимизировать количество команд ASM.
=========
(kit)20:40:16 {ruzin@MacBook-Ruzin}$~> CFLAGS="-g -O0" make z
cc -g -O0 z.c -o z
(kit)20:40:49 {ruzin@MacBook-Ruzin}$~> gdb z
GNU gdb 6.3.50-20050815 (Apple version gdb-1822) (Sun Aug 5 03:00:42 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type «show copying» to see the conditions.
There is absolutely no warranty for GDB. Type «show warranty» for details.
This GDB was configured as «x86_64-apple-darwin»...Reading symbols for shared libraries… done
(gdb) break main
Breakpoint 1 at 0x100000f16: file z.c, line 4.
(gdb) run
Starting program: /Users/ruzin/z
Reading symbols for shared libraries +… done
Breakpoint 1, main () at z.c:4
4 int x = 3;
(gdb) disassemble
End of assembler dump.
(gdb)
— что мне нравится делать больше всего
— что у меня получается лучше всего (тут можно спросить у коллег/знакомых — в нейтральной обстановке)
Наибольшую удовлетворение для себя и пользу для других можно занимаясь этим (если ответы совпадают).
Если не совпадают, то надо зарабатывать на жизнь вторым, прокачивая скилы в первом. Тут тоже два варианта:
«плавный» — если есть обязательства (семья, пожилые родители и т.п.) или «по бразильской системе».
Открывайте и учитесь!
Не могу дать ссылки на источники, но пара забавных моментов зафиксировалась в голове:
— первый год рождения празднует только 10% открытых бизнесов
— десятилетие празднуют 10% от выживших за первый год
— в среднем у предпринимателей 2,5-ный по счету бизнес успешный
Статью нужно отфоматировать хотя бы также (тяжело читать): habrahabr.ru/post/144729/
1. убил себя или своего брата/сестру
2. тот, кого убили, был профессором
Правильно будет:
Очень даже имеет значение, какие вопросы задавать. Просто представьте, если задавать
вопросы типа: «а в первой клетке есть? а во второй есть?.. а в 16-й есть?»
Если у вас такое случилось, то надо сесть и подумать над сутью своих классов, возможно у них есть что-то общее.
Вот если бы компьютеры были бы аналоговыми — и вычисления производились «решением дифферециальных уравнений», то такие связи были бы уместны…
Давайте не путать язык программирования (синтаксис), API (спецификацию) и библиотеку (реализацию API).
Все три сущности — продукт интеллектуальной деятельности. Причем не абстрактная идея, а вполне себе конкретная реализация. Все три сущности могут и должны (на усмотрение автора) быть объектом защиты.
По-моим личным убеждениям, мир был бы лучше если бы патентов не было вообще, но в сегодняшних реалиях, чем отличается язык программирования от технологии получения специфичного сплава метталов или формулы таблетки для лечения простуды?
Если я правильно понял автора статьи, то претензии Oracle к Google не к языку программирования («пусть они (Google) используют синтаксис Java, но за наше API пасть порвем»), а к использованию спецификации-API (т.к. к реализации у них не может быть претензий — Google все переписал).
Помнится в свое время SUN заставил Microsoft использовать свою виртуальную машину, а не MS'овскую. Чем этот спор отличается от того, что происходит сейчас? (Oracle хочет много денег, SUN хотел пропихнуть свою разработку на Windows, не допустив размытия/фрагментации своей платформы).
Также можно вспомнить как долго IBM упрашивала SUN сделать Java открытой платформой.
Но, похоже, акционеры SUN не хотели терять деньги и вот, на тебе, нашелся таки покупатель, который сейчас встряхнет индустрию.
Кстати по российскому законодательству, если 20% (могу соврать, но по-моему эта цифра) произведения отличаются — то оно считается самостоятельным :) Т.е. Google достаточно поменять 20% API и все будет в шоколаде :)
В качестве прикола, а если перед каждым классом/методом поставить префикс g_… это уже будет считаться другим API? ;)
Это и есть PR-ход!
Как на практие — не знаю, полагаю наказывают только-так.
(Про содержание устава знаю из военной кафедры).
Сами библиотеки не влияют на скорость исполнения, однако время на создание новых процессов, подтягивающих эти библиотеки (и высвобождение ресурсов), увеличивается.
Я лишь хотел намекнуть автору, что архитектура систем, приведенная на картинках, для обоих вариантов — одна и та же.
Node.JS не блокирует HTTP-запросы не потому, что у него «архитектура особая», а потому что он позволяет параллельно поднимать больше обслуживающих процессов/тредов.
Интерес же представляет «магия», которая происходит внутри Node.JS, которая позволяет экономично расходовать ресурсы ОС/сервера по сравнению с CGI/PHP.
И да, для того, чтобы обслуживать массу запросов, вовсе нет необходимости поднимать кучу процессов/тредов — посмотрите на тот же Nginx — если не изменяет память: 4 процесса по 1000 обслуживаемых соединений.
Я могу представить, что node.js потребляет меньше памяти, что он «как-то лучше организован в потоках», но, простите, как автор считает если Client (browser) подключается к Server (web-server) по HTTP, то сетевое соединение (TCP) оно продолжает держаться на «долгих запросах, использующих БД» или нет?
ИМХО отказом новых коннектов занимается именно веб-сервер, который принимает входящие запросы. Их предел установлен на уровне apache/nginx/lighttpd/etc. Что веб-сервер делает дальше с этим запросом (передает CGI-скрипту, запускает дочерний процесс/тред) никого не волнует.
Если автору на его nginx одновременно придет 16000 «долгих» запросов, для которых Node.Js будет ждать ответа от БД. Node.JS все равно «подвиснет» с 15000 и заблокирует все остальные 1000 «легких» (в очереди socket'а), если они вообще не будут отправлены «домой» (connection refused).
Более интересно понять почему Node.Js такой легкий и быстрый… Возможно потому что в нем почти ничего нет? (никаких библиотек)
Это как написать на С web-сервер, который на любой запрос будет отвечать «Hello, world!» и закрывать соединение. Таких и 100 000 в секунду можно обработать (если канал позволит)…
Пример: представьте, что вам прислали посылку по почте. Вы спрашиваете: «каков ее размер?» Вам говорят: «1,5 метра». Вы заказали Газель и приезжаете на почту. Вам вытаскивают вашу посылку но она в ширину 2 метра (не влезет в Газель)! Вы: «что за фигня?». А вам отвечают: «Ну как что, посылка 1,5 метра, еще по 24 см. пенопласта, и по 1 см. картона»…
Единственный браузер, где поколдовав с DOCTYPE, можно было установить ширину блока width == border+padding+inner_width был IE!!!
Я хотел бы знать по-фамильно, кто придумал, что блок width == inner_width, а сам элемент будет занимать width+padding+border? Там (в W3C) кто-нибудь хоть одну страничку руками сверстал?
Хорошо хоть в CSS3 догадались сделать возможность выбрать математику для блочной модели и сделать ее естественной.
— Теперь по сути статьи, поддержка де-факто «хитрых» фичей производителей браузеров, ИМХО, не является чем-то «УЖАС УЖАС УЖАС», это нормально. Важно только то, чтобы предполагаемое поведение (со всеми нюансами было задокументировано и публично открыто). А префикс -webkit- — ну пусть останется как памятник тем ребятам, которые придумали столь замечательную фишку :) W3C, если сочтет нужным, может этот префикс убрать и стандартизировать (пусть даже с исправлениями опубликовать на своем сайте, как часть стандарта). Производители браузеров добавят поддержку фич с префиксами -webkit- и без них по стандарту W3C.
И последнее. Собака лает — караван идет. Если Google/Apple считают, что им такие штуки нужны, а webmaster'а «потянулись» их использовать, то другим производителям ничего не остается — будут поддерживать -webkit-. Это — нормально!
К сожалению, если исходить из моих уточнений к исходной формулировке Вашей задачи, мне в голову не приходит ни одного решения (алгоритма), кроме простого перебора: O(N^3) на поиск треугольников + O(N^2) на поиск групп точек по треугольникам O(N) на поиск наиболее подходящих скоплений.
16 млн ^ 3 — выглядит, как некоторая бесконечность :)