Переменные в C#. Способы объявления массивов

👁 672 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

В C# имеется богатый набор способов объявления этих массивов и иногда путаешься, когда разные языки программирования мелькают перед глазами через промежутки времени, ведь нет же такого, чтобы современный программист работал только с одним языком, а разные языки — это разная философия и методология, хоть и есть одинаковые понятия, подходы и схожесть синтаксиса. Разработчики всегда ищут облегчение процесса и за все время существования C# таких облегчений накопилось столько, что один и тот же вариант можно сделать несколькими способами.

Вступление

Данная статься будет организована попунктно — сначала рассмотрим обобщенно про массивы, а далее перейдем к многомерностям. Данная статья не последняя, могут быть продолжения по схожим тематикам, а C# есть много механизмов, относящихся к структурам(structure), спискам(List), словарям(Dictionary), хэш-таблицы(хэш-таблицы), потокобезопасные коллекции(Concurrent), строго типизированные коллекции(Generic), коллекциям объектной модели(ObjectModel), специализированные коллекции(Specialized). Ну в общем, тема большая и без грамотного составления структуры обучения будет очень сложно все это понять.

Способы объявления и инициализации одномерных массивов в C#

Давайте сразу скажем, что в C# имеются 5 способов объявления и инициализации массивов:

  1. Инициализировать при объявлении без спецификация ранга. При данном подходе индекс во второй части опускается и он берется автоматом при подсчете значений инициализации:
    int[] myArray = new int[] { 1, 3, 5, 7, 9};

     

  2. Инициализация без указания повтора типа переменных после равенства. При данном походе размер массива также, как и в первом случае, рассчитывается автоматом, исходя из количества значений, участвующих в инициализации переменных внутри массива:
    string[] myArray = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

     

  3. Можно объявить переменную массива без инициализации, но при присвоении массива этой переменной нужно использовать оператор new:
    int[] myArray;
    myArray = new int[] { 1, 3, 5, 7, 9 };

     

  4. В C# массивом может быть не только любой базовый тип, но и класс. В понимании C# типом считается и класс, в том числе:
    class MyType{
        public string mField;
    }
    MyType[] myArray = new MyType[10];
    MyType myTypeVar0 = new MyType();
    myTypeVar0.mField = "Text 0";
    MyType myTypeVar1 = new MyType();
    myTypeVar1.mField = "Text 1";
    ...
    myArray[0]=myTypeVar0;
    myArray[1]=myTypeVar1;
    ...
  5. В C# массив может принимать любой тип данных, если при инициализации указать тип object. Данный тип является родоначальником всех типов и поэтому может принимать любой тип:
    object[] myArray = new object[]{1, "text", 1.2, 'A'};

Способы объявления и инициализации многомерных массивов в C#

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

  1. Многомерный массив в C# может иметь много измерений до бесконечности, но больше 2-х на практике редко используются:
    int[] myArray1 = new int[4];//Массив 1-го измерения
    int[,] myArray2 = new int[4, 5];//Массив 2-го измерения
    int[,,] myArray3 = new int[4, 5, 7];//Массив 3-го измерения
    int[,,,] myArray4 = new int[4, 5, 7, 9];//Массив 4-го измерения
    ...

     

  2. Массив можно инициализировать при объявлении, как показано в следующем примере:
    int[,] myArray2 = new int[2, 2]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  3. Можно опустить указание размерности:
    int[,] myArray2 = new int[ , ]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  4. Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new:
    int[,] myArray2;
     myArray2 = new int[ , ]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  5. Следующий пример присваивает значение конкретному элементу массива:
    int[,] myArray2 = new int[2 , 2];//Массив 2-го измерения
    myArray2[1, 2] = 10;//Инициализируем отдельный элемент в массиве

     

Способы объявления и инициализации массивы массивов в C#

Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются «невыровненными массивами». В следующих примерах показано, как выполняется объявление, инициализация и доступ к массивам массивов.

  1. Ниже показано объявление одномерного массива, включающего три элемента, каждый из которых является одномерным массивом целых чисел:
    int[][] myArray = new int[3][];

     

  2. Перед использованием jaggedArray его элементы нужно инициализировать. Сделать это можно следующим образом:
    myArray[0] = new int[5];
    myArray[1] = new int[4];
    myArray[2] = new int[2];

     

  3. Для заполнения элементов массива значениями можно также использовать инициализаторы, при этом размер массива знать не требуется:
    myArray[0] = new int[] { 1, 3, 5, 7, 9 };
    myArray[1] = new int[] { 0, 2, 4, 6 };
    myArray[2] = new int[] { 11, 22 };

     

  4. Также массив можно инициализировать путем объявления:
     int[][] myArray = new int[][] 
    {
        new int[] {1,3,5,7,9},
        new int[] {0,2,4,6},
        new int[] {11,22}
    };

     

  5. Также можно использовать сокращенную форму. Обратите внимание, что при инициализации элементов оператор new опускать нельзя, так как инициализации по умолчанию для этих элементов не существует:
      int[][] myArray = 
    {
        new int[] {1,3,5,7,9},
        new int[] {0,2,4,6},
        new int[] {11,22}
    };

     

  6. Разреженный массив является массивом массивов и поэтому его элементы являются ссылочными типами и инициализируются значением null:
    myArray[0][1] = 77;
    myArray[2][1] = 88;

     

  7. Массивы массивов можно смешивать с многомерными массивами. Ниже показано объявление и инициализация одномерного массива массивов, состоящего из трех двумерных элементов различного размера:
    int[][,] myArray = new int[3][,] 
    {
        new int[,] { {1,3}, {5,7} },
        new int[,] { {0,2}, {4,6}, {8,10} },
        new int[,] { {11,22}, {99,88}, {0,9} } 
    };

     

  8. Доступ к отдельным элементам выполняется как показано в примере ниже, где отображено значение элемента [1,0] первого массива (значение 5):
    System.Console.Write("{0}", myArray[0][1, 0]);

     

  9. Метод Length возвращает число массивов, содержащихся в массиве массивов. Например, если объявить предыдущий массив, мы получим следующее:
    System.Console.WriteLine(myArray.Length);

Часть 1. Что такое RSA

👁 165 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел. Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других или читайте далее из Wikipedia.

Как появился RSA?

Дата начала данного алгоритма уходит к далекому 1976 году, когда в ноябре этого года появилась опубликованная статья Уитфилда Диффи и Мартина Хеллмана под заголовком «Новые направления в криптографии» (англ. New Directions in Cryptography). В то пору, это был новый подход в криптографии, перевернувший представление о криптографических системах, заложив основы к использованию открытых ключей в криптографии.

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

Изучив эту статью, трое учёных Рональд Ривест, Ади Шамир и Леонард Адлеман из Массачусетского технологического института (MIT) приступили к поискам математической функции, которая бы позволяла реализовать сформулированную Уитфилдом Диффи и Мартином Хеллманом модель криптографической системы с открытым ключом. После работы над более чем 40 возможными вариантами им удалось найти алгоритм, основанный на различии в том, насколько легко находить большие простые числа и насколько сложно раскладывать на множители произведение двух больших простых чисел, получивший впоследствии название RSA. Система была названа по первым буквам фамилий её создателей.

В августе 1977 года в колонке «Математические игры» Мартина Гарднера в журнале Scientific American, с разрешения Рональда Ривеста появилось первое описание криптосистемы RSA. Читателям также было предложено дешифровать английскую фразу, зашифрованную описанным алгоритмом.

Описание и понимание алгоритма RSA

Алгоритм RSA основан на трудности разложения на множители больших чисел, которые имеют 2 и только 2 фактора (простых чисел). Система работает на открытом и закрытом ключах (Public and Private keys). Открытый ключ доступен для всех. С этим ключом пользователь может зашифровать данные, но не может расшифровать их и это может только пользователь, у кого закрытый ключ, который, с помощью этого ключа, умеет расшифровать их . Конечно, теоретически их может расшифровать и обычный пользователь с публичным ключом, но это экстремально сложно — генерировать закрытый ключ из открытого. Данный метод зашифровки и расшифровки данных пользователей носит название алгоритма RSA, который очень популярен в зашифровке данных на данный момент. Безопасность RSA зависит от вычислительной сложности факторизации больших чисел.

Генерация двух больших простых чисел

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


p = 7
q = 19

Пусть n = p*q:


n = p*q = = 7 * 19 = 133

Пусть m = (p – 1)(q – 1):


m = (p – 1)(q – 1) = (7 – 1)(19 – 1) = 6 * 18 = 108

Возьмем маленькие числа e до значения числа m. Числа e – простые по отношению к m и не превышают его значение, это означает, что большое число, которое может точно разделиться как e, так и на m (их наибольший общий делитель, или НОД) равен 1. Алгоритм Евклида используется для поиска наибольшего общего делителя двух чисел, но детали здесь опускаются. Отсюда имеем:


e = 2 => gcd (e, 108) = 2 (нет)
e = 3 => gcd (e, 108) = 3 (нет)
e = 4 => gcd (e, 108) = 4 (нет)
e = 5 => gcd (e, 108) = 1 (да!)

 Находим такое число d, что d*e % m = 1(т.е., чтобы он разделился без остатка). Это эквивалентно нахождению d, удовлетворяющую d*e = 1 + n*m, где n – любое целое число. Мы можем переписать это как d = (1 + n*m) / e. Теперь мы работаем через значения n до целочисленного решения, т.е. пока не будет найдено целочисленное деление:


n = 0 => d = 1 / 5 (нет)
n = 1 => d = 109 / 5 (нет)
n = 2 => d = 217 / 5 (нет)
n = 3 => d = 325 / 5 = 65 (да!)

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

Открытый ключ (Public key) будет равен:


n = 133
e = 5

 Закрытый ключ (Private key) будет равен:


n = 133
d = 65

Небольшой пример зашифровки и дешифровки алгоритмом RSA

Зашифровка. Сообщение должно быть числом, меньшим, чем p и q. Тем не менее, на данный момент мы не знаем р или q, поэтому на практике нижняя граница р и q должны быть опубликованы. Это может быть несколько ниже их реального значения и поэтому не является главным вопросом безопасности. Для этого примера, будем использовать сообщение «6».


C = p * e % n = 65 % 133 = 7776 % 133 = 62

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


P = C*d % n = 6265 % 133 = 62 * 6264 % 133 = 62 * (622)32 % 133 = 62 * 384432 % 133 = 62 * (3844 % 133)32 % 133 = 62 * 12032 % 133

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


...= 62 * 3616 % 133 = 62 * 998 % 133 = 62 * 924 % 133 = 62 * 852 % 133 = 62 * 43 % 133 = 2666 % 133 = 6

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

Графический редактор на JavaScript. Часть 1. Введение

👁 444 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Данный цикл статей будет относится к проектированию простого графического редактора на основе клиентского языка JavaScript и серверного языка PHP. Графический редактор будет иметь возможность создавать простейшие примитивы: линия, эллипс, прямоугольник, многоугольник. Опишем возможность добавления, редактирования и удаления примитивов из текстового файла. Прорисовка примитивов будет производиться средствами HTML5 Canvas. HTML5 интегрирован с языком JavaScript и позволяет нам напрямую использовать API Canvas.

1. Клиентская часть на JavaScript

Клиентская часть, как известно, выполняется в браузера удаленного пользователя и для того, чтобы пользователь имел возможность редактировать файл на сервере необходимо будет иметь постоянную связь с PHP скриптом, для передачи параметров интерактивного редактирования примитива. Для этого будем использовать технологию ассинхроной связи с сервером AJAX. Для кроссбраузерной совместимости будем сразу использовать какую-нибудь библиотеку JavaScript, чтобы не отвлекаться на ненужные приемы совместимости и лучщим решением будет jQuery.

2. Серверная часть на PHP

Серверная часть будет написана на PHP. Необходимость в использовании PHP обусловлено тем, что JavaScript не имеет возможности работать с файлами: записывать, удалять, редактировать… Поэтому использование серверного языка — это одна из необходимостей для создания и редактирования графического файла, в котором будут храниться наши данные.

3. Расширение файла

Для того, чтобы сохранить наши примитивы для передачи между пользователями будем использовать обычный текстовый файл с расширением *.sgf(Simple Graphic Format). Название расширения не играет роли, можно любое, которое угодно вам и от этого файл не перестает быть текстовым. Другое дело — это , если бы мы использовали бинарный файл с 16-ричными значениями, но нас сейчас интересует первый вариант в виду легкости разработки и быстроты реализации.

4. Стрктура файла

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

Диалоговое окно открытия и сохранения файла в JavaFX

👁 1 032 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (4 оценок, среднее: 3,25 из 5)
Загрузка...

Иногда в программе требуется реализовать диалоговое окно, которое будет открывать или сохранять файл и для таких целей в JavaFX есть отдельный класс FileChooser. Данный класс реализует данные диалоговые окна посредством вызова методов showOpenDialog() или showSaveDialog().

1. Открытие файла определенного расширения

Ниже покажем пример кода реализации диалогового окна открытия файла определенного расширения или списка расширений

@FXML
private void hndlOpenFile(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();//Класс работы с диалогом выборки и сохранения
        fileChooser.setTitle("Open Document");//Заголовок диалога
        FileChooser.ExtensionFilter extFilter = 
        new FileChooser.ExtensionFilter("HTML files (*.html)", "*.html");//Расширение
        fileChooser.getExtensionFilters().add(extFilter);
        File file = fileChooser.showOpenDialog(CodeNote.mainStage);//Указываем текущую сцену CodeNote.mainStage
        if (file != null) {
            //Open
            System.out.println("Процесс открытия файла");
        }
}

2. Диалоговое окно сохранения файла определенного расширения

Ниже покажем пример кода реализации диалогового окна сохранения файла определенного расширения или списка расширений

@FXML
private void hndlOpenFile(ActionEvent event) {
    FileChooser fileChooser = new FileChooser();//Класс работы с диалогом выборки и сохранения
    fileChooser.setTitle("Save Document");//Заголовок диалога
    FileChooser.ExtensionFilter extFilter = 
    new FileChooser.ExtensionFilter("HTML files (*.html)", "*.html");//Расширение
    fileChooser.getExtensionFilters().add(extFilter);
    File file = fileChooser.showSaveDialog(CodeNote.mainStage);//Указываем текущую сцену CodeNote.mainStage
    if (file != null) {
        //Save
        System.out.println("Процесс открытия файла");
    }
}

3. Дополнительно

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

fileChooser.getExtensionFilters().addAll(
    new FileChooser.ExtensionFilter("All Images", "*.*"),
    new FileChooser.ExtensionFilter("HTML Documents", "*.html"),
    new FileChooser.ExtensionFilter("JPG", "*.jpg"),
    new FileChooser.ExtensionFilter("PNG", "*.png")
);

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

List<File> list =
    fileChooser.showOpenMultipleDialog(CodeNote.mainStage);
    if (list != null) {
    for (File file : list) {
    openFile(file);
    }
}

Для того, чтобы узнать какое расширение выбрано в процессе сохранения или открытия используем getSelectedExtensionFilter(), а для того, чтобы сравнить существующие расширения используем метод getExtensionFilters().get(index), где index — порядковый номер регистрированного расширения

if(fileChooser.getSelectedExtensionFilter().equals(fileChooser.getExtensionFilters().get(0))){
    if (!file.getPath().endsWith(".html")) {
        file = new File(file.getPath() + ".html");
    }
        System.out.println("Процесс сохранения html файла");
    }else if(fileChooser.getSelectedExtensionFilter().equals(fileChooser.getExtensionFilters().get(1)))
    {
    if (!file.getPath().endsWith(".png")) {
        file = new File(file.getPath() + ".png");
    }
    System.out.println("Процесс сохранения png файла");
}

Создание архитектуры масштабируемого приложения Node.js

👁 698 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 1,50 из 5)
Загрузка...

Понятие «Архитектура приложения»

Любая программа, будь то десктопная или WEB, должна иметь определенные правила оформления кода: классов, файлов, методов, частей и т.д. Это делается, скорее всего, для того, чтобы увеличить производительность труда разработчиков и уменьшить риск возникновения непредвиденной работы программы, которую можно быстро идентифицировать и отладить. Существуют несколько подходов того, как должна строиться архитектура WEB — приложения, в частности, эти же правила можно перенести и на приложения Node.js — это MVC, HMVC, MOVE и другие. В данной же статье рассмотрим простейший пример реализации архитектуры приложения на основе модели MVC (Model-View-Controller). Не будем придумывать что такое MVC,  а приведем цитату первого абзаца из Википедии:

Model-view-controller (MVC, «модель-представление-поведение», «модель-представление-контроллер», «модель-вид-контроллер») — схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области

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

mvc-active-passive-model

Это не единственное отличие, которое может быть в MVC, их ровно столько, сколько может позволить себе любой разработчик, но концепция MVC едина для всех.

Модульность в Node.js

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

var http = require('http');//Подключаем модуль приема и отправки по протоколу Http 
//Создаем объект нового сервера 
http.createServer(function (req, res) { //Передаем заголовок res.writeHead(200, {'Content-Type': 'text/plain'}); //Выводим запись 
res.end('Hello World\n'); }).listen(1337, '127.0.0.1');//Указываем адрес хоста 
//Уведомляем в консоли о том, что запущен наш сервер console.log('Server running at http://127.0.0.1:1337/');

подключает модуль http для приема и отправки запросов, который находиться в составе Node.js,  а другой модуль, к примеру, fs нужен Node.js для работы с файловой системой компьютера и он тоже входит в стандартный набор Node.js, но это не значит, что платформа Node.js содержит модули для решения всех задач, которые встречаются у разработчиков, к примеру, в стандартный состав Node.js не входит модуль для работы с сокетами и для этого нам надо его установить через консоль командой

npm install socket.io

Отсюда мы понимаем, что для того чтобы создать масштабируемое приложение нам будет необходимо разделить его на отдельные модули и подключать их к программе по мере необходимости и Node.js позволяет нам создавать собственные модули. Для примера разделим выше приведенный простой код на модули и получим идентичный результат. Чтобы разбить код на модули нам необходимо создавать файлы модулей, к примеру, мы создадим новый модуль под названием server в файле serevr.js и поместим в нее весь код работы с запросами к серверу, а в файле index.js мы запустим наш пользовательский модуль server.  Название модуля соответствует названию файла без расширения .js, код в файле server.js будет следующим

 

var http = require('http');//Подключаем модуль протокола http

function start()//Создаем метод запуска модуля
{
	function onRequest(req, res){
	  //Передаем заголовок
	  res.writeHead(200, {'Content-Type': 'text/plain'});
	  //Выводим запись
	  res.end('Hello World from Server!\n');
	}
	//Указываем адрес хоста
	http.createServer(onRequest).listen(1337, '127.0.0.1');
}
//Указываем, что данный метод доступен из вне
exports.start = start;

А в файле index.js запишем код подключения модуля server и ее запуска

var server = require('./server');//Подключаем наш модуль server
server.start();//Запускаем наш модуль сервер
//Уведомляем в консоли о том, что запущен наш сервер
console.log('Server running at http://127.0.0.1:1337/');

Запускаем наш пример командой

node [ваш путь]/server.js

если все запустилось удачно, то будет следующее сообщение в консоли

start-node-js-hello-world-result

 

После этого идем в браузер и набираем адрес нашего запущенного хоста

http://127.0.0.1:1337/

node-js-h-w-module-from-server

На этом пример создания простого модуля закончено.

Роутер и обработка запросов

В предыдущем пункте мы использовали такую функцию, как onRequest(req, res), где req(request) — объект запроса пользователя, а res(response) — это ответ пользователю. Не имеет значения как называется данная функция, она передается как параметр, для нас важны параметры, которые передаются в данную функцию. Данная функция еще называется функцией обратного вызова(callback), которая работает ассинхронно. Чтобы соответствовать уровню MVC нам необходимо определять получаемые запросы из параметра req  и передавать в параметр  res ответ в виде вида страницы. А вид страницы — это сверстанный HTML файл, и таких файлов столько, сколько необходимо для нашего приложения и пользователь видит только их. Обычно, данные файлы расположены в отдельной папке. Чтобы узнать какой запрос с POST и GET данными отправил пользователь, нам необходим роутер, который будет проверять и выдавать ту информацию, которую мы позволили нашему приложению. Продолжение следует…

Введение в Node.js и запуск «Hello World!»

👁 258 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Node.js — это интерпретатор для языка JavaScript, который используется в виде серверного языка программирования ровно также, как и PHP, Ruby, Python и т.д. Так, зачем же надо было создавать еще один интерпретатор, если подобных уже немало? А затем, что это совсем необычная технология взаимодействия клиент-сервер. Основное отличие данного интерпретатора в том, что она позволяется быстро исполнять код JavaScript на стороне сервера и мгновенно ассинхронно передавать ответ на запросы удаленных пользователей. По сути дела, Node.js  — движок V8, на котором работает браузер Chrome от Google, который переделали в сервер, добавив к нему необходимые модули работы с файловой системой, с HTTP — запросами, c сокетами и т.д.

Установка Node.js

Скачать и установить Node.js — это проще простого. Для этого заходим на официальный сайт проекта и жмем на зеленную кнопку INSTALL. После скачивания установка происходит в стандартном режиме, если у вас Windows x64, то установщик по умолчанию установит в Node.js  в папке C:\Program Files\nodejs\, соглашаемся с установщиком

node-js-default-path

После установки мы сможем передавать команды управления для Node.js из командной строку, через ключевое слово node.

Запуск рабочего примера «Hello World!»

Давайте запустим пример работы в среде Node.js. Для этого нам нужно место, где будут храниться наши файлы сервера. Представьте это как папку хранения хостов Denvera или OpenServer, хотя для Node.js нет принципиальной разницы где будут храниться ваши исполняемые файлы, но мы условимся хранить наши файлы на диске C:/NodeServer/hostname.loc, а в папку hostname.loc добавим файл index.js со следующим сожержимым

var http = require('http');//Подключаем подуль приема и отправки по протоколу Http
//Создаем объект нового сервера
http.createServer(function (req, res) {
  //Передаем заголовок
  res.writeHead(200, {'Content-Type': 'text/plain'});
  //Выводим запись
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');//Указываем адрес хоста
//Уведомляем в консоли о том, что запущен наш сервер
console.log('Server running at http://127.0.0.1:1337/');

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

node C:/NodeServer/hostname.loc/index.js

start-node-js-hello-worldЕсли все удачно установилось и запустилось, то увидите следующее собщение

start-node-js-hello-world-result

Теперь отрываем браузер и вводим адрес http://127.0.0.1:1337/ и убеждаемся, что у нас вышла долгожданная строка

node-js-result-in-browser-hw

 

На этом все, Node.js установлен и готов для дальнейшей работы.

 

Часть 1. Написание игры «Крестики и нолики» под Android. Подготовка инструментов

👁 527 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Итак, с сегодняшнего дня начнем цикл статей, которые пошагово разъяснять как написать свою собственную игру на примере классической игры «Крестики и нолики», другое забавное название для данной игры «Tic-Tac-Toe» 🙂  . Плюс ко всему этому попытаемся загрузить, после написания, на Google Play, чтобы игроманы смогли оценить наше детище 🙂 .

В данной части разъясним что нам необходимо для полноценной разработки игры:

  • Android Studio — полнофункциональный официальный инструмент разработки для кроссплатформенной разработки приложений для Android, который еще содержит и эмулятор для виртуального тестирования программ;
  • JDK — набор инструментов для разработки программ, работающих на Java. Наш инструмент Android Studio работает на основе Java машины, поэтому нам необходимо ее установить на компьютер, прежде чем устанавливать Android Studio;
  • Inkscape — векторный редактор для рисования наших ресурсов, таких как кнопки, иконки, фоны и т.д. Это необязательное условие, можете использовать другой, на котором набита рука.

1. Установка JDK

Установка JDK ничем не отличается от установки любой другой программы. Скачиваем отсюда и я не буду вдаваться в дебри установки, потому что нет никаких сложностей. Единственное, если у вас Windows, после установки откройте командную строку и введите команду

java -version

Если установка удачная, то должна вернуть версию программы

 

java-console-version-result

если это не так, то следует открыть «переменные среды» вашего компьютера

java-variable-java-home

 

и создать новую пременную JAVA_HOME с параметром пути, где установлена ваша JDK и все — JDK у вас установлена, перейдем к следующему пункту.

2. Установка Android Studio

Скачать Android Studio можно на официальном сайте. Установка Android Studio не должно иметь затруднений, вам лишь необходимо указать место для установки и совершать действия следуя подсказкам установщика. После установки Android Studio нам необходимо настроить программу для дальнейшей разработки — будет во второй части.

3. Установка Inkscape

Считаю, что данная бесплатная программа ничем не хуже платных и нашпигованных и платных Adobe Illustrator, CorelDraw… Не все при деньгах и не все без совести, чтобы пользоваться кряками 🙂 .

Заключение

В данной статье рассмотрели инструменты, которые нам пригодятся для разработки простой игры «Крестики и нолики» под Android. Следуйте в ногу обновлениям и скачивайте последние версии против привычности работы на старых 🙂 . В следующей части рассмотрим Android Studio по подробнее и займемся настройкой и запуском тестовой программы.