Как стать автором
Обновить

Комментарии 40

Код в формах.

С одной стороны — хорошая программа, неплохая практика и прочая.
С другой — обычная лапша в формах, не то, что радует глаз =)
Полностью согласен с «лапшей», ну не солидно это, делится таким кодом (закомментированный отладочный код и стиль уже о многом говорят). Было бы неплохо, если бы первый абзац был вступительный, в стиле «Здравствуйте, меня зовут Алекс и я программист. Мне 10 лет ...». ;)

Статья, кстате, неплохо написана (идея, последовательность, подача материала, совместимость, ...). Единственная претензия — это winforms в 2016. Серьезно? Подобное было актуально лет 10+ тому. Локализация эта через ж… сателиты… аж коробит, извините.
Я согласен что имеет место «лапша», писалось на скорою руку. Да и честно скажу — опыта в c# конкретно не очень много, я больше по веб части. По поводу закомментированого отладочного кода — а что здесь не так? Я часто так делаю и в рабочих проектах, более того ещё и подписываю иногда, разве у вас никогда не бывало такого что надо вернуться к отладке? А писать заново код отладки тоже не всегда хочется. Ладно если там одна строчка, а бывают и более сложные конструкции.

это winforms в 2016. Серьезно?

А что не так? Писал статью просто чтобы поделиться опытом. К тому же самому вон пришлось собирать инфу по крупицам с гугла. Более того пробую делать что-то новое, написать статью, чего ранее не делал. Разве это плохо?

Локализация эта через ж… сателиты… аж коробит, извините.

Видимо я чего-то не понимаю в этой формулировке, о чём именно речь? Если о качестве перевода программы, то да, мой английский не идеален.

«Здравствуйте, меня зовут Алекс и я программист. Мне 10 лет ...». ;)

Вы почти точно описали вступительную фразу в моём портфолио (правда мне 24), ну уж извиняйте, я пока не профи как вы.
По поводу отладочного кода, в .Net Framework есть неймспейс System.Diagnostics. Там можно найти и Debug, и Trace для логирования соответствующей информации. На их методах навешан атрибут ConditionalAttribute для «включения»/«отключения» методов по дефайну. Собственно, поэтому методы класса Debug «включаются» при дефайне DEBUG, а Trace — при TRACE. И не нужно никаких комментов, голимые директивы, которые можно один раз установить в настройках сборки приложения. Не знаю, хороший ли это способ (сам потихоньку изучаю шарпы:), но, вроде бы, работает, и отпадает проблема каждый раз (раз)комментировать куски кода.
Код для статьи можно было бы и почистить. Вы же орфографию и синтаксис текста проверяете? А код, значит, можно просто так «сырой вываливать»?

Я не понимаю принципа «писалось на скорую руку». Если с технологией опоздали, куда со статьей спешить-то? И да, сейчас что-то ниже WPF серьезно снижает полезность материала.

Про возраст я не совсем удачно выразился (потому и минусы наверное), имелось в виду вступление, в котором вы как бы заранее извинитесь за свой уровень что ли. Представьте, вы выходите на сцену перед разношерстной аудиторией (включая и профи). Если вам, к примеру, 10 лет, то вы автоматически получаете перк «Отключить сарказм 40+ летних профи». Вы же наоборот, упомянули, что ранее писали уже программы (сколько лет? 10? 20?), это как минимум перк «Расценивать как равного и ожидать равного»… а тут winforms /разочарование /боль…

Не расценивайте мой комментарий как укор или ненависть там, это просто немного критики (с которой видимо не согласны, так что скорее меняться нужно мне, а не вам). Мне статья в принципе понравилась. ;)
Без всякой подколки хочу поинтересоваться насчёт локализации. Наверное, я чего-то не знаю, но чем плоха локализация через ресурсные файлы RESX, описанная в статье, и какие есть альтернативы? К тому же, автор не упоминает сборки-сателлиты, а, насколько я знаю, можно скомпилированные RESX внедрять в основную сборку. (Сразу скажу: слабо разбираюсь в локализации десктопных приложений, поэтому и спрашиваю.)
Чем плох словарь «каждый раз при обращении» со string ключами (в которых банально можно сделать ошибку) или необходимость перезагружать форму при смене языка? За 10+ лет работы с winforms у меня было несколько версий более удобных велосипедов: генераций ключей в виде типа с константами (для исключения run-time ошибок из-за опечаток в ключе), перевод форм рефлексией с авто-генерерируемым списком ключей (по именам контролов, что-то вроде FormLogin.panelLeft.labelLogin.Text=«Login»), генерацией текстовых файлов для локализации «на лету» и т.д.

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

