Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Вниз

Как тупят программисты?   Найти похожие ветки 

 
Real   (2003-05-15 20:14) [0]

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


 
Юрий Зотов   (2003-05-15 20:35) [1]

Эту ошибку я вылавливал 2 дня

Писал тогда на PL/1. На нем и привожу код, потому что в нем есть специфика именно этого языка. Но с комментариями, чтобы было понятно:

DECLARE
I DECIMAL FIXED(1);
/* то есть, I - целая переменная длиной 1 десятичный знак. */

....
D0 I = 1 TO 9 ...
/* На Паскале это будет так: for I := 1 to 9 do ... */

Аллес. Цикл бесконечный. Пока я локализовал место зацикливания (при тех-то средствах отладки!), пока тупо смотрел и не понимал, почему эта зараза циклится, прошло 2 дня.

После этого был действительно приступ хохота. Но сначала ругани самого себя и самыми последними словами.


 
Zz_   (2003-05-15 20:44) [2]

Почти аналогично Юрий Зотов © (15.05.03 20:35)

for(unsigned short usTmp = 25;usTmp>=0;usTmp--){};


 
Fredericco   (2003-05-15 20:49) [3]

В большом участке кода было место, что-то вроде этого:

if b then
DoSome1;
DoSome2;

Чтобы по условию выполнилось 1 и 2 нужны begin и end. А я их не поставил. Сразу оправдываюсь: кода было много, до этого половину дня искал ошибку, время под 23, на работе с 9-00, короче - ступил. Причем я почему-то себе втемяшил что b=True (на самом деле было Ложь), и я не понимал какого фига DoSome1 не выполняется. Даже перед DoSome2 ставил ShowMessage - срабатывало, а DoSome1 не хотел. Бился я около часа. Когда понял что b=False да и begin"бы не помешал, обиделся на себя, нажал Power и пошел домой.
Вот так. :-)


 
panov   (2003-05-15 21:05) [4]

Недавний пример:
Несколько дней ушло на решение. Разобрался только после того, как мне в форуме посоветовали.

А проблема была в том, что функция окна не перерисовывала в NT само окно, а в W98 было все нормально.

Функция такого вида:

function MyWndProc(Wnd:HWND;Mess:word;
WParam:word;LParam:LongInt):LongInt;stdcall;
begin
case Mess of
WM_CREATE: Result:=0;
WM_DESTROY:
begin
PostQuitMessage(0);
Result:=0;
end;
else Result:=DefWIndowProc(Wnd,Mess,WParam,LParam);
end;
end;


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


 
vuk   (2003-05-15 21:18) [5]

У нас в текущем проекте распространена ситуация, когда формы реализуют интерфейсы. В одном месте завели пару глобальных переменных интерфейсного типа, которым в какой-то момент присваивается значение, только вот обнуление прикрутить забыли. А вот компилятор финализацию прикрутить не забыл... Искали баг вдвоём где-то часа 3, т.к. сыпалось, вроде как, по абсолютно непонятной причине и далеко не каждый раз. Когда нашли реакция была примерно такая же как у Юрия.





 
Ihor Osov'yak   (2003-05-15 21:23) [6]

2 Юрий Зотов © (15.05.03 20:35)
2 Zz_ (15.05.03 20:44)


У ЮЗ красивее :-)...

О себе.. Всего и не вспомнишь.. Но наиболее "больно" было из-за неявной рекурсии..

Да, еще вспомнил.. Совсем недавно.. Матерился потом долго ..

PostMessage(..,Супер_Пурер_CMD,..
Apliсation.ProcessMessages;
Do_Чего_то_там_которое_должны_сделать_до_Обработки_Супер_Пурер_CMD;






 
Suntechnic   (2003-05-15 21:23) [7]

>panov ©
Из той же оперы.

В Builder 4 попробуйте объявить конструктор формы __fastcall TForm1(TComponent* Owner); с параметром int. Что то типа __fastcall TForm1(TComponent* Owner, int index);
При создании объекта данного типа программа просто отвисала(насколько я помню уходила в рекурсию где то в нутрях VCL). А вот замена параметра на тип long решала проблему.
Но я, скорее всего, даже не хохотал, а матерился когда после нескольких часов изысканий выяснилось в чём проблема.


 
Zacho   (2003-05-15 22:17) [8]

А весьма интересная и полезная тема :)

Наверное, одна из самых тупых моих ошибок.
Небольшая бухгалтерская программа. В течении нескольких часов пытаюсь понять, почему при вводе новой операции у нее устанавливается какая-то левая дата. Причем все время одна и та же. Причем еще недавно все работало нормально. Много раз протрассировал и перелопатил весь ответственный за это код. Потом стали посещать мысли о каком-то редкостном и странном то ли баге в сервере, то ли нарушении структуры БД. Сделал всевозможные проверки базы, backup/restore и т.п. Бесполезно.
И вдруг вспоминаю, что пару дней назад для какой-то отладки временно сделал триггер, принудительно устанавливающий эту дату. А удалить забыл.
Долго смеялся и матерился одновременно.

