Посмотреть исходный файл вы сможете по ссылке на Github или же под катом, а оценить его в работе может любой владелец устройства с Qualcomm Snapdragon 200 MSM8610 под управлением Android.
Как известно любому, кто знаком с алгоритмами сортировки, сортировка пузырьком — алгоритм учебный, и в промышленном коде обычно не применяющийся в силу своей неэффективности; дело в том, что в наихудшем и среднем случаях он имеет сложность О(n2), к тому же его емкостная сложность в данном случае — O(n). Кого это не убедило — использовать сортировку пузырьком не рекомендует даже Барак Обама.
И это всё не учитывая того, что для поиска максимума хватило бы и простого перебора.
#ifndef ABS
#define ABS(x) (((x) < 0) ? -(x) : (x))
#endif
/*==============================================================================
* Function: bubblesort
*
* Description: Subroutine for sorting 1-D array elements
*
* Parameters: double *x ---> input one-dimensional array
* int n ---> size of input array
* int *m ---> indices of sorted elements
*============================================================================*/
void bubblesort(double *x, int n, int *m)
{
int i, j, t1;
double t2;
for(i = 0; i < n; i++)
m[i] = i;
for(i = 0; i < n; i++) {
for(j = 0; j <n-1; j++) {
if(x[j] < x[j+1]) {
t2 = x[j+1];
x[j+1] = x[j];
x[j] = t2;
t1 = m[j+1];
m[j+1] = m[j];
m[j] = t1;
}
}
}
} /* bubblesort */
/*==============================================================================
* Function: absmax
*
* Description:
*
* Parameters: double *x ---> input one-dimensional array
* int n ---> size of input array
*============================================================================*/
double absmax(double *x, int n)
{
int j, *l;
int index = 0;
double *y;
l = (int *)malloc(n * sizeof(int));
if (NULL == l) {
CDBG("%s: Error mem alloc for l.\n", __func__);
return -1;
}
y = (double *)malloc(n * sizeof(double));
if (NULL == y) {
free(l);
CDBG("%s: Error mem alloc for y.\n", __func__);
return -1;
}
for(j = 0; j < n; j++)
y[j] = ABS(x[j]);
bubblesort(y, n, l);
index = l[0];
free(l);
free(y);
return ABS(x[index]);
}
Проводилось ли Code Review? Об этом история умалчивает…
Комментарии (119)
AlexZaharow
20.07.2017 16:31+18Проводилось ли Code Review?
Зачем проводить Code Review для сотрировки методом пузырька? И так сойдёт!RomanArzumanyan
21.07.2017 13:20+3Проводилось. Вон как аккуратно всё оформленно, с doxygen-style документацией!
sumanai
20.07.2017 16:40+30Зато эту сортировку не устают спрашивать на собеседованиях. Вот и прошедший такое собеседование программист отличился.
avost
20.07.2017 17:23+4Обычно, дальше спрашивают почему не следует его использовать. :)
У этого чувака, похоже, не спрашивали ни того ни другого. Сам отличился.
vintage
20.07.2017 19:25+3Раз такое спрашивают — значит в компании так и кодят :-)
А если серьёзно, то для малых массивов пузырёк может оказаться быстрее, за счёт своей простоты. Но для поиска максимум, конечно, никакой пузырёк не нужен.
dimm_ddr
21.07.2017 11:53+1Вроде бы у quicksort не такая большая константа, чтобы скорость пузырька была заметно больше даже на очень маленьких массивах. Или я ошибаюсь?
wataru
21.07.2017 12:06+1Даже если оно всего в 3 раза медленнее по константе (а там ведь рекурсия, так что, думаю, больше разница), все-равно n log n от n^2 при маленьких n почти не отличается. Так 3 n log n > n^2 при n < 10.
myrov_vlad
21.07.2017 12:17+1Кстати, вы не правы.
https://www.wolframalpha.com/input/?i=3*x*log(x),+x%5E2,+x+from+0+to+10
Вот если в пять раз то разница действительно есть.
https://www.wolframalpha.com/input/?i=5*x*log(x),+x%5E2,+x+from+0+to+10
P.S. В целом, мне еще не нравится подход что код для сортировки написан с нуля и нет какой-нибудь отдельной функции вроде sort_little_array которая использовалась бы повсеместно, раз есть задача сортировать маленькие массивы.wataru
21.07.2017 12:23+1Нет, я прав. Логарифм-то надо двоичный использовать:
https://www.wolframalpha.com/input/?i=3*x*log(x)%2Flog(2),+x%5E2,+x+from+0+to+10
EDIT:
Если десетичный, то там и будет в константе разница все 10 раз.
Aquahawk
20.07.2017 19:55+2Вот для того и спрашивают, чтобы программист понимать что там происходит и не радовался хаку вида сортанём и возьмём первый, и париться не надо.
AndreyDmitriev
20.07.2017 21:03+1Я тоже раньше сортировку спрашивал в контексте медианной фильтрации, а теперь, с подачи Гиктаймс спрашиваю «как проинвертировать три логических сигнала, используя только две операции инвертирования и неограниченное количество „И“ и „ИЛИ“ логики» — это куда как веселее.
hacklex
21.07.2017 00:00Хорошая задачка. Наверное, даже речь про один инвертор.
Сначала не так написал, потом, подумав, исправил.
Х =!(A & B & C) // по де Моргану это !A | !B | !C
P = X | A | B = !C
Q = X | A | C = !B
R = X | B | C = !A
смета: 1 инвертор, 1 тройной «и» (или два двойных), 5 двойных «или» либо 3 двойных и один тройной…
Собственно, по этому принципу можно одним инвертором сколько угодно сигналов инвертировать, надо полагать…AndreyDmitriev
21.07.2017 08:53Нет, там не всё так просто:
Как проинвертировать три сигнала двумя инверторами
How to invert three signals with only two NOT gates
dmitry_ch
22.07.2017 14:17+2Да-да, так и видится:
"- Расскажите несколько слов о методе сортировки пузылька?
— О, хорошо что вы спросили! На прошлом месте я именно так и делал большинство задач. Вот у вас какой телефон? Андроид? Отлично, значит, у вас в руках пример того, как эффективно я решал задачи этим методом!"
И ведь впечатлит он этой речью!
ababo
20.07.2017 17:28+7Как известно любому, кто знаком с алгоритмами сортировки, сортировка пузырьком — алгоритм учебный, и в промышленном коде обычно не применяющийся в силу своей неэффективности
Неверно. Для маленьких массивов она более эффективна — вот если нужно сортировать миллион массивов по 10-100 элементов, то пузырёк — прекрасный кандидат. Более того, если производительность не стоит во краю угла, а библиотечная сортировка недоступна по той или иной причине (например, для кода микроконтроллера), то пузырьковая или линейная сортировки будут отличным выбором.dom1n1k
20.07.2017 21:14+2Всё верно там написано. Пузырьковая сортировка — это чисто учебный алгоритм, потому что он предельно понятен на «бытовом» уровне восприятия. Но в реальном коде его не нужно применять нигде, потому что она крайне неэффективна.
И даже если массив мал — все равно не нужно. Для этих случаем есть другие алгоритмы, столь же простые, но все же более эффективные (вставки, сортировка выбором, етц).avost
21.07.2017 00:11Более эффективные с точностью до константы? :) Ага, а особенно, вставкой.
С другой стороны, если бы этот перец вместо пузырька использовал сортировку выбором то, возможно, догадался бы выкинуть внешний цикл и максимум получил бы естественным образом :).dom1n1k
21.07.2017 01:05+1Ну да, до константы. Когда данных мало, константа зачастую важнее асимптотики.
Вставки действительно не самый удачный пример, если речь идет про сплошной массив (это скорее метод для списков). А вот выбором отличный метод — очень понятный, естественный и совершенно точно быстрее пузыря.
encyclopedist
21.07.2017 03:47+3Как раз insertion sort самый быстрый для небольших массивов. В большинстве серьёзных алгоритмов сортировки в конце рекурсии переключаются именно на него. Быстрее только сортирующие сети.
avost
21.07.2017 11:52+2На массивах из трёх элементов? Или на четырёх ещё тоже? ;)
Там проще развернуть циклы любой простой сортировки и выкинуть лишнее. Получится примерно одно и тоже. Полагаю, оптимизатор так и делает иногда :).encyclopedist
21.07.2017 12:10Примерно до 15-20 элементов. Смотреть например тут.
Там проще развернуть циклы любой простой сортировки и выкинуть лишнее
Первое просто, а вот второе совсем нетривиально. Компилятору это не под силу. Даже ученым-людям сети сортировки (опримальный результат выкидывания лишнего) размеров порядка 20-30 стали известны совсем недавно.
alex_zzzz
20.07.2017 17:32+4Не понимаю акцента не пузырьке. O() у него может и не очень, зато константы хорошие. Проблема ведь не в методе сортировки, а в самой сортировке.
dom1n1k
20.07.2017 18:05+7У пузырька все плохо, потому что он делает много лишних перемещений данных. Есть алгоритмы столь же простые и понятные, но все равно гораздо эффективнее.
tangro
21.07.2017 10:42Зато он их делает для соседних элементов, которые чаще всего находятся в одной кэш-линии. В итоге десяток «лишних» перемещений в пузырьке на практике могут сработать быстрее, чем одно перебрасывание крайних элементов в quicksort. На массивах до пары сотен элементов вполне может быть практический профит.
RomanArzumanyan
21.07.2017 13:24Не всё у него плохо — пузырёк устойчив. В случае почти отсортированного массива на входе, он будет делать очень мало лишних перемещений.
wataru
21.07.2017 14:10+1Зато все такое же огромное количество сравнений.
RomanArzumanyan
21.07.2017 14:19+1Если вход почти упорядочен, то получим много-много чтений из одной кэш-линии, cmpz с переходами (почти) по одной ветке (предиктор ветвлений отработает) и мало-мало записей. По сути — копеечные операции.
На практике не занимался сравнением производительности сортировок в вырожденных случаях, но Сэджвик пишет, что пузырёк решает на почти упорядоченных входах. Склонен ему верить.khim
21.07.2017 14:37+3На практике не занимался сравнением производительности сортировок в вырожденных случаях, но Сэджвик пишет, что пузырёк решает на почти упорядоченных входах.
Это если пузырёк нормально написать. В данном случае всё сделано максимально криво и сложность работы всегда такая же, как в «максимально вырожденном случае».
WGH
20.07.2017 17:45+8В играх серии Unreal Tournament (twitch arena shooter) сортировка пузырьком применяется для сортировки скорборда в матче. Причем эта функции вызывается каждую перерисовку экрана, и при этом все работает отлично. Я даже скажу больше: это идеальный алгоритм сортировки для этой задачи (и он останется таковым, даже если сделать чуть умнее и сортировать только при изменении счета у одного из игроков).
PapaBubaDiop
20.07.2017 18:18-27А что за язык такой точказапятоистый?
double absmax(double *x, int n) { if (n<1) { CDBG("%s: Zero array x length.\n", __func__); return -1; } double xmax=ABS(x[0]); for(j = 1; j < n; j++) if (ABS(x[j]) > xmax) xmax = ABS(x[j]); return xmax; }
WinPooh73
20.07.2017 18:22+46код сортировки пузырьковой
он распознать не смог с листа
ему давали в детстве мало
Кнута
myrov_vlad
20.07.2017 19:08+7Коллеги, вот многие обсуждают что используется именно сортировка пузырьком, но я не пойму зачем здесь вообще сортировка, если найти максимум можно за линию?
x67
20.07.2017 20:13+2Вот обновление на систему поставшиь, а там из-за одной замены функции все сразу шустрее стало) человеко-часы программистов спасены и пользователи довольны)
А вообще, чем быстрее становится техника, тем больше пренебрегают оптимизацией, к сожалению
erwins22
20.07.2017 19:52+2возможно например нужна задержка при чтении из порта, а подобный код компилятор не упростит.
Кроме того в коде происходит выделение памяти 2 раза (т.е. это можно использовать для проверки)
Может быть для целей спецслужб нужно хранить x но для целей прохода проверок это не нужно
Так возникает массив в памяти абсолютных величин.
Возможно изначально в коде было все немного иначе, но в результате упрощений…AndreyDmitriev
20.07.2017 21:14+2Тут сомнительно, что в результате упрощений, так как это функция absmax в составе какой-то библиотеки. Там либо копипастилось откуда-то, либо программист не думал. Я знаком с целой группой таких программистов из одной жаркой страны, которые тыкают везде библиотечные функции где не надо, даже если они не очень подходят. При этом код проходит ревью на ура, ибо их там целый отдел. Иногда при наличии свободного времени я провожу выборочные внеплановые проверки и выгребаю пдобные перлы пачками. При этом самое сложное — доказать, что так делать не надо. Работает же, а что касается скорости и эффективности — так на это отдельных требований не было.
bogolt
21.07.2017 00:48Это просто прекрасно!
for(i = 0; i < n; i++) { for(j = 0; j <n-1; j++) {
И не важно, что возможно весь массив был уже давно отсортирован, циклы пройдут до конца =)) До полной наихудшей сложности пузырка. Всегда.
Если абстрагироваться от идиотского решения и рассмотреть функции беспристрастно то можно еще попридираться.
Например после сортивки вместо того чтобы вытащить первый элемент отсортированного массива ( в котором лежит нужное число ( абсолютная величина ) — берется индекс, а уже по индексу берется оригинальный элемент и к нему снова применятся отбрасывание знака.
То есть вместо
bubblesort(y, n, l); index = l[0]; free(l); free(y); return ABS(x[index]);
можно было бы сделать
bubblesort(y, n, l); ret = y[0]; free(l); free(y); return ret;
Функция absmax() возврщает double == -1 для сообщения об ошибке. Мне вот лично не нравится использовать значения не целочисленных типов для таких целей.
akzhan
21.07.2017 05:20-1Кстати, есть прекрасные алгоритмы сортировки — отсортировать только M элементов из N.
Да, я не против сортировки ради поиска максимума, если код не пишется руками, а просто комбинация библиотечных функций. И нет особых требований к производительности.
Но неужели там не было просто max?
qrck13
21.07.2017 07:53+2Это видимо выходец из C#, привыкший находить максимум посредством LINQ запросов вроде
var max = items.Sort().Last();t13s
21.07.2017 09:18+7Фиговый какой-то выходец получился в вашей фантазии. Если уж очень хочется LINQ, то во всех смыслах проще вот так сделать:
var max = items.Max();efremov
21.07.2017 11:16+2Как регулярно выясняется на собеседовании, в 2017 году многие пользователи LINQ не знают аггрегатных функций.
efremov
21.07.2017 11:14Это некошерный LINQ, Sort не применишь к IEnumerable. Должно быть items.OrderBy(_ => _).Last().
qrck13
22.07.2017 13:33Ну я так, принцип показать ;) Я LINQ-подобные вещи в последнее время только в Kotlin в личных проектах использовал, а на работе больше низкоуровневого C++. Но помню где-то видел подобные перлы
KirEv
21.07.2017 11:18-1Почитал комментарии… впечатление, чуть ли не каждый, пишет используя идеальные решения и алгоритмы.
И плевать на условия и причины создания обсуждаемого участка кода…
Ведь у нас всегда куча времени на создания элегантных решений и на создания нескольких элементарных функций дается неделя, а на исправления логик и т.п. — месяц, и нет более важных задач нежели елозиться с мелочами =)
А если серьезно, только что посмотрел, самый дешевый смартфон (около $35) с процом 1.3ГГц, 512МБ озу… смартфоны среднего ценового диапазона — в два раза выше параметрами… с головой достаточно выполнять подобные операции…
почитал остальной код в репозитарии… там вообще особо не заморачиваются делать оптимально со стороны потребления ЦПУ\ОЗУ, видимо оно им и не нужно… похоже то что написано — делает свою работу…
… а может начальник дурак… нам не известны причины такого подхода :)t13s
21.07.2017 11:28+2Идеальных решений для инженерных задач, увы, нет. На то они и инженерные.
А вот в приведенном примере возмущают, собственно, два факта:
1. Применение явно наихудшего возможного решения: O(n^2) супротив O(n) при сопоставимых константах.
2. ВременнАя стоимость реализации этого решения примерно равна стоимости реализации любого другого варианта. Тут не требуется никакого исследования, никаких разработок собственных сложных алгоритмов и т.п.KirEv
21.07.2017 11:37поленился парень нормально сделать… трудный день… или год =)
dimm_ddr
21.07.2017 11:58+4Если бы поленился, то сделал бы в один проход. Тут скорее наоборот слишком много свободного времени у не самого опытного программиста.
MacIn
21.07.2017 14:27Или писал не программист, а то ли математик, то ли железячник.
Знаете, как в анекдоте про математиков — как вскипятить чайник? Если чайник пустой, налить в него воды, включить плиту и т.д. А если чаник полный? Тогда вылить воду и тем самым задача сводится к уже известной, решение которой приведено выше.khim
21.07.2017 14:39+1Тогда вылить воду и тем самым задача сводится к уже известной, решение которой приведено выше.
Тут «оптимизирующий математик». Который кипятит воду на костре «оптимально сводя её к предыдущей»: выливая воду в костёр и, тем самым, решая сразу две проблемы: костёр потушен, чайник пуст.
anprs
21.07.2017 12:10+1Тот же шейкер пишется немногим сложнее а сортирует эффективнее.
Вот только вопрос не в элегантности решения — сортировка для получения максимального не нужна в принципе
Xandrmoro
21.07.2017 15:13Написать линейный поиск максимума ну явно быстрее, чем любую, даже самую простую, сортировку.
MacIn
21.07.2017 14:25Мне это по степени странности и кол-ву лишних действий напоминает какой-то старый кусок индусского говнокода, там где человек проверял логическую переменную через строковое преобразование и дополнительный перевод из целочисленного. Вроде такого:
lValue по типу сишной логической переменной или вроде того.
if (lValue == 1) lTmp = True
else if (lValue ==0) lTmp = False
else че-то там;
if lTmp.ToString.ToUpper == «TRUE» return True else return False;
kafeman
21.07.2017 14:53Copyright © 2013 Qualcomm Technologies, Inc. All Rights Reserved.
Это теперь новая мода такая, заливать на Хабр проприетарный код, да еще и вырезая копирайты?
Qualcomm Technologies Proprietary and Confidential.
Хоть под спойлер бы убрали…MacIn
21.07.2017 15:00Там же есть корректная ссылка на репозиторий, указано авторство. В чем проблема? Кому нужна шапка?
kafeman
21.07.2017 15:17-1Сами себе противоречите. Если есть ссылка на репозиторий, то зачем копипастить код сюда? А если копипастить код сюда, то зачем вырезать важную информацию об авторских правах и лицензии?
Статью просмотрели уже примерно 10 тыс человек, потом какая-то часть из них пойдет писать код для своих, или, что хуже, чужих opensource-проектов, создавая совершенно ненужные риски их владельцам. What has been seen cannot be unseen.MacIn
21.07.2017 16:58+1Нет никакого противоречия. Вы пишете статью, демонстрируя что-то кодом. Зачем вам весь код, особенно мусорные шапки, которые только отвлекают? Незачем. Вы взяли кусок, оставили ссылку на автора и оригинальный репозиторий — авторские права соблюдены: никто себе авторство кода не приписал.
или, что хуже, чужих opensource-проектов, создавая совершенно ненужные риски их владельцам. What has been seen cannot be unseen.
Если они скопипастят код прямо с хабра, да еще такой, то поделом.kafeman
21.07.2017 17:10Зачем вам весь код, <...> Вы взяли кусок,
Это не кусок, это и есть весь код по ссылке. За исключением копирайта.
особенно мусорные шапки
Dura lex, sed lex. Какими «мусорными» бы законы не были, их надо соблюдать.MacIn
21.07.2017 17:49Это не кусок, это и есть весь код по ссылке. За исключением копирайта.
Потому что он — ненужный для статьи мусор. Это частный случай, когда модуль короток и весь — чистый шик и блеск. Было бы это 10 строк из 1000 — было бы то же самое.
Dura lex, sed lex. Какими «мусорными» бы законы не были, их надо соблюдать.
Автор статьи не приписал себе авторство и оставил ссылку на оригинал. Все корректно.kafeman
21.07.2017 17:58Автор статьи не приписал себе авторство и оставил ссылку на оригинал. Все корректно.
Qualcomm Technologies Proprietary and Confidential.
Вы сейчас серьезно? Тем более, что автор не оставил ссылку на оригинал.MacIn
21.07.2017 21:40Абсолютно. Автор статьи на хабре не приписывал себе авторство кода, ссылка на полную версию (под оригиналом я имел в виду неурезанную версию) присутствует.
khim
21.07.2017 19:27+1Dura lex, sed lex. Какими «мусорными» бы законы не были, их надо соблюдать.
Дык, эта:Допускается без согласия автора или иного правообладателя и без выплаты вознаграждения, но с обязательным указанием имени автора, произведение которого используется, и источника заимствования: цитирование в оригинале и в переводе в научных, полемических, критических или информационных целях правомерно обнародованных произведений в объеме, оправданном целью цитирования, включая воспроизведение отрывков из газетных и журнальных статей в форме обзоров печати
Где вы несоблюдение законов нашли? Хотите сказать этот под был прочитирирован не в «критических целях»?kafeman
21.07.2017 19:52Прочитайте сами еще раз то, что вы написали:
Допускается без согласия автора или иного правообладателя и без выплаты вознаграждения, но с обязательным указанием имени автора, произведение которого используется, и источника заимствования: цитирование в оригинале и в переводе в научных, полемических, критических или информационных целях правомерно обнародованных произведений в объеме, оправданном целью цитирования, включая воспроизведение отрывков из газетных и журнальных статей в форме обзоров печати
А потом то, что написал правообладатель, и что MacIn выше назвал «мусором»:Copyright © 2013 Qualcomm Technologies, Inc. All Rights Reserved.
Qualcomm Technologies Proprietary and Confidential.MacIn
21.07.2017 21:47А потом то, что написал правообладатель, и что MacIn выше назвал «мусором»:
Для статьи вида «смотрите какой странный код попадается» это действительно мусор. Здесь обсуждается алгоритм и его некорректное применение. Авторство кода автор хабрастатьи не оспорил, вы загоняетесь и передергиваете. Если вас смущает распространение кода, помеченного как proprietary и confidential, то тогда непонятна претензия по поводу отсутствия этой пометки в статье: что, от того что вставят p&c, пропадет распространение confidential кода? Тут уж точно противоречие — вы определитесь с тем, что именно вас смущает.kafeman
21.07.2017 22:09Код этот тут не нужен вообще, достаточно ссылки. Но если автор считает это настолько важным, то предупреждение необходимо. Тогда читатель, исходя из своих личных убеждений и законов страны, в которой он находится, сможет сам решить, нужно ли ему становится соучастником возможного преступления и нужно ли ему читать чужой проприетарный код, ставя под вопрос лицензионную чистоту своих собственных программ.
Авторство кода автор хабрастатьи не оспорил, вы загоняетесь и передергиваете.
И я не оспариваю того, что он не оспорил. Я только отмечаю в дополнение к вышесказанному, что согласно законам РФ (и большинства других стран) этот код тут просто не имеет права находиться. Ни в виде цитаты, ни в какой-либо другой форме. Но это так, на заметку желающим выше процитировать мне гражданский кодекс.khim
22.07.2017 00:14Я только отмечаю в дополнение к вышесказанному, что согласно законам РФ (и большинства других стран) этот код тут просто не имеет права находиться.
Проблема только в том, что вы не приводите никаких разумных обоснований к этому тезису.
нужно ли ему читать чужой проприетарный код, ставя под вопрос лицензионную чистоту своих собственных программ.
Чтение чужого проприетарного кода не может «ставить под вопрос» чистоту чего-бы-то-ни-было.
Копирование чужого проприетарного кода может быть проблемой — но равно для этого и вводится норма, которая требует чтобы цитата обязательно сопровождалась указанием авторства и была отделена от остального текста. Ссылок на оригинал при этом не требуется.kafeman
22.07.2017 00:48Проблема только в том, что вы не приводите никаких разумных обоснований к этому тезису.
Обоснование — четвертая часть ГК (если мы обсуждаем РФ). Вы привели в контр-пример статью о цитировании, но она тут не действует. В коде написано, что он является собственностью «Qualcomm Technologies», и что это часть ее закрытого проекта. Без разницы, предпринимала компания попытки удалить его, или нет.
Чтение чужого проприетарного кода не может «ставить под вопрос» чистоту чего-бы-то-ни-было.
Не хочу себя деанонимизировать, но если в общих чертах, то именно по этой причине меня забанили в одном очень крупном OpenSource-проекте. Само по себе чтение чужих исходников нарушением закона не является, верно, но это создает повод для одной очень крупной корпорации подать в суд на разработчиков, и у «одного крупного OpenSource-проекта» нет ни денег, ни желания в этих делах участвовать. Поэтому поверьте, я из своего личного опыта знаю, о чем говорю.
Чтобы у вас не возникло сомнений в адекватности разработчиков, проект действительно крупный. И вы даже наверняка им хотя бы раз в жизни пользовались. А может, даже пользуетесь постоянно.khim
22.07.2017 01:39В коде написано, что он является собственностью «Qualcomm Technologies»,
Это, извините, ничего не доказывает. На YouTube — тоже полно материалов с пометками о чьём-то авторстве, однако же подавляющее большинство материала размещено там без нарушения чьих-либо прав и именно это и постулирует закон (американский): вы можете пытаться использовать какие-то подобные метки, чтобы, по косвенным признакам, пытаться «угадать» что-то, но по американскому закону этого не требуется. Пока нет заявления от правообладателя — размещение на площадке провайдера информации считается правомерным.
и что это часть ее закрытого проекта.
Эта часть — вообще к авторскому праву отношения не имеет, как я уже сказал — это вообще о коммерческой тайне и судить за нарушение тут можно вообще только работников Quallcomm'а и тех, кто имел доступ к этому тексту до того, как оно перестало быть тайной.
Чтобы у вас не возникло сомнений в адекватности разработчиков, проект действительно крупный. И вы даже наверняка им хотя бы раз в жизни пользовались. А может, даже пользуетесь постоянно.
Охотно верю — но внутренние правила какого-либо проекта, независимо от его размера, не могут быть заменой закону. Я, по той же причине, например, не могу читать и использовать некоторые документы, которые вообще размещены публично на публичных сайтах — тоже из соображений что наши конкуренты могут использовать это как повод… но это же не значит что теперь всему миру туда смотреть нельзя!kafeman
22.07.2017 02:15На YouTube — тоже полно материалов с пометками о чьём-то авторстве
Верно, а сразу под ними название лицензии, под которой оно размещено. И написано там обычно что-то вроде «Стандартная лицензия YouTube», а не «Proprietary and Confidential».
Пока нет заявления от правообладателя — размещение на площадке провайдера информации считается правомерным.
Насколько я понимаю, речь там идет о другом. Если вы владелец GitHub, и некая редиска залила к вам исходники Windows 10, то вы как бы не при делах, пока Microsoft не обратится к вам с требованием это безобразие удалить. Но это не значит, что эти исходники там какое-то время размещены легально, и вы можете цитировать их «посмотрите, какие в MS говнокодеры».
Эта часть — вообще к авторскому праву отношения не имеет, как я уже сказал — это вообще о коммерческой тайне
Это в частности о том, что это не открытый OpenSource-проект. В примере с Windows выше, ее исходники уже утекали в сеть, и на GitHub их наверняка тоже кто-нибудь заливал. Но это не значит, что Windows вдруг стала открытым проектом. Более того, Micorosoft через суд добилась удаления кода с большинства сайтов. И ее совершенно не волновало, что вы там цитировали, что вы там знали/не знали, что там у кого утекало и т. д.
Я, по той же причине, например, не могу читать и использовать некоторые документы, которые вообще размещены публично на публичных сайтах
Замечательно, тогда я не понимаю, почему мы до сих пор спорим. Как бы вы отнеслись к тому, что некий HotMusicWater залил бы на Хабр эти документы, удалив при этом надпись «Совершенно секретно», мотивируя это тем, что все и так всем доступно, а надпись все-равно потеряла свою актуальность в связи с утечкой? Напомню, мой самый первый комментарий в этой ветке был:Это теперь новая мода такая, заливать на Хабр проприетарный код, да еще и вырезая копирайты?
Хоть под спойлер бы убрали…avost
22.07.2017 11:44+1Но это не значит, что эти исходники там какое-то время размещены легально, и вы можете цитировать их «посмотрите, какие в MS говнокодеры».
Почему не значит? Можете рассказать об ответственности за цитирование исходников не прошедших процедуру публичного обнародования? Не публикации, а именно цитирования.
Это в частности о том, что это не открытый OpenSource-проект.
Для того, чтобы быть опубликованным (втч совершенно легально) проекту не обязательно быть открытым опенсорсным.
Как бы вы отнеслись к тому, что некий HotMusicWater залил бы на Хабр эти документы, удалив при этом надпись «Совершенно секретно», мотивируя это тем, что все и так всем доступно, а надпись все-равно потеряла свою актуальность в связи с утечкой?
Вы, возможно, не поверите, но вы можете цитировать документы с викиликс. Если мне не изменяет память, на хабре периодически появляются такие статьи.
В сфере публикаций действуют несколько иные правила и законы, нежели в сфере корпоративного патентного права. Давайте я вас ещё больше шокирую — таким образом совершенно легально иногда можно обойти ограничения на распространение закрытых технологий — почитайте любопытную историю PGP и Циммермана.
да еще и вырезая копирайты?
Вы так этими копирайтами озабочены, как будто из наличие-отсутствие что-то меняет. Вы не можете использовать гнутые, например, исходники, вырезав копирайт, но при чём здесь цитирование в статье?
khim
22.07.2017 19:13Замечательно, тогда я не понимаю, почему мы до сих пор спорим.
Потому что вы пытаетесь внутренние правила некоего проекта превратить, каким-то образом, в закон. Так это не работает.
Как бы вы отнеслись к тому, что некий HotMusicWater залил бы на Хабр эти документы, удалив при этом надпись «Совершенно секретно», мотивируя это тем, что все и так всем доступно, а надпись все-равно потеряла свою актуальность в связи с утечкой?
Если бы не было указано авторство? Плохо отнёсся бы — так же как и закон. Если авторство было бы указано и там была бы только цитата? Скорее всего не стал бы читать соответствующую статью, только и всего.
Напомню, мой самый первый комментарий в этой ветке был:
Именно. И ответ, с которым вы ну никак не можете примириться, таков: нет — это не новая мода, это — нормальное поведение.
Это теперь новая мода такая, заливать на Хабр проприетарный код, да еще и вырезая копирайты?
Хоть под спойлер бы убрали…
Но это не значит, что эти исходники там какое-то время размещены легально, и вы можете цитировать их «посмотрите, какие в MS говнокодеры».
Значит. Посмотрите сюда. Что мы тут видим? Кусок совершенно секретного документа. И не просто какого-то там «исходного кода», на который ярлык «confidential & proprietary» навесили «для перестраховки», а документа секретной службы, которая, ну при всём желании, не может быть интерпретирована как «open-source project». И что? А ничего: это цитата с целью критики — а потому ничего с этим сделать нельзя. И даже на секретность ссылаться нельзя, так как документ «утёк» на WikiLeaks и, соответственно, никаких секретов больше содержать не может…
Почему вдруг Хабр должен быть «святее папы римского»?
khim
21.07.2017 21:55Если оно лежит на GitHub'е и правообладатель не озаботился его отзывом, то по умолчанию считается, что оно там расположено правомерно. И в этом смысле удалённые строки действительно являются «мусором» скорее способным ввести в заблуждение, чем что-либо прояснить. То, что вас возбудило является уведомлением об авторских нравах и «ни о чём таком», несмотря на грозную форму, не говорит.
Фраза «Proprietary and Confidential» — это вообще отсылка к коммерческой тайне, а эта защита, в отличие от авторского права, перестаёт действовать если соответствующий документ «утёк», никакого отношения к авторскому право она не имеет вообще.kafeman
21.07.2017 22:17Если оно лежит на GitHub'е и правообладатель не озаботился его отзывом, то по умолчанию считается, что оно там расположено правомерно.
Ух ты, может, у вас еще и ссылочка на закон имеется? Пойду тогда скачивать WRK. И пофиг, что Microsoft запрещает — не удалили за год, значит, правомерно.
перестаёт действовать если соответствующий документ «утёк»
Никакая утечка не отменяет того, что произведение могло быть выложено в нарушение авторских прав.khim
22.07.2017 00:06Ух ты, может, у вас еще и ссылочка на закон имеется?
Разумеется.
Пойду тогда скачивать WRK.
Я бы не советовал.
И пофиг, что Microsoft запрещает — не удалили за год, значит, правомерно.
Размещение на github'е — правомерно, пока правообладатель не заявил об обратном. А вот создание своих, личных, копий (а не цитат «в целях критики») — таки требует лицензии.kafeman
22.07.2017 00:31Разумеется.
Вы точно ту ссылку скопировали? У меня по ней открывается статья о DMCA на Википедии. И там нет ни слова о том, что если компания не успела обнаружить нелегальный репозиторий на Github, то он автоматически становится легальным. Да, возможно, пользователя, клонировавшего себе репозиторий, и не заметившего «мусор» в комментариях (либо «мусор» был вырезан тем, кто разместил код), признают пострадавшим и не станут привлекать к ответственности, но это не значит, что репозиторий был легальным. Он им не был, поскольку правообладатель не давал своего согласия на его размещение там.
Я бы не советовал.
Я и не собирался. К счастью, у меня есть своя голова на плечах, чтобы не верить всему, что пишут в Интернетах.khim
22.07.2017 01:55И там нет ни слова о том, что если компания не успела обнаружить нелегальный репозиторий на Github, то он автоматически становится легальным.
А там этого нет — и быть не может. Вы, почему-то, рассматриваете GitHub только как набор Git-репозиториев. А это, кроме всего прочего, ещё и web-сайт, который позволяет вам публиковать текстовые материалы. И как любая площадка он защищён заявкой 512. Её недостаточно для того, чтобы дать вам права на использование кода как, собственно, кода — но достаточно для того, чтобы текст программ, размещённый непосредственно на GitHub'е — мог считаться правомочно там размещённым.
И этой, ограниченной и урезанной, роли GitHub'а — достаточно для того, чтобы из правомерно опубликованных на нём материалов можно было дёргать цитаты «с целью критики».
Он им не был, поскольку правообладатель не давал своего согласия на его размещение там.
Это можно выяснить только пост-фактум. До заявления правообладателя размещение считается законным. Принцип тот же, что и с публикацией комментариев на Хабрахабре: пока нет какого-либо заявления считается, что всё что мы тут понаписали — опубликовано законно и, соответственно, Хабрахабр имеет право наши каракули показывать всему миру не испрашивая у нас с вами письменного разрешения.
kafeman
22.07.2017 02:17Похоже, я уже ответил на этот комментарий выше, еще до того, как прочитал его. Ветки объединились, предлагаю продолжать дискуссию в верхней.
Alexeyco
21.07.2017 15:31Так а в чем вина кодера? Это менеджерский состав толжен быть покаран. Наверняка времени на просто подумать даже не дали. И потом — под такими постами я вижу десятки разработчиков, которые «нууу, дурачок, мы-то так точно бы не факапнулись». И вот только я читаю такое где-то, как сразу в недрах департамента нахолится какая-нибудь очередная SOAP-апи, с которой надо работать и которая передает внутри себя шифрованный сатанинскими способами JSON-объект.
И вот вопрос — где же все эти гении? Вася, пишущий «ну дурачок» под таким постом и кто-то, кто присылает мне внутри XML шифрованный каким-то сатанинским RIJNDAEL_256 JSON-объект уж не одно ли лицо? Не знаю, но думаю, что без пузырька точно не обошлось.avost
21.07.2017 18:03+1Так а в чем вина кодера?
В том, что он идиот?
Это менеджерский состав толжен быть покаран.
За то, что взяли на работу идиота? Вполне возможно.
Наверняка времени на просто подумать даже не дали.
Вы это знаете или просто придумали? И, простите, как вы думаете, сколько времени ему дали? 38 секунд? Полторы минуты? Как вы себе это представляете? "чтобы через полторы минуты был написан код поиска максимального элемента!" И рядом стоит менеджер с секундомером и линейкой, чтобы бить по рукам при выходе за "дедлайн", ага. Ну, что за бред.
FlameStorm
25.07.2017 15:05Идиот — возможно это грубо и несправедливо. Может быть просто слишком малоопытный человек, которого насильно здесь и сейчас заставили кодить. А он способен прочитать и понять правильные книги и стать новым Линусом Торвальдсом.
Может это сказка про ASAP?
Да не даёт Богатырю победить Зло лютое одно клятое слово «ASAP». Сколько-то златых монет семье надо ASAP, постоянно. Дабы заработала машина чёртова супостатная, что царь Менеджер требует — ASAP, постоянно. Всю силушку богатырскую ASAP вытягивает, конца да края не видать…
Сказку ту мы пока продолжаем писать, да правнукам, коли сами себя не погубим, будет что рассказать.
Alexeyco
29.07.2017 21:50Существует общая обстановка. Я же прекрасно знаю, что можно манипулировать и жонглировать доводами как захочется — сам сто раз так делал и еще тысячу раз сделаю. К примеру, дается вагон задач, из которых большая часть признается несущественной и время пошло. А потом в удобный момент можно предъявить «ты уже простейший функционал Х делаешь полгода». Это просто пример. Но обычно в плохом коде вина именно что менеджеров — лично я сталкивался только однажды с ситуацией, когда виноваты были программисты, а не менеджеры. И вина менеджеров, что я с этим столкнулся.
avost
29.07.2017 22:58и время пошло
Какое прекрасное самооправдание для говнокодинга!
Но обычно в плохом коде вина именно что менеджеров
А, главное, сам говнокодер в этом не виноват. Это всё мееенеджер. Ага. И ещё в подъезде он же нассал. Ой, нет, это же был Обама/Трамп...
Am0ralist
21.07.2017 16:54Если бы все программисты писали качественный, быстрый и оптимальный код — нафига было бы столько ядер и гигагерц вы телефонах?
Хотя это мне напомнило код (который я лично разбирал) одного программиста который при поиске строки в текстовом файле даже не удосужился вставить выход из цикла после ее нахождения, при чем ради того, что бы вернуть ровно первые пять символов из уже найденных строкой программы выше, он написал вторую функцию поиска в текстовом файле, так же без досрочного прекращения операции… Ну правда, а что может быть такого в поиске по 10к строкам.sumanai
21.07.2017 16:58Если бы все программисты писали качественный, быстрый и оптимальный код — нафига было бы столько ядер и гигагерц вы телефонах?
Для игр и действительно тяжёлых приложений.Am0ralist
22.07.2017 13:55Для игр
Хотелось бы посмотреть количество проданных требовательных игр хотя бы для топов (причем, надо понимать, что программисты не только в обычных программах пишут вот так, в играх им тоже ничто особо не мешает так писать) и сравнить их с объемами продаж топовых смартфонов
действительно тяжёлых приложений
И вот статистику по таким приложениям. Как и то, какие массовые приложения будут настолько же тяжелыми при хорошей оптимизации, особенно с учетом, что я писал про «телефоны».
Потому что без цифр всегда можно ответить в духе: «Окей, а зачем они остальным, примерно, 99% людей?».
http2
23.07.2017 15:13И что тут такого?
Попробуйте отсортировать по дате ~1000 файлов в диалоговом окне проводника Windows 7.
Joric
Отлично!
Per_Ardua
И было бы совсем замечательно, если бы после сортировки он использовал бинарный поиск для нахождения максимального элемента
vintage
Лучше методом Монте-Карло:-)
x67
А как с помощью ММК можно найти максимум?
vintage
http://studopedia.su/19_6924_poisk-globalnogo-ekstremuma-funktsii-v-zadannoy-oblasti-metodom-monte--karlo.html
x67
Но это ведь немного другая задача) Нам нужно просто найти максимум из выборки. А ММК как бы позволяет создать выборку, с помощью которой можно приближено судить о более сложном, нежели эта выборка, объекте. По вашей же ссылке в самом низу все равно вызываетвся функция max(arg), которая и находит максимум)
И причем, даже если попытаться приложить ММК сюда, точность метода будет настолько «высока», что эта функция ни одного теста нормально не пройдет) Проще сразу с помощью генератора случайных чисел индекс выбирать)
wataru
Как раз по индусски получается. Из массива на N элементов случайным образом выбираем K, среди которых ищем максимум сортировкой пузырьком. Чтоб тесты почти всегда проходились, делаем K=10*N.
JDTamerlan
Точно так же как и с помощью сортировки пузырьком найти максимальный элемент )