С тегами:

программирование

Любые посты за всё время, сначала свежие, с любым рейтингом
Найти посты
сбросить
загрузка...
-2
Unreal Engine Plugin 4.15
9 Комментариев в Лига Разработчиков Видеоигр  

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

20
Программирование Python по моим конспектам Лекция 10
28 Комментариев  

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.


Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.


Отвечая на 90% одинаковых вопросов-


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



Я это делаю, потому что мне это нравится.



Список прошлых лекций


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...



http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...



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

Но сначала мы договорим о исключении ошибок.

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

Вот такой пример

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Обратите внимание на то, что здесь были предвидены две разные ошибки. И на то что присутствует else, который, в прочем работает как обычный else. Т.е если мы не заходим в except, то попадаем в else.


И последнее- finally. Cюда мы попадаем в любом случае. Поэтому прошу обратить внимание на результат выполнения программы. Мы сначала попали в except, а потом в finally из за чего и вывелся пустой список.

Далее мы вводим корректное число, обходим оба try, попадаем в else и в finally, куда мы попадаем в любом случае.

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


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


А теперь смотрим как это работает. Вот есть у нас завод. Но что ему нужно, чтобы работать? Ну кроме работников и надсмотрщика с плетью.


Заводу нужен материал. Пусть это будут у нас доски. Так вот. Получаем такую картинку.


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


К примеру- Это функции type и id. В прошлой лекции, скорее всего было не понятно как это работает, но сейчас мы немного приблизимся к разгадке. Возьмем к примеру функцию type. Мы хотели узнать какой тип данных будет у числа 123. Для этого мы брали нашу функцию type, открывали скобочки после нее, выходило так type(), а внутри скобочек уже и писали наши аргументы (дрова для завода). Выходило так type(123). Другими словами, заводу с именем type, мы отправили материал в виде числа 123, и мы знаем что в ответ завод дает нам название типа данных. Либо это будет цело число, либо строка, либо число с запятой и тд.




Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

А сейчас, ну чтоб ваще понятно стало. Мы еще на одну функцию посмотрим. Называется она min()

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


К примеру min(10,5,3,6,9)

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Нам было не интересно, что происходит внутри функции. Но вот пришло время, когда нам стало интересно. Мы хотим строить свои "заводы"!

Начнем с того, что функции в питоне- это обьект.

итак, вот как выглядит наша функция в природной среде


def function_name(parametr):

инструкции


Состоит функция из головы (первая строка) и тела.

Голова начинается со слова def (от слова define) и названия функции. Имена функций должны состоять из маленьких букв, а слова разделяться символами подчеркивания — это необходимо, чтобы увеличить читабельность. Далее открываются скобочки и туда мы либо пишем параметры либо нет. О этом позже.


Тело функции зачастую начинается с так званного docstring, где мы пишем то, что наша функция делает.

""" функция умножает два числа и возвращает  результат"""

Далее- мы пишем сами инструкции, которые нам стоит исполнить. А вот потом очень важная штука, которая либо есть либо нет в функции. Называется она return

Но о всем по порядку.


Давайте напишем простую функцию.

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Первая строка-декларируем функцию print_something

вторая- мы пишем то, что функция делает

и  ниже мы саму функцию вызываем.



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

У нас была эта функция и аргументом в ней было 123. Т.е мы эти 123 куда то отправляем. Но куда?

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

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

В теле функции мы прописываем команду- вывести переменную name на экран. После чего действия функции заканчивается.


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

Поэтому мы передаем ей строку, на которую указывает переменная n.

Поэтому мы n делаем аргументом функции  вот так print_name (n)

Иначе говоря мы говорим. Отправь нашу n функции print_name ().

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

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

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

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Збс стрелочки?


Все аналогично, только теперь у нас два параметра и два аргумента.

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

Сейчас нас интересует мистическое return (возвращать).

В данном случае return возвращает строку 'мебель'. А вообще может возвращать что угодно. Даже кортежи, которые в себя включают другие обьекты.


Итак мы отправили два аргумента, получили ответ, и его вывели на экран.


Бывают случаи, когда нам необходимо сделать аргументы по "умолчанию". Вот пример.

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Я передаю только один аргумент, а второй уже прописан по умолчанию name='user'

Если этот аргумент ничего не примет, он по умолчанию примет значение 'user', а если же мы передадим ему что-либо, то он укажет на то, что мы ему передали.

И последнее на сегодня, но не последнее с функциями.


Выше я говорил о том, что не стоит путать местами аргументы функции.

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Теперь я меняю аргументы местами, и получаем каку.

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

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

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

В данном случае эти аргументы называются Именованными. Мы сразу прописали какому параметру какой аргумент принадлежит. И нам уже открыто похер в каком порядке они стоят.

я лично не пользуюсь этим способом, но если вам нравится- пользуйте на здоровье.


С помощью вышесказанного вы уже можете приступить к заданию с прошлой лекции.

Повторю его



Теперь мы немного внесем жизнь в наш космос.

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Первым пунктом меню было у нас- информация о планете.



Задача такова. При вводе номера планеты (из карты)



1. выводится случайносгенерированное из русского алфавита название планеты. Важно соблюдать чередование гласных и согласных.


2.Выводится количество населения планеты и расса, ее заселяющая (аналогично случайносгенерированное название)



3 Выводим Основные ресурсы, которые добывает планета и их количество. Это тоже происходит рандомно. Ресурсы- газ, электричество, еда.



4 Выводим отношение планеты к нам. Хорошее негативное или нейтральное


5 Выводим количество армии



6 выводим краткую историю планеты.



Все эти данные должны быть готовы быть изменены в любой момент.



