Страницы

Поиск по вопросам

пятница, 22 марта 2019 г.

Как убрать полосу в заголовке приложения?

Вопрос от новичка программирования Android.
Есть свежесгенерированный, мною ещё не изменённый проект. Несмотря на почти пустое содержание activity_main.xml, в приложении отображается вот-эта полоса:

Как её убрать?


Ответ

Вставь в теге , в которой хочешь убрать title код: android:theme="@android:style/Theme.Black.NoTitleBar"

Найти максимум одномерного массива c помощью рекурсии C++

Не знаю как сделать поиск максимального элемента массива с помощью рекурсии. Есть идеи?
#include
using namespace std; const int n = 5; float a[n + 1]; int fmax(float a[], int nach, int kon);
int main() { int i, k; for(i = 1; i <= n; i++) { cout << "
введи a[" << i << "] "; cin >> a[i]; } for(i = 1; i <= n; i++) { cout << " a[" << i << "]=" << a[i]; } cout << "
"; cout << fmax(a[5], 0, 4); return(0); } int fmax(float a[], int nach, int kon) { int k, kmax; float max; kmax = nach; max = a[nach]; for(k = nach; k <= kon; k++) { if(a[k] > max) { max = a[k]; kmax = k; } } return kmax; }


Ответ

Как и для других рекурсивных функций, достаточно реализовать простейший случай и вызвать эту же функцию с меньшей задачей:
template ForwardIt max_element(ForwardIt first, ForwardIt last, ForwardIt largest) { if (first == last) // no more elements to compare return largest;
if (*largest < *first) // compare with the first element largest = first;
++first; return max_element(first, last, largest); // compare the rest }
если слово template не ясно, то чтобы не отвлекаться (это не важно для понимания рекурсии), можно просто заменить ForwardIt на float*
Простейшим случаем здесь является пустой массив (first == last), в этом случае функция просто возвращает largest аргумент.
Чтобы уменьшить размер задачи, можно отбросить первый элемент first—обновив largest, если необходимо—и вызвать функцию рекурсивно c остатками ввода, чтобы завершить решение задачи.
Для удобства использования, можно определить функцию с двумя параметрами, передавfirst в качестве начального значения для largest—это работает и для пустых массивов, в этом случае возвращается значение равное last
template ForwardIt max_element(ForwardIt first, ForwardIt last) { return max_element(first, last, first); }
Пример использования:
#include
int main() { float a[] = {1, -2, 3, 0.5}; std::cout << *max_element(a, a + sizeof(a) / sizeof(*a)) << '
'; }
Чтобы запустить:
$ g++ max_recursive.cc && ./a.out 3

В данном случае max_element() является так называемой tail-recursive функцией—рекурсивный вызов является хвостовым (последним) в функции и может не потреблять стек. Некоторые компиляторы умеют автоматически преобразовывать подобный код в циклы, например, gcc -O2 для ForwardIt=int* может сгенерировать вот такой ассемблер
# first : %rdi # last : %rsi # largest: %rdx # result : %rax
max_element(int*, int*, int*): cmpq %rsi, %rdi # x = cmp(first, last) movq %rdx, %rax # result = largest je .L2 # if(first == last) return result // if(!x) .L4: # do { movl (%rdi), %ecx # y = *first cmpl %ecx, (%rax) # z = cmp(*result, y) cmovl %rdi, %rax # if (*result < y) result = first //if(z<0) addq $4, %rdi # ++first cmpq %rdi, %rsi # x = cmp(last, first) jne .L4 # } while (last != first) // while(x) .L2: rep ret # return result // rep is amd // brancher bug workaround
Абсолютно такой же код получается из итеративной версии
int* max_element(int* first, int* last, int* largest) { for ( ; first != last; ++first) if (*largest < *first) largest = first;
return largest; }

Как отбросить нули у int

Мне нужно убрать нули слева у чисел (int). Как это сделать?
Пример того что мне нужно:
было | стало 10 | 1 100 | 1 200 | 2 300 | 3 400 | 4 401 | 401 410 | 41
Также нужно посчитать, сколько нулей алгоритм отбросил.


Ответ

int i = 4011100; int k = 0; while (i % 10 == 0) { i = i / 10; k++; } System.out.println("Result:" + i + " Zeroz:" + k);
Result:40111 Zeroz:2

В чем разница между Comparable и Comparator?

Получается, это дублирующие друг друга вещи. Может, есть какие-то реальные различия?


Ответ

Comparator и Comparable - это оба интерфейсы Коллекция (ну хорошо, объект) является Comparable, когда объект может быть как то сравнен с другим объектом. Comparator, в отличие от этого — это способ сравнения объектов.
Пример: школьники на уроке физкультуры, физрук говорит: строиться по росту! - ученики быстренько сравнивают свои росты и строятся - кто выше вперед, кто ниже в хвост строя - это пример реализации Comparable, где в качестве compareTo(сосед) используется рост учеников.
Второй пример: те же школьники. Директор дает задание учителю математики сравнить учеников по успеваемости. Математичка берет журнал и сравнивает учеников по успеваемости - здесь работает compare(ученик1, ученик2) - Comparator'ом выступает математичка. Аналогично компаратором может выступить русичка или трудовик.

Как скруглить края у таблицы (border-radius)

ID Название Цена Цвета Продажи
1 Name 50$ Black, White 104
2 Name 70$ Red, Blue, Grey 255
Нужно скруглить края у всей таблицы. Я уже как не пытался, к чему не применял... Я у первого td скгруглить пытался, у tr пытался. У всей таблице, понятно, не применяется. В общем все никак. Помогите, пожалуйста


Ответ

А на самом деле для кросс-браузерности вот так:): .table_block { border-radius: 10px; -webkit-border-radius: 10px; -moz-border-radius: 10px; -khtml-border-radius: 10px; border: 1px solid #000; display: block; }​ Хотя наверно мой ответ уже неактуален.

Скрыть\показать div

У меня есть N-ое количество таких элементов на странице:

Любой текст
кнопки
//этот элемент скрыт по-умолчанию.
Мне нужно, чтобы при нажатии на Любой текст Показывался div buttons . Причем только тот, который в данном блоке main. Я нашел примерный скриптик и чуть подстроил под себя , но проблема в том, что это открывает кнопки всех элементов. Как это поменять? Ссылка на JSFiddle


Ответ

Еще вариант, который точно работает в хроме: $(".text").click(function() { $(this).closest('.main').find('.buttons').show(); }); UPDATE $(".text").click(function() { e = $(this).closest('.main').find('.buttons'); if(!e.is(':visible')) { $('.buttons').hide(); e.show(); } }); Понял так.

Можно ли эффективно заниматься разработкой мобильных приложений, работая только с эмуляторами?

Планирую попробовать себя в разработке под мобильные платформы. Но т.к. их несколько (iOS, Windows Phone, Android), то располагать оборудованием под каждую систему для меня проблематично. Можно ли полностью заменить аппараты на этих платформах эмуляторами при разработке? Не возникнут ли проблемы при тестировании приложений?


Ответ

Я жесткий противник выкладывания на продакшн приложений не прошедших тестирования на реальном девайсе, хотя аз грешен сам таковые выкладывал :) Потом расхлебывал очень долго и муторно - подчеркну: расхлебывал всегда. Приложение может прекрасно работать на эмуляторе и вообще не запускаться на реальном устройстве или работать не так - примеров хоть отбавляй. Чтобы быть конкретным приведу примеры из мира Android: В эмуляторе по умолчанию (до версии API=10 по-моему), наличествовал джойстик/стрелочки. В одной аппе автор (лет 5 назад, когда реальных аппаратов было еще мало) использовал этот джойстик, в реальном мире джойстиками оснащены единичные аппараты. Результат понятен. На эмуляторе не выкидывается эксепшн если в UI потоке начать читать через HTTP, на реальном устройстве выше ICS выкидывается эксепшн с требованием разместить чтение вне UI потока. На эмуляторе невозможно протестировать всякие разные датчики (уже говорилось выше) Эмулятор не поддерживает прием многотомных (multipart) SMS сообщений - можно принимать только single part SMS сообщения С другой стороны, и это важно подчеркну, без эмулятора тоже совсем туго. Можно насоздавать тучу эмуляторов и проверить свое приложение в разных экзотических случаях (например как будет работать если не будет карты памяти, что будет если разрешение экрана будет минималистичным и т.д.)

Как понять что можно приступать к фрилансу [закрыт]

Занимаюсь разработкой сайтов уже 4 года (с 10 лет). Да, согласен возраст мой ещё не большой, но ещё 4 года писать сайты которые нужны мне, уже так сказать не в радость. Как мне понять что я уже готов к фрилансу и как ко мне будут относиться люди которым будут нужны сайты.


Ответ

Боюсь, что они будут относиться к вам так, как и стоит этого ожидать - то есть как к ребенку. А это значит что: Даже если вы хороший специалист, это придется доказывать вдвойне Многие не захотят иметь дело исключительно из пренебрежительных соображений - дескать, вот еще, не хватало мне школьнику отдавать делать сайт Люди будут делать скидку на то,что вы можете быть в силу возраста несамостоятельны в решениях. Зависеть от этого вряд ли кто-то захочет Многие будут считать (и даже хотеть), что вас легко обмануть В силу возраста и отсутствия серьезной практики у вас скорее всего не до конца сформированные и не слишком правильные представления о разработке (и уж тем более проектировании) сайтов и веб-приложений Впрочем, все не так пессимистично - если у вас к вашему юному возрасту уже есть какая-то теоретическая и практическая база, это уже неплохо. А деньги и опыт от вас не убегут

Почему нельзя получить точное число?

Объясните, из-за чего происходит вот такая штука:
>>> 1 - 0.7 0.30000000000000004
и как с этим бороться?


Ответ

Такова природа чисел с плавающей запятой: они описываются через экспоненту, и их "шаг" может выглядеть довольно странно, однако обычно он достаточно мал, чтобы избежать серьезных ошибок. В документации, насколько понял, рекомендуют использовать round()

Как установить переменную окружения в Linux/Unix?

Как установить переменную окружения в Linux/Unix?


Ответ

Необходимо открыть консоль и выполнить команду export VAR_NAME=VAR_VALUE Данная переменная будет существовать в рамках данного процесса и всех процессов порожденных данным. Для того чтобы данная переменная была видна во всех процессах, необходимо открыть файл конфигурации и добавить строчку export VAR_NAME=VAR_VALUE Если используется оболочка bash, то файл конфигурации будет .bashrc.

foreach с присвоением “;”

Добрый день. В цикле foreach я добавляю к каждому id ";". После операции у меня получается результат 1;2;3;4;5;6;. Как избавится от добавления ";" после последнего элемента? Т.е., чтобы в итоге получилось 1;2;3;4;5;6 $id_product = "";
foreach($cart as $item){ $id_product.= $item["id"].";"; }


Ответ

$myarr = array();
foreach ($cart as $item) { $myarr[]=$item['id']; } $id_product = implode(";", $myarr);

Зачем абстрактный класс в java

Java изучаю недавно. Застрял на том, что не могу понять роль абстрактного класса в java. В учебнике (не только в одном) нашел пример, описывающий роль абстрактного класса: // Базовая арифметическая операция abstract class Operation { public abstract int calculate(int a, int b); } // Сложение class Addition { public int calculate(int a, int b) { return a+b; } } // Вычитание class Subtraction { public int calculate(int a, int b) { return a-b; } } class Test { public static void main(String s[]) { Operation o1 = new Addition(); Operation o2 = new Subtraction(); o1.calculate(2, 3); o2.calculate(3, 5); } } Но переделав из абстрактного класса обычный, и даже удалив его вообще программа не перестала работать: // Базовая арифметическая операция class Operation { public int calculate(int a, int b) { return a*b; } } // Сложение class Addition extends Operation { public int calculate(int a, int b) { return a+b; } } // Вычитание class Subtraction extends Operation { public int calculate(int a, int b) { return a-b; } } class Test { public static void main(String s[]) { Operation/*Addition*/ o1 = new Addition(); Operation/*Subtraction*/ o2 = new Subtraction(); Operation/*Subtraction*/ o3 = new Subtraction(); Operation o4 = new Operation(); System.out.println(o1.calculate(2, 3)); System.out.println(o2.calculate(3, 5)); System.out.println(o3.calculate(10, 20)); System.out.println(o4.calculate(10, 10)); System.out.println(o1.getClass()==o2.getClass()); System.out.println(o3.getClass()==o2.getClass()); } } Опишите, пожалуйста, пример, в котором удаление абстрактного класса (или "переделывание" в обычный) невозможно и приведёт к ошибке, или просто растолкуйте в каких ситуациях обычный класс не заменит абстрактный. Заранее спасибо.


Ответ

Что за учебник, если не секрет? В приличных книгах по Java все-таки даются основы ООП. Суть вот в чем. Когда вы отмечаете класс как abstract , вы тем самым запрещаете создавать его экземпляры. Поскольку в классе Operation не определен метод calculate, вы не должны иметь возможность создавать его экземпляры: Operation o = new Operation(); Если в классе нет абстрактных методов, то "переделывание" его в обычный никак себя не проявит внешне. Просто появится возможность создать экземпляр этого класса. Конкретно в вашей "переделке" вы определили тело для метода calculate, тем самым изменив логику работы всей вашей иерархии. Если теперь создать еще один дочерний от Operation класс и не определять в нем метод calculate, то он будет использовать реализацию из родительского класса, то есть вычислять произведение двух аргументов. и даже удалив его вообще программа не перестала работать: Не верю. Если вы удалили класс Operation вам пришлось бы править дочерние классы (убирать extends и править main). Кроме того после этого ваши классы Addition и Subtraction стали бы независимыми друг от друга. Вообще, абстрактные классы широко применяются, когда нужно реализовать некоторую общую функциональность для семейства классов.

Способы применения директив #region и #endregion в C#

Я вот прочитал про #region и #endregion что они нужны для группировки членов классов, но более подробно не нашел. Хочу понять более подробно.


Ответ

Директива #region позволяет указать блок кода, который можно разворачивать и сворачивать с помощью функции структурирования в редакторе кода Visual Studio. В больших файлах кода очень удобно сворачивать или скрывать одну или несколько областей, чтобы не отвлекать внимание от той части файла, над которой в настоящее время идет работа.
Пример
#region MyClass definition public class MyClass { static void Main() { } } #endregion
Источник

Быстродействие считывания

Вообщем написаны 2 программы на Delphi и на C++ , провожу абсолютно однотипные операции( считываю массив длинною 10 ^ 7) но почему то Delphi это делает на целую секунду быстрее, кто может ответить в чем причина? и как можно ускорить в C++ ввод и вывод данных??
Вот программы, на Си и на Delphi
#include #include
int n; short a[10000000];
int main() { freopen("output.txt", "r", stdin); freopen("input.txt", "w", stdout);
scanf("%d
", &n); for (int i = 0; i < n; i++) scanf("%hd", &a[i]); printf("1");
return 0; }

var n, i : integer; a : array[1..10000000] of shortInt;
begin reset(input, 'output.txt'); rewrite(output, 'input.txt');
ReadLn(n); for i := 1 to n do Read(a[i]); WriteLn('1');
close(input); close(output); end.
Испытание 2. теперь первым выполняется exe - шник на c++ и в дельфи for заменен на while! все остальное то же.

var n, i : integer; a : array[1..10000000] of Integer;
begin reset(input, 'output.txt'); rewrite(output, 'input.txt');
ReadLn(n); i := 1; while ( i <= n ) do begin Read(a[i]); inc(i); end; WriteLn('1');
close(input); close(output); end.


Ответ

Все очень просто. В случае с делфи, компилятор знает, что вызов Read будет читать число. И только его. И может вставить правильный код сразу. В случае с scanf ситуация не столь проста. Как минимум каждый раз будет делаться парсинг строки формата. А это как не оптимизируй - медленно. Что же делать? писать свой парсер. Но как то не то. использовать готовые парсеры, например boost.spririt также, по ссылкам ниже, народ пишет, что если читать строку, а потом преобразовывать с помощью atoi, то получается в 4 раза быстрее. полезные ссылки Снова про ввод/вывод в C++ scanf не предназначен для ввода большого кол-ва информации sprintf/sscanf и скорость - понятия совместимые ? рассуждают о том же

Как вытащить конкретный кусок из строки

Есть строка с именем файла(например string filename= FI_FILE1_111_1111). Как мне вытащить его префикс до второго нижнего подчеркивания(FI_FILE1_)??
Как нибудь наверное через substring и string.indexOf(но если привязаться к "_" то он возьмет только первую часть), либо через Regex


Ответ

Ну например так:
var s = "FI_FILE1_111_1111"; var firstIndex = s.IndexOf('_'); var secondIndex = s.IndexOf('_', firstIndex + 1); var part = s.Substring(0, secondIndex + 1);
При отсутствии нужного количества _ выдаст пустую строку.
Менее эффективно, но короче:
var part = string.Concat(s.Split('_').Take(2).Select(p => p + "_"));
При отсутствии нужного количества _ выдаст пустую строку.

Как преобразовать список списков в список чисел (Python)

Имеется:
[[1], [2], [3]]
нужно:
[1, 2, 3]


Ответ

>>> a = [[1], [2], [3]] >>> sum(a, []) [1, 2, 3] >>> a = [[1, 2], [3, 4], [5, 6]] >>> sum(a, []) [1, 2, 3, 4, 5, 6]

Алгоритмы транспонирования матриц

Есть ли какой-нибудь другой способ транспонирования квадратной матрицы?
for (int i = 0; i < N; i++) { for (int j = 0; j < i; j++) { tmp = a[i, j]; a[i, j] = a[j, i]; a[j, i] = tmp; } }


Ответ

Можно изменить алгоритм таким образом:
Начинать i = 1 вместо i = 0 Использовать обмена при помощи исключающего ИЛИ вместо обычного обмена
Зачем изменить алгоритм так? Не знаю, но раз вы хотите другой способ, вот вам:
for (int i = 1; i < N; i++) { for (int j = 0; j < i; j++) { a[i, j] ^= a[j, i]; a[j, i] ^= a[i, j]; a[i, j] ^= a[j, i]; } }

Почему существует Qt?

Уже давно существуют виртуальные машины (платформы) вроде Java или того же .NET, которые поддерживают достаточно большое количество аппаратных архитектур, и имеют реализации на самых различных исполняемых средах (включая Embedded).
Почему же тогда появляются программные продукты вроде того же QT, в которые вбухивается куча труда и денег, просто чтобы заставить запускаться программы на разных платформах?
В чем сенс?
Немного информации к размышлению - Why aren't more desktop apps written with Qt? [closed]


Ответ

Qt был и есть и скорее всего будет, потому что еще есть такие странные люди, которые пишут программы на С++ (представляете себе! и это в 21 веке!) и пишут не без успеха. В том числе и программы с GUI. А Qt делает это и еще много других манипуляций с С++ просто удовольствием. Кроме того, как было замечено, он очень удачно дополняет стандартную библиотеку С++. А писать на С++ будут еще очень долго, потому что есть масса задач, где он (и подобные низкоуровневые языки) не заменим ни джвой, ни шарпом. По поводу VM. На джаве на настоящий момент (насколько я знаю, могу ошибаться) самый прогрессивный стандартный способ создания GUI - Swing. Работа с ней до крайности гемморойная, сама тяжелая, а интерфейсы выглядят динозаврами. Поэтому GUI на ней пишутся еще реже, чем на Qt. .Net - очень плотно завязана на винду. Хотя есть Mono, но создание GUI на ней под никсы (насколько помню) отличается от винды, поскольку используется GTK+ => пропадает переносимость. Да и под линями на моно программ совсем мало. Не пошло оно там. Есть масса привязок Qt к разным языкам, самая качественная - к Питону. Но есть и к той же джаве (хотя и не полная). Так что Qt - это класс. И еще: не забывайте про KDE !

Нормальный html редактор для linux [закрыт]

Пробовал bluefish - оказался слишком тормознутый Ищу нормальный HTML редактор для вёрстки. Критерии: Настраиваемая подсветка синтаксиса Поддержка вкладок Наличие слева столбца, который бы показывал номер строчки OS - linux mint


Ответ

geany, все есть.. еще и теги закроет за вас ))

Стать программистом гуманитарию за 2-3 года?

Собственно вопрос для меня очень актуальный. Как мне стать программистом?
В настоящий момент я работаю маркетологом (более 3 лет), однако с детства и до сих пор моим хобби был комп, поэтому пока не поздно хочу работать по призванию. Пробовал кодить, но по сути баловался. В универ на очку уже поздно (26 лет), а заработок не хочу терять. Доход приличный, да и родственники не поймут))
С чего мне начать? Я планирую года за 2-3 постепенно превратить свое увлечение в дополнительный источник дохода, а там может и в основной.
Какая структура знаний должна быть? Что мне нужно знать? Какие языки учить и в какой последовательности?
Сферу деятельности я определил пока веб-разработку, т.к. данная категории легче на фрилансе (поправьте меня, если я ошибаюсь).
Может у кого был подобный опыт....надеюсь на советы.
Вобщем подведу итог: Как мне с нуля стать программистом с актуальными навыками и знаниями?


