пятница, 25 сентября 2009 г.

Довгань - мудак

Прочитал книгу Владимира Довганя “Опыт предпринимателя”. Общее впечатление: мудак, у которого можно кое-чему поучиться. Мудак-мудаком, а что-то во мне задел.

В связи с этим добавил еще один вопрос в свою копилку вопросов без удовлетворительного ответа: можно ли делать успешный бизнес не будучи мудаком в текущем моем понимании слова “мудак”?

понедельник, 24 августа 2009 г.

Инфо. Аккредитив

Стоя в коридоре, ожидая встречи с потенциальным клиентом, я почувствовал необходимость восполнить пробел в знаниях. И позвонил руководителю с вопросом «А что такое аккредитив».

Аккредитив – очередной способ взаимодействия с поставщиков, точнее способ оплаты за поставку товара/услуги. Здесь между покупателем и продавцом возникает третье лицо – банк.

Суть:

  1. Покупатель с поставщиком заключают договор, предусматривающий аккредитивную форму расчетов
  2. Покупатель подает в банк заявление на открытие аккредитива в пользу продавца
  3. Банк извещает поставщика об открытии аккредитива
  4. Поставщик отгружает товар, готовит документы и предоставляет их в банк
  5. Производится оплата против документов
  6. Банк передает документу покупателю.

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

  • аккредитивы часто используют при международных сделках, чтобы получить дополнительные гарантии оплаты. Тогда участвуют несколько банков: в стране покупателя и стране продавца. В данном случае банк является гарантом, ведь он рискует потерять свою лицензию, если не перечислит деньги продавцу при подаче необходимых документов.

Два варианта взаимодействия покупателя с банком:

  • банк замораживает какую-то сумму клиента, из которой будет оплачиваться поставка от продавца. Это называется «аккредитив с покрытием».
  • для особо крупных и надежных клиентов банк берет на себя платеж. Получается что-то типа кредита, или овер-драфта. Это называется «аккредитив с постфинансированием».

Из этих двух вариантов могут быть комбинации. Например, клиент должен дать банку только 70% нужной суммы, а на 30% идет кредитование.

воскресенье, 23 августа 2009 г.

Отладчик

Система Dynamics AX имеет встроенный отладчик.

Пример. Найдите таблицу PurchTable, метод checkUpdate(). Поставьте брэйкпоинт в строке номер 6, там должно быть написано:

if (this && this.PurchStatus == PurchStatus::Invoiced)

Установка брэйкпоинта Чтобы поставить брэйкпойнт нажмите на желтую ладонь в редакторе кода, или клавишу F9. Строка кода будет выделена бардовым цветом.

Точка останова

Теперь откройте форму заказов на покупку: модуль Расчеты с поставщиками/пункт Заказ на покупку. И вас выбросит в отдельное окно отладчика:

Окно отладчика

Здесь вам доступно море дополнительной информации.

Окно точек останова

Окно точек останова

Здесь отображается список всех точек останова, поставленных вами, с местоположением и номером строки. Снимая отметку напротив строки вы можете временно отключить точку останова, не удаляя ее. Такие точки помечаются не бардовым, а розовым цветом; система их игнорирует.

Окно стэка вызовов

Стэк вызовов

Стэк вызова отображает вложенность вызываемых методов до текущей точки останова. Например, судя по рисунку видно, что отправной точкой явился метод active() датасорса PurchTable формы Заказ на покупку. Щелкнув два раза на строке с надписью «Forms\PurchTable\Methods\editHeaderAllowed» вам откроется код метода editHeaderAllowed().

Чем дальше вы будете знакомиться с внутренней архитектурой системы Dynamics AX, тем больше вы будете использовать стэк вызова.

Окно переменных и окно отслеживаемых переменных

Окно переменных Blog0617-watches

Какое из них использовать – дело вкуса. Первое – это список всех доступных переменных. Второе – настраиваемый вами список переменных; здесь можно написать в колонке Name имя отслеживаемой переменной и ее значение будет отображено в колонке Value.

Но вернемся к отладке. Нажмите кнопку Go в верхней панели отладчика, или клавишу F5, чтобы продолжить исполнение кода.

До следующей точки останова

Увидеть список всех поставленных точек останова можно и не заходя в отладчик. Нажмите Shift+F9 и появится такое окно со списком точек:

Список точек останова

Чтобы удалить все точки останова, нажмите кнопку «Удалить все». Тот же эффект дает сочетание клавиш Ctrl+Shift+F9.

Можно отключить режим отладки. Для этого откройте параметры системы: панель меню/меню Сервис/пункт Параметры. Перейдите на вкладку «Разработка». Установите раздел Режим отладки в состояние «Нет».

Настройка параметров отладки

Итог:

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

понедельник, 17 августа 2009 г.

Мысли

Не что так не CONST, как TEMP.

суббота, 15 августа 2009 г.

Труд. Горные работы

Некоторые особенности работы департамента горных работ.

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

Карьер – это не просто дырка в земле. Его тоже проектируют, как дороги, как дома. Карьер проектируется с учетом техники, которая будет на нем работать Например, если карьер проектируется со следующим наклоном дороги:

090815-Angle

То есть на каждые десять метров дороги мы опускаемся на 1 метр. Такой угол наклона вполне по силам для Caterpillar, но какой-нибудь 120-ти тонный БелАз будет еле выбираться из карьера, а под конец сожжет сцепление и двигатель.

О Caterpillar

CAT logo

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

CAT777 – это одна из моделей грузовиков грузоподъемностью 100 тонн для работы на карьерах. Их называют кАты или котЫ из-за сокращенного названия “CAT”. Машина большая, средний человек будет в 2/3 ее колеса.

090815-cat777_2

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

В 777 кота заливают 1500 литров дизтоплива, 70% которого он спокойно съедает за 10 часов работы. Потребление топлива сильно зависит от внешних обстоятельств: в дождливую погоду машина буксует и съедает больше. Почему я упомянул о 70% топлива? По регламенту бак всегда должен быть заполнен минимум на 30%. Иначе на подъеме машина может заглохнуть из-за того что уровень топлива будет под углом к горизонтали.

Шины кота очень дорогие – 4-5 тысяч долларов – поэтому использовать их нужно по максимуму. С другой стороны абсолютно недопустимо довести их до полного истирания: высокое давление в камере шины делает ее первоклассной гранатой с радиусом поражения 100-150 метров. Особенно важно контролировать истирание передних шин, так как разрыв переднего колеса приведет потере управления над грудой металла со 100 тоннами на борту. В целях экономии стертые до какого-то приемлемого уровня передние шины переставляют на задние колеса, где их донашивают. Разрыв заднего колеса (их там четыре) не так страшен, как переднего.

О кузове кота

Руда, загружаемая в кузов, способна уничтожить его очень быстро. Поэтому его дополнительно выстилают листами стали. Сталь не простая, а самая-самая – Hardox. Но и ту периодически нужно менять.

Итог:
  • Добыча полезных ископаемых – очень дорогое занятие.
  • Тем не менее, добыча золота и алмазов окупает все с лихвой.

суббота, 1 августа 2009 г.

Как разобрать DELL Inspiron 1501

- У меня перегрелся ноутбук
- Что же делать, друг?

Я разочаровался в ноутбуках Dell. Да, у меня ноутбук бюджетной линейки Inspiron, но все-таки.

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

  1. Перевернул зверя, вытащил батарейку, освободил DVD-Rom и жесткий диск. Также открутил все болты на задней крышке, которые нашел:
    Шаг 1. Открутить все, что можно
  2. Отверткой отковыриваю панель которая находится над клавиатурой (на ней расположена кнопка выключения питания и индикаторы). Все внимание на защелки, которые выделены красным. На рисунке показана уже снятая панель:
    Шаг 2. Снять панель
  3. Откручиваю болты, держащие клавиатуру: 
    Шаг 3. Откручиваем болты
  4. Дополнительно клавиатуру держат пластмассовые ушки, отмеченные на рисунке. Клавиатуру нужно снимать медленно, так как снизу она пристегнута к материнской плате тонкий шлейфом:
    Шаг 4. Освобождение клавиатуры
  5. Шлейф клавиатуры очень тонкий, держится специальным креплением. Чтобы освободить его, сначала поднимаем защелку, а потом, также вверх, поднимаем конец шлейфа.
    Шаг 5. Отсоединение шлейфа
  6. Еще один шнур нужно отсоединить. Он выходит из дисплея и ныряет к материнской плате. Сначала нужно открутить винт, затем отсоединить шлейф.
    Шаг 6. Отсоединение кабеля дисплея
  7. По рамке монитора идет антенна для Wi-Fi, ее нужно отсоединить. Просто потянуть вверх. Шаг 7. Отсоединение антенны Wi-Fi
  8. После этого можно поднимать верхнюю часть корпуса вместе с дисплеем. Поднимать нужно аккуратно, так как на крышке есть разъем, вставляемый в штекеры на материнской плате.
    Шаг 8. Отсоединение верхней крышки
  9. И наконец я увидел материнскую плату, а в верхнем левом углу – кулер с радиатором, цель моих мытарств.
    Шаг 9. Материнская плата
  10. Кулер открутить просто. И вот под ним обнаруживается обильная борода пыли. "Где пылесос, жена?"
    Шаг 10. Цель достигнута
