[Из песочницы] Почему CRM не работают |
Метки: author BestWebService erp- системы crm- сrm-системы |
Численное решение уравнения свободных колебаний струны для специальных начальных условий на Python |
#!/usr/bin/env python
# -*- coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
h=0.1#шаг по x
t=0.05#шаг по t
a=1#отношение начального натяжения T к массе единице длинны
l=(a*t/h)**2#расчётный коэффициент
n=11#сетка из 11 узлов по x (i = 0, 1, ... 10)
m=17#провести вычисления для 16 слоев по t (j = 0, 1, ... 16).
x=[h*i for i in range(0,n)]# координата x
U= np.zeros([m,n])# матрица для размещения расчётных значений
for j in range(0,m): #внесение условий
for i in range(0,n):
U[0,i]=x[i]*(x[i]**2-1)#начальные условия
U[1,i]=U[0,i]#начальные условия
U[j,0]=0#граничные условия
U[j,10]=0#граничные условия
for j in range(1,m-1):#внесение решения
for i in range(1,n-1):
U[j+1,i]=2*(1-l)*U[j,i]+l*(U[j,i+1]+U[j,i-1])-U[j-1,i]
y0=[];y5=[];y10=[];y16=[]#списки для вывода слоёв
for i in range(0,n):
y0.append(U[0,i])
y5.append(U[5,i])
y10.append(U[10,i])
y16.append(U[16,i])
plt.title(' Решение задачи на 0ом, 5-см, 10-см и 16-см \n временных слоях', size=12)
plt.plot(x, y0, label="слой -0")
plt.plot(x, y5, label="слой -5")
plt.plot(x, y10, label="слой -10")
plt.plot(x, y16, label="слой -16")
plt.legend()
plt.grid()
plt.show()
Метки: author Scorobey разработка под windows математика python колебаные струны обучающий комплекс |
Настройка среды разработки Webpack 3 + Angular 4: от сложного к простому |
{
"name": "angular-project",
"version": "1.0.0",
"description": "angular scaffolding",
"author": "maxim1006",
"license": "MIT",
"dependencies": {
//блок необходимых для Angular модулей
"@angular/animations": "^4.3.6",
"@angular/common": "^4.3.6",
"@angular/compiler": "^4.3.6",
"@angular/compiler-cli": "^4.3.6",
"@angular/core": "^4.3.6",
"@angular/forms": "^4.3.6",
"@angular/http": "^4.3.6",
"@angular/platform-browser": "^4.3.6",
"@angular/platform-browser-dynamic": "^4.3.6",
"@angular/router": "^4.3.6",
//модули для hmr
"@angularclass/hmr": "^2.1.1",
"@angularclass/hmr-loader": "^3.0.2",
//polyfills для es5
"core-js": "^2.5.0",
//модуль для работы декораторов в браузере
"reflect-metadata": "^0.1.8",
//модуль для работы с реактивным программированием
"rxjs": "^5.4.3",
//типизация и доп. возможности для js
"typescript": "2.3.4",
//зоны в js, очень интересно, обязательно почитайте
"zone.js": "^0.8.17"
},
"devDependencies": {
//для сборки AoT (Ahead-of-Time Compilation) angular
"@ngtools/webpack": "^1.6.2",
//поддержка типизации, чтобы не ругался typescript
"@types/es6-shim": "^0.31.35",
"@types/jasmine": "^2.5.54",
"@types/node": "^7.0.43",
//routing в приложении
"angular-router-loader": "^0.6.0",
//так как на выходе получится бандл со встроенными темплейтами
"angular2-template-loader": "^0.6.2",
//чтобы не писать префиксы в css
"autoprefixer": "^6.3.7",
//для оптимизации работы typescript в webpack
"awesome-typescript-loader": "^3.2.3",
//если вдруг надо скопировать папку/файл
"copy-webpack-plugin": "^4.0.1",
//для работы с css
"css-loader": "^0.28.5",
"css-to-string-loader": "^0.1.2",
//es6 polyfills
"es6-shim": "^0.35.1",
//для мобильной разработки
"hammerjs": "^2.0.8",
//чтобы webpack работал с html
"html-webpack-plugin": "^2.29.0",
//препроцессор для более удобной работы со стилями
"less": "^2.7.2",
"less-loader": "^4.0.3",
//по завершению сборки сможем вызвать коллбек
"on-build-webpack": "^0.1.0",
//вставляет результат работы webpack на страничку
"raw-loader": "^0.5.1",
//для работы со стилями
"postcss-loader": "^1.3.3",
"style-loader": "^0.17.0",
//линтер
"tslint": "^5.7.0",
//если надо что-нибудь удалить
"rimraf": "^2.6.1",
//чтобы вставить картинки в css в виде base64
"url-loader": "^0.5.8",
//webpack
"webpack": "^3.5.5",
//и его встроенный express сервер
"webpack-dev-server": "^2.7.1"
},
//когда введем в терминале эти команды с помощью npm run __command__ (например npm run serve)выполняться соответствующие команды)
"scripts": {
//Запускаем сервер. При каждом сохранении в вашем редакторе при работе с файлами проекта страничка будет перезагружаться, и вы будете видеть результат. Расскажем подробнее о команде. Для начала запускаем веб-сервер с данными настройками. Если мы хотим видеть в консоли, что с ним происходит (что бандлится и т. д.), используем (флаг --profile); если хотим, чтобы при сохранении в редакторе webpack автоматически обновлял результат, используем (--watch); ну а если хотим видеть проценты компиляции, можем опционально использовать (флаг –-progress).
"serve": "webpack-dev-server --config ./webpack.config.js --profile --watch --progress",
//то же, что и serve, но без перезагрузки страницы
"hmr": "webpack-dev-server --config ./webpack.config.js --profile --watch --progress",
//создаем prod папочку с нашим проектом
"prod": "npm run aot",
//посмотреть как наш проект выглядит в prod, мало ли что
"prodServer": "webpack-dev-server --config ./webpack.config.js --open",
//очищаем ./dist на всякий случай
"clean": "rimraf ./dist",
//нужно, чтобы в webpack.js понять, что мы делаем aot. Делать это необязательно, но для наглядности нужно.
"aot": "webpack",
//тесты для приложения
"test": "karma start"
}
}
{
"rules": {
"no-unused-variable": true,
"curly": true,
"no-console": [
true,
"log",
"error",
"debug",
"info"
],
"no-debugger": true,
"no-duplicate-variable": true,
"no-eval": true,
"no-invalid-this": true,
"no-shadowed-variable": true,
"no-unsafe-finally": true,
"no-var-keyword": true,
"triple-equals": [
true,
"allow-null-check",
"allow-undefined-check"
],
"semicolon": [
true,
"always",
"ignore-interfaces"
],
"variable-name": [
true,
"ban-keywords",
"check-format",
"allow-leading-underscore"
]
}
}
module.exports = {
plugins: [
require('autoprefixer')({
browsers: [
'last 2 versions'
],
cascade: true
})
]
};
{
//Настраиваем компилятор typescript
"compilerOptions": {
"target": "es5",
"module": "es2015",
"declaration": false,
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": true,
"skipLibCheck": true,
"lib": ["es6", "dom"],
"outDir": "./dist/",
"typeRoots": [
"./node_modules/@types/"
]
},
"compileOnSave": false,
"buildOnSave": false,
//наше приложение будет лежать в папке ./src
"include": [
"./src/**/*"
],
//запрещаем typescript обращать внимание на:
"exclude": [
"node_modules/*",
"dist/*",
"dist-serve/*",
"node/*",
"**/*.spec.ts"
],
//настраиваем loader для webpack
"awesomeTypescriptLoaderOptions": {
"forkChecker": true,
"useWebpackText": true,
"useCache": true
},
//нужно для AoT
"angularCompilerOptions": {
"genDir": ".",
"skipMetadataEmit" : true
}
}
"use strict";
//это node модули и webpack плагины, которые понадобятся нам в разработке
const path = require('path');
const fs = require('fs');
const webpack = require('webpack');
const WebpackOnBuildPlugin = require('on-build-webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const AotPlugin = require('@ngtools/webpack').AotPlugin;
//помните, в package.json были команды serve, hmr, prod и т. д.? так вот, текущую команду (например, если вы введете npm run serve, то команда будет называться ‘serve’) можно получить и обработать вот так:
const ENV = process.env.npm_lifecycle_event ? process.env.npm_lifecycle_event : '';
const isStatic = ENV === 'serve';
const isHmr = ENV === 'hmr';
const isProd = ENV === 'prod';
const isTest = ENV === 'test';
const isAot = ENV.includes('aot');
const isProdServer = ENV.includes('prodServer');
//в зависимости от команды, мы будем объяснять webpack что делать
//обычно из webpack.conf.js экспортируется функция, возвращающая объект с настройками
module.exports = function makeWebpackConfig() {
console.log(`You are in ${ENV} mode`); //напомнить что мы запустили
let config = {}; //главный объект с настройками
//если вдруг кто-то выполнит команду npm run prodServer, не выполнив предварительно npm run prod, кидаем напоминалку
if (isProdServer) {
if (!fs.existsSync('./dist')) {
throw "Can't find ./dist, please use 'npm run prod' to get it.";
}
}
//подключаем sourcemaps
if (isHmr || isStatic) {
config.devtool = 'inline-source-map';
} else {
config.devtool = 'source-map';
}
//обозначаем главный файл, который будет создавать webpack. Этот файл доступен в index.html по пути “./ng-app.js”
config.entry = {
'ng-app': './src/app/ng-main.ts'
};
//специально для AoT режима нужно создать другой файл с другим наполнением, так надо…
if (isAot) {
config.entry['ng-app'] = './src/app/ng-main-aot.ts';
}
// Имя файла, который создаст webpack будет 'ng-app’, так как задали filename: '[name].js', также когда запустим prod сборку, результирующий бандл попадет в папку './dist', это указали с помощью path: root('./dist')
config.output = isTest ? {} : {
path: root('./dist'), //root – всего лишь функция, для создания правильных путей относительно папки, в которой находится webpack.config.js
filename: '[name].js'
};
//в свойстве entry при настройке webpack обязательно нужно задать какой-нибудь файл, иначе возникнет ошибка, но в режиме prodServer нам нужно лишь посмотреть на нашу prod сборку. По этой причине и создаем поддельный файл, чтобы сервер ни на что, кроме статики, не отвлекался. Можно в корень проекта, рядом с webpack.conf.js, положить пустой файл webpack-prod-server.js, чтобы в логи сервера не попадала ошибка, что этого файла нет, хотя и без него сервер будет работать.
if (isProdServer) {
config.entry = {
'server': './webpack-prod-server.js'
};
config.output = {};
}
//указываем расширения файлов, с которыми webpack будет работать
config.resolve = {
extensions: ['.ts', '.js', '.json', '.html', '.less', '.svg']
};
//определяем так называемые loaders: если будут вопросы по ним, отвечу в комментариях. Если коротко, тут готовый пример для превращения ts в js, html вставляем в js бандл, less компилируем в css и вставляем в js бандл, картинки до 10 кб в base64 и вставляем в js бандл.
config.module = {
rules: [
{
test: /\.ts$/,
use: isAot ? [{loader: '@ngtools/webpack'}] : [
{
loader: 'awesome-typescript-loader?'
},
{
loader: 'angular2-template-loader'
},
{
loader: 'angular-router-loader'
}
].concat(isHmr ? '@angularclass/hmr-loader?pretty=' + !isProd + '&prod=' + isProd : []),
exclude: [/\.(spec|e2e|d)\.ts$/]
},
{
test: /\.html$/, loader: 'raw-loader',
exclude: [/node_modules\/(?!(ng2-.+))/, root('src/index.html')]
},
{
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: "url-loader?name=[name].[ext]&limit=10000&useRelativePath=true"
},
{
test: /\.less$/,
use: [
{loader: "css-to-string-loader"},
{loader: "css-loader"},
{loader: "postcss-loader"},
{loader: "less-loader"}
]
}
]
};
//если работаем не в режиме тестирования, то подключаем webpack плагины
if (!isTest) {
config.plugins = [
//не останавливать webpack warcher при ошибках
new webpack.NoEmitOnErrorsPlugin(),
//передать текущий режим в наши .ts файлы, как их получить в .ts файлах увидите чуть позже
new webpack.DefinePlugin({
'process.env': {
'STATIC': isStatic,
'HMR': isHmr,
'PROD': isProd,
'AOT': isAot
}
}),
//сделать что-то по окончании сборки
new WebpackOnBuildPlugin((stats) => {
console.log('build is done');
})
]
//если работаем в режиме hmr, то подключить плагин для hmr
.concat(isHmr ? new webpack.HotModuleReplacementPlugin() : []);
}
//если вы вызовете команду ‘npm run prod’, то запустите процесс создания prod сборки с AoT
if (isAot) {
config.plugins = [
//нужно для AoT режима
new AotPlugin({
tsConfigPath: './tsconfig.json',
entryModule: root('src/app/app.module.ts#AppModule')
}),
//Оптимизируем полученный бандл
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
screw_ie8: true,
conditionals: true,
unused: true,
comparisons: true,
sequences: true,
dead_code: true,
evaluate: true,
if_return: true,
join_vars: true
},
output: {
comments: false
},
sourceMap: true
}),
//Копируем нужные нам файлы в ./dist папку (js бандл туда положит сам webpack, а мы перенесем то, что нам понадобится дополнительно)
new CopyWebpackPlugin([
{from: 'index.html', context: './src'},
{from: 'assets/themes/base/fonts/**/*', context: './src'},
{from: 'assets/themes/base/images/other-images/**/*', context: './src'},
]),
new WebpackOnBuildPlugin((stats) => {
console.log('build in aot is done');
})
];
}
//Ну и наконец настроим наш webpack-dev-server
config.devServer = {
contentBase: isProdServer ? "./dist" : "./src",//корневая папка сервера, в prod режиме в ./dist, в режиме разработки в ./src
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
}, //стандартные заголовки для rest запросов
historyApiFallback: true, //включаем HTML5 history api, очень удобно 1ой строкой
compress: true,//включаем gzip
quiet: false, //ничего лишнего нам выводить в логи не нужно
inline: isHmr || isStatic || isProdServer, //inline mode
hot: isHmr, //включаем hmr, если в hmr режиме
stats: "minimal",
port: 9000,
//модное окно смерти при ошибке от Webpack
overlay: {
errors: true
},
//Опции для webpack warcher
watchOptions: {
aggregateTimeout: 50,
ignored: /node_modules/
}
};
return config;
};
//делаем правильный путь от текущей директории
function root(__path = '.') {
return path.join(__dirname, __path);
}
// Common
@import "themes/base/styles/common/normalize";
@import "themes/base/styles/common/colors";
@import "themes/base/styles/common/common";
@import "themes/base/styles/common/fonts";
@import "themes/base/styles/common/vars";
// Blocks
// (please, add new blocks in alphabetical order)
@import "themes/base/styles/blocks/app-component";
//нужно для A2+ routing
Loading...
import './ng-polyfills'; //чтобы работало в ie 9+
import …
//в настройках webpack мы прокидывали переменные, тут их ловим
if (process.env.STATIC) {
//console.log("******************You are in Dev mode******************");
platformBrowserDynamic().bootstrapModule(AppModule).then(():any => {});
} else if (process.env.HMR) {
//нужно для hmr в Angular
//console.log("******************You are in HMR mode******************");
bootloader(main);
}
export function main() {
return platformBrowserDynamic()
.bootstrapModule(AppModule)
}
import …
console.log("******************You are in prod mode******************");
enableProdMode();
platformBrowser()
.bootstrapModuleFactory(AppModuleNgFactory)
.catch(error=>console.log(error));
require("style-loader!../assets/base.less"); //так подключаем стили через webpack
import …
//настраиваем hammer.js
export class MyHammerConfig extends HammerGestureConfig {
overrides = {
'swipe': {velocity: 0.4, threshold: 20}
}
}
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HomeModule,
NgRoutingModule
],
providers: [
],
bootstrap: [
AppComponent
]
})
export class AppModule {
constructor(public appRef: ApplicationRef) {}
hmrOnInit(store) {
if (!store || !store.state) return;
if ('restoreInputValues' in store) {
store.restoreInputValues();
}
this.appRef.tick();
delete store.state;
delete store.restoreInputValues;
}
hmrOnDestroy(store) {
let cmpLocation = this.appRef.components.map(cmp => cmp.location.nativeElement);
store.disposeOldHosts = createNewHosts(cmpLocation);
store.state = {data: 'yolo'};
store.restoreInputValues = createInputTransfer();
removeNgStyles();
}
hmrAfterDestroy(store) {
store.disposeOldHosts();
delete store.disposeOldHosts;
}
}
import …
const routes: Routes = [
{path: '', redirectTo: '/home', pathMatch: 'full'},
{path: 'home', component: HomeComponent},
//так подключаем lazy модули, отдельные .js файлы webpack для них создаст сам
{path: 'lazy', loadChildren: './modules/lazy/lazy.module#LazyModule'},
{path: '**', component: PageNotFoundComponent},
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [
RouterModule
]
})
export class NgRoutingModule { }
import …
const routes: Routes = [
{path: '', component: LazyComponent},
];
@NgModule({
imports: [SharedModule, RouterModule.forChild(routes)],
exports: [LazyComponent],
declarations: [LazyComponent]
})
export class LazyModule {}
Метки: author maxim1006 javascript angularjs блог компании netcracker angular angular 4 webpack typescript node.js hmr |
«Молодые хотят покупать на бирже акции знакомых стартапов »: тренды финансов по мнению основателя сервиса Robinhood |
Метки: author itinvest финансы в it блог компании itinvest robinhood биржа финансы |
CaptureManager SDK |
Метки: author Xirexel python c++ c# видео аудио |
[Из песочницы] Исправляем 7 распространенных ошибок обработки исключений в Java |
Метки: author Skwazer программирование java java core exeption |
Учим webworkers хорошим манерам |
const worker = new Worker('test.worker.js');
worker.onmessage = (data) => {
if(data.eventName === 'someFuncResult')
someFunc();
else if(data.eventName === 'someFunc2Result')
someFunc2();
};
worker.postMessage({eventName: 'someFunc'});
self.addEventListener('message', (data) => {
if(data.eventName === 'someFunc') {
doSomeFunc();
self.postMessage('someFuncResult');
}
if(data.eventName === 'someFunc2') {
doSomeFunc();
self.postMessage('someFunc2Result');
}
})
Метки: author kwolfy javascript webworkers |
10 лет с Колибри: как это было |
Метки: author Leency программирование open source kolibri kolibrios kolibrin дизайн интерфейс иконки ассемблер с-- |
Использование Akka в Spring-приложении |
Метки: author andd3dfx java akka multithreading spring jmock |
[Из песочницы] Параллелизм против многопоточности против асинхронного программирования: разъяснение |
Метки: author Aliaxandr высокая производительность asp .net асинхронное программирование многопоточное программирование параллелизм потоки задачи |
По тысяче рублей за идею: платим за предложения по автоматизации кошельков QIWI |
Метки: author d_garmashev хакатоны блог компании qiwi qiwi qiwi- кошелек хакатон api тысяча за идею конкурс |
Охотники за багами: тестировщики АСКОН проходят испытание хитрыми вопросами |
|
[recovery mode] Microservice Architecture — сдвиг мотива на цель |
Метки: author PennyLane промышленное программирование анализ и проектирование систем microservice architecture архитектура приложений |
Практика формирования требований в ИТ проектах от А до Я. Часть 5. Сущности предметной области. Немного о стратегиях |
Все, что видим мы, — видимость только одна.
Далеко от поверхности мира до дна.
Полагай несущественным явное в мире,
Ибо тайная сущность вещей — не видна
Омар Хайям
|
PUSH-авторизация в сервисах с помощью мобильного приложения |
Мы рады представить сообществу сервис PushAuth, который позволяет Вашим клиентам авторизироваться с помощью PUSH-сообщений на мобильном устройстве!
Эта идея не новая и многие компании в своих приложениях уже используют эту технологию. Всё выглядит достаточно просто, пока не рассматриваешь вопросы: безопасности, менеджмента устройств и клиентов, совместимости и комфортной работы.
Читать дальше ->
Метки: author rustem_ck системы обмена сообщениями разработка мобильных приложений информационная безопасность php mobile development pushauth ios android |
Security Week 36: черная дыра в ядре Windows, омограф Adobe атакует, крупнейшая утечка данных в США |
Метки: author Kaspersky_Lab информационная безопасность блог компании «лаборатория касперского» klsw win2k adobe beta bot equifax breach dataleak |
[Из песочницы] Как настроить рассылку отчетов из Яндекс. Метрики с помощью R (с нуля) |
Метки: author OMD_Annalect яндекс api api яндекс веб-аналитика яндекс.метрика |
Как мы разрабатывали дашборд для Zabbix и оптимизировали работу дежурных |
Не так давно в компании, где я работаю, решили перейти на новую систему мониторинга — и выбор пал на Zabbix. Аргументы в пользу данного решения приводить не буду (думаю, что это тема для отдельной статьи). До этого у нас была система мониторинга HP SiteScope, но со временем из-за расширения инфраструктуры и увеличения числа объектов мониторинга она стала слишком дорогой.
Метки: author kirilldudka программирование api .net zabbix мониторинг hpsm zabbix api |
Эра IoT: как входить? |
Метки: author mrKron исследования и прогнозы в it блог компании unet iot social iot интернет вещей unet smartphone |
40 эффектных ARKit демок, которые вскоре увидят мир |
Метки: author ConstFlash исследования и прогнозы в it arkit augmented reality ios development дополненная реальность arcore ar.team mobile development |