Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения

пятница, 4 декабря 2015 г.

Список базовых Nuget пакетов при разработке веб-сервисов на платформе .NET

Абсолютное большинство новых веб- и мобильных приложений строятся на базе REST API. А все потому, что это самый простой способ поддерживать множество клиентов, реализованных на любых технологиях. В этой записи я решил привести список базовых пакетов, необходимых в Enterprise разработке сервисов (да и других типов .NET приложений, чего уж там).
  • AutoMapper
  • Json.Net от Newtonsoft
  • Azure Storage Extensions (Client library)
  • LightInject / Castle Windsor / NInject
    • LightInject.WebApi
    • Lightinject.ServiceLocator
  • CommonLocator
  • RestSharp
  • Swasgbuckle - Swagger for WebApi

вторник, 27 ноября 2012 г.

Мы выбираем или нас выбирают

Подходит тот самый исторический момент, когда мне (как и моим однокурсникам) нужно определиться куда приложить свои мозги. До 30 лет ещё можно менять свою жизнь как угодно, но хочется сразу "попасть в струю".

Для меня есть несколько направлений, в которых я могу уверенно продвигаться. Сразу откину науку и Университет, как менее перспективный путь (хотя по своему интересный и я бы мог найти здесь место). Анализ данных более перспективная вещь, к нему ещё можно будет вернуться при желании. Итак, на текущий момент я выбираю:

  • C++, game dev
  • C#, ASP.NET(MVC) и куча технологий характерных веб-разработке.

вторник, 1 мая 2012 г.

iTransition opener

Поучаствовали с чуваком в opener.itransition.com. Такое а-ля соревнование. Требуется решить 20 дурацких задач, в большинстве своем ориентированных на догадки - в этом их фишка, в этом и загвоздка. Конечно после решения некоторых получаешь огромное удовольствие. Первая троица решивших получают iPad'ы, а остальные идут лесом на iParty. За приглашениями уже съездили.


Это обратная сторона приглашения. Лицевая сторона вот http://iparty2012.com/
В принципе, если совесть позволяет и есть желание и смелость, то приглашения можно и нахаляву получить. В компании говорят, о том, что надо брать с собой паспорт, но никто его не требовал, и идентификация проходила по e-mail'у в их списке - мы буквально ткнули пальцем в свои адреса. 

Из описания вконтакте вытекает, что iParty это такая нерд-тусовка с приглашенными девушками, чтобы не так скучно было пить халявное пиво под адекватную музыку (обещается удобоваримая нердами музыка - т.к. технарей попсофилов, как среди нердов, так и среди сотрудников быть не должно). О девушках. Обещают разврат в виде strip и go-go шоу и девушек моделей-студенток. Вообщем-то когда компания так активно использует слово "разврат", начинает казаться, что приглашают на оргию какую-то. В любом случае хочу сходить и надеюсь вынести оттуда что-то более ценное, чем блокнотик и ручка ;) ну и положительные эмоции конечно - остается надеяться, что будет не слишком пафосно и напряжно.

вторник, 20 марта 2012 г.

Динамическое и статическое подключение DLL

Постараюсь кратко рассказать про подключение библиотек DLL. Но сначала ещё немного поработаем с элементами интерфейса. О том как создать простое диалоговое приложение с помощью MFC я уже писал.

Первым делом приложение должно позволять вводить какое-то число, и нам также необходимо по нажатию кнопки как-то выцепить это число из edit box'а. Делается это так.

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


Нам необходимо две переменные. Одна будет предоставлять методы для Edit Box - такие как получение значения из этого поля. 


Вторая переменная просто будет хранить значения типа INT, полученные из Edit Box. Эту переменную можно было и вручную написать в .h файле, отвечающим за интерфейс, но мы её добавим по-ленивому.

   

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

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

void CMFC22Dlg::OnBnClickedButton1()

{
// TODO: Add your control notification handler code here
CString s;
m_CEdit1.GetWindowTextA(s);
m_INTedit1 = atoi(s);
AfxMessageBox(s);
}

Результат посмотрите сами.

Наконец о подключении библиотек!

Статическое подключение. Используется понятие "раннее связывание". Это значит, что DLL "прикрепляется" на этапе компиляции - compile-time. Это самый простой способ подключения, но для него необходимы следующие файлы: сама .DLL, хидер с описанием функций .h, и библиотечный файл .lib - все они создаются при компиляции библиотеки и закидываются в проект, требующий подключения библиотек.

Для подключения требуется вписать вот такой код:
// статическое подключение DLL

#include "myStatLib.h"
#pragma comment(lib, "myStatLib.lib")

Теперь можно напрямую вызвать необходимые функции из dll.

Динамическое подключение. Использует "позднее связывание" или run-time. Подгрузка библиотеки происходит только при вызове функции. Разумеется придется самим контролировать процесс выгрузки библиотеки. Следующий код прописан в .h файле - тут определяется сначала тип указатель на функцию, а потом переменная callFDLL, являющаяся указателем на функцию. hlib - какая-то winapi структура, которая будет содержать описание подсоединенной DLL'ки. Готовую dll необходимо скопировать в проект.
protected:// типы для динамической загрузки DLL

typedef void (WINAPI *MYPROC)();
MYPROC callFDLL;
HMODULE hlib;

В обработчик второй кнопки должны добавить следующее:
void CMFC1Dlg::OnBnClickedButton2()

{
CString s;
EditControl2.GetWindowTextA(s);
m_edit2Value = atoi(s);

hlib = LoadLibrary("dllG.dll");
callFDLL = (MYPROC) GetProcAddress(hlib,"CLDyn");

FreeLibrary(hlib);
}

CLDyn - имя функции, которую мы вызываем из dll.

Создать DLL. Не буду описывать опять процесс создания проекта в MSVS - там методом научного тыка всё можно создать. Но код простейшей dll стоит выложить.

Файл dllG.h
extern __declspec(dllexport) void CLDyn(const int NN);

Файл dllG.cpp
#include <windows.h>


extern __declspec(dllexport) void CLDyn()
{
MessageBoxA(GetActiveWindow(),(LPCSTR)("Hello from Dynamic Loaded Library!"),(LPCSTR)("Hi"),MB_OK | MB_APPLMODAL);
}

Файл dllG.def - для динамического подключения этот файл необходим, т.к. позволяет определить нормальные названия функций.
LIBRARY "dllG"

EXPORTS
CLDyn @1



понедельник, 12 марта 2012 г.

Старый добрый MFC

Есть у меня такой предмет "Технологии программирования". Ведет клёвая тётя - какой-то крутой программер в Минской компании. Она задала нам сделать лабу по работе с dll. Задание таково:

"Необходимо написать программу, имеющую графический интерфейс (GUI), на С++. Программа должна иметь два поля Edit и две кнопки. Первая группа Edit+Button для работы со статической библиотекой, вторая - для подключенной динамическим образом. В поле Edit ввести число и по нажатию кнопки выскакивает приветственное сообщение столько раз, сколько было введено."

В качестве GUI разумно использовать MFC, с которым мне особо не приходилось сталкиваться, но теперь пришлось довольно быстро разобраться. И этот пост фактически гайд как быстро написать простое приложение на C++ с использованием MFC.

Итак! Грузим Microsoft Visual Studio 8 -> File -> New -> Project. Выбираем Visual C++ - MFC и выбираем приложение которое хотим создать - MFC Application.

По нажатию "Ok" среда предлагает нам настроить внешний вид нашего приложения. Здесь важный для нас шаг выбрать "Типа приложения". Для нас должно быть "Диалоговое приложение"(Dialog based). Именно этот вариант предполагает наличие всяких кнопочек и полей и избавит от ненужных мытарств с документами. Окно выглядит так:

Так же обязательно выбираем "Use MFC in a static library". Настройки в других вкладках по вкусу.

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

Нас интересуют только выделенные файлы - это два .cpp файла с кодом, два их хидера .h и .rc файл ресурсов, с помощью которого и вызывается это диалоговое окно приложения ( .rc -> Dialog -> IDD_MFCPROJECT_DIALOG).

Справа обращаем внимание на вкладку Toolbox (вызывается сочетанием клавиш Ctrl+Alt+X). Отсюда мы натягаем нужные нам элементы и получим что-то похожее на моё приложение.


Очень удобно в проекте клацнуть два раза на кнопку, нажатие которой хотим обработать, и сразу попадаем в её функцию-обработчик. А клацаем правой кнопкой по кнопке -> Properties  - можем настроить элемент (Например поменять все надписи). Можно запускать приложение Ctrl+F5.

Вот такая простая магия и никакого кода.

воскресенье, 4 июля 2010 г.

Примочки C#

Начал читать книгу Лабора по C#. После изучения Java, C# изучать легче - постоянно встречаются логические совпадения в конструкциях. Однако уже встречаю и различия - в шарпе есть довольно интересные примчки, которые придуманы для облегчения жизни разработчика, хотя впринципе и в Яве проблем не возникало без них =)

Уже были встречены:

  1. Индексаторы
  2. Использование свойств полей

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

Свойства полей шарпа помогают облегчить доступ к полям класса - избавляют от использования "геттеров" и "сеттеров", хотя принцип интерпретации в обоих языках остается одинаковый, и это просто некоторое удобство для программистов C#

Обращение к полям:

  1. Java - class.getField,  class.setField, где в классе Class определено поле public type field
  2. C# - class.Field - используется и для получения и для редактирования значения field

Обращу внимание, что имя свойства с большой буквы пишется