Советую использовать двухмерный массив(последовательность). Сами выбирайте какой.

Программирование Python по моим конспектам Лекция 10 питон, программирование, лекция, длиннопост

Обратите внимание на то, что вам придется каждый раз обновлять экран после обновления информации. При обновлении экрана задекларированные планеты должны оставаться на своих местах.


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


На этом я все.

Показать полностью 18
160
Ответ на пост Excel в excel
13 Комментариев  

Послезавтра релиз, дел полно, сижу листаю Пикабу и натыкаюсь на такой пост

http://pikabu.ru/story/excel_v_excel_5008626


Посидел, пораскинул мозгами: "А надо ли мне это сейчас?" Решено - надо.

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

С перерывами и отвлечениями на работу чай за часик накидал консольную программку на C#. Работает в Office 2013.

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

Ответ на пост Excel в excel Excel, комунечегоделать, гифка, Тыжпрограммист, программирование

Перевод картинки в Excel занял примерно 50 минут. Держа в голове, что по работе много всего делать, я в это время основательно ничего не делал. Кажется кто-то скоро получит по шапке.

Код лежит тут:

https://github.com/bildeyko/ExcelPic

а exe файлик с картинками и полученным xlsx файлом в архиве тут:

https://github.com/bildeyko/ExcelPic/releases/tag/v1


Если кто-то захочет запустить, делается это так: в консоли, перейдя в директорию с  программой, ввести ExcelPic.exe 1.bmp

3
Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная.
3 Комментария  

Приветствую, уважаемые посетители сайта www.pikabu.ru. Продолжаю статью о том, как написать приёмник UART на ПЛИС. Напоминаю, что в прошлом посте я постарался вас познакомить с самыми основами этого протокола, и попытался максимально подробно описать алгоритм работы приёмника, который мы будет создавать в ПЛИС.

http://pikabu.ru/story/prostenkie_primeryi_na_plis_uart_chas...

В данном посте я покажу, как всё, что я рассказывал в прошлом посте, описать на языке VHDL, протестировать и разместить в ПЛИС. Поскольку ответа на мой вопрос о том, в каком виде вы хотели бы видеть, выкладываемый код, от вас не поступило – то я буду код выкладывать в виде изображений, как и планировал изначально. Других вариантов я не вижу. Нужны исходники – пишите. Мне лень заморачиваться с файловыми хранилищами.

Простенькие примеры на ПЛИС. UART. Часть 1. Заключительная. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Программирование, Длиннопост
Показать полностью 22
140
Мечта кодера
67 Комментариев в IT-юмор  
Мечта кодера гифка, программирование, фантастика, киберпанк, призрак в доспехах
Мечта кодера гифка, программирование, фантастика, киберпанк, призрак в доспехах
38
Программирование Python по моим конспектам Лекция 9.5
16 Комментариев  

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.



Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.


Отвечая на 90% одинаковых вопросов-


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


Я это делаю, потому что мне это нравится.


Список прошлых лекций



http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...

http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...



Здорова, выжившим после прошлого задания.

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


Долго сказки рассказывать не буду, так что сразу к делу.

Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост

И вот использует нашу программу Марья Степановна из бухгалтерии.

Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост

Ага..А кто виноват? А вот я и виноват! "защиту от дурака" никто не отменял.

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

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

Вот еще пример. В нашей жизни все збс в случае x/y . Ровно до  тех пор пока у не укажет на ноль, а начальник нам на дверь.

А теперь представте себе, что вы написали текстовый редактор, который крашится из за того, что вы завтыкали нормально алгоритм выдумать.Человек пишет огромный договор о продаже самолета на вашем редакторе... ииии... когда он уже почти готов сохранить- у вас ошибочка ZeroDivisionError или еще чо. А через неделю на вашу фирму сразу падает лавина судебных исков по уплате утраченной выгоды от комнатных бизнесменов. И все- вам пяяясд@

Однако бояться и плакать не стоит. О вас подумали бородатые люди в узких штанах.

Подобные ошибки можно избежать. Встречаем героя программы

try...except

Данный товарищ работает как боженька, который своими ручками вам соломку стилет на то место, куда вы скорее всего упадете. Не верите? Дык я докажу!

Сначала мы разберемся, что это за зверь такой.

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

Утрирую конечно.

В своей полной красе выглядит все дело так


try:

блок команд

except: (тут еще может стоять тип ошибки. Но не обязательно):

что делать в случае ошибки в блоке try


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

Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост

Это же лучше, чем получать кучу красных матюков на мониторе?

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

Один try в свою очередь может содержать несколько except, дабы отреагировать на разные типы ошибок. В таком случае после except необходимо указать тип ожидаемой ошибки.

Вот вам пример, когда нам нужно принять целое число.

Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост
Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост

В данном случае я указал тип ожидаемой ошибки ValueError. Если не понимаете откуда я ее взял-вторая картинка предпоследняя строка.

Еще есть такой зверь как try-finall, но с ним погодим. Как обещал- по теории был краток.


А теперь начнем с легких заданий на разминку.


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

Если возраст меньше 18, но больше 11 лет- выводится цена в 3 рубля. До 11 лет-бесплатно. Свыше 18-5 рублей.


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


http://ru.wikihow.com/%D0%B2%D1%8B%D1%81%D1%87%D0%B8%D1%82%D...


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

Игра загадывает число от 0 до 100. Ваша задача угадать это число. Если вы загадали слишком большое число- программа должна подсказать о том, что вы ввели число больше чем она загадала, и наоборот. Если угадали- программа выводит поздравления


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

Вводимые данные -