Раскрытие этой темы тянет на полноценную статью. Для winforms пожалуй уже поздно что-то выкладывать, впрочем у wpf аналогичная проблема тоже имеется, плюс в xaml локализацию через кастомные xaml markup extension удобно делать, уверен просто, что подобное уже написано.

Э… а разве дизайнер resx не генерирует класс со свойствами? Где там можно ошибиться-то?


Что же до xaml — то весь xaml — это большой "словарь со string ключами". Ругать resx и приводить в пример xaml — это как-то странно...

Проверка на Win98 и Win2000
Это имело какой-то практический смысл, или сделано просто из любопытства? Про поддержку ХР понимаю, таких ещё относительно много, W2k ещё более-менее понимаю, знаю несколько крупных организаций с серверами на этой ОС, работающими до сих пор, но W9x всё же слишком глубокая археология, на мой взгляд.
По большей части всё же любопытство, хотя я тоже знаю людей которые имеют 2000 винду на древних офисных пк. Да и раз работает — почему бы и нет?

Ну а вин98 решил проверить т.к. там была поддержка .NET 2.0 (был несколько удивлён этому на самом деле). Но да, это археология уже))
Бросается в глаза слово «Screenshoot».
С одной стороны — это как бы ошибка в написании слова «Screenshot», с другой — интересное обыгрывание фразы «Screen Shoot». Возможно…

Однако в Readme.MD у вас там это слово неправильно написано не только в названии (где уместно написать такой «брэнд»), но и в тексте… Думаю, стоит исправить.

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

Приятно, что инфа из моего старого ответа на stackoverflow оказалась полезной, и об этом написали :)

Спасибо за статью. Можно поинтересоваться, сколько времени заняла разработка? От появления идеи и начала работы над ней до выкладывания на ГитХаб?
Смотрите ответ ниже, случайно не там ответить нажал)
Если говорить о появлении идеи — то очень давно, но всё никак руки не доходили. А со временем частая необходимость быстро загружать скриншоты всё же сподвигла написать программу. Судя по файлам проекта — создал я его 16 ноября (конечно этого года), но активно разрабатывал программу по сути на выходных и уже во вторник (22го) опубликовал (как видно на github). Итого можно сказать что сделал за 2-3 дня с перерывами.

Я в своей программе сделал возможность выбрать "рамочкой" участок экрана. Довольно удобно получилось, редактировать скришноты приходится не чаще раза в месяц.

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

Держите реализацию: https://github.com/mayorovp/tool-printscreen/blob/master/SelectionFrame.cs


но чесно говоря мне и хватает паинта где можно это выделить и обрезать

В том-то и фишка, что я теперь открываю Paint раз в месяц, хотя скриншоты для JIRA делаю иногда раз 20 в день.

Да спасибо за ссылку, как-нибудь разберусь на досуге, когда будет больше времени. А пока зарелизил мелкие фиксы и правки.
Спасибо ещё раз за помощь, наконец дошли руки разобраться в этом вопросе, зарелизил новую версию вместе с некоторыми плюшками)
Зачем изобретать велосипед если уже давным давно существует именна та программа что и требуется здесь написать? Image Uploader.

https://ru.wikipedia.org/wiki/Image_Uploader
А где в этой программе загрузка изображения по http на свой сервер? задача была не в загрузке по ftp. К тому же не знал про данную программу, и дописать на C++ было бы куда сложнее для меня чем своё решение сделать, которое знаю от и до. А так конечно от части изобретения велосипеда, согласен, но зато и опыт получил дополнительный)
Каждый программист должен написать свою скриштотилку.
по работе нужно иногда делать снимок экрана на удаленных машинах в домене
пока использую связку psexec и nircmd
Добавить автосохранение после нажания PrintScreen Alt-PrintScreen как опцию.

С чем связан размер программы полмегабайта?
Да тоже уже об этом подумал, сделаю в новой версии.

