- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
class cxx_query {
elements operator()(const std::string &css_query);
void operator()(std::function<void()> callback);
http_request get(const std::string &url);
// ...
} $;
#define function []
$(function() {
$.get(some_url, function(const std::string &data) {
$("#result").html(data);
});
});
bormand 30.12.2013 07:28 # +2
someone 30.12.2013 10:04 # 0
bormand 30.12.2013 10:35 # +5
LispGovno 30.12.2013 18:44 # 0
bormand 30.12.2013 20:42 # +2
А еще майкрософт когда-то спалился на подобной хрени. Они задефайнили interface как struct в одной из олешных ашек.
LispGovno 30.12.2013 20:46 # +2
LispGovno 30.12.2013 20:48 # +1
bormand 30.12.2013 20:52 # 0
defecate-plusplus 30.12.2013 21:25 # 0
уверен, что хер они одумались
Elvenfighter 30.12.2013 19:38 # +1
kegdan 30.12.2013 19:45 # −1
bormand 30.12.2013 20:43 # 0
kegdan 30.12.2013 20:45 # −1
bormand 30.12.2013 20:50 # +6
kegdan 30.12.2013 20:53 # −4
Xom94ok 30.12.2013 20:56 # +4
LispGovno 30.12.2013 20:59 # +5
kegdan 30.12.2013 21:02 # −1
Вот на лор зайдите - сразу видно, что у людей здоровая елда в заднице - кричат, кровью харкают, пену ртом пускают....
bormand 30.12.2013 21:11 # 0
kegdan 30.12.2013 21:15 # −1
bormand 30.12.2013 21:18 # +1
Любовь за деньги - это не любовь :)
kegdan 30.12.2013 21:21 # +4
Parazit 06.01.2014 00:32 # −12
Stertor 06.01.2014 14:26 # 0
Psionic 01.01.2014 18:05 # +1
kegdan 01.01.2014 18:18 # −2
bormand 01.01.2014 19:20 # +2
kegdan 01.01.2014 19:27 # 0
bormand 01.01.2014 19:27 # 0
kegdan 01.01.2014 19:33 # 0
bormand 01.01.2014 21:28 # +1
Как тонко.
defecate-plusplus 01.01.2014 19:30 # 0
искренне говорит, что жаба гораздо лучше с#
kegdan 01.01.2014 19:36 # 0
defecate-plusplus 01.01.2014 19:39 # 0
гораздо более многосторонняя среда
по крайней мере с js она дружит на порядок лучше, студии до такого уровня как до китая раком
равно как и поддерживает ещё миллион других языков
kegdan 01.01.2014 19:42 # 0
defecate-plusplus 01.01.2014 19:54 # 0
эта монета двусторонняя
kegdan 01.01.2014 19:57 # 0
VB тоже туп как валенок
govnomonad 02.01.2014 06:48 # 0
А ещё есть скала, до которой этому вашему шарпу как раком до Китая
kegdan 02.01.2014 06:51 # 0
roman-kashitsyn 05.01.2014 09:32 # 0
kegdan 05.01.2014 09:48 # 0
Забавно выглядит описание форм на F#.
LispGovno 05.01.2014 19:14 # 0
не понял чем тебе скала так приглянулась
Lure Of Chaos 05.01.2014 19:19 # 0
roman-kashitsyn 05.01.2014 09:35 # +1
Поддерживает, угу. Наелся я уже этих псевдофункциональщиков (http://govnokod.ru/14162), не нужно в жабке фп, дай дуракам yield стеклянный...
kegdan 05.01.2014 09:46 # 0
Lure Of Chaos 05.01.2014 19:19 # 0
kegdan 05.01.2014 19:23 # 0
пей цейлоский чай - программируй на цейлоне
Lure Of Chaos 05.01.2014 19:33 # +2
kegdan 05.01.2014 21:43 # 0
roman-kashitsyn 05.01.2014 22:34 # +3
Утомило меня всё это. В чём преимущество очередной вундервафли перед существующими вундервафлями? Некоторые даже от скалки уже отказались (http://www.infoq.com/news/2011/11/yammer-scala), ибо часто приходится ломать голову над тривиальными вещами, а производительностью и отзывчивостью программ управлять становится всё труднее.
Зачем мне тратить время на вещи, которыми никто никогда не будет пользоваться? Я не вольный художник @wvxvw, обвиняющий всех в невежестве и тупом копировании уже созданных шедевров, втихушку админящий венду и правящий быдлосайты на кнокауте с мечтами о лишпах. Я - инженер и хочу делать вещи, которые работают, и работают хорошо. Для этого инструменты должны быть простыми, понятными и прозрачными. Иначе код становится илитарным и умирает. Проекты могут жить только тогда, когда существуют люди, способные в них разобраться за разумное время.
А вообще я открыл для себя книжку Robert Love - Linux Kernel Development, лажу по линуксовым сорцам (как завещал нам борманд) и любуюсь красотой тупорылой сишки.
P.S. Беглый обзор цейлона показал, что он практически ничем не лучше хацкеля, разве что наличием вездесущей жабомашины под капотом, но это не только преимущество.
bormand 05.01.2014 22:46 # +1
А ведь все-таки царь в чем-то был прав... :)
roman-kashitsyn 05.01.2014 22:51 # 0
У него были моменты просветов, когда в его бредопотоке школосознания проскакивали достойные мысли, но мне всегда было лень читать его портянки.
bormand 05.01.2014 23:11 # 0
Теорема о 100500 обезьян, или как там ее правильно ;)
kegdan 05.01.2014 23:20 # 0
kegdan 05.01.2014 23:16 # 0
Это же классика - у меня есть молоток и я все им чиню. нужно забить гвоздь - молоток. Нужно открутить болт - молоток. Нужно склеить вазу - молоток. нужно склеить телку - молоток....
Просто люди видят технологию, шары закатывают и кричат - "мать ее это же скала/ фунциональшина/ ооп".
Может я не понял чего да не о том говорю.
Хаскель под jvm может стать неплохой вещью - многие задачи в контексте лямбда исчислений решаются лаконичнее. Но это не значит, что и VC на нем писать нужно
bormand 05.01.2014 23:24 # 0
А зачем хаскелю jvm? Он и так неплохо компилится в нативный код ;)
kegdan 05.01.2014 23:26 # 0
А зачем математике физика?)
roman-kashitsyn 05.01.2014 23:25 # 0
Jaskell
bormand 05.01.2014 23:28 # +2
Блин, он существует...
kegdan 05.01.2014 23:38 # 0
Haskell даже cil умеет генерировать
roman-kashitsyn 06.01.2014 00:09 # 0
Узнал о нём случайно из книжки The Productive Programmer, сам ни разу не использовал.
kegdan 06.01.2014 00:25 # 0
roman-kashitsyn 06.01.2014 15:19 # 0
Q.E.D.
LispGovno 06.01.2014 16:21 # +1
Ну ты молоток...
LispGovno 06.01.2014 16:09 # 0
Cyton?
LispGovno 06.01.2014 16:14 # 0
https://www.google.ru/search?q=%D1%81%D0%B0%D0%B9%D0%BB%D0%BE%D0%BD&newwindow=1&rls=com.microsoft:en-US:IE-Address&source=lnms&tbm=isch&sa=X&ei=yavKUrq 5Bofj4wSOv4C4Bw&ved=0CAcQ_AUoAQ&biw=1088&bih=506
LispGovno 06.01.2014 16:17 # 0
LispGovno 06.01.2014 16:19 # +2
Ну конечно! Как-будто что-то может быть лучше Хаскеля.
bormand 01.01.2014 19:45 # 0
О_о. А можно его аргументацию услышать? Ну и сравнивает он только языки, или всю инфраструктуру jvm/.net в целом?
defecate-plusplus 01.01.2014 19:53 # +1
чем старше человек, тем тупее ему нужен инструмент, чтобы быстро решать поставленные задачи
по крайней мере переход на жабу он сделал с огромным воодушевлением
знание дотнета от него не убежит никуда, и много раз уже помогало - как в ускоренном освоении жабы, так и в архитектурных вопросах - поиск параллелей и использование опыта
также он в свое время наелся asp.net (который не mvc) и прочих дотнетных говнотехнологий - благодаря ему мы в свое время не вступили в ад java server faces
kegdan 01.01.2014 20:00 # +1
чем старше человек, тем тупее ему нужен инструмент, чтобы быстро решать поставленные задачи
Никогда бы не подумал, что это плюс. Никто не запрещает писать без сахара, более того сахар помогает решать повседневные задачи быстрее.
bormand 01.01.2014 20:11 # +4
Проблема тут в том, что читать приходится с сахаром (потому что он кому-то помог решить повседневную задачу быстрее). А при командной работе и поддержке проекта ты читаешь гораздо больше чем пишешь.
kegdan 01.01.2014 20:16 # +1
bormand 01.01.2014 20:19 # 0
Да что вы говорите... Как отличить экстеншн метод от обычного не глядя в подсказку IDE? :)
> 10 секундный поиск в гугле
Ок. Загугли мне 2 кубика сахара: Время пошло.
> он просто банально не знает
В том и суть, что для полноценной работы с языком ты должен знать весь сахар, который в нем есть. И тогда нет особого смысла в его неиспользовании.
kegdan 01.01.2014 20:28 # +1
с = (a!=null)? a:b;
Int? x - обвертка для метода значения, способная принимать null.
Если это шарп.
Но это я тупо знал)
Сахар не настолько сложен и неудобен, что бы его не знать) Если сахар неудобен и\или сложен для понимания - то это уже соль, и разговор другой.
Хотя тут сказывается мое личное отношение - люблю я сахарок типа рубишного
а ||=b unless c
kegdan 01.01.2014 20:29 # +1
<Тип-значение>? x - обвертка, способная принимать null.
bormand 01.01.2014 20:32 # 0
Я в курсе, что T? это nullable<T> :) Я даже загуглил это в свое время. Вот только загуглить это было ой как не просто.
> Сахар не настолько сложен и неудобен, что бы его не знать
Ну и какой тогда смысл брать более сложный язык, и не юзать сахар из него?
Начали с твоей фразы "никто не запрещает писать без сахара". Пришли к противоречию ;) Q.E.D.
> а ||= b unless c
Нравится запоминать приоритеты операторов? :) Мне - нет.
kegdan 01.01.2014 20:41 # +1
Тут ничего сказать не могу, я прочитал это у Троелсона
> Нравится запоминать приоритеты операторов? :) Мне - нет.
мне все это кажется логичным и элементарным. Ну и никто не мешает писать в лисп стиле)
Подведу итог - сахар - сугубо личное дело каждого. Лично я не считаю сахар недостатком, скорее наоборот (поэтому и полюбил практически бесполезный руби).
И тем не менее нельзя сказать, что жаба лучше шарпа основываясь только на том, что в шарпе больше сахара. Тот же сахар async-await дает большое приимущество на мой взгляд
bormand 01.01.2014 20:53 # 0
Имхо, имеет смысл только для GUI потока (ну и, возможно, для потоков, обслуживающих сокеты). Так что довольно специфический сахарок.
kegdan 01.01.2014 20:56 # +1
bormand 01.01.2014 20:58 # 0
А где она нужна, кроме случая с гуем, к которому нельзя лезть из других потоков, и случая с I/O мультиплексором, который делают из-за слишком дорогих потоков? :)
kegdan 01.01.2014 21:05 # +1
Я не правильно выразился
Тот же сахар async-await дает большое приимущество в решении асинхронных задач на мой взгляд
Да и либа для паралеллизма в .Net побогаче
bormand 01.01.2014 21:36 # 0
Что такое асинхронная задача?
kegdan 01.01.2014 21:39 # +1
Я неверно выразился?
bormand 01.01.2014 21:54 # 0
Почему их необходимо решать асинхронно?
kegdan 01.01.2014 21:57 # +1
Предпочтительно решать их асинхронно, так как это помогает увеличить скорость выполнения за счет максимально эффективного распределение ресурсов и снижения времени простоя
bormand 01.01.2014 22:06 # 0
Слова не мальчика, но эффективного менеджера...
Ок, значит мы имеем задачу, которую можно решать эффективней, если исполнять несколько ее подзадач параллельно (например на нескольких ядрах SMP системы). Здесь мы плавно подходим к вопросу, почему "помогает увеличить скорость выполнения" именно идиома async-await (аля сопрограммы)? Для этого следует рассмотреть другие существующие решения, позволяющие распараллелить исполнение кода, и обосрать их описать их недостатки. А не просто сказать "вот серебряная пуля, юзайте".
kegdan 01.01.2014 22:11 # −2
Ой, не нужно, я весь красный от гордости
>>"помогает увеличить скорость выполнения" именно идиома async-await
Она помогает не скорость исполнения увеличить, а быстро сделать из последовательного кода асинхронный. Не нужно переписывать кучу кода, достаточно пары вставок.
bormand 01.01.2014 22:22 # +2
Ок, допустим была у Васи прога, которая листала порнофотки с сетевого диска по нажатию стрелочки. Фотки были в хорошем качестве, сеть была плохая, в итоге фотки менялись довольно медленно, и интерфейс подвисал на время чтения-декодирования (т.к. код был простым и синхронным).
Вася добавил в код await и вызвал асинхронную загрузку вместо синхронной.
Вопросы на засыпку:
- что произойдет, если Вася во время лага будет яростно тыкать стрелочку вправо, не видя никакого эффекта?
- как Вася поймет, что прога что-то делает, а не просто висит (вспомни загрузку win8, в которой во время получасового chkdsk крутится та же самая вертящаяся херня, что и при нормальной загрузке, и хуй поймешь что там вообще происходит)?
- достаточно ли Васе добавить пару вставок, или все-таки придется закусить удила и переписать кучу кода?
kegdan 01.01.2014 22:37 # +1
Или я задачу не понял.
Даже если мыслить так - задача стала асинхронной, проблемы теперь с гуем. Ололо
Без async -await - все тоже самое, плюс асинхронность ручками
bormand 01.01.2014 22:50 # +2
Имеет, как минимум можно прикрутить отмену ну и ось не будет ругаться "эта программа не отвечает".
> Вот если бы у него сеть была быстрая, но при закачке одной картинки грузилась не полностью, имело бы смысл грузить картинки асинхронно.
prefetch? Ну ок, разумно.
> задача стала асинхронной, проблемы теперь с гуем
Именно так. async-await не стал для Васи серебрянной пулей.
> Без async -await - все тоже самое, плюс асинхронность ручками
Суть примера была всего лишь в том, чтобы показать, что "Не нужно переписывать кучу кода, достаточно пары вставок" - ложь, пиздежь и сплошная провокация маркетинговый бред. Существующий синхронный код один хрен придется реинжинирить (даже не рефакторить, а именно реинжинирить, со всеми вытекающими последствиями!), с учетом асинхронности.
Ок, значит твой следующий аргумент - с async-await кода писать меньше, чем при других способах? Хорошо. Тогда перечисли, пожалуйста, какие способы ты знаешь помимо async-await (можно в контексте Васиной задачи).
kegdan 01.01.2014 23:03 # +1
мы вставили пару слов -> код стал асинхронным - > что не так то?)
Это опять путаница с понятиями - конечно хотелось бы что бы вообще ничего менять не нужно было, только написал - а тут выполнять асинхронно - и забить хуйцы.
Это выглядит так же, будто нельзя сказать, что массив создается одной строкой, хотя при переходе от 100 отдельных переменных к массиву придется менять хуеву тучу кода.
ИМХО
Способы
1. Перейти на разделение загрузки-просмотра.(картинки грузим при нажатии кнопки, можно все сразу, а смотрим -когда загрузилась полностью)
2. Пилить код с продолжениями
3. Сменить провайдера
4. отказаться от порно и завести женщину
5. Познать дзен
6 Смириться
7 ???
8 PROFIT!
bormand 01.01.2014 23:13 # 0
Всего лишь то, что проблем у Васиной проги стало больше, чем до вставки пары слов :) Что означает всего лишь то, что вставки пары слов явно недостаточно, и Васе еще пилить и пилить, и материться на того, кто предложил ему "вставить пару слов".
> 1. Перейти на разделение загрузки-просмотра
Вася нетерпелив. Он хочет дрочить здесь и сейчас, а не через час, когда все докачается. И он не знает заранее, сколько картинок ему понадобится.
> 2. Пилить код с продолжениями
Хех, ну и засрали же вам моск эти ребята из M$ и node js... Если думать, что кроме продолжений нет других решений - тогда да, async-await это единственное верное решение :)
P.S. Варианты 4-8 рулят :)
kegdan 01.01.2014 23:22 # +1
Тем неменее главная проблема Васи решена - код асинхронный, ему не пришлось думать, как запилить эту задачу, а все остальное Вася умеет делать)
Это не ребята их MS, это я зеленый и неопытный) MS(DN) я вообще не люблю - воду разводят. Пытался найти как узнать, пересекаются ли 2 shape, в итоге только на stackoverflow нашел.
Если посоветуете литературу по асинхронщине (да и по продолжениям) - с удовольствием почитаю.)
Stertor 01.01.2014 23:28 # 0
Я тоже с этим сталкивался - час, два на свалку, пользы -0. Поэтому и не хожу больше к ним.
bormand 01.01.2014 23:38 # 0
Хех, ну тут я соглашусь. Вася так и не узнал о потоках и т.п., а задачу решить смог.
Но... Почему мы выбрали для него именно этот способ, а не какой-то еще? Согласись, "давайте поюзаем async-await и все будет заебись, нам даже не надо знать про треды", звучит как реклама... А работа инженера начинается все-таки не в том, чтобы схватить первый попавшийся в рекламном проспекте вариант, а в рассмотрении того, как задачу решали другие люди, какие у этих способов были достоинства и недостатки. Да, он может выбрать именно этот вариант. Но осознанно, а не потому что это круто и все так делают.
P.S. А как там у async/await с отменой?
kegdan 01.01.2014 23:45 # +1
Ясно дело. А то как с AssParallel получится
Таску же в await суем - соответственно cancellationToken запихиваем и все
bormand 01.01.2014 23:48 # 0
Стандартные асинхронные методы (типа чтения из файла) принимают его? UPD: да, принимают.
> Ясно дело.
Ну так все-таки. Почему из известных нам способов мы выбираем именно async-await, а не какой-то другой? Меня именно это интересует.
kegdan 02.01.2014 00:13 # 0
Ну вот пример когда эффективно
есть у нас код
но тут мы поняли, что т2 зависит от т1, а т3 - сферическая в вакууме. поэтому мы можем написать что то типа
wvxvw 02.01.2014 00:16 # +1
Другой вопрос: такая схема просто игнорирует возможность дедлоков, т.е. очень просто самого себя наказать вызвав тред вызывающий вызывающего. Нужно вручную разруливать потенциальные возможности дедлоков - а это очень плохо скейлится.
(Флеш тоже использует похожую концепцию, и в нем есть известные грабли, когда в обработчике события addedToStage добавляется элемент на сцену, и событие запускается по новой, попадая в тот же самый обработчик).
Еще негативный момент: фьючерсы по факту одноразовые, мусорщика напрягают.
И еще эта схема плохо работает в ситуации когда ответы на запросы приходят не в ЛИФО порядке, а в "каком-нибудь" - в таком случае мы можем нарваться на АБА проблему, или просто никогда не получить ожидаемого ответа, не смотря на то, что отправитель его честно пошлет (как в ситуации когда пользователь очен быстро что-то печатает а автодополнение появляется со все более заметным опозданием / вообще не в тему).
bormand 02.01.2014 00:21 # 0
Я прекрасно понимаю, как работает async/await (хотя в данном примере хватило бы банального future).
Я просто прошу, чтобы мне обосновали егопреимущества перед другими способами. Пока я вижу только рекламу серебрянной пули.
P.S. await перед вызовом task12 разве не нужен?
kegdan 02.01.2014 01:24 # 0
Я имею в виду метод task. await методы могут быть только внутри async методов
bormand 02.01.2014 07:31 # 0
> начинает выполняться т1 - управление выпадает на выход из процедуры и начинает выполнятся т3. когда т1 завершится - начнет выполнятся т2.
Да, сорри, я тупанул, время позднее было. Но тогда subTask1() и subTask2() надо переделать так, чтобы они возвращали future (Task в c#)?
kegdan 02.01.2014 08:07 # 0
Что есть future?)
kegdan 02.01.2014 08:09 # 0
Я слишком псевдокодно описал прошлый пример)
bormand 02.01.2014 08:13 # +1
Ололо! Шарпеи юзают future даже не зная, что это такое!
> Я слишком псевдокодно описал прошлый пример)
> Их заворачивают в таск и запускают.
Тогда ок. Меня вот и смутило, что await на обычном методе дернули.
kegdan 02.01.2014 08:21 # 0
Пример нашел, понял как оно работает и забил, не вникал в детали)
bormand 02.01.2014 00:31 # 0
Или я туплю, или код делает совсем не это ;) мое понимание - выполнится таск1 на тредпуле, затем таск2 тоже на тредпуле, затем таск3 в главном потокн. Разве нет?
bormand 02.01.2014 00:34 # 0
kegdan 02.01.2014 01:23 # 0
Этож процедуры, нет возвращаемого значения. Более того, когда основной поток выполнит т3 он дальше пойдет гулять за пределы функции)
kegdan 02.01.2014 01:52 # +1
bormand 02.01.2014 08:09 # 0
Была бы эта прога гуишной - t4 и t5 повешали бы event dispatching thread (или как там у вас его зовут в шарпе) :P
Но пример годный, показывает удобство async/await.
kegdan 02.01.2014 08:12 # 0
Что делает эта штука? Может аналог вспомню
Вообще в гуи я так же делал - такс с вычислениями на await ставил, а основной поток на гуишку падал
bormand 02.01.2014 08:23 # 0
Ну тред, в котором крутится цикл обработки сообщений от гуя. И который нежелательно вешать всякой херней, т.к. страдает отзывчивость интерфейса.
P.S. Пойду поставлю фреймворк 4.5 на виртуалку, чтобы поразбираться с примером.
P.P.S. Ёбаная срань, обновление версии .NET Framework 4, характеризующееся высокой степенью совместимости не встающее на XP...
kegdan 02.01.2014 08:57 # 0
bormand 02.01.2014 08:58 # 0
А мне почему-то кажется, что это именно тот поток, в котором срабатывают все обработчики событий от всяких там кнопочек ;)
P.S. Фреймворк поставил, компилю пример.
kegdan 02.01.2014 09:06 # 0
Про поток - сорри, не понял вопроса. Если просто поток формы - то поток и хрен с ним) А если там за кулисами плавает загадочный поток, который отлавливает события и передает обработку в основой - то вообще хз)
bormand 02.01.2014 09:18 # 0
Именно так, и файл создавал через блокнотик. Ну не ставить же целую вижуалку ради этого...
> Если просто поток формы - то поток и хрен с ним)
Там что, на каждую форму по потоку? :) Да вот не хрен бы с ним. Повиснет - ось подумает, что прога зависла, юзер тоже. Кнопочки не тыкаются, ничего не рисуется...
Из async/await методов можно лезть к гую?
kegdan 02.01.2014 09:28 # 0
как и из любого потока. Это ж просто сахар
bormand 02.01.2014 09:57 # 0
А ничего, что фреймворк дает по рукам за попытки потрогать гуй из левых потоков? :)
kegdan 02.01.2014 10:13 # −1
bormand 02.01.2014 10:21 # +1
Т.е. в любом коде с async/await я должен делать проброс коллбека в UI тред, как и в обычной многопоточке? :) Но почему все утверждают мне обратное, что можно юзать гуй прямо из тела async метода, если сам async метод изначально был вызван из ui треда? :) Так могу я или не могу писать вот такой простой и понятный код: И почему я могу (или не могу) его писать?
P.S. Лишний раз убедился в том, что шарпеи ничего не понимают даже в своем инструменте. Что уж тут говорить о других языках и парадигмах.
anonimb84a2f6fd141 02.01.2014 21:59 # 0
bormand 02.01.2014 22:16 # 0
Да тут претензии не столько к абстракции, сколько к ее юзерам. Ну ты посмотри, как они ее юзают: из async метода делают Invoke, т.к. не знают, будет там главный поток или нет... И я не думаю, что только Kegdan так тупанул.
А с абстракцией ниже по треду разобрались. Действительно, все просто и понятно:
- если есть контекст синхронизации (гуй, вебсервер, прочая херня, где важно в каком треде будет ответ), то await вернется в тот же тред, откуда был вызван
- если нет контекста синхронизации (свободный поток, тредпул или ко-ко-консолька), или привязку отключили вручную, то await не будет менять тред, и исполнит продолжение где повезет.
Согласись, правила не такие уж сложные? А зная их можно представлять, что получится в результате, и не перестраховываться лишний раз.
Мне, лично, как-то спокойней кодить, если я знаю все ограничения абстракции. Особенно если их совсем немного, и абстракция почти никогда не течет.
kegdan 02.01.2014 22:26 # 0
anonimb84a2f6fd141 02.01.2014 22:27 # 0
А что тут такого? И откуда берется контекст синхронизации?
bormand 02.01.2014 22:32 # 0
> А что тут такого?
А зачем инвочить, если из тела async метода, вызванного из ui треда, можно дергать методы уя напрямую?
> откуда берется контекст синхронизации
SynchronizationContext.Current
anonimb84a2f6fd141 02.01.2014 22:33 # −1
Чтоэта?
bormand 02.01.2014 22:36 # 0
Свойство, в котором лежит контекст синхронизации текущего треда ;)
Вот кегдан кидал ссылку:
http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx
P.S. Пля, почему я это рассказываю вам, а не вы мне? Я же шарп последний раз лапал году в 2007 :)
anonimb84a2f6fd141 02.01.2014 22:41 # 0
Так откуда этот контекст берется-то?
bormand 02.01.2014 22:49 # 0
Ну вот, в случае с гуем, его создал и положил туда метод Application.Run() (или что-то, что вызвалось из этого Run'а, не суть).
После чего async методы, запущенные в ui треде будут отправлять продолжения через этот контекст, а значит они будут исполняться в ui потоке, и все будет заебись.
Почитай статью, она короткая.
kegdan 02.01.2014 22:56 # 0
Скоро пойдут вопросы что такое параллельное программирование в целом и семафоры в частности)
anonimb84a2f6fd141 02.01.2014 23:27 # 0
То есть, создатель треда вешает на него флаг "запускать async только из этого треда"?
Ебучая опера, вызывает меню при переключении по alt+shift.
kegdan 02.01.2014 23:33 # 0
anonimb84a2f6fd141 02.01.2014 23:43 # 0
kegdan 02.01.2014 23:51 # 0
В шарпе это называется атрибутом - записывает метаданные в код, которые потом можно вытянуть рефлексией. собствеено это классы наследники System.Attribute с атрибутом System.AttributeUsage
bormand 02.01.2014 23:53 # 0
> записывает метаданные в код, которые потом можно вытянуть рефлексией
Ну вот это самое и есть :)
kegdan 02.01.2014 23:55 # 0
bormand 02.01.2014 23:59 # 0
Да зная шарп, ты почти всю жабу уже знаешь ;) Там язык то очень простой. Не сложнее питона. Засада только в дженериках.
anonimb84a2f6fd141 03.01.2014 00:01 # −1
Гораздо проще. В питоне все такое динамичненькое. Метапрограммирование же.
kegdan 03.01.2014 00:08 # 0
Stertor 03.01.2014 00:12 # 0
Stertor 02.01.2014 23:46 # −1
Дальше не захотелось читать, да и синтаксис не родной.
kegdan 02.01.2014 23:52 # 0
Stertor 02.01.2014 23:54 # 0
Хочешь правды - иди в Дельфы [к Оракулу]
bormand 02.01.2014 23:38 # 0
Скорее все-таки то, что крутится внутри этого треда.
> вешает на него флаг "запускать async только из этого треда"?
Ну примерно так. Ну там не флаг, а приемник колбеков, но не суть.
Идея вот такая: "если в этом треде кто-то сделает await, то, когда то чего ждал await завершится, надо бы вернуть управление именно в этот тред".
anonimb84a2f6fd141 02.01.2014 23:44 # 0
То есть внутри треда вешается этот флаг?
bormand 02.01.2014 23:49 # +1
Ну не флаг, ссылка на объект. Но да. Как я понял, вешается она в thread local storage конкретному треду.
kegdan 02.01.2014 22:42 # 0
anonimb84a2f6fd141 03.01.2014 00:01 # +1
kegdan 02.01.2014 22:41 # 0
Stertor 02.01.2014 23:06 # 0
Все.Очень.Плохо.
bormand 02.01.2014 23:09 # 0
Толсто.
Stertor 02.01.2014 23:11 # 0
anonimb84a2f6fd141 02.01.2014 23:26 # 0
anonimb84a2f6fd141 02.01.2014 23:28 # 0
bormand 02.01.2014 23:37 # 0
Потому что csc не один. Который из них добавлять в path?
anonimb84a2f6fd141 02.01.2014 23:45 # 0
python-3.3
bormand 02.01.2014 23:51 # 0
> python-3.3
Ну да, вариант. Х.з.тогда. Может быть просто посчитали, что кому надо - добавит сам. А остальным нинужно.
anonimb84a2f6fd141 02.01.2014 23:54 # 0
А их как-то програмно можно найти, кроме d:\WINDOWS\Microsoft.NET\Framework\*\csc .exe ?
bormand 02.01.2014 23:58 # 0
Да там вроде даже апишки в дотнете были для вызова компилера. Я х.з. На этот вопрос пусть дотнетчики отвечают.
govnomonad 02.01.2014 07:47 # +1
Если надо вынести обработку в отдельный поток гораздо лучше создать отдельный класс и передать ему необходимые данные, обеспечив их когерентность. И этом случае каждый увидит создание таски и поймет, что тут будет асинхронный код и надлежащим образом будет его использовать.
Дальше, где выполняется вся эта хрень? На каждый вызов создается отдельный поток? Или в тредпуле? В последнем случае как его регулировать? Можно раскидать обработку на разные тредпулы?
Когда в синтаксический сахар примешивают логику выполнения начинается пиздец
Stertor 01.01.2014 23:24 # 0
1 поток главный - держит форму. Загружать его длительными операциями недопустимо.
2 поток качает картинки, по мере подгрузки ассигнует их с image
3 поток следит за состоянием сети, действиями юзера, правит 2 поток, если что не так, отрубает его. Если я правильно понял поставленную задачу, я бы решил ее так.
kegdan 01.01.2014 23:31 # +1
Я об этом и писал в 1 пункте.
Мы говорим - грузи нам x с сайта.
пока грузятся мы наблюдаем на каждой страницы просмотра что то типа "10 секунд до онанизма!" а когда загрузится - смотрим картинку. Можно сделать загрузку по мере просмотра - (добавлять в загрузку текущую и n следующих)
bormand 01.01.2014 23:40 # +1
Ну третий поток, имхо, лишний. Первый вполне справится с управлением вторым. Довольно низкоуровнево (но в делфи емнип больше никак), но как один из вариантов решения - ок, имеет право на жизнь.
Stertor 01.01.2014 23:41 # 0
anonimb84a2f6fd141 02.01.2014 04:43 # −1
>Суть примера была всего лишь в том, чтобы показать, что "Не нужно переписывать кучу кода, достаточно пары вставок" - ложь, пиздежь и сплошная провокация маркетинговый бред.
Суть, в первую очередь - асинхронный код выглядит как синхронный. Да, это корпоративная многозадачность, как в win 3.1 и получаем с ней проблемы win 3.1 - если одна задача не отдает управление, виснут все, что юзают тот же потом. Насколько я знаю, единственная проблема. Взамен избавляемся ото всех проблем многопоточности (если все работает в одном треде, а не в нескольких).
bormand 02.01.2014 08:03 # 0
Ну это даже не проблема async-await. Это, если я не туплю, проблема любых схем с future...
anonimb84a2f6fd141 02.01.2014 23:29 # 0
bormand 02.01.2014 09:06 # 0
Ну ок, запускаем пример Kegdan'а, который он кидал выше (с небольшим дополнением - выводится айдишка текущего треда, и таймаут у t3 2000мс): Как видим, даже код внутри async метода исполнялся хуй пойми в каком треде... Привет всем проблемам многопоточности ;)
kegdan 02.01.2014 09:09 # 0
bormand 02.01.2014 09:11 # 0
Руками переписывал из виртуалки :) Добавь вывод Thread.CurrentThread.ManagedThreadId да перепроверь сам ;) Там еще по IsThreadPoolThread видно, что 3 и 4 треды работают в пуле.
kegdan 02.01.2014 09:17 # 0
Поиграйся за одно с
System.Threading.Tasks.Parallel.For<TLoc al>(Int32, Int32, ParallelOptions, Func<TLocal>, Func<Int32, ParallelLoopState, TLocal, TLocal>, Action<TLocal>)
занятная функция
http://msdn.microsoft.com/ru-ru/library/dd783586(v=vs.110).aspx
bormand 02.01.2014 10:00 # 0
Лениво было в опции виртуалки лезть. Все там есть, и общие файлы, и общий клипборд. Просто виртуалка с семеркой свежеустановленная, совсем не настроенная.
> Parallel.For
Да здесь то понятно, что будет на разных тредах исполняться.
Батхерт у меня от того, что вы все тут утверждали (включая хабровчан), что продолжение async task'а исполняется на том же потоке, где и началось. А на деле оно исполнилось на тредпуле...
P.S. В принципе, я понимаю, почему продолжение async метода исполнилось на тредпуле, а не в первом треде. Но подожду ответа шарпеев :)
P.P.S. Хоть один шарпей понимает те инструменты, которые использует? Или для вас это всегда магия?
kegdan 02.01.2014 10:19 # 0
А не все ли равно с точки зрения основного потока?)
Да и держать поток не нужно в ожидании, новый на пуле выделил и холера его бей.
Я тут один шарпей. Ты что, ждешь что то умное от студента без опыта коммерческой разработки?)
bormand 02.01.2014 10:28 # 0
Учись, студент. На самом деле я просто веду диалог в форме троллинга (в философии, емнип, есть такой способ ведения диалога, когда один участник опровергает и отрицает все, что произнес второй), чтобы вытянуть из оппонентов полезную инфу и самому разобраться в вопросе ;) Ну и заодно ты сам разберешься в своем инструменте.
> новый на пуле выделил и холера его бей
Куски метода исполняются в хуй пойми каких потоках. Об этом как минимум надо знать, чтобы не залететь на забавные ошибки.
> А не все ли равно с точки зрения основного потока?)
Да вот как бы не все равно. Например к ui или сокету лезть из других потоков неприлично.
kegdan 02.01.2014 10:48 # 0
ты собрался юзать уникальные свойства потока?)
>>Да вот как бы не все равно. Например к ui или сокету лезть из других потоков неприлично.
Сам вызов таска - уже другой поток. так что юзать все равно не кошерно. Хотя тут я могу ошибаться, и MS подзаморочились (непонятно зачем), но я очень в этом сомневаюсь. По этой же причине я считаю, что нельзя просто брать и вызывать события гуя из асинхронки. ибо здравый смысл
bormand 02.01.2014 10:56 # +1
Это я понимаю. Поэтому таск стараются писать так, чтобы он, по возможности, никуда не лез.
> ты собрался юзать уникальные свойства потока?)
Я собрался передать в async метод некий объект (например что-то гуёвое), чтобы async метод асинхронно что-то сделал (например выполнил пару тасков), а потом сделал что-то с переданным ему объектом. Эксперимент показал, что куски async метода могут исполняться на каких-попало потоках, что может закончиться неприятностями, если тот объект не потокобезопасный.
> По этой же причине я считаю, что нельзя просто брать и вызывать события гуя из асинхронки. ибо здравый смысл
Но почему все статьи об async/await утверждают обратное? :)
Мое предположение:
- Тело async task'а продолжает исполняться на том треде, где начало, если внутри треда крутится цикл обработки сообщений (например gui тред и ему подобные). Именно так его юзают во всяких там статьях.
- Тело async task'а исполняется на рандомных тредах из пула, если тред запустивший его не имеет цикла обработки сообщений (и поэтому ему никак не могут намекнуть о продолжении async task'а). Это мы видим на приведенном тобой примере.
Но хотелось бы увидеть официальную доку от M$, которая расставит все точки над i в этом вопросе ;)
kegdan 02.01.2014 11:05 # 0
>>Эксперимент показал, что куски async метода могут исполняться на каких-попало потоках, что может закончиться неприятностями, если тот объект не потокобезопасный.
можно поставить барьер памяти, если сомневаешься в порядке инструкций.
приведи пример кода, или ссыль дай. только что пробовал вызвать - выдало ошибку - несоответствие потоков. через invoke работает.
bormand 02.01.2014 11:27 # 0
Ну вот код. Все нормально работает, тело async'а исполняется именно в ui треде: http://pastebin.com/pD8DqZfP. Если тыкнуть в Sync во время работы Async, то видно как продолжение async task'а шедулится в ui тред.
bormand 02.01.2014 11:34 # 0
А вот на этом примере http://pastebin.com/pp2PsagE мы видим, как наличие\отсутствие цикла обработки сообщений влияет на тот поток, на котором async task завершит свою работу.
P.S. Но эксперименты экспериментами, а мне хотелось бы спеку, в которой английским по белому написано, при каких условиях async task'и ведут себя так, а в каких сяк.
kegdan 02.01.2014 12:05 # +1
ссыль такая например
http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx
bormand 02.01.2014 12:25 # 0
Спасибо! Вот такого ответа я и ждал :) Все просто и понятно.
> await сохраняет контекст
Скажем так, пытается сохранить контекст. И если не получилось (как в нашем консольном примере) - то не получилось, ничего не поделаешь.
> Поэтому можно вызывать прямо их ассинхронной задачи напрямую.
Но только если асинхронная задача была запущена из правильного синхроконтекста (например из обработчика нажатия какой-нибудь кнопы). Если ее запустить из жопы (например из таска, исполняющегося на тредпуле) - то нельзя, ибо получим корейский рандом.
> При создании потока контекст синхронизации изменяется
Ну неправда же ;) Вот Application.Run действительно изменяет контекст у текущего треда: устанавливает на входе и зануляет на выходе. А запуск нового треда, а уж тем более отправка таска в него, никак не повлияют на синхроконтекст текущего треда.
kegdan 02.01.2014 12:29 # 0
Даже спорить не буду - я с нашей вчерашней беседы еще не спал, поэтому мозг мне рисует картины дивной красоты, да и читал я основную часть с русского источника)
Спасибо за вопросы - сам бы я еще долго до этого не добрался)
bormand 02.01.2014 12:37 # 0
И тебе спасибо за диалог. Все-таки разобрались до конца в магии этого async-await'а ;) Теперь я даже смогу его юзать, если, конечно, решусь засесть за шарп.
kegdan 02.01.2014 13:09 # 0
понравился сахарок?
Ссылка была годная?
bormand 02.01.2014 13:15 # 0
Да, статья очень годная. Разжевали все вопросы шедулинга, даже показали как свой синхроконтекст для ко-ко-консолечки запилить, если захочется.
> понравился сахарок?
Вполне годно, с учетом сохранения контекста синхронизации. Без него не понравился бы.
kegdan 02.01.2014 13:18 # 0
Мне кажется я не прочувствовал всей сути это сахара)
bormand 02.01.2014 13:48 # 0
Но оказалось, что эта наркомания уже написана: https://github.com/kilim/kilim
kegdan 02.01.2014 13:51 # 0
bormand 02.01.2014 13:57 # 0
Мне кажется, что в спеке perl6 это всяко есть ;)
kegdan 02.01.2014 14:01 # 0
но
TMTOWTDI )
bormand 02.01.2014 10:37 # 0
Кстати, очень печально, но зачастую даже программисты с опытом коммерческой разработки не понимают того, что происходит в их коде (чему как раз способствуют сложные сахарные языки и библиотеки с кучей магии) :) Так что ничего личного, не обижайся.
kegdan 02.01.2014 09:42 # 0
defecate-plusplus 02.01.2014 09:32 # +1
а разве должно было быть иначе?
в бусте с асио и стеклесс корутинами можно было играться в эти async-await reenter-yield-fork ещё в 2009 в с++03
bormand 02.01.2014 09:56 # 0
Ну мне тут утверждали, что async-await в пару строчек решит все мои проблемы с асинхронностью и многопоточностью... А я, дурак, даже поверил им...
anonimb84a2f6fd141 02.01.2014 18:20 # 0
Stertor 01.01.2014 22:53 # +1
+1
>>"Не нужно переписывать кучу кода, достаточно пары вставок" - ложь, пиздежь и сплошная провокация
+1 (уже успел набить шишки)
Использование асинхронности может принести массу проблем, если не предпринять мер. Опасность в том, что прога не фильтрует сообщения главного потока - можно обращаться к объекту из цикла, и тут же вызвать деструктор объекта...
wvxvw 01.01.2014 23:33 # +2
Дальше, нужно указывать как общаются параллельно выполняющиеся программы, они опять же могут либо обмениваться сообщениями, либо работать с общей памятью; у того и у другого подходов есть свои разновидности.
"Асинхронное выполнение" в стиле ноды характерно тем, что оно если и эффективно чем-то, так это тем, что заставляет писать в духе, когда коротенькие процедуры быстро возвращают управление (но это в свою очередь значит, что параллелизм типа "разные данные + разные функции" - и никакого серьезного профита от этого не ожидается за исключением поверхностных изменений (можно одновременно что-то делать и прогресс-бар нарисовать).
А вот переписывать синхронный код в асинхронный таким образом плохо. Как правило таким образом переведенные алгоритмы работают примерно так же, как звучит руководство по эксплуатации к китайскому электрочайнику "легко" переведенное на русский "простой" заменой нескольких слов.
anonimb84a2f6fd141 02.01.2014 04:36 # 0
anonimb84a2f6fd141 02.01.2014 04:35 # 0
anonimb84a2f6fd141 02.01.2014 04:37 # 0
А че? Охуенно.
Главное не скатиться до уровня перла.
wvxvw 01.01.2014 20:59 # +2
Просто эти вещи приходят с опытом. А по-наивности можно случайно и конкретный тип указать, и вместо всяких @Data, @Setter, @Getter + 100500 строк икс-им-еля просто назначить значение полю класса.
defecate-plusplus 01.01.2014 21:08 # 0
мда, емакс не только бесполезен в проектах С++, но и даже с тупой жабой не совладал?
> xml
на моей памяти лезть руками в xml нужно было только для работы maven (мерзость, но даже в idea не полноценная поддержка)
bormand 01.01.2014 21:24 # 0
Ant хуже. maven (по крайней мере, на типовых конфигурациях) декларативный и не такой уж и страшный - просто список модулей и зависимостей. А вот ant...
P.S. [оффтоп]Кто-нибудь описывал модули с JNI в maven'е? Сильно сложно?[/оффтоп]
wvxvw 01.01.2014 21:34 # 0
ХЗ. Эмакс + кланг = нормальный автокомплит, даже в больших проектах, но я много не пользовался. Ява и Эмакс разошлись примерно сразу же после версии Явы 1.1. С Явой ассоциируется массовый приток в отрасль новичков, которые про Эмакс ничего не знали, и начали свой жизненный путь с клипса в виндовсе. А предыдущим пользователям Эмакса Ява вообще не уперлась. Так вот ее поддержкой никто и не занимался.
Я сейчас пользуюсь эклимом: безголовый эклипс используется для дополнения / поиска / импортов / управления проектами, но с нормальным интерфейсом. Работает стабильно, но медленно. Отладчик в консоли, но при сноровке, есть и свои плюсы, типа нормального поиска по сообщениям из логгера, история, отладчик физически находистя в одном окне с кодом, так что не нужно переключаться между программами, чтобы что-то отредактировать, доступны некоторые команды, которые не доступны из графической оболочки (восновном всякая статистика).
defecate-plusplus 01.01.2014 21:39 # 0
даже если речь идет про Кота Анатолия
ну а фреймворк - ну вот у нас спринг-мвц, и, так сказать, хибернейт (на самом деле там скорее спринговый JPA)
все делается аннотациями, в xml нужды нет
wvxvw 01.01.2014 21:43 # 0
Чет мне сильно сомнительно, что ничего не отыщится.
bormand 01.01.2014 21:44 # 0
К сожалению в ASP.NET дела обстоят ничуть не лучше. Вспоминаю те баттхерты, когда разрабы портанули одну из подсистем под фреймворк 4.0, а корень сайта по прежнему крутился под 2.0... Было очень весело. Я тогда узнал много нового о web.config'ах и их наследовании ;)
1024-- 02.01.2014 03:27 # 0
Кстати, а нет в конфиге возможности приказать IISу использовать его для всей папки, а не только для *.aspx?
Например, альтернативные страницы ошибок HTTP работают только для *.aspx; forms authentication закрывает только *.aspx. Хочется прописать в конфиге максимум информации, чтобы на сервере только добавить папку с сайтом и проделать минимум операций для его успешного запуска.
bormand 02.01.2014 07:52 # +1
Как-то так, через StaticFileHandler? http://stackoverflow.com/questions/11973459/aspnet-static-file-access-with-authentication
1024-- 02.01.2014 12:43 # 0
bormand 02.01.2014 12:46 # 0
Ну может быть *.* прокатит, если не заденет *.aspx? У меня сейчас, слава богу, нет под рукой сервера с asp.net.
1024-- 02.01.2014 12:54 # 0
Видел я примерно то окно в IISе - там был длиннющий список расширений. Но надежда есть.
> У меня сейчас, слава богу, нет под рукой сервера с asp.net.
Выходные ещё :) мне только IIS Express доступен.
anonimb84a2f6fd141 02.01.2014 04:49 # 0
Ну зачем же так.
bormand 02.01.2014 07:49 # 0
Безголовый скорее всего headless. Т.е., видимо, чисто ядро эклипса, без гуя.
bormand 01.01.2014 21:18 # 0
Это да. Причем аннотации сами по себе не делают ровным счетом ничего. И надо еще догадаться, считает ли ее какая-то либа в рантайме, обработает ли ее какой-нибудь процессор аннотаций, или вообще все положат на нее большой и толстый хуй...
> стремятся все написать на икс-им-ели
Слава богу, с выходом аннотаций, народ перекинулся с XML'я на них... Все-таки небольшая аннотация для тех же ORM'ов выглядит меньшим злом, чем то же самое в виде 10 нод XML...
> нужно всегда указывать интерфейс
И не забыть запилить фабрику билдеров для реализаций этого интерфейса ;) А вообще, интерфейсы это палка о двух концах. С одной стороны это Истинная Инкапсуляция, которая дает очень и очень неплохую развязку, вплоть до свободной замены одной реализации на другую. С другой стороны это Глубокая Задница, т.к. поменять интерфейс уже нереально (уберешь метод - сломаются юзеры, добавишь метод - сломаются реализации), и начинаются костыли в духе попыток каста этого интерфейса в другой...
Xom94ok 01.01.2014 21:35 # +3
>> переход на жабу он сделал с огромным воодушевлением
Вы ему хотя бы молочко за вредность не выделяете? :) Мне это напоминает симптомы фанатизма, без которого не получится приспособить моск под новое мышление.
defecate-plusplus 01.01.2014 21:51 # +3
программисту вообще тяжко без молочка
на самом деле прожекты у нас как раз веб, thin server architecture
после довлеющего пиздеца с aspnet/webforms в дотнетах, делать изначально правильно на жабе воодушевляет
Xom94ok 01.01.2014 21:58 # +1
kegdan 01.01.2014 22:05 # 0
Xom94ok 01.01.2014 22:10 # +2
Неправда, как обладатель люмии, я утверждаю, что windows phone не подходит ни для чего, кроме звонков, а iphone не подходит ни для чего вообще и это утверждение - результат наблюдений за знакомыми яблочниками.
kegdan 01.01.2014 22:18 # 0
Так же как подменили "жаба гораздо лучше с#"
на "Something на java гораздо лучше ASP.NET на C#"
bormand 01.01.2014 22:10 # 0
Более того, телефоны с Android, Windows Phone (или как там ее сейчас правильно называют) и iOS для звонков менее удобны, чем их кнопочные предки ;) Просто с этим все смирились.
bormand 01.01.2014 22:32 # 0
Расшифрую:
- Ухом можно скинуть трубку. На современных сотиках для этого приделали детектор уха. На многих старых сотиках с ведром 2.х их не было, и очень доставляли маты коллеги, у которого был как раз такой телефон ;)
- Очень сложно сбросить вызов, не доставая телефон из кармана. На кнопочных моторолке с380 и нокии n73 я делал это с первого раза, даже если телефон был во внутреннем кармане.
- Набирать чей-то номер зимой на ветру - сущий ад (если не покупать специальные токопроводящие варежки).
- Набирать цифры и искать людей в справочнике с этой 4" лопатой одной рукой не очень удобно. На кнопочниках такой проблемы не было.
govnomonad 02.01.2014 07:14 # 0
сейчас все в погоне за видом гейфона и нет ни одного нормального смарта с кнопками.
Эх была же htc с шиндошс mobile с сенсорным экраном и нормальными кнопками, с помощью которых можно было не юзать тачскрин
anonimb84a2f6fd141 02.01.2014 18:29 # 0
Типа ты дохуя в перчатках по маленьким клавишам попадешь. Я всегда снимал перчатки.
>Набирать чей-то номер зимой на ветру - сущий ад
А почему просто не блочить ввод?
bormand 02.01.2014 18:41 # 0
Попадал же, вполне так попадал ;) И даже джойстик на n73 умудрялся шатать.
> А почему просто не блочить ввод?
Это про детектор уха? Ну там и блочится ввод, если фотоэлемент почует, что его кто-то заслонил. А совсем блочить нельзя, как скидывать трубку то?
defecate-plusplus 02.01.2014 18:54 # 0
об стену, вестимо
bormand 02.01.2014 18:59 # 0
[на правах рекламы]Хайскрин, сука, крепкий оказался. Пару раз ронял его почти с полутора метров (вешал куртку держа в руках телефон) - аккумулятор вылетал, но корпус целый, экран целый, все работает.[/на правах рекламы]
Так что способ вполне юзабельный ;)
defecate-plusplus 02.01.2014 19:16 # 0
хожу троллю айфоногнусмасоводов неделей работы без подзарядки на двух симках[/подкину нищебродства]
Xom94ok 02.01.2014 21:05 # +1
[не_реклама шиндовс_фон="говно"]Я демонстировал коллегам, насколько крепкий экран у люмии 920, роняя его на разные поверхности экраном вниз где-то с полутра метров. Люмия сдалась в пятом раунде линолеуму: потрескалось стекло, но дисплей и сенсор остались рабочими :)[/не_реклама]
1024-- 02.01.2014 21:12 # +1
Эту страну действительно не победить.
bormand 02.01.2014 21:25 # 0
Стекло Гориллы? Так оно не царапается, но довольно хрупкое ;)
kegdan 02.01.2014 21:31 # 0
bormand 02.01.2014 21:34 # +1
Потому что обычно он сначала ударяется корпусом (уголком или ребром), а потом уже стеклом, и корпус демпфирует удар. Я думаю хватит одного падения стеклом вниз на какой-нибудь бугорок ;)
kegdan 02.01.2014 21:39 # 0
Физик - кун)
>>Я думаю хватит одного падения стеклом вниз на какой-нибудь бугорок ;)
с 1,7-1,8м - вряд ли. нужна заостренная поверхность, бугорка мало
anonimb84a2f6fd141 02.01.2014 20:24 # 0
bormand 02.01.2014 20:51 # 0
Чем разблокировать? Там из хардварных кнопок громкость да питание ;) Все остальные кнопы на ведрах - выпирающий вниз кусок экранного сенсора. Ну на айфунах, правда, кнопка home (или как там ее), не сенсорная.
anonimb84a2f6fd141 02.01.2014 21:02 # 0
bormand 02.01.2014 21:04 # 0
Сбрасывать вызов в духе slide to unlock? Ну да, в этом что-то есть. Но датчик уха все-таки удобней.
bormand 01.01.2014 19:19 # 0
Если вас собираются изнасиловать - просто расслабьтесь и получайте удовольствие.
Xom94ok 30.12.2013 20:59 # +3
http://ideone.com/AvtLrp
О, сколько нам открытий чудных... Но... Ведь доллар... Идентификатор...
bormand 30.12.2013 21:08 # +4
http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html
inkanus-gray 31.12.2013 20:06 # +1
anonimb84a2f6fd141 31.12.2013 19:07 # 0
Казалось, причем бы здесь jquery.
anonimb84a2f6fd141 02.01.2014 18:30 # −1
defecate-plusplus 02.01.2014 18:34 # 0
π подтвердит
anonimb84a2f6fd141 02.01.2014 20:22 # 0
kegdan 02.01.2014 19:09 # +1
1024-- 02.01.2014 19:17 # 0
распознавание образов, работа с HTTP, конфигами и ASP.NET, т.е. бот-минураст с авторегером и веб-интерфейсом.
kegdan 02.01.2014 19:22 # +1
defecate-plusplus 02.01.2014 19:23 # +1
kegdan 02.01.2014 19:31 # +2
Ну и плюс 2 см к члену, Анонимб, это прикинь, для тебя это в 2 раза, в целых 2 раза...
anonimb84a2f6fd141 02.01.2014 20:26 # +1
Stertor 02.01.2014 20:55 # −1
anonimb84a2f6fd141 02.01.2014 20:23 # 0
Сервер или клиент? Если клиент - хуле там делать, если сервер - чем оно лучше питона (на котором веб я тоже не знаю)?
kegdan 02.01.2014 20:27 # 0
1024-- 02.01.2014 20:30 # +1
1024-- 02.01.2014 20:33 # 0
kegdan 02.01.2014 20:42 # 0
anonimb84a2f6fd141 02.01.2014 21:05 # 0
kegdan 02.01.2014 21:09 # 0
Stertor 02.01.2014 21:13 # 0
kegdan 02.01.2014 21:17 # 0
Stertor 02.01.2014 23:59 # 0
Stertor 02.01.2014 20:57 # 0
anonimb84a2f6fd141 02.01.2014 21:00 # 0
Stertor 02.01.2014 21:06 # 0
Работа с сетью предполагает многопоточность. Слать/принимать запросы и извлекать инфу из заголовков я умею, а многопоточности не разумею. Таким образом, ты изучишь запросы, а я потоки. Улавливаешь мою мысль? Мы оба останемся в выйгрыше ;)
anonimb84a2f6fd141 02.01.2014 21:43 # 0
Stertor 03.01.2014 00:00 # −1
kegdan 02.01.2014 21:45 # 0
anonimb84a2f6fd141 02.01.2014 21:56 # 0
kegdan 02.01.2014 22:12 # 0
bormand 02.01.2014 22:53 # 0
Как написать распределенную отказоустойчивую систему за 24 часа.
anonimb84a2f6fd141 02.01.2014 23:34 # 0
anonimb84a2f6fd141 02.01.2014 20:23 # 0
kegdan 02.01.2014 20:26 # −1
Xom94ok 02.01.2014 20:46 # 0
kegdan 02.01.2014 20:49 # −1
Xom94ok 02.01.2014 20:54 # 0
kegdan 02.01.2014 20:57 # +1
отъебитесь от меня, ничего не знаю я)
anonimb84a2f6fd141 02.01.2014 21:01 # 0
kegdan 02.01.2014 20:51 # −1