Компьютер не видит внешний жесткий диск

Нужна помощь! Пришла с работы, внешний жесткий диск (wd my book studio 2tb) перестал работать!
Компьютер (MAC OS X 10.6.8) был включен, кроме этого был подключен еще 1 внешний жесткий диск, с ним все в порядке.
У Этого, проблемного жесткого диска горит внутри лампа, и он немного гудит, но компьютер его не видит.
Пробовала через поиск файлов, их компьютер не находит.
На жестком диске почти готовый документальныйй фильм. Осталось перевести на английский! Очень важная работа!
Искала помощь в гугле, нашла, что проблема не только у меня,
но решение- скачать утилиту на флэшку и отключить парковку головок, мне непонятно как можно сделать в том месте, которого не видно!?
Буду признательна, если кто-то сможет прояснить возможно ли спасение данных? И КАК, если возможно?
Понимаю, что нужно делать резервные копии. Но увы, в этот раз только перенесла сс другого жесткого диска материал и не успела!

ссылка на оригинал статьи http://habrahabr.ru/post/185118/

Знакомьтесь — РосФин Мониторинг

Данный видеосюжет из програмы «Субботние вести» будет полезен пользователям систем Visa, Webmoney, Яндекс.Деньги и Bitcoin.

ссылка на оригинал статьи http://habrahabr.ru/post/185114/

simpleTooltip: HTML начиненный CSS и приправленный jQuery

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

На разработку собственного варианта подсказок меня натолкнул Tipsy Tooltip используемый в Twitter Bootstrap. По началу я пользовался им, но все возможности плагина мне были не нужны и, будучи перфекционистом, лишний код смущал естество. Решил: напишу-ка я то, что нужно мне и ни строчкой больше. Написал и осмеливаюсь поделиться рецептом с сообществом. Авось кому-то приглянется…

Прочтите перед готовкой

Замечу, что идея не нова и схожая реализация, скорее всего, существует. По-этому, если вы уже съели парочку тутлтипов и не хотите более, откажитесь от прочтения данного рецепта, ведь он — лишь урок, главная мораль которого: код, используемый на фронтенде, должен использоваться, а не попросту отдаваться клиенту.

Приготовим тесто — возьмем немного HTML

Тесто мы готовим часто и рецепт знаем на зубок — на этом этапе проделаем рутинную операцию: создадим HTML разметку со ссылками, каждая из которых будет иметь подсказку и, отличное от предыдущего, направление:

<section> 	<div> 		<a href="#" data-tooltip="nw" data-title="This is an example of Northwest gravity">Northwest</a> 	</div> 	<div> 		<a href="#" data-tooltip="north" data-title="This is an North gravity">North</a> 	</div> 	<div> 		<a href="#" data-tooltip="ne" data-title="This is an example of Northeast gravity">Northeast</a> 	</div>  	<div> 		<a href="#" data-tooltip="west" data-title="This is an example of West gravity">West</a> 	</div> 	<div> 		<h3>simpleTooltip</h3> 	</div> 	<div> 		<a href="#" data-tooltip="east" data-title="This is an example of East gravity">East</a> 	</div>  	<div> 		<a href="#" data-tooltip="sw" data-title="This is an example of Southwest gravity">Southwest</a> 	</div> 	<div> 		<a href="#" data-tooltip="south" data-title="This is an example of South gravity">South</a> 	</div> 	<div> 		<a href="#" data-tooltip="se" data-title="This is an example of Southeast gravity">Southeast</a> 	</div> </section> 

Элементу, который должен иметь подсказку, необходимо присваивать два атрибута:

  • data-tooltip — смещение тела подсказки.
    • nw — северо-западное
    • north — северное
    • ne — северо-восточное
    • west — западное
    • east — восточное
    • sw — юго-западное
    • south — южное
    • se — юго-восточное

  • data-title — текст.

Итак, у нас готово восемь основ для будущего блюда. Каждую мы по-своему приправили и теперь самое время заняться приготовлением начинки.

Начинка: проверьте, не закончился ли у вас CSS

Начинка должна быть вкусной, и по-этому мы не будем использовать никаких примесей и вредных веществ. Только, как его иногда называют, натурпродукт — pure CSS. Нам понадобятся псевдоэлементы :before и :after, селекторы атрибутов с модификаторами начала и конца строки (^, $) и CSS функция attr(). Убедившись в наличии ингредиентов можно приступать к готовке.

Запах

Мы ведь не хотим поедать дурно пахнущие тултипы? Точно не хотим и, по-этому, сразу говорим себе: никаких магических чисел — только обоснованный и осмысленный код.

Базовые стили

#tooltip_width { 	float:left; } #tooltip_width, [data-tooltip]:before, [data-tooltip]:after { 	display:none; 	font:normal 11px/24px Arial; } [data-tooltip]:before, [data-tooltip]:after { 	position:absolute; 	z-index:1000; } [data-tooltip]:before { 	content:attr(data-title); 	color:#fff; 	padding:0 5px; 	border-radius:2px; 	background:rgba(0,0,0,.8); 	text-align:center; 	white-space:nowrap; } [data-tooltip]:after { 	content:''; 	height:0; 	width:0; 	border:solid transparent; 	border-width:5px; 	pointer-events:none; } [data-tooltip]:hover:before, [data-tooltip]:hover:after { 	display:block; } 