P.S. Для не работавших с БД с триггерами. Триггер - это процедура, срабатывающая при вставке/изменении/удалении записи в таблице.


 
RIMMER   (2003-05-15 23:45) [9]

У меня на днях случилось...
В юните - 2 процедуры, каждая из которых читает примерно одинаковые ключи из двух разных ini-файлов. Допираете? Читать должны из разных, а кконстанту строковую в обеих установил одну и ту же :)) Полдня потратил, пытаясь разобраться, почему вторая читалка всегда стандартные параметры читает, которые я ей указал...


 
Style   (2003-05-16 01:42) [10]

Ужас :)

prope$7A$64ure(TList: List);
end
TObject := Object.Destroy;
finally
Object.Add(TList);
end
TObject.Create;
begin;
begin;

Тфу надеюсь даже с жуткого похмелья такого не напишу :)
Хотя все у нас бывает :)))


 
Нуу   (2003-05-16 03:51) [11]

2 Юрий Зотов © (15.05.03 20:35)
А я, если честно, не понял?
Или я не понимаю "/* то есть, I - целая переменная длиной 1 десятичный знак. */"?


 
АлексейК   (2003-05-16 05:16) [12]

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


 
vidiv   (2003-05-16 05:30) [13]

Написал так в дельфи 6:
const c1:array[boolean,boolean] of byte = (0,0,0,0);
---Мне сказали что нучно так:
const c1:array[boolean,boolean] of byte = ((0,0),(0,0));
---

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

Вот это бед!


 
Думкин   (2003-05-16 05:42) [14]

У меня недавно при работе с ДиректДроу было.
В одном мечсте применял BltFast c флагом DDBLTFAST_WAIT.
А потом сменил на Blt, но флаг сменить на DDBLT_WAIT забыл.
Результат был печальный - на огромном числе компов все шло пучком, а на одном нет. Причем этот комп был далеко - пришлось повозится чтобы локализовать проблему, и даже когда локализовал - 15 минут тупо смотрел и никак не мог врубиться - нашел только когда закоментил и начал набирать заново.


 
ZeroDivide   (2003-05-16 08:32) [15]

>Нуу (16.05.03 03:51)
>2 Юрий Зотов © (15.05.03 20:35)
>А я, если честно, не понял?
Я тоже не понял какая у этой переменной дисперсия значений :/

Меня тут как то добил стандартный чекбокс вот в таких процедурах,
пришлось так его использовать потому что радиогруп смотрелось не красиво:

Procedure TFm.Cb1clk(Sender: TObject);
begin
cb2.Checked := False;
end;

Procedure TFm.Cb2clk(Sender: TObject);
begin
cb1.Checked := False;
end;

Но самое главное что я тупил, даже поняв в чем причина :)))


 
gek   (2003-05-16 09:28) [16]

У меня была ситуация когда минут 15 тупо смотрел на функцию copy
и не понимал - ну почему компилятор ее не видит.
Оказалось, что первую букву на русском ввел.


 
pasha676   (2003-05-16 09:33) [17]

Козырная моя ощибка - пытаюсь связываться с внешним устройством, забыв включить питание устройства :). Иногда минут по десять затмение длиться. Самое интересное, что с хорошей периодичностью это дело повторяется :).


 
Vint   (2003-05-16 09:42) [18]


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

а из приколов которые на всегда врезались в память это на первой работе по пьяне вставлял мать 386 и разломил ее... списали :), а еще опять же по пьяне одевал год назад куллер орб на 866 пенек 3, и соскользнула рука, отверткой содрал слой жилок на метеринке 8 штук и отломил угол у проца... но ничего материнку запоял, проц работал но иногда перегружался сам по себе, я тогда наростил уголок эпоксидкой, подкрасил и заменил по гарантии :))


 
ПИТОН   (2003-05-16 09:52) [19]

Я вот однажды в сравнении вместо +1 написал *1.
Так неделю пытался выловить.


 
NickBat   (2003-05-16 10:38) [20]

Сила привычки.

Как-то на C++ (или PHP, сейчас уже не помню) написал оператор сравнения

if (s=0) .....

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


 
Cobalt   (2003-05-16 14:00) [21]

Сейчас писал для 1С:
Сначала было так:
>>Для СчетчикЦикла = 0 По Корень.КоличествоПодчиненных()-1 Цикл
но ругался на выход за границы. Потом сделал так:
>>Для СчетчикЦикла = 1 По Корень.КоличествоПодчиненных()-1 Цикл
(а количество элементов было 1 :))
долго удивлялся тому, что не проходит по дереву


 
Юрий Федоров   (2003-05-16 14:09) [22]

У меня самый страшный случай произошел, когда на совершенно безобидной строке типа Panel1.caption:="" программа валилась.
Думал две недели, оказалось, что в другом модуле в StrCopy забыл выделить память под терминатор (#0)


 
Marser   (2003-05-16 14:37) [23]

Всего и не упомнишь, бывают серьёзные глюки, но после минутной истерики всё забывается %-)


 
Style   (2003-05-16 14:51) [24]

А недавно случайным образом подключил CLX в Delphi6;
В общем сделал дистрибутивчик отнес прогу клиенту. А там бац и не идет.. Говорит давай сюда библиотеку :(

В общем все облазил ничего не пойму. Ничего не использую давай говорит библиотеку.. Оказывается внутри кода своего компонента случайно тыкнул на клавишу Q перед forms, получилось uses qforms;

А времени блин убил!! Вроде бы компоненты рулят! В коде все чисто а так блин фантастика :))


 
Dmk   (2003-05-16 14:59) [25]

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


 
han_malign   (2003-05-16 15:03) [26]

>NickBat © (16.05.03 10:38)
>if (s=0) .....
>Долго пытался понять почему всегда истина. ...
- может все-таки ложь???


 
clickmaker   (2003-05-16 15:18) [27]

while DS.Eof do begin
...
DS.Next;
end;

Без комментариев.


 
han_malign   (2003-05-16 15:32) [28]

последнее, что-то вроде этого ( для наглядности)
Caption:="Label1 deleting";
with Label1 do begin
Free;
Caption:="Label1 deleted";
end;


 
Игорь Шевченко   (2003-05-16 15:35) [29]

DS.Open();
try
while not DS.Eof do begin
....на экран кода..
end;
finally
DS.Close()
end;

DS.Next был упущен :)



 
Vlad Oshin   (2003-05-16 15:50) [30]

надо было оценить процент неудачных попыток, сравнить с наперед заданным

if (poor/all)<50 then
странно, не работает...

if round(poor/all)*100<0.5 then
странно, не работает...



 
Ihor Osov'yak   (2003-05-16 15:58) [31]

2 NickBat © (16.05.03 10:38)

Дык сишники для этого рекомендуют сначала констану писать, а потом переменную:

if (0=s) {

Компилятор бы точно не пропустил :-)

Зы - хотя сам такие ошибки делал несколько раз.. И потом долго искал..


 
VAleksey   (2003-05-16 16:46) [32]

Буквально 2-е минуты назад сообразил.
Свежачок:

qryTransCount.SQL.SaveToFile("");
if not qryTransCount.Prepared then qryTransCount.Prepare;


примерно 30 мин. не мог понять почему программа зависает.
Грешил на вторую строку.
Зато запрос оптимизировал немного :-))


 
SPeller   (2003-05-16 16:48) [33]

Только что нашёл у себя ошибку, над которой бился ровно 24 часа начиная со вчера. Пишу некое подобие звукового движка к своему курсачу, и при переносе объявлений функций в одной из них забыл проставить stdcall; Всего-то из-за какого-то слова ушли сутки, нервы и бессонная ночь :-))


 
VAleksey   (2003-05-16 16:48) [34]


> Игорь Шевченко © (16.05.03 15:35)


> clickmaker © (16.05.03 15:18)


Ну это вообще классика :-)


 
icWasya   (2003-05-16 18:39) [35]

из прошлого века
Fortran


DO I = 1 . 10
MYPROC(I)
10 CONTINUE


всё компилится - а процедура MYPROC выполняется один раз с параметром 0.
в чем дело?
вместо запятой поставлена точка
на распечатке разницу заметить почти невозможно
Фортран пробелы в тексте игнорирует(даже внутри идентификатора)
и переменные описываются неявно - в результате, если превести на паскаль, то правильный код
for I:=1 to 10 do
MYPROC(I);

превратился в
DOI:=1.10;
MYPROC(I);





 
Song   (2003-05-16 20:26) [36]

Var D1,D2: Double;

D1:=GetModulePrice; // 1,24
D2:=StrToFloat(Label21.Caption); // 1,24

IF D1=D2 then ImageList1.Draw(...{ зелёная иконка} } else
ImageList1.Draw(...{ красная иконка});

Полчаса не мог допереть почему рисуется красная икока.


 
Snap   (2003-05-18 01:03) [37]

JavaScript.
Простой код, обновляющий страницу по таймеру. 3 Часа пытался понять почему каждый раз вылезает ошибка, оказалось скобки в условии не поставил :)))) а в паскале ведь и без скобок работает :))))

В Дельфи часто забываю в reset or rewrite второй параметр задавать, и получается что каждый кусок по 512 байт :))))


 
DrPass   (2003-05-18 10:19) [38]

Вчера писал программу (набирать каркас было лень, поэтому просто скопировал generic.pas из сорцов турбо-паскаля):
...
function WindowProc(Window: HWnd; Message, WParam: Word;
LParam: Longint): Longint;
begin
...
И почти час пытался сообразить, почему она зависает?


 
Malder   (2003-05-18 11:58) [39]

Юрий Зотов, извините за тупизм, но я тоже не понял, что значит
>I - целая переменная длиной 1 десятичный знак


 
Юрий Зотов   (2003-05-18 12:25) [40]