сумма кредита

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

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


Программа высчитывает для каждого года Проценты, фактическая сумма взноса и остаток.


Пример


Подсчет кредита

Сумма кредита в долларах 1000

Проценты в год 6

Годичный возврат 200


2017 Проценты 60 долларов, выплата 140 долларов, остаток 860 долларов

2018 Проценты 51 долларов, выплата 149 долларов, остаток 711 долларов

2019 Проценты 42 долларов, выплата 158 долларов, остаток 553 долларов

2020 Проценты 33 долларов, выплата 167 долларов, остаток 386 долларов

2017 Проценты 23 долларов, выплата 177 долларов, остаток 209 долларов

2017 Проценты 12 долларов, выплата 188 долларов, остаток 21 долларов

Остаток- 21 доллар



Известной  последовательность Улама.

Когда имеется  последовательность (3а+1)

-которая начинается со стартового а

-если а ==1 останавливаем последовательность

-если а четное число, нужно установить а=а/2. В противном случае установите a=3*a+1


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



ну а теперь вернемся к нашему геморрою.

Программирование Python по моим конспектам Лекция 9.5 питон, программирование, лекция, длиннопост

У многих из вас получилось заполнить небо случайными планетами. И это похвально!

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

Остальные же, как говорится, с богом)


Теперь мы немного внесем жизнь в наш космос.


Первым пунктом меню было у нас- информация о планете.


Задача такова. При вводе номера планеты (из карты)


1. выводится случайносгенерированное из русского алфавита название планеты. Важно соблюдать чередование гласных и согласных.


2.Выводится количество населения планеты и расса, ее заселяющая (аналогично случайносгенерированное название)


3. Выводится расстояние каждой планеты. Типа до земли 100 км, до луны 200


(достаем нашу формулу эвклида).


4 Выводим Основные ресурсы, которые добывает планета и их количество. Это тоже происходит рандомно. Ресурсы- газ, електричество, еда.


5 Выводим Количество населения


6 Выводим отношение планеты к нам. Хорошее негативное или нейтральное


7Выводим количество армии


8 выводим краткую историю планеты.



Все эти данные должны быть готовы быть изменены в любой момент.


Советую использовать двухмерный массив(последовательность). Сами выбирайте какой.


Обратите внимание на то, что вам придется каждый раз обновлять экран после обновления информации. При обновлении экрана задекларированные планеты должны оставаться на своих местах.


На этом я все.

Показать полностью 7
-6
Декомпиляция apk: туда и обратно
4 Комментария  

Скорее памятка для себя, чем пост для общественности.


С офсайта https://developer.android.com/studio/index.html забираем Android SDK Tools (ссылка внизу страницы). На данный момент там выложена версия 3859397.


Распаковываем и устанавливаем platform-tools и build-tools для последнего релиза Android. Соответствие имени релиза, версии Android и значению Android API можно посмотреть на https://source.android.com/source/build-numbers


> tools\bin\sdkmanager.bat --list

...

build-tools;25.0.2 | 25.0.2 | Android SDK Build-Tools 25.0.2

build-tools;25.0.3 | 25.0.3 | Android SDK Build-Tools 25.0.3

cmake;3.6.3155560 | 3.6.3155560 | CMake 3.6.3155560

...


> tools\bin\sdkmanager.bat "build-tools;25.0.3" "platform-tools"


Далее получаем на руки apk-шку, которую будем препарировать. Название пакета можно взять из адресной строки браузера, открыв страницу с программой на Play Market. Далее ищем и вытаскиваем архив через adb (root не требуется).

Пусть например, для программы "Sample Foobar" имя пакета будет com.example.foobar


> adb devices

List of devices attached

1234567890abcdef device


> adb shell "pm list packages -f -3 | grep com.example.foobar"

package:/data/app/com.example.foobar-1.apk=com.example.foobar


> adb pull /data/app/com.example.foobar-1.apk

/data/app/com.example.foobar-1.apk: 1 file pulled. 3.0 MB/s (39955506 bytes in 12.719s)


С сайта https://ibotpeaches.github.io/Apktool/ забираем и устанавливаем apktool, который умеет декомпилировать архив apk в набор файлов и обратно.


> java -jar apktool_2.2.2.jar d -o foobar_src com.example.foobar-1.apk


Декомпилированный код будет в формате smali - синтаксис и краткая справка на офсайте https://github.com/JesusFreke/smali/wiki. Описание команд можно посмотреть на http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html или на официальном сайте Android https://source.android.com/devices/tech/dalvik/dalvik-bytecode


Уже можно изучать исходный код. В Notepad++ можно добавить подсветку синтаксиса smali с https://forum.xda-developers.com/showthread.php?t=2760141, а для IntelliJ Idea недавно вышел плагин https://github.com/JesusFreke/smali/wiki/smalidea, который, по заявлению автора, даже позволяет отлаживать приложение на телефоне через ddms (проверять это я, конечно, не буду.)


Можно облегчить себе изучение кода, попробовав декомпилировать apk в исходный код на Java, но надо иметь в виду, что с вероятностью в 99.5% код получится нерабочий и его невозможно будет скомпилировать обратно в apk. В зависимости от фазы Луны и погоды на Марсе, в таком коде будут присутствовать совершенно дикие конструкции типа for (;;) {return; /* и дальше код */ } и тому подобное. Но общую структуру кода можно посмотреть, посравнивать с тем, что есть в файлах smali. Для этого нам потребуется dex2jar отсюда: https://sourceforge.net/projects/dex2jar/ и jd-gui отсюда: http://jd.benow.ca/


> dex2jar-2.0\d2j-dex2jar -os -ts -r com.example.foobar-1.apk