Псевдоэлемент :after — декоративная стрелка-указатель на родителя, :before — тело тултипа с текстом. И вот еще что: вы точно заметили правила для элемента с #tooltip_width, но понятия не имеете зачем он нужен. Так вот он — это особая присыпка от повара и нужна она для измерения ширины подсказки. Изначально, на этапе составления представления о будущем блюде, планировалось рассчитывать ширину по формуле:

width = text.length * 5; // кол-во символов умноженное на среднюю ширину одного из них (Arial, 11px) 

Но такой подход был обречен по двум причинам:

  • символы латиницы, в среднем, не так широки (~5px) как кириллические (~6.5px);
  • уравнение не предусматривало одинакового кол-ва символов разной ширины. Например "iii" не будут равны "WWW" по ширине.

Новый метод, учитывающий все особенности, работает следующим образом: текст подсказки помещается в невидимый, плавающий (float:left), блок с идентичными настройками кегля шрифта, затем измеряется его ширина и он удаляется из DOM, позволяя, тем самым, получить ширину следующего тултипа при помощи этого же элемента.

Селекторы атрибутов с модификаторами

Хороший выбор для группировки свойств. Можно обойтись и без них, как и кушать суп/борщ без хлеба, но все-таки с ними будет вкуснее.

Названия направления, такие как: nw и ne начинаются с латинской буквы n и имеют общие свойства — это играет нам на руку и мы можем описать их правила в таком виде:

[data-tooltip^=n]:before, [data-tooltip^=n]:after { 	top:100%; } [data-tooltip^=n]:before { 	margin-top:5px; } [data-tooltip^=n]:after { 	margin-top:-5px; 	border-bottom-color:rgba(0,0,0,.8); } 

Помним, что в псевдоэлементе :before располагается текст, а :after выступает декоративным указателем. Данный код работает для направлений nw, ne и north и смещает псевдоэлементы на 100% вниз: текст смещается еще на 5px ниже (5px — высота и половина ширины указателя), а стрелка настолько же выше — это позволяет «примагнитить» ее к телу тултипа.

Синяя линия — top:100%, краснаяmargin-top:5px.

Тоже самое и для sw, se и south, только смещение направлено вверх:

[data-tooltip^=s]:before, [data-tooltip^=s]:after { 	bottom:100%; } [data-tooltip^=s]:before { 	margin-bottom:5px; } [data-tooltip^=s]:after { 	margin-bottom:-5px; 	border-top-color:rgba(0,0,0,.8); } 

Как вы уже догадались, все названия для направления смещения подобраны так, чтобы их можно было легко объединять в группы. Давайте теперь опишем общие стили для nw, ne, sw, se, north и south с применением модификатора конца строки:

[data-tooltip$=w]:before, [data-tooltip$=w]:after, [data-tooltip$=th]:before, [data-tooltip$=th]:after { 	left:50%; } [data-tooltip$=w]:before { 	margin-left:-15px; } [data-tooltip$=w]:after, [data-tooltip$=th]:after { 	margin-left:-5px; } [data-tooltip$=e]:before, [data-tooltip$=e]:after { 	right:50%; } [data-tooltip$=e]:before { 	margin-right:-15px; } [data-tooltip$=e]:after { 	margin-right:-5px; } 

Синяя линия — right:50%, краснаяmargin-right:-5px, зеленаяmargin-right:-15px.

Теперь опишем поведение для двух оставшихся направлений — east и west:

[data-tooltip$=st]:before, [data-tooltip$=st]:after { 	bottom:50%; } [data-tooltip$=st]:after { 	margin-bottom:-5px; } [data-tooltip$=st]:before { 	margin-bottom:-12px; } [data-tooltip=west]:before, [data-tooltip=west]:after { 	left:100%; } [data-tooltip=west]:before { 	margin-left:10px; } [data-tooltip=west]:after { 	margin-right:-10px; 	border-right-color:rgba(0,0,0,.8); } [data-tooltip=east]:before, [data-tooltip=east]:after { 	right:100%; } [data-tooltip=east]:before { 	margin-right:10px; } [data-tooltip=east]:after { 	margin-left:-10px; 	border-left-color:rgba(0,0,0,.8); } 

В вышеуказанном коде может показаться странным следующий код: margin-bottom:-12px;. Отвечает он за смещение половины тела подсказки вверх. Почему 12 — половина? Потому что в самом начале мы указали высоту строки равной 24px при помощи следующего правила:

font:normal 11px/24px Arial; // обычное начертание Arial размером в 11px и высотой строки в 24px 

Синяя линия — bottom:50%, краснаяmargin-bottom:-5px, зеленаяmargin-bottom:-12px.

