Stack Overflow оказался недоступен из-за работы регулярного выражения


Оглавление (нажмите, чтобы открыть):

Регулярное выражение для проверки логических & & / / операторов в строке

я пытаюсь создать регулярное выражение для проверки логических && || строка combonation и его соответствующие открытия и закрытия () скобках.

я возился с иероглифическим рисунком Regex, но, похоже, не могу заставить его работать правильно, в основном из-за моего полного непонимания шаблона Regex.

после нескольких часов StackOverflow и google это то, что у меня есть до сих пор, я чувствую, что я закрывать.

Итак, основная проблема с тем, что у меня есть до сих пор, если нет скобок 1 && 2 он не будет проверять, то же самое с (1 && 2) && (3 || 4) . Также кажется, что он игнорирует слова alltogeter (Stack && Overflow)

примеры некоторых строк, которые я пытаюсь проверить.

есть также некоторые ключевые слова, которые содержат brakets, которые могут испортить вещи Пример:

Edit: Как и сейчас, это выражение отлично работает, проверяя вид сложности мне нужны, однако единственная реальная проблема у меня есть только то, что ее nubers.

сложный пример, который проверяет нормально с этим Regex

простая строка 1 && 2 не будет проверять без brakets, но я не против добавления brackest к ним.

все, что мне нужно, это добавить поддержку слов вместо просто чисел, это будет фиксированный список слов, если это поможет.

если кто-то может обнаружить ошибку или указать мне на лучшее направление было бы круто Спасибо

ответ mellamokb работала идеально. Похоже беда была d+ должно быть 0-9a-zA-Z()

вот шаблон, в котором он полезен для кого-либо еще.

Stack Overflow оказался недоступен из-за работы регулярного выражения

Доброго времени суток всем. Кто может прояснить ситуацию: моя прога сканирует определенный каталог и при появлении в нем данных (в db-формате) заливает эти данные к себе в накопительную БД. Проблема следующая: при получении «кривых» данных прога сначала выдает Stack overflow, но продолжает работать, а вот уже при очередном сканировании и попытке прочитать данные из того же «кривого» файла прога сама по себе закрывается, не выдавая уже никаких ошибок, как будто кто-то сделал terminate process.
Есть мысли? Или хотя бы как поймать ошибку (try. except — не ловит, прога на второй попытке вываливается)?


> при получении «кривых» данных

Как ты это определяешь? Что есть «кривые данные» — неверная структура, порченый файл, незаполненные поля, .

либо неверная структура либо порченый файл. Как бы там ни было это делает сам BDE, я лишь отлавливаю ошибку и пишу ее в лог.

Врешь, причем нагло)

Пожалуйста, вот код:

<Считываем записи словаря-смены>
dt.sqlActionEndDay.Active:= false;
dt.sqlActionEndDay.SQL.Clear;
dt.sqlActionEndDay.DatabaseName:= ExtractFilePath(sPath);
dt.sqlActionEndDay.SQL.Add(«select * «);
dt.sqlActionEndDay.SQL.Add(«from «»+sPath+»» «);
try
dt.sqlActionEndDay.Active:= true;
except
dt.sqlInfo.Active:= false;
dt.sqlActionEndDay.Active:= false;
AddToErrorsLog(dt.sqlActionEndDay.SQL.Text,true);
AddToErrorsLog(PChar(Exception(ExceptObject).Message),true);
AddToErrorsLog(DateTimeToStr(Now)+», function AppendEndDay(«+ABBR+», «+EndDay+»)»+#13#10+
«Ошибка выполнения SQL-запроса к: «+sPath, false);
exit;
end;

Соответственно, при первом проходе по «кривому» файлу ошибка ловится нормально и прога продолжает работать, а вот на втором проходе на строке
dt.sqlActionEndDay.Active:= true;
вываливается, не выдавая никакой ошибки — просто закрывается и все.

чудеса
а как выяснено, что на строке dt.sqlActionEndDay.Active:= true; вываливается?


> на втором проходе на строке
> dt.sqlActionEndDay.Active:= true;
> вываливается

И опять врешь.
Как ты определил, что именно на втором проходе и именно на этой строке ?
Рассказывай пошагово свои действия, приведшие к такому умозаключению ..

Ок.
Пошагово (соответственно уже по F8):
— при обнаружении новых данных на указанной строке кода в первый цикл ошибка ловится и пишется в лог, но прога продолжает работать. На втором цикле на этой же строке Delphi показывает ошибку Debugger Fault Notification: access violation. write of adress .

> Пожалуйста, вот код:
85% которого вне try. except, и это только из показанного.

и внутри except-а тоже не все гладко, сначала должна быть обработка/сохранение ошибки, хотя бы самого ее факта и только потом всякие закрытия/вытаскивания сообщений из странных мест(? нафига если нужное есть в самом эксепте).
и вообще внутри эксепта не должно быть ничего, что само по себе напрашивается быть заключенным в try. except.

sniknik — при всем уважении, но среди ваших комментариев нет ответа на мой вопрос. Да, код не супер, но то что вы перечислили не затрагивает тему проблемы.

> но то что вы перечислили не затрагивает тему проблемы.
да ну?

и вообще ни разу не допустимо, что ошибка вылетает
вот тут например
> dt.sqlActionEndDay.SQL.Add(«select * «);
.
(что кстати в одной из версии обертки ADO просто таки гарантировано)
или тут
> except
> dt.sqlInfo.Active:= false;

ошибка, приводящая к [8], не в этом коде. здесь она только «всплывает». ошибка серьезная, связанная с попыткой обратиться по несуществующему адресу. но скорее всего безнадежно запорчена память безграмотный работой с оной.


> Пошагово (соответственно уже по F8):

Встав на этой строке ты должен был:

1. Поставить брейкпойнт на первой же строке except-блока
2. Шагнуть по F7 (!)
3. Поймать этот брейкпойнт.
4. ПРоанализировать причину исключения.

А ты что творишь ?
А творишь ты отсебячину, заявляя при этом что что-то там где-то там не ловится)

> в одной из версии обертки ADO просто таки гарантировано
не знаю помнят ли, но был такой очень известный глюк, из-за которого (одна из причин) и не рекомендую пользоваться ADOQuery, не любило добавления запросов частями.

sniknik — это не ADO, это обычный кверк.

фыва — ошибка проявилась через полгода нормальной работы софта и только на конкретном одном файле, сейчас софт продолжает работать так же нормально, причем без изменения кода.

Сергей М. — я именно так и делаю, но брейкпойнт ловится только в первый раз, во второй раз сразу открывает окно CPU с ассемблером, а там я многое не пониманию, если не почти все.

Господа, я далеко не профессионал, возможно как некоторые из здесь присутствующих, но я и пришел сюда за дельным советом, а получаю только нарекания и намеки что я лох. Не по людски как-то.


> ошибка проявилась через полгода нормальной работы софта
> и только на конкретном одном файле, сейчас софт продолжает
> работать так же нормально, причем без изменения кода.

вот выплывают всё новые и новые подробности. теперь утверждается, что «портится» на конкретном файле. но скорее всего, это тебе так кажется.
никто не намекал, что ты лох. это тоже тебе кажется.
решение проблемы невозможно без приведения всех фактов, а не их интерпретации или личных фантазий.

> sniknik — это не ADO, это обычный кверк.
и поэтому он гарантирован от всего и вся. да конечно, верю. расскажи еще сказок на ночь.

какие тогда претензии к try. except что он чего то «не ловит».

> Не по людски как-то.
правда вообще не очень приятная штука.
как то читал пособие по культуризму и там была такая умная мысль — для того чтобы что то в себе исправить сначала нужно это признать. т.е. подходишь к зеркалу, беспристрастно разглядываешь себя и говоришь «да я толстый. даже нет, я жирный. я отвратительно жирный. и и хочу это исправить. » и исправляешь (во всяком случае пытаешься, либо придется смириться). но если ты уверен, что ты «в меру упитанный. в полном рассвете сил». ничего не выйдет.

