SlideShare a Scribd company logo
1 of 47
Download to read offline
Собачники против кинофобов
О чём мы будем говорить
1. Что такое @ в PHP и что она реально делает.
2. Примеры.
3. Мифы.
4. Альтернативы.
Что такое @ в PHP и что она реально делает
• В PHP для всех ошибок вызывается error_handler.
• Кроме фаталов!
• @ просто “скидывает” error_reporting в 0.
Что такое @ в PHP и что она реально делает
root@ubuntu:~# php -dvld.active=1 -r "@unlink('noSuchFile');"
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > BEGIN_SILENCE ~0
1 SEND_VAL 'noSuchFile'
2 DO_FCALL 1 'unlink'
3 END_SILENCE ~0
4 > RETURN null
branch: # 0; line: 1- 1; sop: 0; eop: 4
path #1: 0,
root@ubuntu:~#
Что такое @ в PHP и что она реально делает
ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY)
{
...
if (EG(error_reporting)) {
do {
EG(error_reporting) = 0;
...
Примеры
$filepath = "/tmp/some.file";
unlink($filepath);
Примеры
$filepath = "/tmp/some.file";
if (file_exists($filepath)) {
unlink($filepath);
}
Примеры
$filepath = "/tmp/some.file";
if (file_exists($filepath)) {
// race condition
unlink($filepath);
}
Примеры
$filepath = "/tmp/some.file";
@unlink($filepath);
Давайте разберемся!
• Файл или дериктория не сушествуют.
• Не доступны для редактирования — лок.
Давайте разберемся!
• Недостаточно прав. (chown, fopen, file_get_contents, mkdir).
• Файл существует. (mkdir, fopen, move_uploaded_file).
• Директория существует. (copy, fopen, file_put_contents, rename, unlink).
• Не директория, а файл. (rmdir, scandir, move_uploaded_file).
• Директория не пуста. (rmdir).
• Не достаточно места на диске. (file_put_contents).
Примеры
public function exists($key)
{
$cacheFile = $this->getCacheFile($this->buildKey($key));
return filemtime($cacheFile) > time();
}
Примеры
public function exists($key)
{
$cacheFile = $this->getCacheFile($this->buildKey($key));
if (file_exists($cacheFile)) {
return filemtime($cacheFile) > time();
} else {
return false;
}
}
Примеры
public function exists($key)
{
$cacheFile = $this->getCacheFile($this->buildKey($key));
if (is_writeable($cacheFile)) {
return filemtime($cacheFile) > time();
} else {
return false;
}
}
Примеры
public function exists($key)
{
$cacheFile = $this->getCacheFile($this->buildKey($key));
return @filemtime($cacheFile) > time();
}
Давайте разберемся!
• %sstat failed for %s.
• Unknown file type (%d).
• Didn't understand stat call.
Примеры
$value = $cache[$key];
Примеры
$value = @$cache[$key];
Давайте разберёмся!
• Undefined index.
• Undefined variable.
• ArrayAccess.
Давайте разберёмся!
$handler->renderCallStackItem(
@$trace[$i]['file'] ?: null,
@$trace[$i]['line'] ?: null,
@$trace[$i]['class'] ?: null,
@$trace[$i]['function'] ?: null,
$trace[$i]['args'], $i + 2
)
Давайте разберёмся!
if (null !== $result = @preg_replace('...', '', $data))
Примеры
Примеры
$a = include('test.php');
Примеры
$a = @include('test.php');
if (!$a) {
$a = [];
}
Давайте разберемся!
! error_reporting = 0 для всего файла !
Примеры
Примеры
@non_existing();
Давайте разберемся!
Не логируется, WSOD !
Примеры
Примеры
@session_start();
ПОТРАЧЕНО
1. DOMDocument
2. ob_get_clean, ob_end_clean
3. posix_isatty
4. unserialize
5. ...
Мифы
• Оператор @ медленный.
• Нельзя узнать, почему была ошибка.
Мифы
ini_set('track_errors', 1); // track_errors по умолчанию Off.
$my_file = @file('non_existent_file');
if (!$my_file) {
die ("Failed opening file: error was '$php_errormsg'");
}
Альтернативы
• Обрабатывать через $php_errormsg.
• Исключения.
Альтернативы
function exception_error_handler($errno, $errstr, $errfile, $errline )
{
if (error_reporting() === 0) {
return false;
}
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
Альтернативы
try {
unlink(non_existing_file);
} catch (ErrorException $e) {
// ...
}
Альтернативы
• Собачки нет, но по сути ничего не поменялось.
• Проблема с отсутствием нормальных исключений — это проблема PHP. Приходится
крутиться…
Альтернативы
• Свой streamWrapper с исключениями.
• Парсинг строки с ошибкой.
Альтернативы
protected static $errors = [
'Permission denied' => 'PermissionException',
'File exists' => 'ExistException',
'Operation not permitted' => 'PermissionException',
'No such file or directory' => 'DoesNotExistException',
'Is a directory' => 'IsDirectoryException',
'cannot be a directory' => 'IsDirectoryException',
'Not a directory' => 'NotADirectoryException',
'Directory not empty' => 'DirectoryNotEmptyException',
'stat failed for' => 'StatException',
'is not a valid stream resource'=>'NotAStreamException',
];
Выводы
• Собака — ещё один инструмент.
• Опасный.
• Будьте осторожны.
• Ждем Exception.
Полезные ресурсы
Если будете писать свой error_handler:
• https://github.com/php-fig/fig-standards/pull/262/
• http://nikic.github.io/
• http://blog.ircmaxell.com/
Спасибо
Вопросы?
Григорий Кочанов — public@grik.net
Александр Макаров — sam@rmcreative.ru
Иван Матвеев — Redjiks@gmail.com
Приложение
HTMLPurifier
ob_get_clean
set_time_limit
include_once
opendir
chmod
Приложение
SwiftMailer
mail
get_magic_quotes_runtime
is_writable
fopen
file_get_contents
unlink
Приложение
Yii2
ob_end_clean
unserialize
posix_isatty
stream_socket_client
strftime
strtotime
mcrypt_module_open
filemtime
filesize
umask
chmod
touch
mkdir
fopen
fwrite
ftruncate
fclose
flock
file_put_contents
copy
rename
unlink
session_start
session_set_save_handler
session_regenerate_id
session_unset
session_destroy
session_write_close
Приложение
Symfony2
posix_isatty
proc_terminate
mb_convert_encoding
highlight_file
inet_pton
getimagesize
stream_select
chmod
chgrp
lchgrp
chown
lchown
mkdir
symlink
file_put_contents
fopen
fwrite
fclose
unlink
rmdir
rename
DOMDocument::schemaValidateSource
DOMDocument::loadXML
DOMDocument::loadHTML
DOMDocument::schemaValidateSource
DOMDocument::load

More Related Content

What's hot

Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupalYury Glushkov
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)ygoltsev
 
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWPositive Hack Days
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grailsguest32215a
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelOleg Poludnenko
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf Conference
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Python
PythonPython
Pythonpelid
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 

What's hot (18)

Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupal
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
 
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
 
Collider
ColliderCollider
Collider
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать Laravel
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
new JavaScript
new JavaScriptnew JavaScript
new JavaScript
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Python
PythonPython
Python
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 

Similar to Cобачники против кинофобов

Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...GeeksLab Odessa
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIIlya Chesnokov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном кодеKolya Korobochkin
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7dDarkByte2
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7dDarkByte2
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7dDarkByte2
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7dDarkByte2
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7dDarkByte2
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Open-IT
 

Similar to Cобачники против кинофобов (20)

UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
 
About Python
About PythonAbout Python
About Python
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
 
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
TT
TTTT
TT
 
Template Toolkit – зло!?
Template Toolkit – зло!?Template Toolkit – зло!?
Template Toolkit – зло!?
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
бегун
бегунбегун
бегун
 
Ruby
RubyRuby
Ruby
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
 
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”
 

More from Lidiya Myalkina

Сеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор РядомСеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор РядомLidiya Myalkina
 
Презентация по программам от Доктор Рядом
Презентация по программам от Доктор РядомПрезентация по программам от Доктор Рядом
Презентация по программам от Доктор РядомLidiya Myalkina
 
РуСофт - система видеотрансляций
РуСофт - система видеотрансляцийРуСофт - система видеотрансляций
РуСофт - система видеотрансляцийLidiya Myalkina
 
концепции сайта термопро_русофт
концепции сайта термопро_русофтконцепции сайта термопро_русофт
концепции сайта термопро_русофтLidiya Myalkina
 
Зеленоградский Центр Новостей
Зеленоградский Центр НовостейЗеленоградский Центр Новостей
Зеленоградский Центр НовостейLidiya Myalkina
 
Спортивный Зеленоград
Спортивный ЗеленоградСпортивный Зеленоград
Спортивный ЗеленоградLidiya Myalkina
 
Развитие ребенка в Зеленограде
Развитие ребенка в ЗеленоградеРазвитие ребенка в Зеленограде
Развитие ребенка в ЗеленоградеLidiya Myalkina
 
Мобильное приложение ЗелКафе
Мобильное приложение ЗелКафеМобильное приложение ЗелКафе
Мобильное приложение ЗелКафеLidiya Myalkina
 
Наука для всех - Иновационный образовательный проект
Наука для всех - Иновационный образовательный проектНаука для всех - Иновационный образовательный проект
Наука для всех - Иновационный образовательный проектLidiya Myalkina
 
Связь с городом
Связь с городомСвязь с городом
Связь с городомLidiya Myalkina
 
Приложение «Расписание автобусов Зеленограда»
Приложение «Расписание автобусов Зеленограда»Приложение «Расписание автобусов Зеленограда»
Приложение «Расписание автобусов Зеленограда»Lidiya Myalkina
 
Xpir – мы находим тендеры для вас!
Xpir – мы находим тендеры для вас!Xpir – мы находим тендеры для вас!
Xpir – мы находим тендеры для вас!Lidiya Myalkina
 
РуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайтыРуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайтыLidiya Myalkina
 
РуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайтыРуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайтыLidiya Myalkina
 
видео трансляции русофт (презентация)
видео трансляции русофт (презентация)видео трансляции русофт (презентация)
видео трансляции русофт (презентация)Lidiya Myalkina
 
Видео конференции Русофт
Видео конференции РусофтВидео конференции Русофт
Видео конференции РусофтLidiya Myalkina
 
Видео конференции Русофт
Видео конференции РусофтВидео конференции Русофт
Видео конференции РусофтLidiya Myalkina
 
Медиа продукт «Видеотрансляция»
Медиа продукт «Видеотрансляция»Медиа продукт «Видеотрансляция»
Медиа продукт «Видеотрансляция»Lidiya Myalkina
 

More from Lidiya Myalkina (20)

Сеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор РядомСеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор Рядом
 
Презентация по программам от Доктор Рядом
Презентация по программам от Доктор РядомПрезентация по программам от Доктор Рядом
Презентация по программам от Доктор Рядом
 
РуСофт - система видеотрансляций
РуСофт - система видеотрансляцийРуСофт - система видеотрансляций
РуСофт - система видеотрансляций
 
концепции сайта термопро_русофт
концепции сайта термопро_русофтконцепции сайта термопро_русофт
концепции сайта термопро_русофт
 
Сайт Zelao.ru
Сайт Zelao.ruСайт Zelao.ru
Сайт Zelao.ru
 
Зеленоградский Центр Новостей
Зеленоградский Центр НовостейЗеленоградский Центр Новостей
Зеленоградский Центр Новостей
 
Спортивный Зеленоград
Спортивный ЗеленоградСпортивный Зеленоград
Спортивный Зеленоград
 
Развитие ребенка в Зеленограде
Развитие ребенка в ЗеленоградеРазвитие ребенка в Зеленограде
Развитие ребенка в Зеленограде
 
Мобильное приложение ЗелКафе
Мобильное приложение ЗелКафеМобильное приложение ЗелКафе
Мобильное приложение ЗелКафе
 
Куда пойдём
Куда пойдёмКуда пойдём
Куда пойдём
 
Наука для всех - Иновационный образовательный проект
Наука для всех - Иновационный образовательный проектНаука для всех - Иновационный образовательный проект
Наука для всех - Иновационный образовательный проект
 
Связь с городом
Связь с городомСвязь с городом
Связь с городом
 
Приложение «Расписание автобусов Зеленограда»
Приложение «Расписание автобусов Зеленограда»Приложение «Расписание автобусов Зеленограда»
Приложение «Расписание автобусов Зеленограда»
 
Xpir – мы находим тендеры для вас!
Xpir – мы находим тендеры для вас!Xpir – мы находим тендеры для вас!
Xpir – мы находим тендеры для вас!
 
РуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайтыРуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайты
 
РуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайтыРуСофт разрабатывает качественные уникальные сайты
РуСофт разрабатывает качественные уникальные сайты
 
видео трансляции русофт (презентация)
видео трансляции русофт (презентация)видео трансляции русофт (презентация)
видео трансляции русофт (презентация)
 
Видео конференции Русофт
Видео конференции РусофтВидео конференции Русофт
Видео конференции Русофт
 
Видео конференции Русофт
Видео конференции РусофтВидео конференции Русофт
Видео конференции Русофт
 
Медиа продукт «Видеотрансляция»
Медиа продукт «Видеотрансляция»Медиа продукт «Видеотрансляция»
Медиа продукт «Видеотрансляция»
 

Cобачники против кинофобов