Работа кипит: тесто набухло и ждет подоспевшую вовремя начинку. Бросаемся фаршировать и вспоминаем о присыпке без которой выглядеть наше блюдо будет не эстетично.

У вас же осталось немного jQuery с прошлой готовки?

По большому счету, тултипы можно нафаршировать и съесть уже сейчас, но перед тем как это сделать, вам нужно кое-что знать:

  • если в подсказке много текста, то она будет тянуться одной строкой на всю его ширину благодаря white-space:nowrap;
  • если у элемента с подсказкой статическое позиционирование (position:static;), которое имеют все элементы без определенного правила position, то подсказка не будет работать должным образом т.к. она позиционируется абсолютно элемента;
  • если направление тултипа задано как северное или южное, то он не будет на 100% соответствовать ему из-за абсолютного позиционирования и неявной ширины.

Исходя из этого, вы можете не использовать JavaScript тогда, когда уверены что:

  • элемент с подсказкой относительно или абсолютно позиционирован;
  • направление тултипа любое, кроме южного или северного;
  • текст подсказки не займет кучу пространства на экране.

А иначе, вот вам присыпка:

/** *	@max (int) максимальная ширина подсказки. */ (function(){ 	$.simpleTooltip = function(a){ 		var max = a ? a : 300, body = $('body');  		$('[data-tooltip]').each(function(){  			t = $(this);  			/** 			*	Все элементы, обладающие подсказкой, получают относительное позиционирование, 			*	но только в тех случаях, когда не используется абсолютное. 			*/ 			t.css('position') == 'static' ? t.css('position', 'relative') : !1;  		}).on('mouseenter mouseleave', function(e){  			if (e.type == 'mouseenter') {  				t = $(this);  				/** 				*	При наведении мыши на элемент с подсказкой его текст помещается в плавающий блок 				*	и затем измеряется его ширина которая будет равна ширине подсказки. 				*/ 				body.append('<div id="tooltip_width">'+ t.data('title') +'</div>');  				width = $('#tooltip_width').width(), styles = '';  				/** 				*	Если ширина больше максимальной, то подсказка будет иметь ширину @max и получит 				*	особое форматирование текста. 				*/ 				if (width > max) {  					width	=	max, 					styles	=	'[data-tooltip]:before{\ 					width:'+ width +'px;text-align:left;line-height:17px;padding:2px 5px;white-space:normal\ 					}';  				}  				/** 				*	Если подсказка направлена на юг или север, то она будет центрироваться таким образом: 				*	к ширине прибавляются боковые значения padding и вычитается половина, на которую и 				*	будет смещена подсказка относительно центра элемента, которому она дана. 				*/ 				if (t.data('tooltip').slice(-2) == 'th') {  					styles += '[data-tooltip$=th]:before{margin-left:-'+ ((width + 10) / 2) +'px}';  				}  				/** 				*	Если один из предыдущих, или оба, шагов пройдены, то в DOM будут добавлены стили 				*	подсказки для конкретного элемента. Иначе, если ширина меньше максимальной и  				*	направление не южное или северное, то работа плагина закончится. 				*/ 				if (styles) body.append('<style id="tooltip_style">'+ styles +'</style>');  			} else $('#tooltip_style, #tooltip_width').remove();  		}); 	}; })(jQuery);  $(document).ready(function(){ 	$.simpleTooltip(); }); 

Единственно возможным аргументом функции может быть максимальная ширина, определяющаяся в пикселях и для всех подсказок. Задается она таким образом:

$.simpleTooltip(400); // аргумент функции, 400 в нашем примере - максимальная ширина для всех тултипов. 

Что касается этапов работы плагина, то они описаны в комментариях к коду и, надеюсь, доступным языком.

Распространенность на кухнях мира

  • IE8 — с заменой RGBA формата цвета на HEX. Без закругленных углов *.
  • IE9 — без закругленных углов *.
  • Остальные браузеры, поддерживающие CSS функцию attr() и псевдоэлементы, не познают бед.

* — в исходных файлах есть corners.htc, который заставит старые версии браузера от MS закруглять углы, но размер данного файла равен 4Кб, что на 1Кб больше размера файлов всего проекта без него.

От шеф-повара

Резюме:

Блюдо готово. Оно не экстравагантно и не эксцентрично. Это обыденная пища со своими преимуществами и недостатками и только вам решать чем отужинать. Но заметьте: не попробовав и не узнаешь нравится тебе что-то иль нет.

Ожидания:

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

Полезные материалы

Употребляйте на здоровье!

ссылка на оригинал статьи http://habrahabr.ru/post/185110/

Четыре навыка владения иностранным языком

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

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

Статья изначально была просто сообщением в скайп моему другу. Однако, после того как я заметил что объём информации уже занимает 3 страницы формата A4, решил переобразовать это сообщение в полноценную статью, которую вы можете лицезреть.

The root of all evil