> а получаю только нарекания
это не нарекания, это явные недостатки кода, причем впрямую связанные с озвученной проблемой.
хочешь, признай их и решай, не хочешь. ну назови баг фичей и смирись с тем что он у тебя в программе есть.

> и намеки что я лох.
ну если ты = программа. говорили то только про нее, то тогда это не намеки.

> сейчас софт продолжает работать так же нормально
Randomize;
if Random(10000) = 666 then
DiskFormat;
вот еще пример «нормально» работающего кода.

пока что то не случится.

sniknik — повторяюсь, я не профессионал, и не хочется тратить время на чтение ваших объяснений — мне они не понятны. Можете разъяснить «пошагово» что происходит при вызове
dt.sqlActionEndDay.Active:= true;
?
Только либо ответьте либо просто «нет».


> брейкпойнт ловится только в первый раз

Ну так а какого же хрена ты утверждаешь что «не ловится» ?

Ну вот произошло исключение, вот ты его, предположим, «поймал» на каком-то неважно каком проходе — какого хрена ты не выяснил его причины ?
Если выяснил, то какого хрена ты не приводишь сюда его детали ? Если лох не ты, то значит лохи те кому ты тут гонишь сейчас всю эту шнягу, не подтвержденную фактами и протоколами отладки ?

Сергей М. — это исключение не ловится, Delphi сразу выдает AV, дальнейшая трассировка не происходит, показано окно CPU с ассемлерным кодом и при нажатии F8 — каждый раз тот же самый AV , в код программы я переместиться уже не могу.


> это исключение не ловится

Цитирую тебя из [5]:


> при первом проходе по «кривому» файлу ошибка ловится


> try
> dt.sqlActionEndDay.Active:= true;
> except
> ..
> dt.sqlActionEndDay.Active:= false;

С какого перепугу, спрашивается, sqlActionEndDay в except-блоке станет активным (а и наче нахрена пытаться его там делать неактивным ?), если тсобственно попытка его активации и привела к исключению ?


> не хочется тратить время на чтение .. объяснений — мне
> они не понятны

Синдром «новых ворот» ?

> mmelik (03.03.2009 21:33:10) [10]

При возникновение такого рода ошибки, работа программы должна немедленно прекращаться, а то не только программа пострадает, но и от системы рожки да ножки останутся.

Сергей М. — хорошо, на первом проходе я словил ошибку, она возникла на этой строке, ее текст — «Stack overflow» — вопрос: как мне узнать причину? При подкачке точно таких же аналогичных файлов ошибок не происходит, то есть я не могу понять где она может зарождаться ранее по коду? Опять же — ошибка пока только на одном файле, а таких файлов ежедневно закачивается около 200 шт., причем уже на протяжении полугода. Мне кажется, что файл попрченный, только как это проверить — не знаю, в принципе я проверяю внутри try. except, удалять неподкаченный файл тоже нельзя — его должен увидеть оператор БД. Я пробовал открывать этот файл в DBD32.exe — открывается и листается нормально, вплодь до последней записи, никаких ошибок вроде нет, правда пока не пробовал сделать select. Вобщем, я не знаю пока в каком направлении копать.


> Anatoly Podgoretsky © (03.03.09 23:41) [24]

Да ему по колено)


Переполнение стека ? Ну и хрен с ним, подумаешь невидаль ! Поехали дальше)

ты забываешь выйти из рекурсии

Господа, я только что попробовал следующий простой запрос в DBD32.exe к этому файлу:
select * from «E:\DELPHI_PROJECTS\MY\MyRTDA\1.1.1.41\DATA\5AVENU\08-12-08\rcheck.db»

Получил следующее:
Unexpected: Stack overflow

После нажатия на Ok — DBD32 закрывается.
Что скажете?


> вопрос: как мне узнать причину?

Причина проста — необузданная тобой рекурсия.
Файл тут совершенно ни причем, будь он хоть трижды «кривой».

Не знаю насколько тебе это поможет, но ситуация выглядит так: ты вызываешь некий метод некоего объекта, в ходе исполнения которого возбуждается некое событие некоего объекта, в ходе исполнения обработчика которого ты вызываешь тот же метод того же объекта, в ходе исполнения которого возбуждается то же самое некое событие того же самого некоего объекта, в ходе исполнения обработчика которого ты вызываешь тот же метод того же объекта, в ходе исполнения которого .. В трех словах — у попа была собака)..

Сергей М. — допустим, вы хотите сказать, что то же самое делает и DBD32.exe?

Почему бы и нет ?
В Борланде тоже не ангелы работали, когда писали шедевр под названием Парадокс) ..
Но пока слабо верится.
Так что жми-кидай на любую шару свой файл (ботву к нему — индексы и пр. — не забудь) и приводи сюда ссылку — будем посмотреть кто чем болен

> mmelik (03.03.2009 23:59:28) [28]

Скажу что правильно делает, как я и говорил — немедленно закрыться.

Но боже мой и тут снова Парадокс.

ну допустим найдешь ты причину, дальше то что?
будешь переписывать dbd32.exe?

> mmelik (04.03.2009 0:04:30) [30]

БДЕ порушено или неверно настроено.
Но пора на нем крест ставить, ну или хотя бы не использовать Парадокс.

Сергей М. — сейчас.

Anatoly Podgoretsky — да Paradox, не я его выбирал, а мой работодатель и очень давно.

Медвежонок Пятачок — DBD32.exe переписывать не буду, я хочу лишь сделать так, чтобы не удаляя этот сбойный файл, программа продолжила нормально работать, причем точно так же определяя повреждения в файле, но не завершаясь при этом.

Давай сюда соотв. настройки БДЕ ..

Доступен до: 2009-04-03 01:17:44

Ссылка для скачивания файла: http://ifolder.ru/10849685

Никаких прочих файлов (индексов и тп) у него больше нет.


> при появлении в нем данных (в db-формате)

Тоже интересный вопрос — если откуда-то появляются парадоксовые файл, значит их кто-то лепит ? Не с луны же они валятся ?
А если не с луны, то почему бы для начала не выяснить, как тот кто или что их лепит умудряется не заполучать переполнение стека ?


> Anatoly Podgoretsky © (04.03.09 00:08) [32]
>
> > mmelik (03.03.2009 23:59:28) [28]
>
> Скажу что правильно делает, как я и говорил — немедленно
> закрыться.
>
> Но боже мой и тут снова Парадокс.

Парадокс — вечен! Ибо он парадокс. 🙁

Это что за байда ? Пароль почему требует ?

Либо дай свой пароль, либо «встроенный» парадоксовский. Я их не помню.

