Упрощаем блоггинг. Картинки. (и программирование заодно) часть I

picИтак, давайте попрограммируем… Те, кто не хотят следить за процессом смогут в конце цикла уроков скачать готовое решение. Давайте посмотрим как легко облегчить себе жизнь не прилагая массу усилий и многих лет обучения.

Сценарий: Я хочу иметь папку, в которую буду складывать картинки. Если в папке появляется картинка, сразу автоматически создаётся её предпросмотр (thumbnail). В clipboard закидывается ссылка на готовую картинку. Т.е. мы закидываем картинку в папку и потом делаем Paste на странице нового поста (или в semagic)

Давайте так сделаем.

Для начала установим то, что нам понадобится. Во-первых, это замечательнейшая, бесплатная штука autoit. Это бесплатная среда программирования, которая позволяет написать программу, используя очень простой синтаксис (visual basic подобный) и получить exe файл крохотных размеров. Отличается просто великолепным хелпом и наличием любых, уже готовых решений почти под любой случай.

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

Лирическое отступление. Можно пропустить
Маленькое отступление о программировании. Я не буду упоминать сотни технологий и десятки тысяч человеко часов что бы их изучить. Фактически главное, что бы понять ваше это или нет, определить можете ли вы писать программы или нет – это попробовать.

Что надо знать начиная программировать? Единственный тезис: “Компьютер – это не человек”. Загадочно звучит :) А я к тому, что компьютер не может догадаться что вы хотите. Он не может сам определить вроде бы очевидные вещи. Его надо учить. Или указывать ему что сделать по всем поводам.

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

Компьютер должен знать что такое кружка, вода, чай и их взаимодействие. Т.е. должен уметь взять воду, положить чай и т.п.

Что же такое программирование? Мы делаем объект кружка. кружка обладает свойствами и методами. Кружка имеет цвет, ширину, высоту, толщину. Кружку надо уметь ставить. Вода имеет свойства количества и температуры. Воду можно наливать, выливать, кипятить. Чай имеет свойство количества. Его надо уметь всыпать.

Имея написанное выше – мы можем оперировать объектами- программировать.

Так же и в нашей задаче. Есть папка. Мы можем смотреть что в ней есть. Есть файл – мы можем его переименовать, запустить, скопировать, удалить и так далее.

Начнём думать по шагам над задачей. Очень важно для начинающего “проговорить” то, что он хочет и подумать всё ли из этого может компьютер. Например, мы можем только взглянув на папку сказать, что в папке есть две картинки и фильм. Компьютеру же надо рассказать что сделать. Т.е. посмотреть каждый файл в директории, проверить последние три буквы из его названия и, по расширению, определить что это за файл. Например, если это “jpg, png, bmp, gif, …” – это, скорее всего, картинка. Если это “mkv, avi, mpg, mp4, …” – это, скорее всего, видео.

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

Вот теперь компьютер точно знает что ему надо делать. Что приходит с опытом? Например самая первая строка “обнулить значения счётчиков”. Ведь если бы её не было – неизвестно что там творится у компьютера в мозгах. Он вполне может начать считать не с нуля, а с любой цифры. Мы должно точно указывать, что нам надо. Он не может догадаться, что нам надо считать с нуля. Это кажется нам логичным, но ответьте на простой вопрос: “А почему не с 9000”? Почему?

Итак, разложим исходную задачу на шажки:
1) посмотреть появились ли в папке какие-то новый файлы
2) если нет – то ничего не делать
3) если да – начать работу:
4) взять файл и проверить картинка ли это сравнивая с известными расширениями (jpg, png, gif, bmp)
5) создать картинку предпросмотра (thumbnail)
6) сформировать ссылку и закинуть её в clipboard
7) переместить файл в какую-то другую папку (например ARCHIVE)
8) повторить для каждого нового файла в директории.

Какие мысли возникают? Например, зачем пункт 7? А теперь представьте, что мы добавили картинку в папку, а там уже что-то есть? Компьютер добросовестно опять просмотрит все файлы и для каждого из них выполнит все действия. А нам надо только с новым файлм. Как проще всего указать, что файл “новый”? Да просто добиться того, что бы в папке были ТОЛЬКО новые, необработанные файлы. Поэтому после обработки просто убираем обработанный файл в другое место. Таким образом мы убиваем еще одного зайца: если произошла ошибка и какой-то файл не обработан – он обработается еще раз как только в эту папку будет закинут какой-то другой, новый файл.