Для начала расскажу истоки: начал учить языки (серьёзно учить) в 2010м году. (Хотя на самом деле получил хороший фундамент конкретно английского языка ещё в школе. Мне просто повезло попасть в школу с лучшими учителями иностранных языков в городе. И этот фундамент здорово помог впоследствии.)
Именно тогда перепробовал миллион способов, миллион DVD курсов и тренировочных программ по изучению иностранных языков.
И теперь могу точно и с уверенностью сказать — DVD курсы и тренировочные программы это полная и абсолютная фигня. Это мусор, который создавался без учёта опыта и специфики изучения языков.
Буквально, они ничего не дают. И казалось бы — красиво оформлены, зачастую с анимациями, видео и аудио записями, хорошей структурой и так далее. Но… они не дают практических знаний языка. Не дают самой практики, такой, какая она есть. Они дают лишь теоретические, зачастую ничем не подкреплённые знания. Единственное что может быть хорошего в курсах: упрощённые тексты, которые легко читать человеку, без знаний языка, но также всевозможные тесты и упражнения, если они конечно есть. Всё это можно рассмотреть как практические занятия с языком, но тем не менее — они не имеют должного эффекта, пусть даже они помогут вам запомнить несколько правил и с десяток новых слов.
Хотя в любом случае я могу ошибаться на счёт DVD курсов, и возможно есть DVD курсы с помощью которых люди выучили язык. Но я не был таким счастливчиком к сожалению, который нашёл их, да как мне подсказывает моя логика и опыт — НЕТ таких курсов в природе. Ибо изучение языка это не просмотр DVD, а постоянная практика (чуть позже я остановлюсь подробнее на этом). Т.е. изучение языка не может быть ограничено только лишь просмотром одного единственного DVD диска.

Что ещё плохого в изучении языка? Изучение слов с помощью флешкарточек. Т.е. это такие карточки, когда с одной стороны ты пишешь слово, с другой перевод. и таким образом зубришь их. (Либо как эквивалент этого метода можно рассмотреть карточки, создаваемые программой Anki, или её аналогов.)
Тоже полнейшая собачья хрень. Буквально на следующий день из головы выветрится больше половины слов. у меня доходило даже до того, что из сотни «выученных» вчера слов я помнил всего пять-восемь.

Word memorization

Как же тогда учить слова возникает вопрос?
Для того чтобы запоминать слова, нужно понять как работает человеческая память, а она работает ассоциациями. (Это если говорить не вдаваясь в подробности.) Т.е. у нас одно воспоминание/знание чего бы то ни было цепляется за другое. Таким же образом и нужно учить слова — т.е. связывать их с определёнными ассоциациями.
Как пример может послужить слово tease, которое я выучил из разговора с одним американцем, который удивлялся насколько хорошее у меня произношение и ещё сказал что он впервые встречает русского с таким произношением, и что обычно они их там дразнят (tease) симулируя русский акцент. Ну собственно слово tease отсюда мне и запомнилось. (Хотя говоря о моём произношении, оно пока далеко от идеала, на самом деле. Также это можно сказать что плюс, ибо как я заметил — наоборот хорошо говорить с русским акцентом с теми иностранцами, для которых английский тоже является не родным языком, вместо того чтобы стараться правильно выговаривать слова. Таким образом им зачастую проще воспринимать слова сказанные мной, из-за привычки русского языка жёстко выделять каждую согласную букву.)

Второй способ запоминания слов: создание метафор.
пример: «Еду на машине, у машины есть фары.» собственно отсюда я запомнил немецкое слово fahren (читается как

фа:рэн

и переводится как «двигаться / ехать»), т.е. как мы можем видеть из предложения — слово ЕДУ и слово ФАРЫ, стоящие по разным концам предложения, и есть два якорька, которые и делают возможным запоминание этого слова.
И естественно в процессе создания этой метафоры нужно играть воображением, т.е. представлять себе воплощение метафоры. Хотя последнее затруднительно для людей с плохим, либо с полным отсутствием визуального воображения.

Что ещё хорошо в запоминании слов? Мнемотехники.
пример: «Паркет натёрли пингвином.» Как показывает практика, нестандартность и практическая сложноосуществимость или невозможность сказанного в мнемотехнике в реальности очень сильно въедается в мозг, что провоцирует запоминание.

Но опять-же, ничего в мире не имеет стопроцентный эффект. И даже эти методы, пусть они в разы эффективнее нежели чем флэшкарты, но всё-равно, кпд запоминания не является равным 100%.


Но на самом деле, это всё прелюдия была к тому что я на самом деле хотел сказать, и что на самом деле помогает в изучении языков.
ЛУЧШЕЕ (буквально) средство в изучении языка — практика. Казалось бы банально и очевидно, но многие люди как я заметил игнорируют это, что растягивает изучение языка буквально в бесконечность.
А ведь на самом деле язык это практика. Это одна такая большая и бесконечная конкретная работа. Это масса времени потраченное на использование языка.
А всё потому, что по факту — изучение языка это спорт. Это как игра на гитаре, где ты по несколько часов тренируешься игре на ней, для того чтобы достичь мастерства. Также и здесь — ты постоянно тренируешь язык, чтобы стать в нём мастером.

Four skills of language mastery