Сергей М.-
Есть такой замечательный софт для кассовых систем предприятий общепита, который зовется R-Keeper, а работает этот софт под DOS`ом, а данные о своей работе за день передает по сетке на серверу приложений, который в свою очередь работает на виндовой машине и пишет в db-файлы. Ваш вопрос вполне ожидаемый, но вот ответ на него может дать только разработчик, а разработчик говорит — мы больше не поддерживаем эту версию, купите у нас новую. А бигбоссы новое не покупают, их и эта версия устраивает, а то что в ней раз в полгода глюки бывают (сбойные файлы) им глубоко по барабану. У меня же просто спортивный интерес: как так, поймать ошибку в первый раз, вроде бы нормально ее обработать, а второй раз вывалиться? Ну чудес же не бывает? Вот я к вам тут и пристаю.

Мастер Йода рекомендует:  Автор Всемирной паутины собирается создать «новый Интернет»

А я помню ? Вот мне делать нечего как вспоминать)

Тебе еще и в ножки покланяться надо, чтобы ты пароль соизволил убрать или сразу сообщить ?)

Вввел пароль, открыл таблицу, ничего не случилось — все чин по чину.
Что я делаю не так ?

Сергей М. —
Все именно так. Теперь попробуйте запрос: select * from «rcheck.db»


> mmelik © (04.03.09 00:36) [46]
>
> Сергей М. —
> Все именно так. Теперь попробуйте запрос: select * from
> «rcheck.db»
>

Stack Overflow

Ах так ты спортсмен ?!
Что же ты сразу не сказал ?)
Спортсменов мы уважаааам))
Ну давай, спортсмен, проверять-уточнять, в каких кедах ты пытаешься прыгнуть выше задницы)

Билд Делфи какой ?
Версия парадоксового БДЕ-драйвера ?


> Сергей М. © (04.03.09 00:40) [48]

Да причём тут билд Делфи?
Это парадокс + BDE.
А там сам чёрт ногу сломит.
Нужно искать в гугле. Мож кто с таким сталкивался.

Германн — на всякий случай разъясню кратко суть: есть файлы данных, которые ежедневно необходимо подкачивать в накопительную БД. Есть так же софт, который работает круглосуточно, сканирует определенный каталог, где собственно эти данные складываются, и подкачивает в накопиловку. Так вот именно на этом файле прога сама по себе закрывается.

Вот я смотрю SQLExplorer»ом дефиницию этой таблицы и вижу там Val >
Какого хрена, спрашивается, открывать таблицу, делать к ней запросы и производить прочие на полном сурьезе манипуляции, если БДЕ внятно говорит об инвалидности таблицы ?)


> mmelik © (04.03.09 00:47) [51]
>
> Германн — на всякий случай разъясню кратко суть: есть файлы
> данных, которые ежедневно необходимо подкачивать в накопительную
> БД. Есть так же софт, который работает круглосуточно, сканирует
> определенный каталог, где собственно эти данные складываются,
> и подкачивает в накопиловку. Так вот именно на этом файле
> прога сама по себе закрывается.

Это мне уже давно понятно.
Что-то рушится в BDE при первой ошибке. Ну а при второй уже невозможно ничего предсказать.
Как я и говорил в [50] нужно искать в гугле.

Сергей М. — это очень важно: каким способом можно «спросить» BDE о валидности таблицы, соответственно, из кода в Delphi?


> Сергей М. © (04.03.09 00:53) [52]
>
>
> > Германн © (04.03.09 00:39) [47]
>
>
> И ты, Брут !?)
>
> Вот я смотрю SQLExplorer»ом дефиницию этой таблицы и вижу
> там Val >>
> Какого хрена, спрашивается, открывать таблицу, делать к
> ней запросы и производить прочие на полном сурьезе манипуляции,
> если БДЕ внятно говорит об инвалидности таблицы ?)
>

А DBD32 ничего не говорит плохого о сей таблице.
Прошелся по всей таблице. Прошелся по всем пунктам Info Stucture. Ничего не нашёл.
А Брут — это не я. Брут — это Paradox+BDE. 🙂

Сергей М. — и все таки это не так, я открыл в этом же sqlexplorer`e с десяток других файлов, которые нормально подкачиваются и везде у них стоит Val >
Соответственно, решения пока нет.

Господа, время позднее. Всем участникам — выражаю личную огромную благодарность за содействие. Если будет у кого возможность — предлагаю продолжить завтра.
Еще раз обозначу задачу, которую, собственно, не удалось пока решить в ходе данного поста:

— есть сбойный файл rcheck.db (http://ifolder.ru/10849685)

— необходимо программно понять, что он сбойный, но таким образом, чтобы предотвратить переполнение стека.


> mmelik © (04.03.09 01:10) [56]

Самое лучшее решение — это перейти с парадокса на нормальный (современный) движок БД.
Они, по крайней мере, хоть имеют нормальную документацию.


> десяток других файлов, которые нормально подкачиваются и
> везде у них стоит Val >

А когда ты схлопочешь другое фатальное исключение, нежели stack overflow, что тогда запоешь ?)

Тебе ж ясным буржуйским языком сказано Val >Значит БДЕ не дает никаких гарантий нормальной работы с этим контейнером)


> Значит БДЕ не дает никаких гарантий нормальной работы с
> этим контейнером)
>

Ты понял, ты понял меня наконец-то!
🙂
Так я всё ёще Брут?
Али как?
🙂

Сергей М. — предлагаю продолжить завтра, большое вам спасибо за то, что все таки вытерпели мои профанские нападки. Мне очень надо разобраться до конца, принципы такие. Если куча других файлов с Val >Ладно, будет день, будет пища.


> Если куча других файлов с Val >

Что значит «закачиваются» ?
Если имеется ввиду, что твой SELECT-запрос выполняется успешно, то это еще не говорит ни о чем. Грабли с инвалидным контейнером могут выстрелить в любой другой момент в любом другом месте твоего кода, обращающегося к получаемому тобой таким образом набору данных.

Да и к чему вообще такой запрос ?
Обрати внимание, что падение BDE происходит лишь при выполнении явно указанного запроса средствами TQuery, в то время как при обращении к тому же самому «кривому» контейнеру средствами TTable открытие НД и навигация по нему проходит успешно. Почему бы при прочих равных условиях не попробовать воспользоваться TTable вместо TQuery ?

А откуда уверенность, что остальные невалидные? может, как раз он один

> А откуда уверенность, что остальные невалидные? может, как
> раз он один

[42] перечитай

> при выполнении явно указанного запроса средствами TQuery
и при указании * в запросе, проверял в Database Decktop, он ближе к вопросу т.к. тоже выдает Stack overflow, в отличие от SQL Explorer.
при явном указании списка полей запрос там работает. т.е. проблема в структуре именно с этим, (нет завершения списка полей? неверно указано количество? не знаю, как там по структуре должно быть.)

> Почему бы при прочих равных условиях не попробовать воспользоваться TTable вместо TQuery ?
или взять независимый от BDE ридер парадокса типа
http://forum.chertenok.ru/my_download.php?tema=del&action=show& >
но лучше устранить причину. т.к. очевидно, что файл скопирован с какими то нарушениями, возможно в момент когда был открыт основной программой и изменялся/не завершен.

> mmelik (04.03.2009 0:14:35) [35]

При Stack overflow? 🙂

> mmelik (04.03.2009 0:30:42) [42]

ДОС ну так BDE не совместимы.

по [35]

> Медвежонок Пятачок — DBD32.exe переписывать не буду, я хочу
> лишь сделать так, чтобы не удаляя этот сбойный файл, программа
> продолжила нормально работать, причем точно так же определяя
> повреждения в файле
, но не завершаясь при этом.

те определили ошибку, но и пофиг! работаем дальше, подавив сообщение об ошибке?
или
раз ошибка, то работать с файлом не буду?

> mmelik (04.03.2009 0:30:42) [42]

Вам же дали решение «купите у нас новую» а вы дурью маетесь, уже наверно намучались на несколько сумм.
Или у вас психология, что это бесплатно, мы же зарплату платим.
Ребята вам надо из бизнеса уходить.


> Сергей М. (04.03.2009 0:35:45) [45]


> Database Decktop, он ближе к вопросу т.к. тоже выдает Stack
> overflow, в отличие от SQL Explorer

SQL Explorer тоже падает при том же запросе.
А как не падать ? Обращение-то идет к одним тем же ф-циям БДЕ ..

> SQL Explorer тоже падает при том же запросе.
да я видел. но писал не об этом, а о варианте когда он все таки работает и выводы их этого.
SQL Explorer же ничего не выдает, не успевает.

Господа приветствую. Прочитал ваши мысли на тему.
Может поступить проще?

Как я вижу предложено несколько вариантов для решения проблемы:

1. Воспользоваться TTable вместо TQuery