Итог:
  • Пыль убрана
  • Процессор не перегревается
  • Кулер не шумит

понедельник, 27 июля 2009 г.

Люди твердых указаний

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

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

Не меньше таких типов работает во множестве компаний: сидят люди в штате, и вся их деятельность сводится к эмуляции бурной деятельности.

Очень надеюсь, что я не отношусь к таким людям.

Анекдот:

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

Барин вернулся через год, а мостика как не было, так и нет. Подзывает управляющего, хрясь подзатыльник: «Почему сволочь холопская не сделал, что сказал. Сделать быстро».

Прошли сутки, барин подходит к ручью, а там мостик! Да не простой, а с резными перилами, покрашенный. Подзывает он управляющего. Спрашивает: «Что же ты год тянул, а в итоге за день сделал?». Управляющий: «Так ведь не было твердых указаний, барин».

четверг, 4 июня 2009 г.

Таблица: Временная таблица 1

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

На физическом уровне временная таблица – это отдельный файл, создаваемый на жестком диске пользователя или на жестком диске сервера AOS. Так как только один пользователь имеет доступ к конкретной временной таблице, то отпадает необходимость в использовании транзакций (ttsbegin, ttscommit, ключевое слово forupdate).

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

Для временных таблиц можно также создавать индексы, связи (realtions).

Временная таблица создается двумя путями:

  • Создание новой таблицы в AOT со свойством Temporary равным Yes. Хорошим тоном считается начинать название таких временных таблиц с «Tmp».
  • «Превращение» обычной таблицы во временную с помощью метода setTmp.

Первый вариант не представляет особых сложностей. Рассмотрим второй.

Создайте новый джоб:

static void BLG_UseTemporaryTables(Args _args) { BLG_TestTable1 tbl; ; print "1. что было в таблице до установки как временная"; while select tbl { print tbl.intField1, "-", tbl.strField2; } print "2. Делаем таблицу временной"; tbl.setTmp(); while select tbl { print tbl.intField1, "-", tbl.strField2; } tbl.intField1 = 123; tbl.strField2 = "123"; tbl.insert(); tbl.intField1 = 456; tbl.strField2 = "456"; tbl.insert(); print "3. Содержимое таблицы после ввода данных"; while select tbl { print tbl.intField1, "-", tbl.strField2; } pause; }

Получили следующий результат:

Я предварительно внес несколько строк в таблицу BLG_TestTable1, которые и были отображены вначале.

Как только мы пометили таблицу как временную с помощью метода setTmp, то система переключила нашу табличную переменную на файловый буфер и более не работаем с таблицей базы данных. Метод setTmp оказывает такой эффект только на конкретную табличную переменную, все остальные табличные переменные, ссылающиеся на BLG_TestTable1 продолжат работать с базой данных.

Во втором разделе видно, что система не вывела никаких данных, так как временный буфер пока пуст.

В третьем разделе мы добавляем новые строки во временную таблицу (файл), эти строки доступны текущему пользователю, они не сохраняются в базе данных в таблице BLG_TestTable1.

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

Последнее. Если в процессе работы вам потребовалась временная таблица и речь идет о данных из стандартных таблиц Аксапты, то прежде чем создавать новую временную таблицу посмотрите, существуют ли уже готовые. Готовые временные таблицы ищите по имени — оно начинается на «Tmp».

Итог

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