По факту, для того чтобы стать мастером во владении каким либо языком, нужно постичь четыре основных навыка, на которые я разделяю язык:
1) чтение
2) письмо
3) аудирование (восприятие на слух)
4) разговорные навыки (умение самому говорить и выражать свои мысли с помощью речи)

Почему я разделяю владение языком на четыре навыка? Да просто как я уже заметил на своём собственном опыте, и на опыте других людей — навыки эти абсолютно друг с другом не связаны, очевидно потому что за каждый отдельный навык отвечает отдельная часть головного мозга.
Что это означает на практике? Всё просто — если человек хорошо читает, это не значит что он хорошо пишет, и наоборот соответственно.
Такая-же история и с оставшимися двумя другими навыками.
И что из этого следует? Также, всё очень просто: нужно постоянно уделять массу времени всем четырём навыкам владения языком. Все вместе, или же каждый по отдельности это абсолютно неважно, главное — определённая, конкретная проделанная работа. Ибо это спорт, а в спорте важно убитое на этот самый спорт время. И много. И не стоит считать что «за четыре недельки до начала весны я успею сбросить накопленный жир». Такого не бывает. Не стоит считать что можно за короткое время достичь солидных результатов (если речь не идёт конечно о 18ти часах в день потраченных на язык в течение трёх месяцев например. Результаты будут солидные, но… на практике такой подход неосуществим по многим причинам).

Для того чтобы прокачать четыре основных навыка нужно заводить знакомства в интернете, для переписки, абсолютно со всеми подряд. Нужно смотреть и слушать множество информации различного формата в интернете, нужно много читать и так далее.
А ещё лучше — полностью себя окружить языковой средой того языка, который изучаешь. Т.е. смотреть фильмы чисто на изучаемом языке, читать информацию в интернете чисто опять на нём же, и так далее. Конкретно я, пока учил английский на протяжении последних двух лет, дошёл до того, что у меня теперь всё на английском. Обе операционные системы и их приложения чисто на английском, каналы на ютубе что я смотрю 90% англоязычные, смотрю фильмы и играю в игры чисто на английском языке и так далее. Я даже заметки самому себе, например чтобы не забыть куда-то сходить или что-либо сделать, пишу чисто на английском языке. И по факту, получилось так что и в интернете я из рунетских сайтов пользуюсь всего-лишь двумя-тремя.
А что касается переписки, то у меня уже давно переписка имеет соотношение 50/50 (рус/анг).
Ну… собственно как-то так.

Далее, конкретно хотелось бы остановиться на чтении. Тут на самом деле не всё так просто. Ибо пока вы будете читать, в тексте естественно будут попадаться незнакомые слова. И их нужно как то подсвечивать, либо хранить тонну карточек рядом, либо каждый раз лазать в словарь как только встретили незнакомое слово.
Понятно что в таком случае первый метод является наиболее эффективным, второй подходит только в случае когда первый никоим образом не осуществим, ну а третий не эффективен вовсе, ибо вы будете тратить время больше на поиск неизвестного слова нежели на чтение само по себе.

Тут на самом деле я даже хотел написать блокнотик-читалку, который имеет некую базу данных неизвестных мне слов, которые потом будет подсвечивать, но мы же с вами живём в эпоху интернета не так ли? И наверняка уже есть сайты которые позволяют делать это.
И тут я приведу несколько примеров этих сайтов.

На правах рекламы

wordmemo.ru сайт, не так давно появившийся на хабре. И тут собственно всё что нужно для чтения есть — чтение текстов и подсвечивание незнакомых слов, их зубрёжка с помощью тех-же самых флешкарточек. Последнее я на самом деле не рекомендую делать, ибо тупо чтение помогает учить слова гораздо эффективнее и проще, нежели все те методы что я указал вначале. Это правда. У меня даже есть знакомый англичанин который выучил русский язык чисто читая тонны материала, не прибегая к помощи к различным методикам.
Хотя естественно ничто не мешает использовать их совместно с чтением, что даже лучше.
Минусы данного сайта: там чисто-лишь тексты, и чисто-лишь один английский язык. (хотя он вполне себе мог развиться, и теперь там появилось гораздо больше ф-ий с моего последнего посещения.)

Далее, сайт которому я уделил меньше всего времени, но тем не менее, заслуживающий внимания:
lingualeo.ru
Сайт платный. Но стоящий своих денег насколько я помню. Тем более я не пользовался им больше полутора лет, и наверняка за это время там появилось множество интересных новшеств.
Минус сайта — там чисто один английский язык.

Последний сайт (из мне известных). Также сайт с помощью которого я собственно и учу языки.
www.lingq.com
Сайт платный, но там есть ВСЁ что нужно для изучения языков и для постоянной практики. Плюс чрезвычайно сильное сообщество изучающих и обучающих людей. Найти единомышленников там не составляет труда.
Плюс там есть преподаватели, которые по-факту являются также обычными пользователями, но которые также создают контент для сайта. И получают за это деньги. Что опять же — огроменный плюс. Что означает что там будет просто тонны качественного контента, причём не только в текстовом, но и в аудио, и даже видео формате.
Плюс с возможностью общаться напрямую с самим преподавателем, который создал изучаемый контент, и так далее.
И да, про преподавательство на этом сайте стоит сказать отдельно: по факту там любой может стать преподавателем, и на это собственно сайт и нацелен — на обмен языковыми навыками, чтобы помочь вам в изучении языков, и чтобы вы могли помочь остальным желающим выучить ваш родной язык. И что самое интересное — монетизировать это.
Шикарный подход по всем параметрам.
Плюс там возможно выучить множество языков, и сайт не ограничивается лишь одним английским.
Но сайт платный, но плата не столь высока: 10$ в месяц. Думаю этот сайт в любом случае стоит таких денег.

Чуть ранее я сказал что стоит переписываться со всеми подрят на изучаемом языке верно? Ну а где искать этих «всех подрят» я не подсказал. Пришло время это исправить, и дать ссылку на сайт по переписке которым пользуюсь сам:
www.interpals.net

Neural network accommodation

По факту — язык это не столько одна практика, сколько привыкание к языку.
Т.е. заставление своего мозга стопроцентно сжиться с языком. И я вам честно скажу: это наиболее мучительный, наиболее долгий и наиболее затратный процесс в изучении языка.
Можно выучить хоть 20 000 слов, но это не будет означать что вы полностью привыкли к языку.
Что это означает на практике? Всё просто: когда мы делаем что-либо, по началу нам это даётся невероятно сложно, но со временем мозг начинает привыкать, и проделывание из раза в раз одного и того-же действия протекает гораздо легче. Соответственно для этого и нужна практика — чтобы полностью сжиться с языком, знать его на прекраснейшем уровне. И да — на это уходит тонна времени, и даже могу сказать конкретные цифры на этот счёт (основываясь на собственном опыте):

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

Для того, чтобы научиться хорошо писать и переписываться с другими людьми, нужно примерно полгода-год общения на различные темы, с различными людьми. НО!!! Для того чтобы просто научиться чувствовать себя свободно при переписке, нужно потратить всего две недели (!!!) переписки с каким-либо человеком. Т.е. как показывает мой опыт — привыкнуть к этому наиболее легко, наверное потому что тут наиболее живое владение языком. То бишь живая речь — живое общение с живым человеком, соответственно наиболее живая, охотная и активная реакция вашего мозга на это. Хотя возможно это просто мои личные особенности.

Для того чтобы научиться стопроцентно понимать беглую человеческую речь на иностранном языке (хотя зависит также и от самого языка, ибо различные языки имеют различную сложность восприятия его на слух), конкретно возьмём английский язык, требуется примерно год-два каждодневного прослушивания английской речи на протяжении трёх-четырёх часов. И то я не могу сказать что я полностью понимаю английскую речь. Т.е. пока-что мой уровень привыкания находится на отметке 80% (100% означает что вы абсолютно не чувствуете проблем в восприятии речи, причём которая будет звучать чрезвычайно бегло и со всевозможными помехами.).

Конкретно как я достиг такого восприятия языковой речи? Сразу скажу — фильмы наиболее медленный и наиболее неэффективный метод тренировки восприятия речи. Радио наоборот слишком экстремальный, и наиболее сложный метод, и пройдёт немало времени пока вы не научитесь полностью воспринимать то что говорят по радио.
А посему, идеальным вариантом обучения себя языковой речи — различные аудио и видео блоги (или правильнее сказать влоги?) и подкасты. Ну а тут может быть всё что угодно, но чаще всего это будут каналы на ютубе, которые будут вам наиболее интересны, либо другие ресурсы позволяющие создавать аудио/видео подкасты от людей и информационных источников что вам интересны.

Ах да, забыл уточнить одну деталь: вы по началу сможете изучать только интересный вам материал. Т.е. ваш мозг будет более охотно по началу учиться и воспринимать то, что ему интересно, а то что для него будет неинтересно он будет воспринимать словно в тумане, и у вас будет стойкое чувство сонливости. Это-же правило относится и к материалам, которые слишком сложны для вашего уровня. Казалось бы очевидно, но почему-то многие опять-же игнорируют это.
И да, важная особенность — это правило имеет место быть только на первых порах изучения языка. Когда вы более-менее привыкнете к языку вам уже будет абсолютно безразлично какую информацию «кушать».

25й кадр, или не верьте надписям на заборах

Помните такие жульнические «методики» изучения языка, как 25й кадр и им подобные? Так вот, мне есть что на счёт них сказать.
Конкретно это уже достаточно разжёвано в интернете, да и давненько на это жульё я уже не натыкался. Но тем не менее, если вам интересно узнать что это и прочитать одно из обсуждений метода, то можете пройти по ссылке.
Как можно уже понять, я считаю что по таким методикам выучить язык невозможно, ибо для этого нужно создать сотни миллионов, возможно миллиарды новых соединений между нейронными клетками в вашем мозгу, ровно как создание самих нейронов. Ну не изобрели пока ещё такой меганейростимулятор, а посему — изучение языка пока ещё лежит через тернистый путь постоянных тренировок, то бишь постоянной практики.
(Я не являюсь неврологом, нейрофизиологом и т.п., поэтому более подробно на тему, лежащую вне моей компетенции рассуждать не буду.)

Кстати, на счёт мотивации учить язык:

Человек втягивается постепенно. Соответственно вам нужно будет начинать помалу с небольших материалов. И да — первое время, пока не втянитесь, нужно будет заставлять себя уделять время языку. т.е. жить по принципу знаменитых писателей — «ни дня без строчки».
И да, не думайте что сможете резко сменить свой образ жизни, что буквально вчера вы не читали и строчки текста, а начиная с сегодняшнего для у вас силы воли хватит на 100 000 строк каждодневно. Возможно это даже и правда, но велика вероятность того, что ваша «железная воля» сломается впоследствии, и количество чтения резко упадёт до нуля. Почему так? Это природа человека — он сам по себе инертная скотина, которая меняется не сразу, а со временем.

Ну а вообще, для того чтобы изучить язык, т.е. довести изучение от начальной до конечной стадии без самотерзаний, мотивации, GTD, и прочего бреда, то очень хорошим и эффективным методом в таком случае является метод, который называется «ПИШИ КОД БЛЯТЬ!!!» (здесь и далее я извиняюсь за использование нецензурной лексики, но как говорится — из песни слова не выкинешь). Конечно тут ни о каком коде не идёт речь, но стоит только заменить эту фразу на «УЧИ ЯЗЫК БЛЯТЬ», то сразу становится понятно что я имею ввиду.
Конкретно с этой концепцией можно познакомиться на сайте пиши-код-блять.рф/, соответственно заменив все повторения фразы на странице манифеста с «Пиши код блять» на фразу «Учи язык блять». А содержимое таблицы в первых двух столбцах на всякие там методики а-ля GTD и по антипрокрастинации.

Уверяю вас — если вы будете просто следовать этому принципу, т.е. просто УЧИТЬ ЯЗЫК БЛЯТЬ, без насилия над собой, самомотивации и прочего бреда, то у вас есть все шансы выучить язык.
Ну а если вы будете больше задумываться о том «как бы сесть и начать учить» вместо того чтобы собственно сесть начать и учить, то естественно у вас ничего не получится.

Опять-же казалось бы очевидная вещь, но опять же большинство людей терпят неудачу именно на этом моменте.
Так-что не надо себя заставлять, принуждать, насиловать иностранным языком, всякие GTD и тайм-менеджменты тоже не нужны, нужно просто садиться и УЧИТЬ ЯЗЫК БЛЯТЬ!!! Так что меньше раздумывайте и больше УЧИТЕ ЯЗЫК БЛЯТЬ!!!

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

В принципе, как видите метод «ПРОСТО ДЕЛАЙ ЭТО БЛЯТЬ» весьма эффективен и помогает в совершенно разных сферах человеческой деятельности, которые касаются не только написания кода, либо изучения иностранных языков. И кучи статей по GTD, да и само GTD можно будет списать со счетов (опять-же: всё вышесказанное является моим личным мнением, основанным на опыте).


За сим я откланиваюсь, и желаю всем удачи в умственной спортивной дисциплине, называемой «изучение иностранных языков».

P.S. На самом деле язык я разделяю не на четыре навыка, а на пять. Пятый — умение переводить.
По факту языки в нашей голове живут совершенно обособленно друг от друга. И зачастую может случиться так, что вы будете забывать значения слов в родном языке, но помнить их значение в иностранном (со мной в прошлом достаточно часто это случалось.), либо испытывать трудности в переводе фразы, понятной вам в иностранном, но к которой сложно подобрать эквивалент в родном.
Так что перевод — пятый навык владения языком, и заключается в возможности построить хороший мост между двумя языками, которые, как я уже сказал — в голове живут совершенно обособленно друг от друга.

P.P.S. А да, я забыл рассказать про такую вещь как грамматика. Честно скажу — я положил на неё болт, и не знаю правил ни в русском, ни в английском. Я даже не знаю что такое наречие, например. Но пишу более-менее грамотно на всех знакомых мне языках. Ошибки естественно есть во всех языках, но я зализываю их опытом.
Но на самом деле правила грамматики имеет смысл учить, НО (!!!) только после того как вы овладели языком в достаточно хорошей мере, т. е. дошли до уровня, где грамматика становится критичной. Это не значит что когда вы начинаете учить язык вообще не нужно смотреть правила грамматики, но это значит что нужно самим пытаться понять шаблон языка, т.е. сами правила построения слов и предложений на живых примерах, а не на сухих правилах без привязки к контексту.
Да вы сами вспомните как вы учили родной язык. Первые несколько лет жизни вы чисто практиковались в языке, и уж только потом, в средних-старших группах детского сада, и впоследствии в школе вы начали учить правила грамматики.

ссылка на оригинал статьи http://habrahabr.ru/post/185100/

Кеширование ID инфоблоков