> Нуу (16.05.03 03:51)
> ZeroDivide © (16.05.03 08:32)
> Malder © (18.05.03 11:58)

Это целая переменная с дипазоном 0..9. Особенность компилятора в том, что код контроля переполнения не строится, а вместо этого строится код, "отбрасывающий" старшие десятичные разряды. В итоге получаем: если I=9, то после прибавления еще единицы I будет равно нулю. Отсюда и зацикливание (I никогда не может превысить верхнюю границу цикла).

В PL/1 еще и не такие чудеса были возможны. Например, практически любой тип данных там запросто преобразовывался в практически любой другой тип данных. Штука очень мощная, но и очень опасная. Требует внимательности, аккуратности и полного понимания того, что ты делаешь и как это будет обработано компилятором. Иначе последствия непредсказуемы, а вылавливать подобные ошибки обычно бывает очень непросто.


 
Malder   (2003-05-18 12:31) [41]

Юрий Зотов, тогда я не понял

если I=9, то после прибавления еще единицы I будет равно нулю. Отсюда и зацикливание
...
D0 I = 1 TO 9 ...
/* На Паскале это будет так: for I := 1 to 9 do ... */


Ну так цикл последний раз выполнится при i=9 и все. Какое зацикливание ?


 
Юрий Зотов   (2003-05-18 12:37) [42]

> Malder © (18.05.03 12:31)

Дык... а что такое цикл в машинном коде, построенном компилятором PL/1?

1. Цикл выполняется при I=9.
2. I увеличивается на 1 и получается I=0.
3. Проверяется: I больше 9? Нет. Значит, поехали сначала.



 
Malder   (2003-05-18 12:56) [43]

А, да, ступил. Не зря ветка так называется :-)


 
kaif   (2003-05-18 14:08) [44]

2 Юрий Зотов © (18.05.03 12:37)
Классная ошибка!
----------------
Самая страшная моя ошибка (периодически допускаю):
with DataSet do
begin
First;
while not Eof do
begin
.... (Если здесь много кода, то забываю Next)
end;
end;
-----------
Всегда путаюсь во всяких местах, где нужно считать количество то ли с нуля, то ли с единицы. Например, for i := 5 to 15 понятно, что сработает 11 раз, а вот в
s := copy(s, pos(s2,s), Length(s) - pos(s2) + 1)
обязательно допущу ошибку.
-----------
Еще любимая ошибка:
обычно если пишу вместо with DataSet do
просто:
DataSet.First;
while not Eof do
begin
....
DataSet.Next;
end;

По привычке думая, что Eof DataSet-а имел в виду.
Компилятор Delphi в этом случае почему-то понимает Eof текста модуля формы и спокойно компилирует проект. А при запуске все вылетает.
-----------
Cтранно, но вот зато в SQL практически никогда не допускаю ошибок. Наверно поэтому и люблю все учетные задачи сводить к SQL.


 
Nick Denry   (2003-05-18 14:11) [45]

Если просто по теме и судя по себе, то сильно!


 
kaif   (2003-05-18 14:17) [46]

Самую чудовищноу ошибку в своей жизни я допустил, работая электронщиком. Я разрабатывал большую схему и мне захотелось сделать там бит четности в некоей шине. Ну, вставил я туда, разумеется логический элемент, суммирующий по модулю 2 все биты шины. Затем выяснилось, что в какой-то момент мне нужно предсказать значение этого проверочного бита перед суммированием двух чисел (а схема работала на очень больших частостах), я недолго думая, прикинул все варианты и решил, что если добавляемое число четное, то проверочный бит можно не менять, а если нечетное - изменить бит на противоположное значение. Меня просто подвела игра слов. По-русски четность (parity) и четность (odd) звучат одинаково, хотя это две разные вещи. Когда плата была изготовлена и запущена, я искал ошибку целый день. Ходил кругами, вроде все верно работает, но работает то правильно, то неправильно... Когда я обнаружил ошибку, мне уже казалось, что я схожу с ума...


 
Юрий Зотов   (2003-05-18 15:46) [47]

> kaif © (18.05.03 14:17)

Вот с чем мне пришлось столкнуться...

В 10-разрядный счетчик на D-триггерах в течение времени T поступают импульсы заданной частоты (ШИМ). По окончании интервала T (по заднему фронту "окна") формируется импульс опроса, переписывающий информацию из счетчика в ОЗУ (тоже 10 D-триггеров с объединенными С-входами). Затем формируется импульс сброса, счетчик (но не ОЗУ) обнуляется и цикл повторяется. Все было собрано на 133-й серии, частота набивки - 512 кГц (что для этой серии очень далеко от максимума), реальные значения T такие, что переполнение исключено.

В общем-то, стандартная схема цифрового измерения временного интервала, работать должно железно. ОК, начинаем смотреть на макете - и видим, что в ОЗУ все время сидит ноль! Проверяю монтаж, смотрю прохождение сигналов, их синхронизацию - все ОК. Счетчик работает отлично, с ОЗУ все нормально, нужные импульсы приходят куда надо и вовремя - а в ОЗУ все равно ноль! Питание есть, микросхемы не битые, на информационных входах ОЗУ все ОК, на синхронизирующие входы импульс опроса приходит (и вовремя), допустимые коэффициенты разветвления не превышены (т.е., подсада сигналов нет, фронты не завалены) - а ОЗУ все равно молчит, как партизанка на допросе!