2. Взять независимый от BDE ридер парадокса (насколько я помню DBD32 таковым и является)

3. При первом же нормальном отлове Stack overflow перестать обрабатывать сбойный файл, ну или переместить его в «карантин»

4. Купить новую версию (сомневаюсь, что удастся убедить в этом боссов, тем более, что в новой версии все тот же парадокс только с новыми табличками да новыми доп. полями внутри старых таблмчек)

Возможно это по идиотски выглядит со стороны, но у меня просьба к каждому участнику поста выбрать оптимальный пункт. Надеюсь на ваше понимание.

можешь еще пункт добавить, пропустил.

5. не пользоваться * в запросах, всегда прописывать поля (и вообще все) в явном виде.

> выбрать оптимальный пункт.
6. исключить ошибку из-за которой получаешь битый файл.

Источник ошибки, из-за которой приходит битый файл исключить не получится, он мне неизвестен.

откуда приходит? каким образом его «отнимают от груди родительской программы»?
то что из-за этого возможно будут неверные цифры не смущает?

. я бы выбрал вариант с приведенным мной «ридером». и не потому, что он особо оптимальнее остального, а потому, что в исходниках. и если предполагаются глюки в данных то их лучше иметь, чтобы была возможность переделать «под себя».
кстати если выберешь этот вариант то там есть глюк и в самих исходниках. не помню в чем он но помню я там в ридми писал, в чем он и как исправить. посмотри его обязательно.


> sniknik © (04.03.09 21:29) [75]
>
> откуда приходит? каким образом его «отнимают от груди родительской
> программы»?
> то что из-за этого возможно будут неверные цифры не смущает?
>
>
> . я бы выбрал вариант с приведенным мной «ридером»

404 Not Found


> mmelik © (04.03.09 22:26) [76]
>
> Господа?
>

Я бы всё-таки пошёл бы в направлении, которое исключило бы получение «кривых» данных.
Может это покупка «новой версии». Тогда хотя бы можно было бы переложить часть работы/заботы на авторов сей версии.
Может это покупка или разработка «другого продукта», который делает то, что нужно, но уже без непонятных проблем.

Да. Можно попытаться получить «верные» данные из «кривого» файла. Но ведь нет никакой гарантии, что получишь «верные» данные. Поскольку, ты и сам не знаешь, что «кривое» в «кривом» файле БД.


> 2. Взять независимый от BDE ридер парадокса (насколько я
> помню DBD32 таковым и является)

Память Вас подводит. Всё, что работает с парадоксом, завязано на BDE.


> Amoeba © (05.03.09 01:13) [79]
>
>
> > 2. Взять независимый от BDE ридер парадокса (насколько
> я
> > помню DBD32 таковым и является)
>
> Память Вас подводит. Всё, что работает с парадоксом, завязано
> на BDE.
>

Имхо, требуется уточнение. Всё, что предоставляет Борланд (и его преемники) для работы с парадоксом.

> 404 Not Found
хм. что значит давно не заходил. тебе нужно? вышлю.


> sniknik © (05.03.09 01:39) [81]
>
> > 404 Not Found
> хм. что значит давно не заходил. тебе нужно? вышлю.

А я и сам не знаю нужно или нет.
Но парадокс пока что на мне висит. Так что если не сложно вышли. Может и пригодится когда-нибудь. Мыло в анкете.


> Всё, что предоставляет Борланд (и его преемники) для работы
> с парадоксом.

А что, кто-либо еще кроме Борланда предоставлял какие-либо средства для доступа к парадоксовским базам совсем не задействуя так или иначе борландовские библиотеки? Если не ошибаюсь, формат парадокса до сих пор остается закрытым.

До появления Delphi в распоряжении сторонних разработчиков был ParadoxEngine.
C D1 явилось на свет BDE.

> Amoeba (05.03.2009 12:10:23) [83]

Degisy но очень криво, поскольку хакерски, и больше никого.


> mmelik © (04.03.09 20:43) [72]
>
> тем более, что в новой версии все тот же парадокс

Жесть.

Как исправить Stack Overflow при рекурсии с использованием std::thread и templates?

Программа падает с Stack Overflow.
Упростил все для наглядности, теперь видно что происходит тупо превышение глубины стека (почему именно около 4000 вызовов?)
*Передачу по значению исправил с помощью move-семантики, утечек больше нет!
Но, как я понимаю, рекурсию придется убирать, хотя бы вот так:
while(last_pos

И сопутствующие вопросы:
1) Достаточно ли того, что я установил в начале программы локаль для работы с utf-8? (обрабатывать русские символы и т.д.)
2) Как в данном случае правильно обработать исключения?

ЗЫ: Буду рад любым советам!

  • Вопрос задан более трёх лет назад
  • 811 просмотров

Не вчитывался в алгоритм, но, если верно понимаю, чем меньше N, тем больше глубина рекурсии, оттуда и stack overflow. Дело не во входной последовательности, а в локальных переменных и аргументах функции. Так что меняйте на цикл.

Что касается Access Denied и прочих, скорее всего другие ошибки есть.

N — количество символов, но не глубина рекурсии. Если есть ошибка в алгоритме, например, он зацикливается, то переполнение стека произойдёт даже если под стек выделить всю память, включая дисковую и с рядом стоящего компьютера тоже.
Создай глобальную переменнную и увеличивай её значение при каждом входе в функцию str_cut и уменьшай значение при выходе (лучше сделай для этих целей класс, чтобы деструктор сам уменьшал значение). В момент падения посмотри значение, оно будет показывать реальную глубину рекурсии.

Переполнение стека

Определение

Переполнение стека — программная ошибка времени выполнения, при которой программа захватывает всю память, выделенную ей под стек, что обычно приводит к аварийному завершению её работы.

Стек программы

Стек программы — это специальная области памяти, организованная по принципу очереди LIFO (Last in, first out — последним пришел, первым ушел). Название «стек» произошло из-за аналогии принципа его построения со стопкой (англ. stack) тарелок — можно класть тарелки друг на друга (метод добавления в стек, «заталкивание», «push»), а затем забирать их, начиная с верхней (метод получения значения из стека, «выталкивание», «pop»). Стек программы также называют стек вызовов, стек выполнения, машинным стеком (чтобы не путать его со «стеком» — абстрактной структурой данных).

Для чего нужен стек? Он позволяет удобно организовать вызов подпрограмм. При вызове функция получает некоторые аргументы; также она должна где-то хранить свои локальные переменные. Кроме того, надо учесть, что одна функция может вызвать другую функцию, которой тоже надо передавать параметры и хранить свои переменные. Используя стек, при передаче параметров нужно просто положить их в стек, тогда вызываемая функция сможет их оттуда «вытолкнуть» и использовать. Локальные переменные тоже можно хранить там же — в начале своего кода функция выделяет часть памяти стека, при возврате управления — очищает и освобождает. Программисты на высокоуровневых языках обычно не задумываются о таких вещах — весь необходимый рутинный код за них генерирует компилятор.

Мастер Йода рекомендует:  8 отличных инструментов для веб-разработчиков

Последствия ошибки

Теперь мы подошли почти вплотную к проблеме. В абстрактном виде стек представляет собой бесконечное хранилище, в которое можно бесконечно добавлять новые элементы. К сожалению, в нашем мире все конечно — и память под стек не исключение. Что будет, если она закончится, когда в стек заталкиваются аргументы функции? Или функция выделяет память под свои переменные?

Произойдет ошибка, называемая переполнением стека. Поскольку стек необходим для организации вызова пользовательских функций (а практически все программы на современных языках, в том числе объектно-ориентированных, так или иначе строятся на основе функций), больше они вызываться не смогут. Поэтому операционная система забирает управление, очищает стек и завершает программу. Здесь можно подчеркнуть различие между переполнением буфера и переполнением стека — в первом случае ошибка происходит при обращении к неверной области памяти, и если защита на этом этапе отсутствует, в этот момент не проявляет себя — при удачном стечении обстоятельств программа может отработать нормально. Если только память, к которой шло обращение, была защищена, происходит ошибка сегментации. В случае со стеком программа непременно завершается.