Битрикс, как платформа, содержит в себе несколько неудобных для разработчика мест. Об одном таком месте, которое мне давно хотелось «почесать», и пойдёт повествование в данном топике. Кому интересно добро пожаловать под кат.

То самое место

Я думаю ни для кого не является секретом, что использовать в вызовах API ID инфоблоков или же ID их свойств, а так же ID значений свойств типа «список», является не очень хорошей практикой разработки под Битрикс. Если это для кого-то секрет, я поясню. Дело в том, что у данной техники есть несколько неприятных минусов:

  1. ID — это всего лишь числовой идентификатор, и в вызовах API больше напоминает магическое число. Иначе говоря, ни какой ясности относительно того какой инфоблок, свойство или значение свойства под данным идентификатором подразумевается он не вносит, что негативно сказывается на общей читаемости кода.
  2. При разработке готовых решений для «1С-Битрикс» использование в вызовах API идентификаторов инфоблоков и т.п. крайне не рекомендуется, поскольку при установке вашего решения на платформу пользователя именно его платформа решает какие будут ID у инфоблоков, их свойств и т.п. Поэтому они могут отличаться от тех, что вы изначально прописали в вызовах API.

Я при первом знакомстве с Битриксом не видел в этих ограничениях особой проблемы. Ведь у инфоблоков и свойств инфоблоков есть код (CODE), а у значений свойств типа «список» есть внешний код (XML_ID), которые задаются разработчиком. Но с опытом и всё большим погружением в API Битрикса, выяснилось что и тут не обошлось без подводных камней. Поэтому идея использовать символьный код вместо числового идентификатора в вызовах API оказалась не идеальной.

Первый и наиболее серьёзный камень проявляется в том, что не все методы API модуля инфоблоков поддерживают символьные коды. Многие методы (особенно для работы со свойствами инфоблоков) поддерживают только идентификаторы, среди этих методов:

Второй подводный камень кроется в событиях модуля инфоблоков, а если быть точнее в:

В обработчики данных событий передаётся массив $arFields, содержащий в себе поля и свойства создаваемого или изменяемого элемента инфоблока. Камень же лежит в массиве $arParams['PROPERTY_VALUES'], в котором хранятся значения свойств элементов, а в виде ключей используются ID свойств инфоблоков.

[PROPERTY_VALUES] => Array
    (
      [33] => Array
        (
          [0] => Array
            (
              [VALUE] => 24
            )
        )
    )

И последний камень лежит в методе CIBlockElement::GetList и проявляет себя главным образом при попытке отфильтровать элементы инфоблока по значениям свойств типа «список». В документации к API описывается только 2 пути построения фильтра по значениям свойств типа «список»:

  1. Передача в качестве значения фильтра ID значения свойства,
  2. Передача в качестве значение фильтра строковое значение свойства.

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

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

Как «почесать»

Самое простое, что можно придумать в данной ситуации — это сделать перечисления идентификаторов инфоблоков, а их свойств и значений списков в виде статических классов со списком констант.

// Перечисление ID инфоблоков class MyIBlocks{     const News = 1;     const Products = 2; }  // Перечисление ID свойств class MyProperties{     const Weight = 10;     const Photos = 11; }  // Перечисление ID свойств типа "список" class MyEnums{     const Prop1Yes = 1;     const Prop1No = 2; }  $newsIBlockId = MyIBlocks::News; $weightPropertyId = MyProperties::Weight; $prop1YesValueId = MyEnums::Prop1Yes; 

Это решение самое простое и я бы сказал идеальное, но вот только не в нашем грешном мире. Очень редко получается определить структуру инфоблоков с первого раза так, чтобы потом не изменять, не добавлять новые свойства. А после каждого изменения нам придётся в ручную править наши классики-перечисления, чтобы держать их в актуальном виде. Если же говорить о готовом решении для битрикса, то наши перечисления вообще не решают проблемы, потому что мы не можем заранее знать какие идентификаторы инфоблоков, свойств инфоблоков и значений списков будут у пользователя нашего решения.

Как «почесать» так, чтобы больше не чесалось

Сталкиваясь с этой проблемой и запинаясь о её подводные камни на различных проектах, я разработал класс CIBlockTools, самостоятельно сканирующий структуру инфоблоков и позволяющий получить значение ID инфоблоков и т.п. в зависимости от их символьного кода.

CIBlockTools позволяет:

  1. Получить ID инфоблока по его коду,
  2. Получить ID свойства инфоблока по коду инфоблока и коду свойства,
  3. Получить ID значение списка по коду инфоблока, коду свойства и внешнему идентификатору значения.

C помощью CIBlockTools более не надо записывать ID инфоблоков напрямую в вызовах API как магические числа, например:

$dbProducts = CIBlockElement::GetList(     false,     array(         'IBLOCK_ID' => CIBlockTools::GetIBlockId('news'),         'PROPERTY_TOPICAL' => CIBlockTools::GetPropertyEnumValueId('news', 'TOPICAL', 'yes')     ) ); 

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

Туториал по использованию можно посмотреть на Github

ссылка на оригинал статьи http://habrahabr.ru/post/185080/