Бьюсь 3 дня, ломаю башку и так, и сяк - ничего не понимаю. Наконец, сделал почти фантастическое предположение, что из-за задержки срабатывания микросхем (в схеме формирования синхроимпульсов) по заднему фронту импульса сброса формируется второй, ложный, импульс опроса (уж так была построена эта схема, что теоретически такое не исключалось, хотя практически вероятность такой ошибки была, можно сказать, нулевая). И этот ложный импульс еще раз переписывает информацию из уже сброшенного счетчика в ОЗУ - вот поэтому там и сидит ноль. А из-за инерционности осциллографа я этих "скачков" ОЗУ просто не вижу.

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

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

Пять минут работы, буквально 2 перепайки. А потеряно было несколько дней. Но после того случая я уже ВСЕГДА разрисовывал временные диаграммы с учетом задержек.


 
Malder   (2003-05-18 17:28) [48]

А почему тогда такой код не зацикливается в дельфи

var i:byte;
begin
for i:=1 to 255 do
beep;
end;


 
Ihor Osov'yak   (2003-05-18 18:03) [49]

2 Malder © (18.05.03 17:28)

Компилятор в паскале - он умный.. Поставь точку останова, после останова делай Ctrl_Alt_C - и смотришь..


2 Юрий Зотов © (18.05.03 15:46)

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

Да, вспомнил еще, немножко не в тему - но задачка на сообразительность для бывших электронщиков - я тогда еще молодым спецом был, но после этого случая коллеги очень зауважали. Пришла плата с монтажа, корпусов около сотни 555, естественно возле каждой 0.1 на развязке.. Один из этих конденсаторов - КЗ..
Обычно в этом случае постепенно все конденсаторы выпаивались, или питание резалось понемногу, почти "методом половинного деления".. Но тогда меня немножко осенило и я на спор в течении двух минут за первым попаданием этот конденсатор и выщитал..
Как это было сделано? :-)


 
kaif   (2003-05-18 19:45) [50]

2 Ihor Osov"yak © (18.05.03 18:03)
Единственное, что пока в голову приходит - хороший ток обеспечил от источника - стабилизатора тока и пальцем искал, который кондер греется... Хотя, наверное, не угадал?...

2 Юрий Зотов © (18.05.03 15:46)

Я тоже пару раз натягивался на наносекундных импульсах. Искал такие вещи с помощью делителей на D-триггерах, как Ihor Osov"yak.


 
Ihor Osov'yak   (2003-05-18 19:55) [51]

2 kaif © (18.05.03 19:45)

Почти угадал. Ток ну не очень большой, но такой, чтобы набегало по плате милливольт 20-30 (от низкого напряжения - до 1V через сопротивление, низкое напряжение - чтобы ничего не выгорело, если КЗ исчезнет).. А потом диф. осцилографом наблюдал падение напряжение. Можно и обычным)..
А по нагреву проблематично - дорожки может бы быстрее грелись, чем коротнутый конденсатор..


 
kaif   (2003-05-18 20:01) [52]

Меня как-то теща попросила у них на работе эелектронный микроскоп починить. Скажу вам, вещь стрессовая... Tesla. Мужик тамошний уже 2 недели тупил - не мог разобраться в схемах. Так вот он мне эти схемы показывает - мрак полный. Я подумал, что если этот мужик 2 недели починить не может, так может, дело и не в схемах... По крайней мере, я за час точно не разберусь...
Я говорю, давай сначала, а с чего ты взял, что микроскоп не работает? Он говорит, вот, смотри, стрелка прибора показывает, что вакуума нет, а вакуум есть, так как коробочка с образцом рукой не выдергивается. Подергал я коробочку до включения насоса и после. Виду, действительно, не выдергивается. А тама еще, кроме основного насоса, еще диффузионный, который на хитрых принципах построен, типа спираль в вакууме нагревается и разгоняет всякую дрянь через специальный конус, чтобы супервакуум получать. Вот я и подумал. Говорю, мужик, а ты точно уверен, что там нужный вакуум есть? Может прибор прав, что нет там никакого вакуума? Он опять за свое, типа коробочка не выдергивается... Я говорю, слышь, мужик, а если у тебя там 0.05 атмосфер, к примеру, так ты думаешь, что сможешь коробочку выдернуть?
Мужик весь вдруг посинел и побежал в насосную. Прибежал, говорит - все в порядке. В насосе, оказывается, давно масло закончилось. Залил масло - все заработало.
Опять игра слов (вакуум - вакуум)... т.е. что, собственно, вакуумом называть...


 
kaif   (2003-05-18 20:07) [53]