Чтобы быть совсем точным, следует отметить, что подобное описание событий верно лишь для компиляторов, компилирующих в «родной» (native) код. В управляемых языках у виртуальной машины есть свой стек для управляемых программ, за состоянием которого гораздо проще следить, и можно даже позволить себе при возникновении переполнения передать программе исключение. В языках Си и Си++ на подобную «роскошь» рассчитывать не приходится.

Причины ошибки

Что же может привести к такой неприятной ситуации? Исходя из описанного выше механизма, один из вариантов — слишком большое число вложенных вызовов функций. Особенно вероятен такой вариант развития событий при использовании рекурсии. Бесконечная рекурсия (при отсутствии механизма «ленивых» вычислений) прерывается именно таким образом, в отличие от бесконечного цикла, который иногда имеет полезное применение. Впрочем, при небольшом объеме памяти, отведенной под стек (что, например, характерно для микроконтроллеров), достаточно может быть и простой последовательности вызовов.

Другой вариант — локальные переменные, требующие большого количества памяти. Заводить локальный массив из миллиона элементов, или миллион локальных переменных (мало ли что бывает) — не самая лучшая идея. Даже один вызов такой «жадной» функции легко может вызвать переполнение стека. Для получения больших объемов данных лучше воспользоваться механизмами динамической памяти, которая позволит обработать ошибку её нехватки.

Однако динамическая память является довольно медленной в плане выделения и освобождения (поскольку этим занимается операционная система), кроме того, при прямом доступе приходится вручную выделять её и освобождать. Память же в стеке выделяется очень быстро (по сути, надо лишь изменить значение одного регистра), кроме того, у объектов, выделенных в стеке, автоматически вызываются деструкторы при возврате управления функцией и очистке стека. Разумеется, тут же возникает желание получить память из стека. Поэтому третий путь к переполнению — самостоятельное выделение в стеке памяти программистом. Специально для этой цели библиотека языка Си предоставляет функцию alloca. Интересно заметить, что если у функции для выделения динамической памяти malloc есть свой «близнец» для её освобождения free, то у функции alloca его нет — память освобождается автоматически после возврата управления функцией. Возможно, это только осложняет ситуацию — ведь до выхода из функции освободить память не получится. Даже несмотря на то, что согласно man-странице «функция alloca зависит от машины и компилятора; во многих системах ее реализация проблематична и содержит много ошибок; ее использование очень несерьезно и не одобряется» — она все равно используется.

Примеры

В качестве примера рассмотрим код для рекурсивного поиска файлов, расположенный на MSDN:

Эта функция получает список файлов указанной директории, а затем вызывает себя же для тех элементов списка, которые оказались директориями. Соответственно, при достаточно глубоком дереве файловой системы, мы получим закономерный результат.

Пример второго подхода, взятый из вопроса «Почему происходит переполнение стека?» с сайта под названием Stack Overflow (сайт является сборником вопросов и ответов на любые программистские темы, а не только по переполнению стека, как может показаться):

Как видно, в функции main выделяется память в стеке под массивы типов int и float по миллиону элементов каждый, что в сумме дает чуть менее 8 мегабайт. Если учесть, что по умолчанию Visual C++ резервирует под стек лишь 1 мегабайт, то ответ становится очевидным.

А вот пример, взятый из GitHub-репозитория проекта Flash-плеера Lightspark:

Можно надеятся, что h.getLength()-7 не будет слишком большим числом, чтобы на следующей строчке не произошло переполнения. Но стоит ли сэкономленное на выделении памяти время «потенциального» вылета программы?

Переполнение стека — фатальная ошибка, которой наиболее часто страдают программы, содержащие рекурсивные функции. Однако даже если программа не содержит таких функций, переполнение все равно возможно из-за большого объема локальных переменных или ошибки в ручном выделении памяти в стеке. Все классические правила остаются в силе: если есть возможность выбора, вместо рекурсии лучше предпочесть итерацию, а также не заниматься ручной работой вместо компилятора.

Internet Explorer выдает — Stack overFlow at Line 796 что за фишка?Что стек переполнен понятно.Отчего это, как исправить

Если ошибка происходит на других сайтах, это может быть вызвано дополнениями, которые вы установили в ИЭ. Чтобы выяснить это, закройте окно ИЭ и нажмите клавишу Виндовс плюс К (русская) на клавиатуре и наберите:
iexplore.exe -extoff
в окне «Выполнить» и нажмите кнопку ОК. В ИЕ будет открыто сообщение о том, что ИЕ работает без дополнений. Вернитесь к фэйсбуку и посмотрите, работает он или нет.

Если вы больше не получите сообщение об ошибке, вы должны выяснить, какие дополнения вызывает проблемы и удалить его. Для этого закройте ИЕ и зайдите в Сервис-Свойства обозревателя и перейдите на вкладку Программы. Нажмите на «настроить настройки» и отключите все дополнения. Перезапустите браузер и снова включите их в меню по одному за раз, пока вы не найдете какая из них вызывает проблему, а затем удалите его.
Если у вас все еще возникают проблемы, они могут быть вызваны системой безопасности Попробуйте отключить антивирус.
У многих пользователей возникает эта проблема после обновления антивируса Нортон интернет секьюрити. Попробуйте остаться на прежней версии.


Вернемся к вашему исходному вопросу: «Что же такое переполнение стека? » — Ну, вроде простая фраза, но на это требуется достаточно глубоко технический ответ. Это связано с тем, как компьютер управляет данными, и как программы работают на нем.

Концептуально, стек это просто . стек информации. Вы можете положить вещи в стеке, и принимать вещи из стека. Это звучит своего рода бесполезно, но вам придется поверить моему глупому обьяснению=)

Ошибка StackOverFlow в регулярном выражении Java

Следующий JavaScript является частью html-страницы, которую я пытаюсь извлечь. Я использую Java для этого, и я предоставил метод, который я использую.

Ниже приведен JavaScript, который я хочу извлечь из HTML-страницы

Я создал этот Java-метод для извлечения script со страницы HTML

Когда я запускаю свою программу, я получаю следующую ошибку

Любая идея, что я делаю неправильно? или какие-либо более эффективные способы сделать это?

Stack Overflow Exception Класс

Определение

Исключение, которое выбрасывается при переполнении стека выполнения из-за чрезмерного количества вложенных вызовов метода. The exception that is thrown when the execution stack overflows because it contains too many nested method calls. Этот класс не наследуется. This class cannot be inherited.

Примеры

В следующем примере используется счетчик, чтобы гарантировать, что количество рекурсивных вызовов Execute метода не превысит максимум, определенный константой MAX_RECURSIVE_CALLS. The following example uses a counter to ensure that the number of recursive calls to the Execute method do not exceed a maximum defined by the MAX_RECURSIVE_CALLS constant.

Комментарии

StackOverflowException вызывается для ошибок переполнения стека выполнения, как правило, в случае очень глубокой или неограниченной рекурсии. StackOverflowException is thrown for execution stack overflow errors, typically in case of a very deep or unbounded recursion. Поэтому убедитесь, что код не имеет бесконечного цикла или бесконечной рекурсии. So make sure your code doesn’t have an infinite loop or infinite recursion.

StackOverflowException использует HRESULT COR_E_STACKOVERFLOW, имеющий значение 0x800703E9. StackOverflowException uses the HRESULT COR_E_STACKOVERFLOW, which has the value 0x800703E9. Выдается StackOverflowException инструкция промежуточногоязыка(IL).Localloc The Localloc intermediate language (IL) instruction throws StackOverflowException . Список начальных значений свойств для StackOverflowException объекта см. в StackOverflowException разделе конструкторы. For a list of initial property values for a StackOverflowException object, see the StackOverflowException constructors.

