ݺߣ

ݺߣShare a Scribd company logo
Собачники против кинофобов
О чём мы будем говорить
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 (18)

Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
Andrew Shitov
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupal
Yury Glushkov
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
phpclub
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
ygoltsev
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
Positive Hack Days
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Moscow.pm
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Moscow.pm
Collider
ColliderCollider
Collider
ygoltsev
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать Laravel
Oleg Poludnenko
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
Positive 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 Us
ZFConf Conference
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
Andrew Shitov
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
Anatoly Sharifulin
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupal
Yury Glushkov
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
phpclub
plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)plwww (24.03) MEPHI (PHDays)
plwww (24.03) MEPHI (PHDays)
ygoltsev
Юрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWWЮрий Гольцев - Сервис PLWWW
Юрий Гольцев - Сервис PLWWW
Positive Hack Days
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Moscow.pm
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Moscow.pm
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать Laravel
Oleg Poludnenko
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
Positive 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 Us
ZFConf Conference
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
Andrew Shitov

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

UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
Alexander Makarov
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Timur Safin
About Python
About PythonAbout Python
About Python
Yury Yurevich
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
megakott
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 PI
Ilya Chesnokov
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
Template Toolkit – зло!?
Template Toolkit – зло!?Template Toolkit – зло!?
Template Toolkit – зло!?
Anatoly Sharifulin
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
Kolya Korobochkin
Javascript 1
Javascript 1Javascript 1
Javascript 1
Andrey Dolinin
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
Sergey Platonov
Ruby
RubyRuby
Ruby
Andrey Sitnik
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”
Open-IT
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Timur Safin
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
megakott
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 PI
Ilya Chesnokov
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
Kolya Korobochkin
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
Sergey Platonov
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d1f5694b92ab2c96e2038b33a8b0ceb7d
1f5694b92ab2c96e2038b33a8b0ceb7d
DarkByte2
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”
Open-IT

More from Lidiya Myalkina (20)

Сеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор РядомСеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор Рядом
Lidiya Myalkina
Презентация по программам от Доктор Рядом
Презентация по программам от Доктор РядомПрезентация по программам от Доктор Рядом
Презентация по программам от Доктор Рядом
Lidiya Myalkina
РуСофт - система видеотрансляций
РуСофт - система видеотрансляцийРуСофт - система видеотрансляций
РуСофт - система видеотрансляций
Lidiya Myalkina
концепции сайта термопро_русофт
концепции сайта термопро_русофтконцепции сайта термопро_русофт
концепции сайта термопро_русофт
Lidiya Myalkina
Сайт Zelao.ru
Сайт Zelao.ruСайт Zelao.ru
Сайт Zelao.ru
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
Сеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор РядомСеть семейных клиник Доктор Рядом
Сеть семейных клиник Доктор Рядом
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

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