Ответ

Для веб направления: 1) Учите HTML, смотрите примеры, сайты, исходные страницы сайтов. Достигните понимания в структуре html, т.е. можете сами от руки написать табличку, жирный текст, списки, заголовки, ссылки, якоря и т.д. Поймите что такое теги, атрибуты и т.д. и научиться правильно искать информацию по html (т.е. не обязательно знать все теги, можно просто уметь их находить) Где писать: блокнот, простые Web редакторы (с вводом только текста) Источники информации: различные учебники, в том числе и в интернете время освоения: если уделять по 1-2 часа в день, можно за 2 недели освоить 2) Добавьте к HTMLу CSS, это таблица стилей. Т.е. программирование еще не добавилось. Для начало надо будет понять что это за штука (css), и зачем она нужна. С помощью нее можно прописывать стили. Так же научитесь искать информацию. Где писать: блокнот, простые Web редакторы (с вводом только текста) Источники информации: различные учебники, в том числе и в интернете время освоения: если уделять по 1-2 часа в день, можно за 1 неделю освоить (если до этого вы поняли html) 3) Добавьте к этому JavaScript. Вот тут то и начинается программирования. На этом этапе посоветую изучить простые основы программирования: переменные, условия, циклы, функции. Пытайтесь писать простые вещи, и хорошо освоить основы, т.е. уверенно ими пользоваться. Поймите иерархию структуру HTML-а, и научитесь на чистом JS обращаться, получать и изменять элементы. Повторюсь, на чистом JS (не стоит лесть в JQuery на этом этапе) Где писать: блокнот, простые Web редакторы (с вводом только текста) Источники информации: различные учебники, в том числе и в интернете время освоения: если уделять по 1-2 часа в день, можно за 1-2 месяца освоить (но это индивидуально, как мозг человека примет логику) 4) Перейдите к серверному языку (я напишу про PHP). Поймите синтаксис у языка (циклы условия все принципы программирования будут схожи с JS, но синтаксис немного отличаться, ну и некоторые принципы). Поймите как генерится страница, что такое POST и GET запросы. Где писать: Web редакторы, NetBeans Источники информации: различные учебники, в том числе и в интернете, http://php.su время освоения: если уделять по 1-2 часа в день, можно за 2-4 месяца понять основы (но это индивидуально, как мозг человека примет логику) 5) Углубите знания в JS (+JQuery) и PHP, тут уже предлагаю сделать связь между JS и сервером. отправлять принимать POST и GET запросы. Время освоения 1 неделя. 6) Освойте Базу Данных (SQL) вообще понять что и как работает. как работать с таблицами, какие запросы и как лучше делать. Где писать: любая СУБД (Access, Oracle, ...) время освоения: если уделять по 1-2 часа в день, можно за 2 месяца понять основы 7) Изучите связь БД и PHP научитесь делать запросы из PHP, добавлять получать данные. Отображать таблицы и т.д. Для php советую работать с mysqli. Углубите свои полученные знания в пункте 6. Где писать: Web редакторы, NetBeans Источники информации: различные учебники, в том числе и в интернете, http://php.su время освоения: если уделять по 1-2 часа в день, можно за 2 месяца понять основы 8) Углубитесь в знания программирования, ООП, освойте знания классов, как в JS так и в PHP (любой другой серверный язык). Практикуйтесь, создавайте свои классы и т.д. Дальше время не буду писать, т.к. все расплывчато. 9) Углубиться в программирование, вообще, вы должны знать много-много различных алгоритмов и теорий. До этого момента мы занимались детским садом, подготовка к школе, так сказать. На этом шаге предлагаю изучить различные алгоритмы (сортировка - хоть и есть стандартные средства но знать надо, комбинаторика, графы, деревья - часто бывают полезны для веб разработчиков и т.д.). Это я к чему, для повышения навыков программирования решайте Олимпиадные задачи, изучайте готовые алгоритмы. Изучите дополнительные возможности программирования: регулярные выражения и т.д. Изучите теории и поймите как лучше создавать структуры баз, какие базы и таблицы необходимо создавать. Изучите теории по оптимизациям и написанием нагруженных систем (кэширование и другое). Где решать: например тут http://codeforces.ru/ 10) Применения знаний, пробуйте изучайте различные CMS конструктора: Ucoz, Joomla, Drupal, ModX, WordPress. Применяйте свои навыки на них. Напишите по одному сайту на каждом из них ) 11) Углубление, фреймворки, изучите какой-либо фреймворк, например Yii для PHP. К этому моменту вы должны уметь уже правильно создавать структуры баз, свободно писать на JS и PHP. Так же можно попробовать подключаться к стороним API, например к Vk. 12) Ну и напоследок для веб-мастера почитать про СЕО, знать хотя-бы что это за рыба. 13) САМОЕ ГЛАВНОЕ! Везде, и тем более в Программировании необходима Практика!, надо постоянно пробовать, ничего страшного если что-то не получается, вы должны учиться на ошибках, как своих так и чужих. Что-то прочитали?, тут же пишите. Есть друзья, которые без конца читают книги по программированию, но, практики у них мало.. в итоге книги много им не дают (ну знает он что можно вот так сделать, а сделать не может, т.к. не умеет применять свои знания к делу). Это как изучение боевых искусств - мастер вам каждый день по 15 часов объясняет что и как делать, куда бить, куда уходить, а вы просто слушаете. Когда дело дойдет до боя, вы ничего не сможете применить. Поэтому: НУЖНО ПРАКТИКОВАТЬСЯ p.s. Надеюсь помог )

