Pull to refresh
37
0

Сертифицированный инструктор по прокрастинации

Send message

Наконец у меня нашлись время и желание реализовать такие же часы, как в статье — почти 7 лет прошло!


Только с ходу на ATtiny13A код не заработал. Проект компилировался (AVR/GNU C Compiler 5.4.0), двоичный файл через AVRDUDE записывался, но дальше инициализации дело не шло.


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


avr-libc: Data in Program Space


Для работы с такими данными нужно использовать функции pgm_*. Заменил следующую строчку:


next_tick_no += intervals[interval_no];

на:


next_tick_no += pgm_read_byte(&intervals[interval_no]);

а также включил в проект заголовочный файл, содержащий объявление макрокоманды PROGMEM и определения функций pgm_*:


#include <avr/pgmspace.h>

и всё заработало, как часы! (Пардон за каламбур.)


Кроме того прочитал внимательно техническую спецификацию ИС, и удалось ещё больше сократить энергопотребление.


Если верить моему 250-рублёвому ЦММу, то за счёт отключения аналогового компаратора потребление тока микросхемой упало примерно на 53 микроампера. Отключение модуля АЦП однако ничего, кажется, не дало, но я этот код всё равно оставил:


void configLowPower() {
    /* Power down the Analog Comparator.
    From 7.1.1 Idle Mode:
        If wake-up from the Analog Comparator interrupt is not required,
        the Analog Comparator can be powered down by setting the ACD bit 
        in the Analog Comparator Control and Status Register – ACSR.
         This will reduce power consumption in Idle mode. If the
         ADC is enabled, a conversion starts automatically when this 
         mode is entered.

    From 13.2.2 ACSR– Analog Comparator Control and Status Register,
    Bit 7 – ACD: Analog Comparator Disable:
        When this bit is written logic one, the power to the Analog 
        Comparator is switched off. This bit can be set at any time 
        to turn off the Analog Comparator. This will reduce power
        consumption in Active and Idle mode. When changing the ACD bit, 
        the Analog Comparator Interrupt must be disabled by clearing
        the ACIE bit in ACSR. Otherwise an interrupt can occur when 
        the bit is changed.
      */
    ACSR &= ~_BV(ACIE);
    ACSR |= _BV(ACD);

    /* 
    From 7.3 Power Reduction Register:
        Modules can be shut down in Idle and Active modes,
        significantly helping to reduce the overall
        power consumption.

    See also:
        19.1 Supply Current of I/O Modules, for examples.
    */
    ADCSRA &= ~_BV(ADEN);   // The ADC must be disabled before shut down
    PRR |= _BV(PRADC);      // Shut down ADC;
}

Функцию нужно вызвать однократно из главной процедуры во время инициализации.


Это что касалось программной части. Теперь насчёт аппаратной.


Для механизма на моих часах оказалось достаточно импульса длительностью 78 миллисекунд. Но посмотрим, как они себя поведут по мере дальнейшей разрядки батарейки — уже неделю работают без останова.


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


Источники — используйте Wayback Machine, если статей по ссылкам в будущем не окажется:


  1. Lowest Leakage capacitor type — edaboard.com.


  2. Design femtoampere circuits with low leakage — Part 2: Component selection — EDN Network.


  3. Capacitor Characteristics and Capacitor Specifications — ElectronicsTutorials.


  4. Capacitor leakage and design for low energy battery powered devices — Electrical Engineering @ Stack Exchange.


  5. Dielectric absorption — Wikipedia.



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


Так или иначе танталовый конденсатор в моих краях — унобтаний. Поставил пока керамический емкостью 0,1 µF. Похоже, это самый ходовой вариант в роли Decoupling (или Bypass) конденсатора — как по-русски называется конденсатор в этой роли, не знаю. Позже заменю его на полипропиленовый.


В любом случае ОП написал полезную статью, и я многое узнал в ходе изучения проекта.


Ещё один момент отмечу для новичков — к коим я и себя, разумеется, причисляю. Когда вы выбираете внешний тактовый сигнал для работы ИС, то для программирования вам понадобится источник сигнала частотой выше 32 768 Гц, иначе большинство программаторов просто не смогут «говорить» с чипом на такой низкой скорости.


Я для этой цели на макетную плату добавил ещё пару ATtiny13A, которые генерируют сигнал прямоугольной формы через восьмибитный таймер/счётчик с ШИМ: один — ~32 кГц, второй — несколько мГц. Но вы можете использовать любую другую ИС с ШИМ — не обязательно AVR. Например, такой чип всего за два рубля — EEVblog #1132 — The 3 Cent Microcontroller!.


Код самого простого генератора сигнала для ATtiny13A, можете использовать его в своих проектах:


#include <avr/io.h>
#include <avr/sleep.h>

void slowClock() {
    TCNT0 = 0;  
    OCR0A = 17;
    TCCR0A = _BV(COM0A0) | _BV(WGM01) | _BV(WGM00);
    TCCR0B |= _BV(WGM02);
    TCCR0B |= _BV(CS01);    // 9.6 MHz / 8 = 1.2 MHz
}

void fastClock() { /* Unprogram the CKDIV8 fuse for full speed */
    TCNT0 = 0;
    OCR0A = 0;
    TCCR0A = _BV(COM0A0) | _BV(WGM01) | _BV(WGM00);
    TCCR0B |= _BV(WGM02);
    TCCR0B |= _BV(CS00);
}

int main(void) {
    /*  The Data Direction Register bit for the OC0x pin (DDR_OC0x) 
    must be set as output before the OC0x value is visible on the pin.
    */
    DDRB = _BV(PB0);

    //slowClock();
    fastClock();

    set_sleep_mode(SLEEP_MODE_IDLE);
    sleep_enable();

    sleep_mode();
}

Просто подключите вывод OC0A (PB0 на ATtiny13A) ко вводу CLKI на вашем микроконтроллере и сможете программировать его любым программатором.


Надеюсь, кому-то эта информация пригодится.

переиспользование типов

Мне кажется, это называют «повторным использованием».
Речь не о том, плохая или хорошая SQLite. Речь, очевидно, о том, что этот инструмент подходит для встраиваемых систем, в которых отсутствует конкурентность, но для динамических веб-сайтов SQLite явно не подойдёт по большому ряду причин. Для встраиваемых систем, для небольших БД на клиентской стороне (в браузере, например) — отличное, гибкое, нетребовательное к ресурсам системы решение. Для динамических сайтов размером больше дюжины страниц и с большим количеством запросов SQLite не подходит хотя бы в силу отсутствия масштабируемости.
Перед тем как привести несколько доводов против SQLite для динамических сайтов почитал про механизм резервного копирования на официальном сайте.
Whether or not the backup process is restarted as a result of writes to the source database mid-backup, the user can be sure that when the backup operation is completed the backup database contains a consistent and up-to-date snapshot of the original. However:

  • Writes to an in-memory source database, or writes to a file-based source database by an external process or thread using a database connection other than pDb are significantly more expensive than writes made to a file-based source database using pDb (as the entire backup operation must be restarted in the former two cases).
  • If the backup process is restarted frequently enough it may never run to completion and the backupDb() function may never return.

Т. е. чтобы не допустить ситуации, когда резервное копирование стартует снова и снова (потому что внешний процесс что-то захотел записать в БД) или вовсе не может завершиться, наше приложение не должно использовать больше одного соединения с базой SQLite. Т. о. если клиентов много, операция резервного копирования может заметно ухудшить производительность сайта или создать потенциальную угрозу выполнения атаки отказа в обслуживании даже при небольшом количестве одновременных запросов.

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

А ещё в SQLite, похоже, нельзя делать инкрементальное резервное копирование — копировать только изменения, а не базу данных целиком.

Кроме того было бы интересно узнать, как топикстартер реализовал бы защиту данных, например. В MySQL, PostgreSQL, Oracle Database, SQL Server такое сделать несложно имеющимися средствами, и это работает надёжно.
да такой где динамического контента нет, изменения в базу делает только админ

Верный кандидат на реазиацию с использованием генератора статических сайтов (Jekyll, Sphynx, metalsmith и т. д.) — в БД вообще отпадает необходимость.
При всей «лёгкости вхождения» и «удобстве администрирования» SQLite не&nbspподходит для большинства сайтов размером больше дюжины-другой страниц.

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

SQLite при каждом запросе к БД будет запускать новый процесс и читать одни и те же данные в память, — крайне накладно с точки зрения расходования ресурсов ЦП, ОЗУ, дисковой подсистемы — и со временем (по мере роста объёма данных в БД) вам потребуется либо вертикальное масштабирование произвести (покупка мощного ЦП, SSD и т. д.), влекущее дополнительные траты, либо задействовать кэширование (вроде memcached), что сильно усложнит приложение.

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

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

А вообще вы ведь не настраиваете для своего сайта новую среду выполнения каждый день. Резервирование всех популярных серверов реляционных баз данных сегодня выполняется парой строчек в кроне.
Жесть.
А что, 1С не поддерживает ActiveDirectory? Можно было обмениваться данными напрямую через LDAP минуя все эти файлы, сценарии оболочки.
Возможно, с тех пор, когда вы его использовали последний раз, что-то изменилось. Посмотрим.