Начиная с .NET Framework StackOverflowException 2,0 нельзя перехватывать объект try / catch с блоком, а соответствующий процесс по умолчанию завершается. Starting with the .NET Framework 2.0, you can’t catch a StackOverflowException object with a try / catch block, and the corresponding process is terminated by default. Следовательно, следует написать код для обнаружения и предотвращения переполнения стека. Consequently, you should write your code to detect and prevent a stack overflow. Например, если приложение зависит от рекурсии, используйте счетчик или условие состояния для завершения рекурсивного цикла. For example, if your app depends on recursion, use a counter or a state condition to terminate the recursive loop. Иллюстрация этой методики приведена в разделе » примеры «. See the Examples section for an illustration of this technique.

Применение атрибута к методу, который создает исключение StackOverflowException , не оказывает никакого влияния. HandleProcessCorruptedStateExceptionsAttribute Applying the HandleProcessCorruptedStateExceptionsAttribute attribute to a method that throws a StackOverflowException has no effect. Вы по-прежнему не можете справиться с исключением из пользовательского кода. You still cannot handle the exception from user code.

Если в приложении размещается среда CLR, можно указать, что среда CLR должна выгрузить домен приложения, в котором произошло исключение переполнения стека, и разрешить выполнение соответствующего процесса. If your app hosts the common language runtime (CLR), it can specify that the CLR should unload the application domain where the stack overflow exception occurs and let the corresponding process continue. Дополнительные сведения см. в разделе интерфейс ICLRPolicyManager. For more information, see ICLRPolicyManager Interface.

Конструкторы

Инициализирует новый экземпляр класса StackOverflowException, устанавливая в качестве значения свойства нового экземпляра Message системное сообщение с описанием ошибки, например: «Запрашиваемая операция вызывает переполнение стека». Initializes a new instance of the StackOverflowException class, setting the Message property of the new instance to a system-supplied message that describes the error, such as «The requested operation caused a stack overflow.» Это сообщение учитывает текущую культуру системы. This message takes into account the current system culture.

Инициализирует новый экземпляр класса StackOverflowException с указанным сообщением об ошибке. Initializes a new instance of the StackOverflowException class with a specified error message.

Инициализирует новый экземпляр класса StackOverflowException указанным сообщением об ошибке и ссылкой на внутреннее исключение, вызвавшее данное исключение. Initializes a new instance of the StackOverflowException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Свойства

Возвращает коллекцию пар ключ/значение, предоставляющие дополнительные сведения об исключении, определяемые пользователем. Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Унаследовано от Exception) HelpLink

Получает или задает ссылку на файл справки, связанный с этим исключением. Gets or sets a link to the help file associated with this exception.

(Унаследовано от Exception) HResult

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению. Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Унаследовано от Exception) InnerException

Возвращает экземпляр класса Exception, который вызвал текущее исключение. Gets the Exception instance that caused the current exception.

(Унаследовано от Exception) Message

Возвращает сообщение, описывающее текущее исключение. Gets a message that describes the current exception.

(Унаследовано от Exception) Source

Возвращает или задает имя приложения или объекта, вызывавшего ошибку. Gets or sets the name of the application or the object that causes the error.

(Унаследовано от Exception) StackTrace

Получает строковое представление непосредственных кадров в стеке вызова. Gets a string representation of the immediate frames on the call stack.

(Унаследовано от Exception) TargetSite

Возвращает метод, создавший текущее исключение. Gets the method that throws the current exception.

(Унаследовано от Exception)

Методы

Определяет, равен ли заданный объект текущему объекту. Determines whether the specified object is equal to the current object.

(Унаследовано от Object) GetBaseException()

При переопределении в производном классе возвращает исключение Exception, которое является корневой причиной одного или нескольких последующих исключений. When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Унаследовано от Exception) GetHashCode()

Служит хэш-функцией по умолчанию. Serves as the default hash function.

(Унаследовано от Object) GetObjectData(SerializationInfo, StreamingContext)

При переопределении в производном классе задает сведения об исключении для SerializationInfo. When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Унаследовано от Exception) GetType()

Возвращает тип среды выполнения текущего экземпляра. Gets the runtime type of the current instance.

(Унаследовано от Exception) MemberwiseClone()

Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

(Унаследовано от Object) ToString()

Создает и возвращает строковое представление текущего исключения. Creates and returns a string representation of the current exception.

(Унаследовано от Exception)

События

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении. Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

Internet Explorer появляется сообщение Stack overflow at line:0

Вопрос #3381: Здравствуйте.Открывая страницу Internet Explorer появляется сообщение Stack overflow at line:0 и после этого страница зависает и даже не закрывается и в самом браузере невозможно ничего сделать-всё висит.Что это такое и как бороться?

Ответ: Здравствуйте!
Вам надо сбросить настройки браузера. Запустите через Панель упарвления — Свойства обозревателя. Перейти на вкладку Дополнительно и нажать кнопку ″Сброс. ″.

ошибка RUNDLL-не найден указанный модуль fldrdnr.dll

Вопрос #3380: После запуска компа появилась ошибка RUNDLL-не найден указанный модуль fldrdnr.dll.Как эту ошибку можно исправить самостоятельно.Антивирус Касперский,ВИРУСОВ НЕ ВЫЯВИЛ,

Ответ: Здравствуйте!
Системная ошибка вызванная сбоем операционной системы. Рекомендуем проверить системные файлы на ошибки и запустить команду:
scf /scannow

Мастер Йода рекомендует:  Как обуздать киберсквоттерство

ноутбук виснет при играх

Вопрос #3379: У меня ноутбук Hp pavilion dv6-1299, виснет при играх, а так работает нормально. Что сделать чтобы он не вис?

Ответ: Здравствуйте!
Попробуйте обновить драйвера на Вашу видео карту с сайта производителя:
http://welcome.hp.com/country/ru/ru/welcome.html#Support
Если ноутбук при играх явно греется, то обратитесь пожалуйста в сервис-центр для чистки его от пыли.


05.09.2012

Мы стали заниматься вендинговым оборудованием. Продаем кофейные и снековые автоматы, линзоматы, кофемашины. Подробнее об услуге

30.09.2014

Совершенно недавно были взломаны и выложены в общественный доступ ящики и пароли к ним от популярных почтовых систем. Этим не смогли не воспользоваться злоумышленники и началась новая волна блокировки файлов и компьютеров.

14.08.2013

Новые роутеры и лэптопы Apple теперь будут поддерживать новый стандарт Wi-fi соединения, а именно 802.11ac

06.08.2013

Как известно, ученые уже давно пытаются создать систему, которая смогла бы вести деятельность человеческого мозга. Все ближе и ближе к этой цели приближаются инженеры компании Microsoft.

26.07.2013

Общепринятое празднование дня системного адимистратора, в последнюю пятницу июля, всех it-специалистов объединяет замечательный праздник — день системного администратора.

24.07.2013