На выходе имеем com.example.foobar-1-dex2jar.jar. Запускаем jd-gui и открываем в нем этот jar:


> java -jar jd-gui-1.4.0.jar


Можно изучать код прямо в jd-gui, а можно экспортировать весь Java-код через меню File -> Save all sources.


После того, как поизучали, добавили нужное и удалили ненужное, собираем обратно smali в apk:


> java -jar apktool_2.2.2.jar b -o foobar_unaligned.apk foobar_src


Выравниваем запакованные файлы по 4-байтовой границе:


> build-tools\25.0.3\zipalign 4 foobar_unaligned.apk foobar_fixed.apk


Если ещё нет своего keystore, то его можно сделать с помощью программы keytool.exe, которая входит в состав JRE:


> keytool -keystore android_keystore.jks -genkey -alias recompile


Далее подписываем apk, используя сертификат из своего keystore. Указываем такое же значение min-sdk-version, как указано в исходнике foobar_src\apktool.yml, в параметре minSdkVersion:


> build-tools\25.0.3\apksigner sign --ks android_keystore.jks --min-sdk-version 14 foobar_fixed.apk


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

Показать полностью
-6
Вопрос C#-программистам
7 Комментариев  

UPD: проблема решена (#comment_86213852), всем спасибо:)



Есть маленький проект (решение) в Visual Studio 15 на языке C# (4 подпроекта):

- оконный "толстый клиент" на WPF;

- общая библиотека сущностей;

- сервер на WCF;

- консольное приложение для резидентного запуска сервера.

В сервере на WCF используется БД SQLite, расположена в каталоге App_Data.


При запуске сервера WCF в IIS при отладке всё гуд, по относительному пути получаю каталог App_Data и файл с БД.

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

Собственно вопрос - есть ли в C# способ "исправить" сценарий сборки приложения, как аналог джаванского Maven? В смысле, чтобы с "зависимой" библиотекой сервера в папку Release и/или Debug "родительского проекта" копировалась папка App_Data (или хотя бы файл БД)?

Вопрос C#-программистам программирование, csharp, Visual Studio, сборка проекта, вопрос
Вопрос C#-программистам программирование, csharp, Visual Studio, сборка проекта, вопрос

PS: C# знаю посредственно, а как загуглить это даже и в голову не приходит.

PPS: знаю, что есть спец. форумы, просто срочно ответ нужен.

18
Программирование Python по моим конспектам Лекция 9.4
43 Комментария  

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.


Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.

Отвечая на 90% одинаковых вопросов-

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

Я это делаю, потому что мне это нравится.



Привет товарищи. Сегодня я не делал ссылки на старые лекции. Ибо их уже дохрена и они занимают много места. Уж простите


В прошлый раз приключилась грубейшая ошибка, которую я стремлюсь во первых строках своего письма исправить.

Программирование Python по моим конспектам Лекция 9.4 программирование, питон, лекция, длиннопост

В этом примере ваш покорный слуга изволил сказать жуткую и несправедливую веСЧ


После этого переменная а автоматически увеличивается на единицу и процесс продолжается пока не мы не достигнем конца последовательности

Показать полностью 12
-9
Х. Х. и в продакшн!
1 Комментарий  

Очередной релиз от группы "Научно-технический рэп". Видос украл с этого канала.

7
Простенькие примеры на ПЛИС. UART. Часть 0.
0 Комментариев  

Приветствую уважаемые посетители сайта www.pikabu.ru. Решил продолжить статьи про разработку на ПЛИС. В первом посте я выложил самое начало, с чего стоило бы начать изучение ПЛИС. http://pikabu.ru/story/s_chego_nachat_izuchenie_fpga_plis__4...

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

Логичнее было бы продолжить постепенно объяснять базовые вещи. Но это был бы очень скучный, долгий и неинтересный материал, который бы только отпугнул и оттолкнул начинающих разработчиков своим объемом и сложностью. И я подумал, а не проще ли сначала показать, на что способна ПЛИС, как ведётся процесс разработки? Поэтому я решил выложить примеры простеньких проектов. А по задаваемым вопросам далее будет видно, какой материал лучше выкладывать.

В этом посте будет рассматриватся формальная постановка задачи написания простейшего приемника RS232, он же COM порт, он же UART*1 интерфейс, он же УАПП – Универсальный Асинхронный Приемо-Передатчик. Выбор пал на COM порт не просто так. Всё дело в том, что этот интерфейс самый простой для изучения и позволяет «подружить» компьютер и ПЛИС, научить их разговаривать друг с другом – передавать данные между собой. Сразу говорю, что полностью объяснять и расписывать все сигнальные линии и всю регистровую модель приемопередатчика я здесь не буду, поскольку для простой организации интерфейса между ПК и ПЛИС это нафиг не нужно. Более того, этого добра навалом во всемирной сетевой помойке и при желании или необходимости вы без проблем найдете всю интересующую вас информацию.


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


Внимание! КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО подавать сигнал с COM порта компьютера напрямую в FPGA, без специальных преобразователей уровней! В данной статье я не рассматриваю вопросы согласования физических уровней COM порта, и ПЛИС. Исключение составляют виртуальные COM порты, реализуемые на микросхемах FTDI, имеющие уровни сигналов совместимые с ПЛИС.


Для начала совсем коротенько расскажу про протокол обмена информацией по COM порту. Вот посмотрите внимательно, на картинку:

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

Для начала введем некоторые определения. Высокое состояние линии – соответствует логической единице – лог.1. Низкое состояние линии соответствует логическому нулю – лог.0.


Что же мы видим на этой картинке? А мы видим кучу полезной информации, смотрим справа налево:


Изначально линия находится в состоянии лог.1.


Затем мы видим, что линия становится лог.0, на один период данных. Этот бит данных называется СТАРТ-БИТ, применяется для того, чтобы сообщить приёмнику о том, что началась передача одного пакета\кадра\фрейма информации.


После передачи СТАРТ-БИТА у нас начинают передаваться биты данных. Данные предаются ногами вперед начиная с младшего бита. Обычно в одной посылке 8 бит – т.е. 1 байт. Но это не всегда так. Как правило, сколько бит в посылке оговаривается заранее, и приёмник при приёме уже настроен на необходимое количество бит данных.


После того, как все биты данных переданы может передаваться контрольный бит – или его ещё называют бит четности\паритета (от анг parity). Например, если был выбран четный паритет, то после передачи данных, если количество бит данных было четным – передаётся бит паритета равным лог.1. Если количество бит данных было нечётным – то передаётся бит паритета равным лог.0.

При выбранном нечётном паритете всё в точности наоборот: передали нечётное количество бит данных – бит паритета равен лог.1. Если количество переданных бит было чётным – паритета равен лог.0. Бит паритета нужен для минимального контроля принятых данных. Принимая данные, приёмник подсчитывает количество принятых бит. Если паритет подсчитанный передатчиком не совпадает с принятым битом, означает, что произошёл сбой и работать с данными нельзя. Какой тип паритета будет, а также будет ли вообще использоваться бит паритета, опять же оговаривается до передачи данных.


Любая посылка заканчивается стоповым битом СТОП-БИТ. Во время действия стоп-бита линия данных должна находиться в лог. 1.


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


• Первая цифра обозначает количество бит данных, например, 8.


• Буква обозначает наличие и тип бита четности.


Встречаются:

N (No parity) — без бита четности.

E (Even parity) — с битом проверки на четность.

O (Odd parity) — с битом проверки на нечетность.


• Последняя цифра обозначает длительность стоп-бита. Встречаются значения 1, 1.5 и 2 для длительности стоп-бита в 1, 1.5 и 2 битовых интервала соответственно.


Например, запись 8-N-1 обозначает, что UART настроен на 8 бит данных без бита четности и один стоповый бит. Для полноты параметров эту запись снабжают указанием скорости UART, например, 9600/8-N-1. Если говорить про скорость, обычно говорят про бодовую скорость. Т.е скорость, с которой отправляется посылка, которая определяет период одного бита. Реальная скорость обмена информацией на скорости 9600/8-N-1 будет на 20% меньше, поскольку среди переданных 10 бит информацию несут только 8 бит, а остальные 2 бита это старт и стоп соответственно.


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


А сейчас я вас немного погружу информацией по ПЛИС, без которой нам не написать правильный приёмник. В частности я расскажу немного про клоковые домены.


Если взять за жабры гугл-переводчик и зпихать в него фразу «clock domain signals» – то он выдаст перевод: clock domain signals – сигналы тактовой области. Если говорить простыми словами то клоковый домен - это часть проекта, работающая на какой-то одной тактовой частоте. Если в проекте используется только одна тактовая частота – значит клоковый домен у нас один. Если тактовых частот две – значит клоковых доменов у нас уже два и.т.д*2.


Первое наперво, что надо уяснить при работе с ПЛИС – это то, что любой сигнал, пересекающий клоковый домен должен быть синхронизирован с клоковым доменом, в котором мы обрабатываем этот сигнал*3. Частный случай пересечения клокового домена – приём внешних данных, которые обрабатываются на частоте порожденной внутри ПЛИС блоком PLL*4 или на частоте тактирования этой ПЛИС от собственного тактового генератора.


Это очень важный момент, который обязательно надо учитывать при проектировании. Представим, что у нас есть проект, в котором, все триггеры срабатывают по переднему фронту. В проекте есть 9-разрядный счётчик, который работает на частоте 40MHz. Данные с этого счетчика поступают в другую часть проекта, работающего на частоте 37MHz. Т.е пересекают клоковый домен. Посмотрим картинку:

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

Сигнал CLK – синхросигнал работы счетчика, его частота 40MHz

Сигнал SCLR – сигнал синхронного сброса счётчика. Пока он в состоянии лог.1 счётчик не работает. Очевидно, что когда сигнал сброса прекратит своё действие счётчик заработает.

Сигнал DATA_OUT – выход счётчика..

Сигнал CLK_NEW_DOMAIN – синхросигнал другой части проекта, его частота 37MHz.

Когда сигнал сброса перестанет быть активным, после прихода синхроимпульса, счетчик изменит своё состояние, т.е. переключится из 0 в 1. Причём переключится не сразу, а через какое-то небольшое время. Когда придёт очередной синхроимпульс счетчик переключится из 1 в 2, и.т.д. счётчик же. Обратите внимание, что при переключении счётчика выходные 9 разрядов меняют свои значения не одновременно, а с небольшой задержкой, поскольку физически линии могут иметь разную длину, и разное время распространения сигнала. По одной из 9 линий сигнал пришел раньше, по другой позже, ничего страшного, это реальный мир. Из-за этого в моменты начала переключения счетчика он может выдать абсолютно любые значения, это нормально,


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


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


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


Чуть более подробно про метастабильное состояние прочитайте тут, https://habrahabr.ru/post/254869/ очень неплохо изложено. Обязательно прочитайте!


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

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

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

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

На его вход поступают асинхронные данные ADATA, а на выходе у него данные SDATA синхронные частоте нового клокового домена. Но у этой схемы есть один недостаток: если принимаемый асинхронный сигнал меньше периода синхрочастоты нового клокового домена или равен ей, существует вероятность потерять этот сигнал. Значит, напрашивается самый логичный вывод - приёмник должен работать на частоте большей, чем частота передатчика. Первая ближайшая частота, с которой должен работать передатчик – это частота как минимум в 2 раза быстрее частоты передачи данных.


Внимание вопрос, почему я не могу взять частоту приемника, к примеру, на 50% быстрее бодовой частоты? Ответы оставляйте в комментах.


Итак, частота работы приёмника должна быть выше частоты работы передатчика. А во сколько? В 2 раза, в 3 раза, в 5 раз? Оставим этот вопрос открытым. Далее я немножечко расскажу про ещё одну очень интересную схему, и после этого мы сложим весь пазл, в одно целое.


Представим ситуацию, вы собрались в компанию из 7 тел и решаете, куда бы вам завалиться, культурно отдохнуть. Одна часть решила пойти в бильярд шары погонять, другая часть хочет в боулинг, шары покатать. Альтернатив нет. Очевидно, что вся ваша компания идет туда, куда хочет большинство. Так вот в схемотехнике есть определенный класс схем, которые так же работают по принципу большинства. Такие схемы называются мажоритарные схемы. К чему я это всё пишу. Смотрим на картинку ниже:

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

Смотрим на верхнюю половину картинки. Пришла какая-то помеха, которая просадила нашу линию данных до лог.0. Вспомним условие старт-бита - это как раз перепад линии данных из 1 в 0. И если мы обработаем эту помеху как старт, и начнем принимать данные, то мы получим данные состоящие из 8 бит равных лог.1. Очевидно, что это ошибка, поскольку данные мы не отправляли, а приёмник что-то получил. Однако…

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

Вот тут нам на помощь и приходят мажоритарные схемы: если большая часть времени битового интервала был лог.0, значит, приняли лог.0. Если большую часть времени битового интервала была лог.1, значит, приняли лог.1.


Теперь осталось определиться со временем, которое наш мажоритарный фильтр следит за битовым интервалом. У меня не просто так нижняя картинка со старт-битом была нарисована с 2 пиками помех. Всё дело в том, что очень часто любое изменение линии сопровождается неким высокочастотным звоном, особенно если линия несогласованна. И анализировать данные по краям битового интервала – это не совсем правильный подход. Стараются анализировать линии в середине битового интервала. При этом задача как можно более точно «нащупать» эту середину. Для этого применяют частоту приёмника в 16 раз больше частоты передачи, и примерно в середине бита делают 3 выборки. Почему именно значение 16? Первая причина – это то, что счетчик, считающий от 0 – до 15 это счетчик, который обнулятся сам, когда досчитает до конца, хотя точнее сказать счетчик не обнуляется, а у него происходит переполнение разрядов. Да и схемотехнически такие счётчики, более простые. А вот почему частота именно в 16 раз больше, а не в 8, тут сложно назвать какие-то объективные причины. Так сложилось исторически, и я не стал изобретать велосипед.


Итак, сделаем небольшой вывод:

1. Перед работой с данными мы их синхронизируем сдвиговым регистром.

2. Частота нашего передатчика в 16 раз больше частоты принимаемых данных.

3. В середине битового интервала делаем 3 выборки данных.

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


Вот картинка поясняющая принцип работы:

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

DATA_CLK – это частота с которой нам поступают данные. В реальности мы не имеем эту частоту, она показана просто для наглядности

UART_STATE_REG – это данные, которые нам передаются.

CLKx16 – частота работы нашего приёмника.

Красным отмечены места выборок для последующего определения того, что мы приняли.


Наш алгоритм действия можно представить в виде такой вот картинки. Сильно не ругайте, я не умею алгоритмы по ГОСТ рисовать.

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

Поскольку алгоритм у меня не очень красивый с точки зрения соблюдения ГОСТ, то дополнительно опишу все это словами.


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


Когда приёмник увидел, что на линии лог.0 он перестал сбрасывать счетчики и начинает делать выборки для проверки старт-бита.


Когда сделаны 3 выборки в середине битового интервала приёмник смотрит на то, что выдал мажоритарный фильтр. Если мажоритарный фильтр показал, что пришла лог.1, это означает старт-бит был ошибочный и скорее всего пришла помеха.


Если мажоритарный фильтр показал, что пришла лог.0 , это означает, что был принят старт-бит, и когда закончится период старт-бита, приёмник начнет принимать биты данных.


Изначально счетчик принятых битов равен 0, поскольку когда мы ждали старт-бита мы сбрасывали этот счетчик. При приёме данных в середине битового интервала приёмник опять сделал 3 выборки, и на основании того, что выдал мажоритарный фильтр, записал эти данные в регистр, в котором эти данные будут храниться.


В конце битового интервала приёмник проверил, сколько бит он уже принял. Если не все биты приняты, приёмник увеличит счетчик битов на 1, и совершит ещё один цикл приёма бита данных.

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


Анализ стоп-бита точно такой же, как и прошлые биты.

Вот только если фильтр покажет, что принятый бит это лог.0, значит произошла ошибка, и приёмник выставит флаг ошибки, поскольку стоп бит всегда лог.1. И перейдет в состояние ожидания нового старт-бита.


А если фильтр покажет что приняли лог.1 – значит всё в порядке. Приёмник выставит флаг о том, что данные в регистре правильные, и так же перейдет в состояние ожидания нового старт-бита.


На основании этого алгоритма можно сделать простой вывод о том, какие элементы нам понадобятся для его реализации:

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

2. Счётчик от 0 до 7, считающий, сколько бит приняли.

3. 3 разрядный регистр, для хранения 3 выборок, чтобы провести голосование.

4. Мажоритарный фильтр.

5. 8 разрядный регистр для хранения принимаемых бит данных.

А ещё нам нужна фиговина которая всем этим барахлом управляет:

Простенькие примеры на ПЛИС. UART. Часть 0. ПЛИС, FPGA, UART, COM, Разработка, Схемотехника, Микроэлектроника, Программирование, длиннопост

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

https://habrahabr.ru/post/254885/ Вполне годно описано. Для написания простеньких автоматов тут информации достаточно.


На этом моменте я вынужден статью закончить. Поскольку дальнейшее объяснение как это все реализовать внутри ПЛИС и промоделировать потребует серьезного увеличения длины поста. Да и у меня к вам появился серьёзный вопрос. Каким образом мне построить продолжение? Основная проблема в том, что дальше будет достаточно много кода на VHDL. И если его выложить сюда, то он развалится из-за того, что pikabu не содержит тегов для вставки кода. Пока ничего лучше, чем выложить кучу скриншотов кусков кода на ум не приходит. А в конце просто дать несколько ссылок на исходники.


*1. Не совсем корректно так говорить, поскольку RS232 он же COM – это одна из разновидностей UART, написал для упрощения.

*2. Отдельный разговор про частоты, кратные основной, полученные делением на счетчике.

*3. Опять же не совсем корректно так говорить, поскольку существуют специальные алгоритмы, где не сигналы синхронизируются, а синхронизируются флаги валидности данных, так называемые алгоритмы handshake.

*4. Специальная фиговина внутри ПЛИС, которая может создать из частоты, от которой тактируется ПЛИС новую частоту.

Показать полностью 8
-8
Программирование
23 Комментария  

Дорогие и супер умные пикабушники! Прошу помощи, хочу научиться программированию, просто чтобы уметь. Гугл помогать отказывается, выдает только платные курсы. Вопрос скорее к самоучкам, как и где вы учились, друзья?

Не плюсов ради, а помощи для. Всем заранее спасибо)

Коменты для минусов прилагаю.

-6
Маркетинговое исследование "Кружок программирования и робототехникик"
22 Комментария в Arduino & Pi  

Добрый день!


Короткий опрос на тему дополнительного образования в сфере программирования и робототехники. Планируется открытие кружка по данной тематике. Хотелось бы узнать Ваше мнение.

Всем прошедшим плюс к карме :)


https://docs.google.com/forms/d/e/1FAIpQLSf5lQvVmuht6FTsl6-a...

21
Когда гениальность - не во благо.
41 Комментарий  

У меня есть друг.


Отличный человечище и гениальный 3D-моделлер. Он выдает проекты невероятной крутизны, но он не хочет работать. Ну, как, не хочет - просидев на работе месяц-другой увольняется, потому что "не привык, чтобы мне диктовали условия". Потом полгода сидит без дела, устраивается, через месяц увольняется и сидит дома.


У человека много кредитов, коллекторы уже караулят под дверью, но он не устраивается на работу - потому что сто пудов начальник будет гадом. Я предложил поработать на бирже фриланса, на что получил ответ: чтобы мне какие-то контрацептивы за 1500 рублей мозги трепали? Нифига! Зато он вложился в Форекс (занял у меня и еще парней по 10 баксов) и ждет бабло.


Предвосхищая вопрос, почему сам не поможешь, отвечу: взял его к себе на работу, человек в первый день не вышел. Я спросил, почему нет в офисе и услышал: мне дома комфортно и по кайфу, а до офиса надо тащитьсяяяяяяяя...... Так было еще 2 недели, потом я забил.


У моего друга есть родной брат. Гениальный программист, взявший все возможные олимпиады и переписывавший ядро Битрикса в одиночку. Парень настолько гениален, что я своими глазами видел письма:


- Дорогой френд, плиз гоу ту нашу компанию Гугл. Самолет энд тикетс ту USA мы оплачиваем. We мониторинг all world and вы можете стать часть Гугл. Best Regards, Google Inc.


Что происходит с письмами? Они отправляются в спам. Потому что ему некогда заниматься фигней, он проходит Diablo III на максимальной сложности. И еще сидит на форумах.


Не так давно, в связи с расширением, я опять написал обоим: айда на работу? - Ни ответа, ни привета. И это тот самый момент, когда настоящая гениальность - не во благо.


А, и забыл сказать: родители у них пенсионеры, и все вместе живут на пенсию. Такие дела. 

7
Маленькая хитрость
8 Комментариев  

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

-7
TASM арифметические выражения
22 Комментария  

Цель: Научиться вычислять арифметические выражения.



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


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

TASM арифметические выражения assembler, TASM, программирование, системное программирование
3
Как делают видеоигры
2 Комментария  
17
О курсах программистов
4 Комментария  
О курсах программистов
36
Программирование Python по моим конспектам Лекция 9.2
12 Комментариев  

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.



Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.

Отвечая на 90% одинаковых вопросов-

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

Я это делаю, потому что мне это нравится.



Список предыдущих лекций



http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...


http://pikabu.ru/story/programmirovanie_python_po_moim_konsp...



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

Да несцы, меченый, я пошутил.

Блеаць..говорила мама, что с шутками у меня так себе..


ладно. Это все присказка, а сказка впереди.

Сегодня мы поговорим о циклах. @Dantev специально как ты просил)

Первый наш клиент называется на разных языках по разному..одни называют его "ПОКА", другие "solange", третьи  говорят "في حين" ну а пиндосы не заморачивались и назвали его словом WHILE.

Очень хорошее слово. В жизни- ну ваще не заменимое. К примеру-


-не быкуй ПОКА не подкачался

или там..

-пей ПОКА она не стала красивой



Слово ПОКА решает наши  жизни, товарищи!! Оно, блеать, руководит парадом!

Давайте теперь подробнее рассорим первый пример.


-Я накачан?

-Нет

-Качаюсь

-Я накачан?

-Нет

-Качаюсь

-я накачан

-Да

-"ей йоопта, пацанчиг, иди сюдаа"


Второй пример


Красивая баба?

Страшная

Бухаю

Красивая баба?

Страшная

Бухаю

Красивая баба?

БАгиня!!

"выходи за меня!"


Что обедняет это все, кроме того, что это сраный бред? Правильно! Мы повторяем одно и тоже действие ПОКА не будет достигнуто условие. Это, поцоны, и есть цикл. Иногда цикл - есть зло. Например если мы плохие программисты или тупицы.

ВОт яркий пример


гладь кошку пока она зверь


Это называется бесконечным циклом. Вы будете гладить кошку до тех пор пока она не сдохнет к ебеням! И вот таких бесконечных циклов нужно избегать (иногда). Порой  они нужны.


Итак..это все прелюдия была.


Итак в питоне, как и в нашей, серой жизни, в циклах есть условие и инструкция.

Выглядит так


while условие:

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


А теперь я покажу как все это работает на практике. Начнем с плохого примера. С той самой кошки.

Программирование Python по моим конспектам Лекция 9.2 питон, программирование, лекция, длиннопост

Условие будет выполняться бесконечно. И вот на мониторе мы уведем такое чудо

Программирование Python по моим конспектам Лекция 9.2 питон, программирование, лекция, длиннопост

И так бесконечно.


А вот и случай, когда нам такой цикл пригодится. Пишем программу которая принимает числа от 1 до 10, если число не входит в эти рамки- программа проявляет беспокойство по этому поводу.


Сначала я покажу, потом объясню.

Программирование Python по моим конспектам Лекция 9.2 питон, программирование, лекция, длиннопост

Первая строка- приглашение.

Вторая строка очень важна. Пока условие истинно, а истинно оно всегда, ибо True. Выполняем инструкции. Иначе говоря- выполняем бесконечно. Первая строка инструкции- принимаем значение числа. Вторая- сравниваем с условием - должно быть либо равно или больше единицы но меньше или равно десяти. Если все ок переходим к оператору break. Вот оно что!! это та самая панацея, которая выбрасывает нас из бесконечного цыкла. Без нее мы бы там вечно вертелись. Если же наше число не удовлетворяет это условие мы ессно не попадаем на break, а идем к else,  и цикл запускается заново.

А теперь пример более толковый.


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

Программирование Python по моим конспектам Лекция 9.2 питон, программирование, лекция, длиннопост

В первой строке мы просто выводим что то типа приветствия

За ней мы объявляем переменную, которая будет нашим условием и по умолчанию она указывает на строку "да"

Далее начинается условие цикла. Пока да- исполняй все, что внутри. В противном случае- не заходи в цикл.

В нашем случае переменная указывает на да. Значит мы в цикл заходим. Две первые строки инструкций цикла мы получаем длину и высоту прямоугольника. Третья строка- получаем площадь прямоугольника, которая получает имя vol. Далее мы выводим на экран наш результат и спрашиваем продолжить ли. На наш ответ начинает указывать ранеезадекларированная переменная ans, та самая, которая по умолчанию "да".

Если она снова станет "да"- цикл повторяется. Если мы напишем "нет" или вообще похер что, кроме "да"- цикл обрывается, нас из него выгоняют и мы оказываемся прямо пред последней строкой, которая благодарит нас за использование программой.

Программирование Python по моим конспектам Лекция 9.2 питон, программирование, лекция, длиннопост

Вот так, быть может, станет понятнее

Программирование Python по моим конспектам Лекция 9.2 питон, программирование, лекция, длиннопост

На сегодня мои полномочия все.

Показать полностью 6
0
Программирование. Начало пути и смутные очертания просторов среды 1С.
31 Комментарий  

Здравствуйте. Во мне давно теплилась идея связать свою жизнь с программированием. Но все как-то не мог решиться, потому что если начинать, то серьезно и с головой, дабы дело было плодотворным, к тому же стоял вопрос в какую среду податься. Недавно мне довелось несколько месяцев поработать в программе 1С в продуктовом магазине. Занимался я накладными, переоценкой, заказами и т.д. Сейчас, когда я решил-таки наконец заняться программированием, мой выбор пал именно на среду 1С, столь нелюбимую многими программистами других языков, честно, пока не совсем понимаю почему, но в связи с чем на форумах часто встречаются ответы вроде: "Не суйся пока не поздно, пожалей свою голову" и прочие посылы. Как следствие возникло много вопросов с чего начать и к чему стремиться в самом начале пути. Не сомневаюсь, что здесь есть люди, которые хорошо, а быть может даже досконально, разбираются в этой сфере, поэтому прошу у вас совета, какую литературу стоит прочесть, какие курсы (видео или очные) могут (и могут ли) оказаться действительно полезными, реально ли вообще самостоятельно научиться программировать в 1С. Другими словами хотелось бы услышать ваше мнение, как сделать первый шаг в нужную сторону, либо узнать с чего начинали именно вы. Надеюсь на вашу помощь и поддержку.
Для справки, я имею лишь базовые знания в языках С++ и Visual Basic.



Пожалуйста, войдите в аккаунт или зарегистрируйтесь