PHP exeption show up

class Search { private $search_string = null;
public function __construct() { $this->db = Database::getInstance();
// prepare search string $this->search_string = (isset($_GET['search']) && !empty($_GET['search']))? $_GET['search'] : null; if ($this->search_string === null) { throw new Exception(SEARCH_STRING_EMPTY, 99); } ... } } try { $search = new Search(); } catch (Exception $e) { echo $e->getMessage(); ... }
Передаю пустую строку, выкидываю ексепшен, выводится ошибка php Exception: in ... (на подобии ошибки PHP_NOTICE и.т.д.), дальше его ловит мой блок catch. Как от этого избавится?
На версии PHP 5.2 этого нету, а на php 5.4 есть... Пользуюсь OpenServer-ом. error_reporting(0); прописан...
UPD: скрин проблемы


Ответ

TL;DR: за это отвечает настройка xdebug.show_exception_trace, достаточно просто отключить ее. По расцветке также можно угадать, что это вывод xdebug, и в случае аналогичных непонятных происшествий начинать копать оттуда.
Сама по себе эта штука входит в пакет забавного функицонала xdebug (как минимум, есть еще xdebug.sсream, подавляющий оператор @), отвечающего за поиск архитектурных ошибок. Конкретно эта настройка позволяет найти все подавленные исключения и покарать тех, кто их проглатывает без обработки (идеальная программа должна работать без исключений вообще), но в продакшене и тестинге эта опция, конечно, должна быть отключена.