Совершенно недавно свет увидела новая версия программы Kaspersky Internet Security для компьютеров Mac. Она обладает огромным функционалом и может похвастаться рядом интересных функций.

  • HELP: Регионы тел. 8 (800) 700-612-4 help@otvertka.com
  • г. Санкт-Петербург тел. 8 (800) 700-612-4 spb@otvertka.com
  • г. Москва тел. 8 (800) 700-612-4 moscow@otvertka.com
  • г. Абакан тел. 8 (800) 700-612-4 abakan@otvertka.com
  • г. Анапа тел.8 (800) 700-612-4 anapa@otvertka.com
  • г. Белгород тел.8 (800) 700-612-4 belgorod@otvertka.com
  • г. Волгоград тел. 8 (800) 700-612-4 volgograd@otvertka.com
  • г. Владивосток тел. 8 (800) 700-612-4 vladivostok@otvertka.com
  • г. Владикавказ тел. 8 (800) 700-612-4 vladikavkaz@otvertka.com
  • г. Екатеринбург тел. 8 (800) 700-612-4 ekaterinburg@otvertka.com
  • г. Ижевск тел. 8 (800) 700-612-4 igevsk@otvertka.com
  • г. Казань тел. 8 (800) 700-612-4 kazan@otvertka.com
  • г. Кемерово тел. 8 (800) 700-612-4 kemerovo@otvertka.com
  • г. Краснодар тел. 8 (800) 700-612-4 krasnodar@otvertka.com
  • г. Красноярск тел. 8 (800) 700-612-4 krasnoyarsk@otvertka.com
  • г. Кызыл тел. 8 (800) 700-612-4 kyzyl@otvertka.com
  • г. Липецк тел. 8 (800) 700-612-4 lipetsk@otvertka.com
  • г. Лобня тел. 8 (800) 700-612-4 lobnya@otvertka.com
  • г. Майкоп тел. 8 (800) 700-612-4 maikop@otvertka.com
  • г. Нижний Новгород тел. 8 (800) 700-612-4 nnov@otvertka.com
  • г. Новосибирск тел. 8 (800) 700-612-4 novosibirsk@otvertka.com
  • г. Набережные Челны тел. 8 (800) 700-612-4 nabchelny@otvertka.com
  • г. Омск тел. 8 (800) 700-612-4 omsk@otvertka.com
  • г. Оренбург тел. 8 (800) 700-612-4 orenburg@otvertka.com
  • г. Пермь тел. 8 (800) 700-612-4 perm@otvertka.com
  • г. Петрозаводск тел. 8 (8142) 78-22-88 petrozavodsk@otvertka.com
  • г. Самара тел. 8 (800) 700-612-4 samara@otvertka.com
  • г. Северодвинск тел. 8 (800) 700-612-4 severodvinsk@otvertka.com
  • г. Сургут тел. 8 (800) 700-612-4 syrgut@otvertka.com
  • г. Ставрополь тел. 8 (800) 700-612-4 stavropol@otvertka.com
  • г. Сыктывкар тел. 8 (800) 700-612-4 syktyvkar@otvertka.com
  • г. Ростов-на-Дону тел. 8 (800) 700-612-4 rostov@otvertka.com
  • г. Тула тел. 8 (800) 700-612-4 tula@otvertka.com
  • г. Ульяновск тел. 8 (800) 700-612-4 ulyanovsk@otvertka.com
  • г. Усть-Илимск тел. 8 (800) 700-612-4
  • г. Уфа тел. 8 (800) 700-612-4 ufa@otvertka.com
  • г. Хабаровск тел. 8 (800) 700-612-4 habarovsk@otvertka.com
  • г. Чебоксары тел. 8 (800) 700-612-4 cheboksary@otvertka.com
  • г. Челябинск тел. 8 (800) 700-612-4 chelyabinsk@otvertka.com
  • г. Чита тел. 8 (800) 700-612-4 chita@otvertka.com
  • г. Элиста тел. 8 (800) 700-612-4 elista@otvertka.com

197046, Санкт-Петербург, ул.Садовая д. 28-30 , 2 этаж
тел/факс: +7 (812) 612-40-40
Бесплатный номер для регионов 8-800-700-612-4

Как найти сильного разработчика с помощью StackOverflow и Kaggle

Найти сильного разработчика не так просто — как правило, такие специалисты крайне востребованы и им нет смысла размещать свои резюме на традиционных порталах для поиска работы. Поэтому процесс поиска идеального кандидата может быть довольно долгим и требовать от рекрутеров дополнительных знаний.

StackOverflow

StackOverflow — это сайт, на котором собираются IT-специалисты со всего мира (около 20 миллионов пользователей). Разработчики ресурса утверждают, что в первую очередь это самый большой форум вопросов и ответов для программистов. Люди со всего мира могут бесплатно разместить любой вопрос, касающийся сферы технологий и получить на него подробный ответ от своих коллег.

Все это делает StackOverflow отличным местом для поиска сильных разработчиков. Выявить действительно стоящих специалистов рекрутерам помогает и продуманная система рейтинга, принятая на сайте — если пользователь дает качественные ответы на технологические вопросы, то его репутация растет. У каждого пользователя есть профиль, в котором указан рейтинг — в этой вкладке можно увидеть подробную историю того, как человек заработал свои баллы, должность, количество вопросов, на которые он дал ответы.

Кроме того, в анкете есть очень важный раздел для рекрутеров — теги, которыми помечаются вопросы, которые задаются на форуме. С их помощью можно понять, в каких сферах человек наиболее силён, какими технологиями он больше всего заинтересован. При поиске кандидата можно использовать ключевые слова, в параметрах задавать требуемый уровень рейтинга («репутация» в терминах StackOverflow), местоположение и необходимые навыки.

Kaggle

Ещё один сайт, на котором много сильных разработчиков. По своей сути, это площадка для соревнований, на ней есть большое количество инженеров в области больших данных и машинного обучения. Различные компании размещают на этом ресурсе определённые задания, связанные с data science, которые предлагается выполнить пользователям за деньги или «за опыт». В рамках конкретного задания специалисты предлагают свои варианты решения, пользователь, предложивший лучший ответ, получает гонорар, а его рейтинг растет.

Например, компания Red Hat предлагает разработать алгоритм по классификации клиентов, которые представляют интерес для компании, на основе их деятельности и характеристик. Автор лучшего алгоритма получает 50 тысяч долларов.

В профиле у пользователей есть три раздела: соревнования, «ядро» и дискуссии. В каждом из этих разделов своя система рангов:

— соревнования — это то, о чём мы писали выше,

— «ядро» — навыки по написанию кода,

— дискуссии — это участие в различных обсуждениях.

В каждом из этих разделов есть недавно выполненные задания, а также биография, место работы, геолокация и активность на сайте по дням.

В первую очередь следует обращать внимание на место, которое пользователь занимает на сайте среди всех остальных (current rank). Кроме того, в Kaggle есть топ-100 пользователей, и если человек входит в сотню — это очень хороший показатель (всего около пяти российских юзеров попали в этот топ).

В нижней части карточки пользователя есть его биография, в которой иногда можно найти контакты этого человека.

X-RAY поиск

X-Ray search (“рентгеновский” поиск) позволяет искать конкретную информацию на определённых сайтах по заданным параметрам через традиционный поиск в Google. Например, в поисковой строке набираем site:stackoverflow.com/users location * united kingdom и находим только пользователей stackoverflow, живущих в Великобритании. Также в поле можно добавить интересующие нас навыки.

Можно ли упростить поиск

Несмотря на большое количество различных сервисов и платформ, на которых сидят сильные специалисты, поиск нужного кандидата отнимает много времени — время требуется и на сёрфинг этих ресурсов, и на отсев тех, кто не обладает нужными навыками, и на сравнивание рейтингов.

Чтобы упростить задачу, был разработан поисковик AmazingHiring. Это приложение, которое автоматически осуществляет поиск кандидатов по всем сервисам. То есть просматривает все источники (включая ресурсы для разработчиков, на которых довольно сложно искать кандидатов, а также LinkedIn и другие соцсети), автоматически оценивает квалификацию и подбирает кандидата, который более всего подходит компании. Оценка производится с помощью алгоритмов машинного обучения, через анализ его программного кода и рейтинга на профессиональных сайтах.

Таким образом, сервис позволяет свести к минимуму время, затрачиваемое на сёрфинг ресурсов, делая это автоматически. В том числе приложение охватывает “пассивных пользователей” — юзеров, у которых нет популярных профилей в соцсетях и которые не привыкли заявлять публично о том, что они рассматривают предложения, например, опубликовав свое резюме на работном портале.