Теперь начинаем смотреть на нашу “программу” и начинаем думать что НЕ умеет делать компьютер сам? Вернее не компьютер, а та среда программирования, где мы будем писать программу (autoit)
1,2,3 пункт. Autoit умеет дать список файлов в директории
4 пункт. Autoit умеет отделить 3 буквы из названия и сравнить из с другими 3-мя буквами
5 пункт. Autoit НЕ умеет создавать предпросмотры. Надо либо писать программу создания предпросмотра на нём, либо использовать уже написанные кем-то куски программы (функцию), написанную кем-то другим, либо использовать какие-то другие программки, которые умеют это делать, а из Autoit их просто вызывать
6 пункт. Autoit умеет работать с Clipboard
7 пункт. Autoit умеет переместить файл
8 пункт. Autoit умеет повторять действия много раз

У нас есть единственное тонкое место – это пункт 5. Для его решения я буду использовать свою программу, которая как раз для этого предназначена. vdushc2. (Будет приложена в конце цикла)

Ну и давайте посмотрим как это выглядит при написании программы.

Мы не знаем вышенаписанное (что умеет Autoit) и попытаемся это выяснить сами

Продолжение следует. Пожелания, замечания и т.п. приветствуются

  • Андрей

    Спасибо! Интересно написано. Простым языком, на примерах. То что надо.

    • Скоро продолжение :) Постараюсь не усложнить

  • Хорошо излагаете. Афтар, пешы исчо.

  • ele_x

          Ждем продолжения :)
       Еще вскочил такой вопрос близкий к теме : Импорт в (XML), трансляция либо кросспостинг на другую платформу. Что то нагуглил, в основном тема была актуальна похоже года четыре назад. Расскажи чем доводилось пользоваться если возможно. Спасибо.

    • Распиши подробнее с каой платформы на какую собираешься кросспостить – методы очень разные :)

      • ele_x

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

  • К сожалению, с li.ru опыт имею небольшой, поэтому навскидку можно сделать наоборот – писать в li.ru, а он умеет кросспостить в жж. 

    можно сделать кросспостинги так: 
    – завести свой блог, скажем на wordpress движке – он, насколько я помню, умеет кросспостить в li.ru. И куда угодно еще. Минусы – платное решение. Придётся купить хостинг (2-10 баксов в месяц) и имя – ~10 баксов в год.
    – попробовать через другие блоги. Например много куда умеет кросспостить http://www.bestpersons.ru/. Но писать придётся там. А он раскросспостит много куда.
    – можно формировать правильный feed (rss) через feedburner и пытаться поискать сервисы кросспостинга rss на li.ru

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

    Из этого блога вообще не делаю кросспост, что бы не терять аудиторию и авторство. Через неделю записи показываются в фидах. 

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

    • ele_x

      Чего тут извиняться . Я даже не удосужился к тому моменту вот энто прочитать 
      http://vdasus.com/2011/01/26/kak-sdelat-kopiyu-svoego-zhzh-na-vsyakij-sluchaj/

      • Это отличный вариант, который работает. Но есть один минус – в жж что-то наменяли и уже несколько месяцев не работает импорт комментариев. В смысле сам журнал – отлично и без проблем, но комментарии не имепортирует… А так- да, я как-то смотрел именно с точки хрения кросспостинга, а не экспорта :)

        • ele_x

          Попробовал. ljArchive Error: System.Xml.XmlException: This is an unexpected token. The expected token is ‘TAGEND’. Line 81, position 5.
             at System.Xml.Schema.DtdParser.CheckTagend(Int32 token)
             at System.Xml.Schema.DtdParser.ParseEntity()
             at System.Xml.Schema.DtdParser.ParseDtdContent()
             at System.Xml.Schema.DtdParser.ParseDocTypeDecl()
             at System.Xml.Schema.DtdParser.Parse()
             at System.Xml.XmlTextReader.ParseDtd(XmlScanner scanner)
             at System.Xml.XmlTextReader.ParseTag()
             at System.Xml.XmlTextReader.ParseRoot()
             at System.Xml.XmlTextReader.Read()
             at EF.ljArchive.Engine.Sync.ExportCommentsMeta(OptionsRow or, ILJServer iLJ, SessionGenerateResponse sgr, Int32& serverMaxID, UserMapCollection umc)
             at EF.ljArchive.Engine.Sync.ThreadStart()

          • выключи синхронизацию комментариев (3-я картинка из моего поста – надо убрать птичку) и всё заработает без ошибок. Я ежедневно синхронизирую, так что вариант рабочий

            • ele_x

                 Пока говорит сервер занят обождите часочек. Поясню почему заинтересовался Li.ru : один раз захотелось перетащить понравившийся чужой текст из Li.ru в ЖЖ. Обнаружил что такие длинные посты в ЖЖ разместить не удается. Пришлось разделить его на три части.  Может не так что то делал просто?

              • в жж есть ограничение на длину поста, да

  • Pingback: Упрощаем блоггинг. Картинки. (и программирование заодно) часть II | vdasus blog()