Вообще, я вам скажу нет более увлекательного занятия, чем мышь ловить в своей комнате, если она там поселилась. Вот истинное занятие для детективного ума... Я однажды 3 часа так мышь вычислял. Вычислишь новое место, где она прячется, а она, юрк - и в новое место, причем такое, что и в голову не придет... Так я за 3 часа нашел 100 мест в маленькой комнате, где оказывается мышь прятаться может... когда все места исчерпались, она просто стала метаться по комнате и я ее поймал. Отпустил с почестями на улицу...


 
Malder   (2003-05-18 20:16) [54]

Да, здорово. Оказалось, что цикл FOR в Дельфи реализован так, что один раз будет по любому исполняться :-)

Я и не подозревал...


 
kaif   (2003-05-18 20:22) [55]

2 Malder © (18.05.03 20:16)
Точнее, не цикл, а условие проверки хоть один раз, да должно провериться. Вообще это можно проверить.

Нужно написать
i := 0;
for i := 5 to 4 do
;
ShowMessage(IntToStr(i));

Если покажет 0 - значит это не так.
Я думаю покажет i = 5.
Хотя я не исключаю, что в такой явной форме оптимизатор может выкинуть эту часть кода.


 
Malder   (2003-05-18 20:28) [56]

Не, покажет 0. И еще предупреждение напишет, что цикл никогда не будет исполняться, поэтому цикл выкинут из кода (оптимизация роли не играет). Соответственно, и у i не будет заменено значение на нормальное.
Ты видать тоже не видал исполнение цикла FOR у Делфьи в ассемблере.

Если цикл не исполняется, то она его выкидывает, если исполняется хоть один раз, то в ассемблере комманды в цикле первый раз исполняются собственно до cmp


 
wnew   (2003-05-19 00:59) [57]


> Ihor Osov"yak © (18.05.03 19:55)

Обычная практика у эксплуатационщиков, при отыскании повреждения включать устройство через ограничивающее ток сопротивление, лучше всего через обыкновенную ламочку накаливания подходящей мощности, дело в том, что нить накала при нагревании увеличивает своё сопротивление, что ещё больше благоприятствует безопасности исследуемого электронного устройства. При чём, этот способ приходится не часто использовать при двоичной электронике, т.к. она в большинстве случаев не многоточна, а вот в аналоговых устройствах, особенно в различных усилителях мощности, - это очень хорошее средство, облегчающее поиск повреждения. А ещё, такой способ, по моему мнению, был не избежен при ремонте печально известных импульсных блоков питания телевизоров типа 2УСЦТ, 3УСЦТ с тиристором КУ112А.
Я этим ничего не хотел сказать, просто навеяло. Уже 10 лет не занимаюсь любимым делом, тоскую.


 
Юрий Зотов   (2003-05-19 02:47) [58]

wnew © (19.05.03 00:59)

Бареттер это называется...




 
Digitman   (2003-05-19 11:38) [59]

Вот такая была у меня "ситуация" :

WinMe, MSOffice2000

вставлена дискетка с *.doc-файлом, попытка открытия/чтения файла Word"ом прямо c дискетки ... "мертвое" зависание ... перезагрузка ... все ! аллес капут ! "дозагружался", что называется - blue dead screan c руганью на kernel32 и некий VXD-драйвер (не помню уж - какой, но, судя по названию, якобы вовсе не имеющий никакого отношения к аппаратуре)...
убираю этот драйвер из автостартапа, перезагружаюсь - та же "синяя беда", но уже со ссылкой уже на другой VXD...

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

единственная надежда - "safemode"-режим пока еще работает...

парился я с проблемой, помнится, не менее недели, вечерами (машинка домашняя была, не рабочая) улучая пару-тройку часов времени и проводя кучу (далеко не "слепых", небессистемных) экспериментов... лог - в порядке, все сист.файлы и все драйверы - якобы тоже, все настройки - соответствуют ... ну не работает - и все тут !( ...

зато при всем при том установленная в другой каталог на том же диске с того же дистрибутива та же самая ОС (минимальная, "чистая" инсталляция) работает как положено, без вопросов !!

"тупизм" же мой собственный обнаружился, когда в отчаянии я решил на всяк.случай реинсталлировать "поверх" 32-разрядные драйверы IDE-контроллера, попавшиеся на глаза, когда в очер.раз перебирал все OEM-софтверное "хозяйство", прилагавшееся в свое время продавцом машинки на невзрачных дискетках..

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

обновил я быстренько с дискетки драйвер и - о чудо ! - система ожила !!
почему я это не сделал сразу - ума не приложу)...
хотя существовавший файл IDE-драйвера ничем (по кр.мере - внешне, по первичным признакам) не отличался от того, который я установил с дискетки, оказалось, что на самом деле он был поврежден : WinMe каким-то невероятным, совершенно непрогнозируемым образом "умудрилась" вкатать в один из кластеров, занятых файлом, нули !!