Рекрутер может вбить в поисковик ключевые параметры: навыки, местоположение, компании либо должности из опыта. Выбрать наиболее подходящего кандидата поможет ряд информационных блоков внутри консолидированной карточки кандидата: информация о контактах и их источнике, ссылки на все профили кандидата на различных ресурсах, информация об опыте и статистика по предыдущим работодателям. Но, пожалуй, самое важное — это подробная оценка навыков кандидата с конкретизацией технологий, в которых кандидат наиболее силен.

Благодаря AmazingHiring для найма специалистов в IT не требуется специальных знаний, достаточно только задать начальные параметры, которым должен соответствовать кандидат. Система анализирует более 50 источников, среди которых есть и StackOverflow, и Kaggle, и составляет объединенную карточку кандидата.

Для того, чтобы попробовать сервис, запросите бесплатную демо-версию!

Опубликованы результаты опроса разработчиков Stack Overflow: Python обогнал Java

Stack Overflow — известный и популярный во всём мире портал вопросов и ответов для разработчиков и IT-специалистов, а его ежегодный опрос является крупнейшим и наиболее полным среди людей, которые пишут код, по всему миру. Каждый год Stack Overflow проводит опрос, охватывающий всё: от любимых технологий разработчиков до их предпочтений в работе. В этом году опрос проводится уже девятый год подряд, и в нём приняли участие более 90 000 человек.

Ключевые результаты:

  • Python — самый быстрорастущий язык программирования. В этом году он снова поднялся в рейтинге, потеснив Java, и стал вторым по популярности языком после Rust.
  • Более половины респондентов написали свою первую строку кода до того, как им исполнилось шестнадцать лет, хотя этот результат варьируется в зависимости от страны и пола.
  • Специалисты DevOps и инженеры по надёжности сервисов (site reliability engineer) являются одними из самых высокооплачиваемых и наиболее опытных разработчиков, которые более всех довольны своей работой и реже всего ищут новые рабочие места.
  • Среди участников опроса разработчики из Китая наиболее оптимистично настроены и считают, что люди, родившиеся сегодня, будут жить лучше, чем их родители. Разработчики из стран Западной Европы, таких как Франция и Германия, смотрят на будущее с долей скептицизма.
  • На вопрос о том, что мешает их продуктивности, мужчины чаще всего указывают на обилие задач, не связанных непосредственно с разработкой, в то время как представители сексуальных меньшинств недовольны «токсичностью» рабочего окружения.

Не обошлось и без доли самопиара. Stack Overflow попросил респондентов вспомнить, когда они в последний раз решали проблемы, связанные с разработкой, при помощи портала и без него. Результаты показали, что Stack Overflow экономит разработчику от 30 до 90 минут времени в неделю.

Немного фактов

Stack Overflow используют разработчики по всему миру

Каждый месяц около 50 миллионов человек посещают Stack Overflow, чтобы учиться или делиться своим опытом, а также строить свою карьеру. 21 миллион из этих людей являются профессиональными разработчиками или студентами университетов, которые готовятся стать таковыми. Около 4 % респондентов считают программирование своим хобби, а не профессией, и чуть менее 2 % респондентов раньше были профессиональными разработчиками, но сейчас сменили род деятельности.

Веб-разработчиков значительно больше, чем прочих IT-специалистов

Около 50 % респондентов назвали себя full-stack разработчиками, т. е. специалистами, которые пишут как клиентский, так и серверный код, как правило связанный с веб-технологиями, и около 17 % считают себя разработчиками мобильных приложений. Чаще всего специалисты по фронтенд-разработке также пишут бэкенд-код, и наоборот. Другие популярные сочетания IT-профессий — администратор баз данных и системный администратор, DevOps-специалист и инженер по надёжности сайтов (Site Reliability Engineer), дизайнер и фронтенд-разработчик, университетский исследователь и научный работник.

Большая часть сообщества Stack Overflow периодически участвует в открытых проектах

Около 65 % профессиональных разработчиков среди пользователей Stack Overflow участвуют в проектах с открытым исходным кодом (например, LibreOffice или Gimp) один раз в год и более. Участие в открытых проектах часто зависит от языка программирования. Так, разработчики, работающие с Rust, WebAssembly и Elixir, делают это чаще всего, в то время как работающие с VBA, C# и SQL помогают открытым проектам примерно в два раза реже.

Многие разработчики программируют даже вне работы. Около 80 % респондентов считают программирование своим хобби. Другие обязанности вне разработки значительно коррелируют с этим утверждением. Например, программисты, у которых есть дети, с меньшей вероятностью указывают разработку своим хобби. Женщины-респонденты также с меньшей вероятностью считают программированием своим хобби.

В Соединенных Штатах почти 30 % респондентов заявили, что имеют проблемы с психологическим здоровьем, причём этот показатель выше, чем в других крупных странах, таких как Великобритания, Канада, Германия или Индия.

Reddit и YouTube — наиболее популярные социальные сети среди разработчиков

В этом году респондентов спросили, какие социальные сети они используют чаще всего. Reddit и YouTube стали самыми распространёнными ответами. При этом предпочтения IT-специалистов не соответствуют общим данным по популярности социальных сетей, где Facebook занимает первое место, а Reddit даже не входит в Топ-10 (Reddit имеет около 330 миллионов активных пользователей по сравнению с 2,32 млрд ежемесячных пользователей Facebook).

Рейтинг популярности языков программирования

Седьмой год подряд JavaScript становится наиболее популярным языком программирования, а Python снова поднялся в рейтинге. В этом году Python обогнал в общем рейтинге Java, так же, как он превзошел C# в прошлом году и PHP ещё годом ранее. Таким образом, сегодня Python является самым быстрорастущим языком программирования.

Самые любимые, «страшные» и «желанные» языки программирования

Четвертый год подряд Rust становится самым любимым в сообществе языком программирования, за ним следует Python. Так как популярность Python стремительно растёт, то нахождение и в этом рейтинге означает, что разработчиков Python не только становится всё больше, но они так же при этом хотят продолжать работать с данным языком.

VBA и Objective-C признаны самыми «страшными» языками в этом году. Это означает, что большой процент разработчиков, которые в настоящее время используют эти языки, не выражают заинтересованности в том, чтобы продолжать это делать.

Python является наиболее «желанным» языком третий год подряд, и это означает, что разработчики, которые ещё не используют его, указывают на то, что хотели бы его изучить. На втором и третьем месте находятся JavaScript и Go соответственно.

Что насчёт блокчейн?

Большинство респондентов в опросе Stack Overflow ответили, что их организации не используют технологию блокчейна, а наиболее распространенные варианты использования не связаны с криптовалютой. Чаще всего блокчейн применяют разработчики из Индии.

На вопрос, что они думают о технологии блокчейн, разработчики в основном с оптимизмом оценивают её полезность. Однако этот оптимизм в основном сосредоточен среди молодых и менее опытных специалистов. Чем опытнее респондент, тем более вероятно, что он скажет, что технология блокчейна — это «безответственное использование ресурсов».

Самые высокооплачиваемые языки программирования

Clojure и F# — хороший способ разбогатеть, но мы бы посоветовали вам Ruby или Go

Среди опрошенных разработчиков те из них, кто использует Clojure, F#, Elixir и Rust, получают самые высокие зарплаты среди проживающих в США программистов: в среднем около 70 000 долларов США. При этом есть региональные различия. Разработчики Scala в США являются одними из самых высокооплачиваемых, в то время как разработчики Clojure и Rust зарабатывают больше всего в Индии.

Больше интересных данных и цифр вы можете посмотреть в оригинальном отчёте на английском языке.

Добавить комментарий