В SES мне нравится, что его можно интегрировать с IAM — чрезвычайно удобная штука. Позволяет иметь одну корневую учётку в AWS и несколько вторичных для пользователей или сервисов, которым можно через созданную политику разрешить отправку почты с одного или нескольких конкретных доменов — очень не хватало в Mandrill. Пример политики:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ses:SendRawEmail",
            "Resource": [
              "arn:aws:ses:eu-west-1:555555555555:identity/example.com",
              "arn:aws:ses:eu-west-1:555555555555:identity/example.org",
              "arn:aws:ses:us-west-2:555555555555:identity/*"
            ]
        }
    ]
}
Спасибо за информацию. Интегрирую, возможно, с MailGun сайт для надёжности — на случай если SES будет лежать в текущем регионе.
pdd и Почта Mail.ru не позволят вам отправлять транзакционные и маркетинговые письма в больших объёмах. Меня pdd блокировали едва число писем за несколько минут достигало тысячи.

Свой почтовый сервер — не вариант при большом количестве писем.

Вам нужно умудриться, чтобы IP-адрес сервера не попал в чёрные списки (на этот случай вы захотели бы иметь несколько IP в разных AS и, скорее всего, от разных ISP), вам нужно время на его обслуживание, обновление.

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

Ещё вам нужно где-то хостить ваши почтовые серверы, это тоже деньги.

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

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

В этой ветке напротив отмечают, что у SES высокая степень доставленных писем (их сайт отсылает ~40k в день, а не в месяц, как у вас), и служба поддержки SES оперативно разрешает возникающие проблемы.

Доставка писем через Mandrill могла занимать от нескольких секунд до часа-двух, особенно на Gmail, что дико раздражало. С серверов SES письма доходят молниеносно.
TL;DR: Mandrill захотел поднять цены в 4 раза. Они нашли способ через интеграцию с MailChimp.

Они просто отказались от разработки сервиса, который стал им не выгоден, и объяснили причины предстоящего изменения (раздел Fork in the road). Нет смысла задирать цену на свой сервис в присутствие дюжины других сервисов по сопоставимой цене и аналогичной функциональности.
Более того они предложили альтернативу (SparkPost), причём видимо договорились о сохранении цены для переходящих из Mandrill пользователей.
Update (2/29/16): SparkPost has offered to take on any departing Mandrill users and to honor Mandrill’s pricing for those users.

Я тоже изучал варианты. SparkPost не подошёл по следующим причинам.
  1. Сервис не поддерживает замены (Substitutions, аналог merge vars в Mandrill) в шаблонах писем при отправке почты через SMTP.
  2. В заголовках конверта «светит» IP-адрес компьютера, с которого вы отправляете почту, что подвергает его угрозе DDoS-атаки:
    Received: from [192.0.2.42] by mandrillapp.com id ba23fe5b763c82f1a4b93af70b15; Thu, 31 Mar 2016 22:24:33 +0000

Последним пунктом, судя по всему, грешат почти все сервисы кроме Amazon SES, на который мы и переехали.
SendGrid не угодил тем, что использует сертификат от GoDaddy на своём сайте. (Как и habrahabr!).
Единственный минус SES, который я пока обнаружил — это отсутствие поддержки шаблонов писем. Впрочем его легко компенсировать, разработав обработку шаблонов в самом приложении. (Для Java сгодился Apache Velocity.)
Ну, так-то да, но ограничение ввела компания. Зачем мне покупать домашний модем-роутер — ещё одно устройство — только чтобы поиметь интернет на несколько устройств.
На фото — «йотомат»? :D

По сути.

  1. В нашей местности с переменным успехом работает интернет: часто с H+ снижается до E или вовсе не работает, приходится переводить устройство в автономный режим и обратно в активный.
  2. Нет вомзожности использовать мобильную точку доступа (тетеринг) без дополнительной платы.

А так на фоне остальных провайдеров вполне неплохо.
rage4

Из первых впечатлений (сравниваю с freedns.afraid.org).
  1. Приятная и удобная панель управления через HTTPS. (freedns.afraid.org не перенаправляет на порт 443, если вы зашли на сайт по порту 80.)
  2. Серверы в Европе, США, Азии. (У freedns.afraid.org все сереры на момент написания — в США.)
  3. В зависимости от местоположения клинта может преобразовывать DNS-имена в разные IP-адреса (GeoDNS).


У freedns.afraid.org есть Web Forward, в rage4 его не нашёл, но это не проблема — можно обойтись DNS, указав IP-адрес конечного сервера и настроив на последнем виртуальный хост.

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

А вообще, КМК, проще было бы называть это «двухэтапной проверкой подлинности» — Dropbox, например, так и делает.
фф28 убунта. а жаль

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

Information

Rating
Does not participate
Location
Россия
Registered
Activity