"тупизм" сей недельный заставил меня, конечно, повеселиться-похихикать над самим собой от души... но, кстати, и дал повод всерьез задуматься о необходимости/возможности/желании дальнейшей эксплуатации такой вот ОС, которая в любой неожиданный момент, самым коварным образом может уничтожить все и вся... окончательное решение было принято достаточно быстро - WinMe must навсегда die на этой машине, и впредь - никакой и ни в коем виде реинкарнации !))


 
Vint   (2003-05-19 11:42) [60]

> wnew © (19.05.03 00:59)

такая же фигня...

... я как на рынок на железячный зайду, а там 555 ТМ всякие ЛА7 транзисторы 315, 312, терристоры КУ 202 блин такая ностальгия по детству... ;)))

лет 15 ничего не собирал, щас так только, ремонт, ну и по мелочам, а как увижу прям руки чешуться :))


 
kaif   (2003-05-19 11:59) [61]

Как-то в офисе у моего партнера одна юзерша (бухгалтер) заделала. То ей непонятно, это не знает как сделать, то ей это покажи. Каждые пять минут комп виснет...(мистика уже). Я понимаю, когда человек компьютер в глаза не видел никогда, но та в добавок еще и дура была редкостная...
Так вот, в какой-то момент, когда уже совсем задолбала, она меня зовет, а на экране надпись:
"Not system disk or disk error"
Ну я вообще и так взвинченный. Даже смотреть не стал. Говорю - винч у Вас полетел. Тпа у таких дур обязательно винч летит.
Потом через 2 часа подходит. Говорит: "А я компьютер починила!".
Я аж ох..ел. Говорю: "Как???". А она говорит. Дискету достала - все заработало.


 
Юрий Зотов   (2003-05-19 12:20) [62]

> kaif © (19.05.03 11:59)

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

Самое чудное, что при поступлении на работу в своем резюме она написала - "свободное владение компьютером". Цирк.


 
Sha   (2003-05-19 12:27) [63]

2Vint © (19.05.03 11:42)
аналогично


 
wal   (2003-05-19 12:39) [64]

Буквально вчера дома изобразил следующее:
Файл subst.bat
Содержимое:
subst z: d:\temp

Cидел, полчаса смотрел на экран и бегущие строчки. Доходило очень долго.
С уважением.


 
Darts   (2003-05-19 12:55) [65]

На моей прошлой работе работала секретарша лет 50. Хорошая, милая женщина, блестяще владела Word"ом и Lines. Потом ушла с работы в школу. Я тоже уволился, но в другую фирму.
Прошло около 3-х месяцев, наступил май месяц 2001 года. Понадобилось срочно сделать проект, и взял из школы компьютер на неделю (знакомые помогли да и не было своего пока). Прошла неделя и компьютер я отдал. Но потерял компакт с Delphi 5.
Долго искал, все перерыл дома, удивляясь, куда же он мог запропаститьься мистическим образом.
Пришлось купить новый, прошла лето, наступила осень. Кажется, это был октябрь. В школе забарахлил тот компьютер, с которым я работал ранее. Вызвали, и попросили посмотреть, в чем дело. OK, пошел смотреть. В процессе исследования нажал на конпку лотка. Предьставьте мое изумление, когда я увидел мой пропавший компакт, на котором была аббревиатура "Delphi". Но окончательно меня добила фраза, произнесенная секретаршей, стоящей за моей спиной, когда взял компакт в руки и задвинул лоток обратно.
Вот она:
" - Положите обратно, пожалуйста, а то Windows не будет загружаться без него..."

Короче, нарочно не придумаешь.


 
vidiv   (2003-05-19 13:02) [66]

var s:string;
...
for s:= 0 to length(s-1) do ....


 
NailMan   (2003-05-19 14:02) [67]

В большом объеме кода был следующий кусок:
var p:pointer;f:integer;
...
GetMem(p,Sizeof(TD3DATTRIBUTERANGE) * MaterialCount);
FileRead(F,p,Sizeof(TD3DATTRIBUTERANGE) * MaterialCount);
FreeMem(p);

пытался отловить AV 4 часа, ночью, после суток без сна.
Кстате данная ошибка что у меня, что у знакомого программера - постоянное явление.


 
Malder   (2003-05-19 15:17) [68]

Файл subst.bat
Содержимое:
subst z: d:\temp

Cидел, полчаса смотрел на экран и бегущие строчки. Доходило очень долго


А до меня до сиз пор не дошло. Хотя я не запускал. А что такого ?


 
Юрий Зотов   (2003-05-19 15:27) [69]

> Malder © (19.05.03 15:17)

Дык... запустите - увидите. :о)
Там же бесконечная рекурсия.


 
Malder   (2003-05-19 15:53) [70]

Запустил. Все ок. Появился диск Z:

Не понимаю...


 
Malder   (2003-05-19 15:54) [71]

Переделал на subst z: /d

Диск Z: убрался. Вроже как положено все


 
Юрий Федоров   (2003-05-19 15:59) [72]

>>Malder © (19.05.03 15:54)
Не иначе, батник не так назвал, как у
wal © (19.05.03 12:39)


 
Malder   (2003-05-19 16:30) [73]