По поводу размера — дело в иконке, весит она 361 кб, остальное реальный вес программы.
Greenfish Icon Editor Pro редактирует и сохраняет иконки. Для Висты и выше сохраняет в сжатом виде (PNG), можно настроить количество цветов (32 бита, 24 бита, 256 цветов).
О, спасибо, «ужало» картинку до 48кб при всех нужных размерах. Пожалуй перезалью архив с релизом с новой иконкой.
Может ли программа захватывать произвольную область экрана, а не только активное окно или весь экран?
К сожалению, не нашел этой информации в статье и на вики проекта.
На данный момент нет, но мне выше уже прислали пример реализации, обязательно чуть позже реализую т.к. это действительно удобней, чем захватывать весь экран и редактировать обрезая ненужное (хотя это тоже не сложно).
Возможно ли сделать захват через видеодрайвер? Я имею ввиду захват из игр и/или с оверлейных окон? Понимаю что хочу слишком много, но было бы неплохо.
Мне данный функционал не нужен, потому не хочу тратить лишнее время на изучение сего вопроса. Но может както…
Можно посмотреть например те же VNC-серверы. Они частенько предлагают установить драйвер в винде, т.к. он получает абсолютно все данные об отрисовке.
Вложитесь лучше в доработку ShareX — открытой бесплатной легковесной софтины для создания скринов, записи видео, отправки на пастебин кусков кода, с весьма гибкими настройками. Написана так же на C#. У неё из явных минусов только один — мне очень не хватает её в Linux =)
Да программа довольно интересная, но…
1. Я очень сомневаюсь что разработчики бы приняли бы даже готовый код через pull запрос, с реализацией загрузки тем вариантом что я делал на свой сервер.
2. Проект сделан под .NET Framerork 4.0, что означает необходимость его установки на vista/7, а у меня задача всёже была обеспечить наибольшую совместимость без установки доп софта.
3. .NET Framework 4.0 весит значительно больше 2.0, что тоже имеет значение в некоторых случаях.
4. Да и вообще, написать своё решение — получение ценного опыта программирования.

По поводу linux — а разве нету подобных альтернатив там? Ведь насколько я знаю там реализовать такое должно быть намного легче с учётом разнообразия доступных языков и пакетов из коробки. Сам имею второй системой mint kde, правда захватывать скриншоты не пробовал т.к. не было такой необходимости.
1. Вам не пришлось бы писать код для реализации аплоада POST'ом, он там есть. Достаточно настроить (благо примеров там шквал). И сокращатели урлов тоже какие-то были, хотя мне они только мешают — никогда не видишь что ты загружаешь до того как трафик побежал. Можно на худой конец некоторый специфичный функционал не пуллить в общий репо, а затягивать в свой форк.
2. Проект свободно работает на XP, ниже не пробовал, а и не нужно. win98/2k умерли задолго до XP, а она уже тоже протухнуть успела. И писать под них особо нет смысла ещё по той причине что держать такую машину будет сплошная головная боль, вы туда нормального софта не поставите актуальных версий. Хром например даже на XP 32bit не станет. Хотите покрыть «максимум платформ» — пишите на Qt или PyQt (как например и сделали авторы Joxi) =)
3. dialup в 28800 и gprs-терминалы типа siement mt35 у которого потолок в 19200бод — это не для загрузки инсталлов. Хотя если жать в 7zip, передавать только diff и в качестве среды передачи использовать binkd/t-mail/radius… Всё равно сомнительное удовольствие. Или вы перегибаете в плане размеров или ищите другие способы деплоя. Когда у меня была задача раскидывать обновления и софт в удалённые филиалы с такой связью, оказалось что проще слать всё флешками. Оператор вставлял флешку в ПК, мой софт определял что появились файлы для обновлений и разворачивал их, затем выводил окно оператору, что флешку можно выдернуть и отправить обратно.
4. Опыт — это святое =) Но потом бывает обидно что наработки умирают (ох и много одноразовых костылей так померло). А если для работы вне специфического контекста, то ситуацию усугубляют перебои в работе из-за косяков в неоттестированном софте. С другой стороны, опыт опыт командной разработки намного дороже.

Что касается Linux (у меня кстати тоже Mint KDE), с лёту нашёл какой-то shutter, но он и рядом не валялся с ShareX.
1. Да я понимаю что можно взять открытую программу и сделать свой форк со своими доработками и так использовать. Но своё — всегда больше радует)))
2. Речь не о работе на XP, а необходимости установки фреймворка на vista/7, когда можно обойтись без такой необходимости. Ведь кула лучше когда программа работает со старта, а не требует чтото ещё скачать установить на что нужно тоже время, более того администраторские права.
3. Я не про скорость интерена говорил, а занятое место, на рабочих машинах постоянно встречаю винты по 10-40 гб с вин хп, и там обычно место всё занято, а тут ещё и ставить фреймворк на пол гига, нет спасибо… (временные файлы для распаковки + сама установка) а вторая версия весит аж целых 20 мб (установщик) и около 100 мб после (точно не помню если честно).
4. Да знаю, наработки частенько умирают, но если всё же используется в определённом кругу то я бы не сказал что возникают такие проблемы. Более того не знаю как у вас, но использование стороннего софта может давать даже больше сбоев чем своё решение (я щас не говорю конкретно о захвате скриншотов, а вообще). Да и преимущество своего решение очевидно — если даже сбой, легко найти причину и исправить зная свой код, чего нельзя сказать про посторонние решения на изучение которых может уйти больше времени.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории