Архив рубрики: Коддинг

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

Обучение JS и разработка игры Самолётик. Шаг 2.

В подготовительной части  мы подгружали 2 JS файла:

<script type="text/javascript" src="js/three.js"></script>
<script type="text/javascript" src="js/step1.js"/></script>

Если про 1 я упоминал — это сам 3D фреймфорк, то файл «step1.js», то то что нам предстоит создать.

Преступим.

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

Нам нужно создать соответствующие объекты. three.js содержит «по умолчанию» ряд стандартных графических объектов, такие как шар, куб, цилиндр, пирамида и тд. — подробнее можно глянуть в описании ФВ.

Итак с объектами разобрались — но игра это не только объекты, это и «камера» от лица который мы видим «сцену» , так же это освещение и управление объектами. Для удобства создания и обновления всех объектов создадим «основной» модуль-функцию, пусть называется  «init»:

window.addEventListener('load', init, false);

function init() {
	// тут создаем сцену - камеру
	createScene();

	// тут добавляем свет, а то темно будет
	createLights();

	// тут появляются чать наших объектов, 
        // еще не все что нужно, но уже что-то
        // Сам самолетик / поверхность для полета будет море / облака
	createPlane();
	createSea();
	createSky();

	// здесь в зависимости от "контроллов",
        // мы будем менять положение наших объектов 
	// а так же генерировать изменения ландшавта
	loop();
}

 

Давайте начнем с самого простого и понятного — наших 3D объектов :

Самолетик:

 

Обучение JS и разработка игры Самолётик. Шаг 1.

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

Итак ШАГ 1.

Создаем папку «Самолетик», я это сделал на рабочем столе.

В этой папке создаем файл index.html

Делаем в нем следующий код:

<!DOCTYPE html>
<html lang="en" class="no-js">
 <head>
 <meta charset="UTF-8" />
 <title>Самолетик: Часть 1 </title>
 <link rel="stylesheet" type="text/css" href="css/styles.css" />
 <script type="text/javascript" src="js/three.js"></script>
 <script type="text/javascript" src="js/step1.js"/></script>
 </head>
 <body>
 <div class="world" id="world"></div>
 </body>
</html>

Потом внутри делаем еще 2 папки «css» и «js», и

Идем на сайт http://threejs.org/build/three.min.js и скачиваем последнюю версию самого фреймворка или скачиваем ее ОТ МЕНЯ  (версия скачана 12.07.2016), чтобы точно работало, и кидаем ее в папку «js» (имя должно быть three.js)

В папке «css» создаем файл  styles.css, со след наполнением (ОН ЖЕ,только с заготовкой для 2 части):

.world {
 position: absolute;
 width: 100%;
 height: 100%;
 overflow: hidden;
 background: -webkit-linear-gradient(#e4e0ba, #f7d9aa);
 background: linear-gradient(#e4e0ba, #f7d9aa);
}

Это наш «мир» а именно, фон.

Итак подготовка сделана. Осталось творить — ШАГ 2.

Статья для habrahabr

Решил попробовать стать полноценным жителем habrahabr.ru. Для получения заветного «ключа» нужно представить относительно полезную/интересную статью или ее перевод, или обзор по технологии — в общем что-то связанное с IT и не слишком «замыленное» на Habre.

Так как сейчас начал изучать JavaScript  в виду его активного роста, простоты изучения и увеличения возможностей за счет различный фреймворков, для создания web приложений — ориентир на SPA ( SPA в WiKi )

Кстати для начала разработки SPA сайтов и приложений кроме JS нужно еще знание HTML / HTML5 , CSS, AJAX.

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

Как стать профессиональным веб-разработчиком: практическое руководство

А для «набивания руки» в JS использовал игру codecombat.com , которая вплоне дает понимания как основ программирования , так и использования JS в принципе. PS.  в CodeCombat можно выбрать не только JavaScript, но и например Phyton, для изучения — вперед дерзайте!

PS. Так же у каждого разработчика должна быть под рукой статься с Более 350 бесплатных инструментов для разработчиков так же на Habre.

По совету той же статься после основ, стал искать различные фреймворки и проекты с открытым исходным кодом. И ткак как мне всегда нравились игры нашел статью по созданию игры The Aviator — летающий самолетик который уклоняется от камней и собирает «топливо», в которой есть не только исходники, но и «пошаговое описание» как эту игру сделать:

Делаем игру «Самолетик» используя Three.js

Раз пример будет использовать Three.js, то соответственно наш путь идет на  http://threejs.org/ — где имеется полное описание для данного FW с примерами. Туду нужно заглянуть тем кто заинтересуется как работают «потрошки».

В рамках обучения лучше не просто повторить, то что уже кто-то сделал, а попробовать немного изменить и посмотреть что получиться. Сразу же возникло желание немного её упростить и переделать на «ловить» буквы и составлять из них слова — само собой расчет на аудиторию в 4-6 лет.

Ну как говориться если хочешь чему то научиться, попытайся обучить этому другого)…

Итак ШАГ 1.

 

 

 

Ускоряем выполнение VBA кода, а так же убираем ненужные уведомления (всплывающие окна).

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

Excel.Application.ScreenUpdating = False    ‘убирает обновление экрана. Можно использовать почти всегда — лишняя нагрузка на процессор.

Excel.Application.DisplayAlerts = False     ‘убирает всплывающие окна. Совсем. Использовать аккуратно.

Excel.Application.EnablEevents = False     ‘убирает обработку событий в Excel. События необходимо отключать для исключения зацикливания или выполнения незапланированных действий. Например при внесении одним макросом значения на лист и лишнего (не нужного) выполнения другого макроса по обработки события добавления значения на лист — который, как вариант, рассчитан на ручной ввод. Использовать только при необходимости.

Excel.Application.Calculation = xlCalculationManual     ‘убирает автопересчет формул и зависимых от них объектов. Можно и нужно использовать почти всегда — лишняя нагрузка на процессор, особенно если формулы использующие массивы или поиск.

Не забываем ОБЯЗАТЕЛЬНО все вернуть обратно, чтобы пользователи не ругались = ) :

Excel.Application.ScreenUpdating = True
Excel.Application.DisplayAlerts = True
Excel.Application.EnableEvents = True
Excel.Application.Calculation = xlCalculationAutomatic

 

Excel POWER! — 1 Статья

Начинаю серию примеров по возможному использованию Excel саааавсем не так, как вы привыкли.

VBA дает Excel-ю кучу возможностей по оптимизации своего рабочего времени.

Как только у меня будет возникать какая то задача, которую я буду решать через Excel, то выложу пример реализации в Excel.

Итак сегодня у меня возникла следующая задача:

Есть одна ИС в которую пользователи добавляют файлы, она недавно стартовала, и теперь пользователям нужно в нее добавить МнОгО файлов. И тут обнаружился один неприятный факт — в ИС нельзя добавлять файлы, в имени которых есть больше 1 точки (для типа файла).

Мотивация: Переименовать 1 файл в ручную, например такой «2015.05.19 План раз. СМ Y16-17 (сн.) v2.1», займет примерно 10-15 сек. Вот только таких файлов около 2000, а это уже 15*2000/60 = больше 8 часов.

Вот что я сделал на Excel, используя возможности VBA — мои трудозатраты с «вспоминанием» как бы это можно сделать — около 4 часов.

Через VBA есть возможность подключить выполнение скриптового языка File System Object (FSO). Про него я наверное напишу отдельную статейку, уж больно много у него возможностей.

Итак даем пользователю возможность выбрать файл, в настройках он выбирает символ который должен быть заменен и новый символ для замены и говорит что поменять нужно во всех файлах из папки, где расположен данный файл. Потом через  FSO получаем список всех файлов в той же папке и начинаем по ним пробегать, переименовывая. Для создания нового имени сделана отдельная мини функция, чтобы случайно не «переименовать» разрешение у файла.

Что в итоге — написав 1 раз инструмент под конкретную задачу использовать его можно сколько угодно раз + мы получили экономию во времени СРАЗУ, получив в плюсе больше 4 часов.

Работайте продуктивно).

А вот и сам файл:

ReName_v1

ПС. ах да), все что выкладываю, предназначено для ОЗНАКОМЛЕНИЯ!, и используется на ваш страх и риск, я никакой ответственности за ваши действия нести не буду!

Как научиться SQL?

Ресурсы которые стоит почитать:
http://www.sql-tutorial.ru/ru/content.html
http://www.sql.ru/docs/sql/u_sql/index.shtml

По 2 ссылке онлайн версия книги «Понимание SQL» Мартина Грабера. Она же в FB2 формате, для прочтения офлайн:

Gruber_Ponimanie-SQL

И еще 1 очень неплохая книга для самоподготовки по SQL:

rukovodstvo_SQL

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

SELECT
INSERT
UPDATE
DELETE
FROM
GROUP BY
WHERE
HAVING
INNER JOIN
ORDER BY
UNION
DISTINCT

Нужно понимать что вариаций SQL очень много, практически в каждой БД используется своя модификация, которая часто очень сильно увеличивает возможности базового языка. Для оптимизации своего рабочего места обычно используется Excel или Access, в которых использована модификация Jet SQL. Она приближена к стандарту ANSI для SQL (общий стандарт — запросы написанные на котором должны выполняться на любой его модификации), который в книгах обычно и описывают, и позволяет использовать некоторые встроенные функции VBA.

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

Нужно рассказать что делает запрос.
1(простая выборка) — элементарный уровень ,
2(объединение таблиц) и 3(группировки) — базовый уровень,
4(все из предыдущих, используемое совместно + параметры) в дополнении к описанию нужно исправить 4 умышленные ошибки — расширенный уровень.

1)
select * from vw_income_docs as v where v.tpdprt=706 and v.id > 24485911073 order by v.id

2)
select t1.e_collection, t1.e_tma_category, t1.e_tma_tm, t1.e_tma_ware_subgroup, k.code_model,t1.moniker from
(select t.e_collection, t.e_tma_category, t.e_tma_tm, t.e_tma_ware_subgroup, t.id_mmodel,t.moniker from VW_WARE as t
where t.moniker like «CMT703T0*») as t1 inner join vx_model as k on k.id_model=t1.id_mmodel

3)
select count(t1.FirstQ) as kolvoM from (SELECT First(QuotaAW1213.Quota) AS [FirstQ]
FROM QuotaAW1213
GROUP BY QuotaAW1213.ShopID
HAVING (((First(QuotaAW1213.Quota))=»A1″))) as t1

4)
PARAMETERS dateBegin DateTime, tm Text ( 255 ), TGroup Text ( 255 ), Divs Text ( 255 ) ;
SELECT t2.model, t4.TM, t2.name, t2.TPGroup, t2.price, t3.Nshop, t3.upa, t1.date, t1.type, t1.pf, t1.plan
FROM ((
select ph, [date], ‘продажи ОЦ’, ‘факт’, RSumm from tren_prod where [date] between [dateBegin] and [dateEnd] and [Division]=[Divs]
union all
select ph, [date], ‘продажи РРЦ’ as type, ‘план’ as pf, plan*price from tren_plan_zakaz_union where [date] between [dateBegin] and [dateEnd] and [Division]=[Divs]
union all
select ph, [date], ‘продажи ОЦ’ as type, ‘план’ as pf, plan*price*(1-discount) from tren_plan_zakaz_union where [date] between [dateBegin] and [dateEnd] and [Division]=[Divs]
) AS t1
INNER JOIN (SELECT max(Nshop_tren.Nshop) AS Nshop, max(Nshop_tren.pres) FROM Nshop_tren WHERE Division=RD GROUP BY ph) AS t3 ON t1.ph = t3.ph) INNER JOIN tmp_art AS t2 ON t1.ph = t2.PH
WHERE (t2.RD=TRUE OR t2.DD=true) AND t2.TM=[tm] AND (t2.Group=[TGroup] or t2.Cat=[TGroup]);

Учебник SQL часть 2.1 — Select запросы.

Запрос с использованием Select позволяет из всего списка записей получить только  те которые удовлетворяют условиям.
Классический запрос на выборку SQL имеет конструкцию ( в скобках необязательная часть) :
SELECT  <какие столбцы нужны, через «,» в формате «таблица.имя_столбца»>  FROM <из какой таблицы>  (WHERE <условие на значение>)
или
Select t.ФИО From Сотрудники as t Where t.ФИО Like «*Иванов*»
или этот же запрос для запуска на выполнение из Access VBA, с запросом на ввод данных для поиска будет выглядеть так:
DoCmd.RunSQL «Select t.ФИО From Сотрудники as t Where t.ФИО Like «» *» & InputBox ( «Введите фамилию для поиска», «Поиск по сотрудникам», «Вводить тут») & «* «
 
 —  данный запрос выдаст все записи из таблицы сотрудники, в которых в поле ФИО встречается «Иванов», знак «*» означает что перед или после «Иванов» могут быть еще какие то символы\слова и также попадут записи со значениями вроде «Иванова Наталья» или «Саломонов-Иванов Роман»

 

Учебник SQL часть 2 — Основные типы запросов.

Рассмотрим основные запросы SQL.

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

SELECT – выбрать строки из таблиц;
INSERT – добавить строки в таблицу;
UPDATE – изменить строки в таблице;
DELETE – удалить строки в таблице;

и sql запросы имею вид:

SELECT * FROM <имя_таблицы>;

INSERT INTO <имя_таблицы> (<столбец1>, <столбец2>, … , <столбецN>) VALUES ( ‘<значение1>’, ‘<значение2>’, … , ‘<значениеN>’ );

UPDATE <имя_таблицы> SET <столбец1> = ‘<значение1>’ , <столбец2> = ‘<значение2>’ WHERE <столбецN> = ‘<значениеN>’;

DELETE FROM <имя_таблицы> WHERE <столбец1> = ‘<значение1>’;

ВНИМАНИЕ! Запрос на удаление удалит ВСЮ запись, а не только конкретное значение столбца!

Учебник SQL часть 1 — Введение

Учебник по SQL. Часть 1.

Введение.

Что вообще такое SQL? Для многих рядовых сотрудников которых вдруг огорошили, что они теперь будут работать в какой-то СУБД и им придется вытаскивать оттуда информацию через SQL данная аббревиатура ничего не говорит, но не все так сложно как может показаться на первый взгляд. В любом обычном разговорном языке есть правила, при помощи которых создаются предложения, а SQL или Structured Query Language (язык структурированных запросов) по сути является сводом таких-же правил, при помощи которых мы сообщаем компьютеру что хотим из БД получить используя довольно простые логические конструкции. Как и обычные языки, которые имеют различные наречия и 2 человека разговаривающие на одном и том-же, вроде бы английском могут слабо понимать друг друга, язык SQL имеет несколько вариантов, основной или стандартный поддерживается комитетом стан­дартов ANSI, и соответственно называется ANSI SQL, отдельные же реализации носят собственные имена (PL-SQL, Transact-SQL и т.д.) и зачастую относятся к конкретным СУБД например PL-SQL относится к Oracle и какой не то большой и сложный запрос на этом языке может быть не понятен например Access, но за некоторыми исключениями, конструкции построенные на ANSI SQL будут понятны всем СУБД. Стандартный ANSI SQL язык состоит всего из нескольких слов, другие же реализации могут включать другие слова-функции. Мы будем рассматривать в основном Jet SQL применяемый к Access и vba, который за некоторыми функциями соответствует стандарту ANSI SQL-92.
Синтаксис Jet SQL (далее если встречается sql, имеетca ввиду именно jet sql) :
Операторы:
SELECT — запрос на выборку данных
DELETE — запрос на удаление данных
CROSTAB — запрос на суммирование данных из нескольких таблиц
ACTION — запрос на изменение информации, также возможно создание новых таблиц\полей
PARAMETR — запрос с изменяемым (задаваемым пользователем) условием
INTO — указывает название новой таблицы в простом запросе на создание таблицы на основе запросы на выборку
FROM — указывает откуда получать данные
WHERE — указывает условие на выборку данных
ORDER BY — указывает условие на сортировку данных
AS — указывает название нового поля\(имени самого запросе в сложных запросах) в запросе
DISTINCTROW
ASC[ENDING]
DESC[ENGING]
AND
OR
IS NULL

Функции:
AVG
YEAR
MONTH
DATE
NOW
DATEPART
FORMAT$
COUNT