Блин :-))))))))))))))))


 
Mike B.   (2003-05-19 16:43) [74]

> Malder © (19.05.03 16:30)
В тему :)


 
Malder   (2003-05-19 17:36) [75]

старался :-)


 
AlexKniga   (2003-05-19 18:21) [76]

Type
TIndex = (crX, crY, crZ);
Var
j, p: TIndex;

For j := Low(TIndex) to Pred(p) do
Begin
...
End;

Проект переносился из TP в Delphi. В TP всё работает, в Delphi зацикливается, когда p = crX.
А всё из-за того, что внутренние представление Перечисленного типа в TP знаковое целое, а в Delphi беззнаковое.


 
Asteroid   (2003-05-20 02:21) [77]

Использовал старый юнит OpenGL. В нем не было фунций glGenTextures, glDeleteTextures и некоторых прочих. Соответственно, где-то нашел прототипы и прописал их. Прога глючила у некоторых, у других все было нормально. Заподозрил, что дело было в неправильных прототипах. Нашел более свежий юнит GL12, в котором функции были, а вот старые прототипы удалить забыл...прога, ессно, глючила. Две недели соображал, в чем дело - и только сейчас обнаружил, что забыл их убрать :)


 
kaif   (2003-05-20 03:12) [78]

Супертупизм произошел у меня сегодня.
В связи с введением новой формы платежного поручения с 1 июня 2003г., мне месяц назад прислали документы о том, как ее сделать. В документах Центробанка были приведены размеры и номера полей. Были введены поля ИНН и КПП. Плюс таинственные поля внизу.
Никаких указаний о том, что туда вписывать в этих документах не содержалось... Я так понял, что вписывать туда ничего не надо, что эти поля заполняет сам банк. Переделал программу PlatPor под новый формат и поставил ее на сайт. После того, как демо-версию с 2 сайтов, где она размещена скачало более 200 человек приходит письмо, в котором клиент спрашивает такие вещи... У меня волосы дыбом. Срочно начинаю выяснять. Оказывается эти поля заполнять нужно и на это еще один документ имеется от 3-х брендов типа ГТК, ГНС и еще кого-то. У меня чуть инфаркт не вышел вчера...Вот сегодня весь день переделывал.
Кстати, если кого интересует моя новая платежка, особенно, если кто скачал ошибочный вариант - рекомендую (да простят мне модераторы). Скачать можно на моем сайте
http://www.lclassic.ru/
Базы данных не используются. Все хранится в текстовых файлах.


 
vidiv   (2003-05-20 07:15) [79]

Извечная проблема, из-за которой я свой винт чуть не похоранил... Как только не пытался лечить его (не только кулаком даже)... с любой другой машины читается, а с моей нет... Тупил пол дня, мне очень жалко было его форматить...
А в итоге оказалось всеголишь Boot from floppy. ё.


 
Vlad Oshin   (2003-05-21 15:01) [80]

сегодня я чуть не застрелился
все нормально работает и вдруг вылетает
чего только не подумал :)
а не подумал в месте считывания из ini
вчера поправил вручную(чтоб быстрее, блин) - да не так немного, вот только сегодня по F7 еле нашел, уфф

ЗЫ
Да простят меня ХХ и их матери :)


 
Mike B.   (2003-05-21 15:18) [81]

Пишу бухгалтерскую программу (точнее дописываю прямо по ходу использования - так уж сложилось). Функция вычисляет параметры проводки (значения субконто), должна вызываться по два раза (по дебету и по кредиту) для нескольких проводок. Недолго думаю пишу один вызов, остальное копировать/вставить/подредактировать. Естественно, в паре мест подредактировать забыл. Теперь товарищ, котрый тестирует у меня дозванивается, говорит в такой операции, такие то проводки по дебету все правильно по кредиту ерунда. Смотрб сам, быстро понимаю в чем дело, лезу исправляю (меняю в нужных местах дебет на кредит).
Теперь собственно начинается тупизм: в этот момент меня отвлекают и я минут на 10 ухожу от компьютера, возвратившись, я вспоминаю что нужно закончить с этим вопросом лезу в тот же модуль и меняю теперь уже кредит на дебет причем везде, в том числе уже в исправленных местах. Отправляю тестировать, через некоторое время звонок: наблюдается картина абсолютно симметричная предыдущей: по кредиту правильно, по дебету ерунда :) Вот такой цирк



Страницы: 1 2 3 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.71 MB
Время: 0.015 c
14-26652
Knight
2003-05-23 23:10
2003.06.09
Буржуйские рассылки


1-26478
Intell
2003-05-27 16:12
2003.06.09
Как при копировании заменять файл?


4-26839
Vitaliy
2003-04-08 00:42
2003.06.09
Считать html файл по HTTP используя только WinAPI


14-26711
WarLord
2003-05-21 09:48
2003.06.09
Code Explorer


1-26544
AlexGof
2003-05-26 16:29
2003.06.09
Как узнать открыт ли в MS Word файл ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский