Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Проблема For..in в javascript на IE9

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

Худший ответ:
там просто было всё дело в том, что ajax-ом передавался массивчик с сервера именно в таком виде, так как много где используется особо не хотелось менять структуру. Я просто решил дополнительно передавать сортировки.
Вопрос: Где взять первых клиентов?

Лучший ответ:
У меня была такая "конторка" контекст и вообще графическую рекламу в сети не давайте - всё скликают нафиг. Никто не заказывает сейчас сайт погуглив "Сделать сайт в Урюпинске" все идут к знакомым и знакомым знакомых - это ваш канал. У меня по нему приходило 90% клиентов.
Бесплатные консультации раздавайте в ВК и на других сайтах где предприниматели (но не айтишники тусуются) можете делать несложный сайт бесплатно а зарабатывать на продвижении.
До студии я тоже работал в другой сфере и как раз из этой "другой сферы тоже пришёл один заказ".
На фрилансе заказы не искал.
И вообще, на самом деле найти клиентов легко, тяжело потом с ними работать )))

Худший ответ:
Банально - фриланс, там можно найти постоянных клиентов, особо даже и не пытаясь. В идеале распространить информацию через знакомых, а еще лучше сделать кому-нибудь хороший сайт, в этом случае есть возможность сарафанного радио.
Вопрос: Как решить ошибку с ListView и AsyncTask в Android?

Лучший ответ:
Цепляемся за следующую строку Logcat-а:"Make sure the content of your adapter is not modified from a background thread, but only from the UI thread."
Далее видим в AsyncTask следующее:@Override
    protected Void doInBackground(Void... params) {
            LINK = "here is link for json";
            obj = Helpers.getJson(LINK);
            if (obj != null) {
                Helpers.refreshListView(obj, tempList);
            }
        return null;
    }Ошибка: 
Helpers.refreshListView(obj, tempList);  вызывается в методе doInBackground() которая выполняется в background thread!Решение:
Вынести вызов refreshListView() в метод onProgressUpdate() AsyncTask-а (который уже выполняется на UI Thread!):protected Void doInBackground(Void... params) {
    // ...
    publishProgress(new MyProgress(obj, tempList));
    // ...
}

protected void onProgressUpdate(MyProgress... progress) {
    if (progress.size() > 0) {
        Helpers.refreshListView(progress[0].getObj(), progress[0].getTempList());
    }
}
---Upd: Подробнее - т.к. в UIThread надо передавать и obj и tempList - то для них нужно сделать класс-wrapper, например так - (каждый класс в своём файле, естественно)public class LoadWall extends AsyncTask<Void, MyProgress, Void> {
    // ...
    @Override
    protected Void doInBackground(Void... params) {
        // ...
        publishProgress(new MyProgress(obj, tempList));
        // ...
    }

    @Override
    protected void onProgressUpdate(MyProgress... progress) {
        if (progress.size() > 0) {
            Helpers.refreshListView(progress[0].getObj(), progress[0].getTempList());
        }
    }
    // ...
}

/**
 * Используется для передачи прогресса в UI-Thread
 */
public class MyProgress {

    private final Object obj;
    private final ArrayList<LinkedHashMap<String, String>> tempList;

    public MyProgress(Object obj, ArrayList<LinkedHashMap<String, String>> tempList) {
        this.obj      = obj;
        this.tempList = tempList;
    }

    public Object getObj() {
        return obj;
    }

    public ArrayList<LinkedHashMap<String, String>> getTempList() {
        return tempList;
    }
}

Худший ответ:
По коду не очень понятно как всё устроено, но последние две строчки в onPreExecute выглядят странно.
Вопрос: Какие нормальные и интересные курсы есть по линуксу на интуите?

Лучший ответ:
Нескучные - это с выпрыгивающими клоунами, монстром-щекотилой и периодическими розыгрышами призов?
Если возникает подобный вопрос, рекомендуюначать с азов. И не обязательно на ИНТУИТе. Ищите основы работы в командной строке, написание скриптов, установка пакетов, настройка сети, работа с дисками, настройка iptables.
Затем задайте себе вопрос - "На кой хрен я вообще хочу это изучать?" И постарайтесь найти ответ лучше, чем "стать самым-самым умным и крутым сисадмином в мире!" Конкретную задачу перед собой поставьте, сформулируйте её предельно ясно и вам сразу станет понятно, куда двигаться дальше. А может и забить на Linux. Виндовые админы, поверьте мне, тоже очень не плохо живут.
Что касается виеолекций. Не уверен на счет ИНТУИТа, но на YouTube полно подобного материала.
P.S. Определитесь с дистрибутивом Linux, который вы хотите изучать, потому как на первоначальной стадии изучения между ними огромная разница и стирается она не сразу. Из популярных рекомендую изучить Debian, Fedora, CentOS, Ubuntu. По сути, можете изучить Debian и Fedora, по скольку CentOS в основе своей - Fedora, а Ubuntu - Debian.

Худший ответ:
Можно поискать на разных MOOC:
https://www.udemy.com/topic/linux-video-tutorials/
https://class.coursera.org/startup-001/lecture
https://www.edx.org/course/introduction-linux-linu...
Опять же, стоит определиться с уровнем: как правило, курсы начального уровня почти идентичны друг другу их большинство. А вот что посерьезнее, уже встречается реже, и стоит дороже...
Вопрос: Какой язык программирования подойдет для данного приложения?

Лучший ответ:
"смогу ли сам написать данное приложение, при самом хорошем раскладе(если не умею кодить)" - нет, не сможете.

Худший ответ:
Если перефразировать вопрос, какой язык более подойдет для данной цели, чтобы знать какого кодера искать. Со мной все понятно, заниматься упаковкой продукта моя компетенция.
Вопрос: Как организоваться систему рейтинга постов +1 -1?

Лучший ответ:
<?php \yii\widgets\Pjax::begin(); ?>
<span>Рейтинг 256</span>
<a href="/vote?id=айдизаписи&plus=true">+</a>
<a href="/vote?id=айдизаписи&plus=false">+</a>
<?php \yii\widgets\Pjax::end(); ?>
В контролереpublic function actionVote($id,$plus){
$x=1
if($plus)
$x = -1;

$model = Chtoto::findOne($id);
$model->rating = $model->rating + $x; 
if($model->save())
return $this->renderAjax('_вьюшка_Блока_рейтинга_и_кнопок',['rating'=>$model->rating]);

return false;
}
Думаю идея ясна.

Худший ответ:
делаешь ajax запрос при нажатии на кнопку +1 или -1, который будет у тебя редактировать в базепост, проставляя ему нужный рейтинг. Как-то так
Вопрос: Работа с Git на удаленном сервере без установленного локально из PHPStorm — реально?

Лучший ответ:
локальный git нужен, если я верно вас понял.

Худший ответ:
ответ - нереально, DevMan выше ответил.
Вопрос: Как повесить двухнедельное расписание на календарь событий?

Лучший ответ:
Так если данные будете в базе хранить, так и пользуйтесь функциями базы. Номер недели в году - стандартная функция того же MySQL. Привяжитесь к чётности недели, вот и будет первая-вторая.

Худший ответ:
Так если данные будете в базе хранить, так и пользуйтесь функциями базы. Номер недели в году - стандартная функция того же MySQL. Привяжитесь к чётности недели, вот и будет первая-вторая.
Вопрос: Какие приложения сделать на Android для практики?

Лучший ответ:
Systemwide приложение, превращающая фон в картинку с камеры. То есть идете вы по улице, пишете смс, читаете почту, выбираете трек в плеере - и видете сквозь экран дорогу. И продавайте за 3 доллара. Я бы купил.

Худший ответ:
1. Аналог популярного ПО. Например, всякие анализаторы состояния и т.д. (они собирают статистику и визуализируют ее - например, какой-нибудь вайфай чекер с регистрацией частоты подключения к wi-fi, которую можно посмотреть на графике, а также список роутеров, доверие к которым определяется количеством подключений к ним. Но это утилита, что имеет свои минусы).
2. Клиент-серверный анонимный чат с возможностью выбора ника, цвета, их изменения, изменения темы на ночную и дневную (это классный опыт сохранения настроек и понимания работы layout прорисовки андроид), сообщениями системы о новых пользователях, вошедших в чат и т.д. главным условием, конечно, является синхронизация (если ваш ник красный, то у всех ваш ник должен быть красным)
3. креатив. 
Фоток скрытой съемки. Это как обычная камера, но на экран не выводится информация с камеры, а съемку можно сделать, например, качельками:) кстати, отличная идея, может и выстрелит немножко.
Еще можно написать генератор бесполезных идей. С вашей стороны вы создаете кучу инструментов и возможностей (рисование смайликов пользователем), добавление звуков нажимания на этот смайлик (которые, например, можно записать с микрофона и слегка обработать до смешного) и т.д. Это как бы фреймворк для пользователей:)
Вопрос: Как изменять размер шрифта в зависимости от размера экрана?

Лучший ответ:
Можно поставить размер шрифта в зависимости от размеров экрана, но через calc() задавать минимальное значение. 
В этом примере ( codepen.io/paulradzkov/pen/jqYqgY ) размер шрифта заголовка никогда не будет меньше 16px (1em):h1 {
    font-size: calc(1em + 4vw);
}
Можно использовать более сложные формулы совместно с @media. Тут размер шрифта плавно меняется от 14 до 18px в диапазоне от 480 до 1024px. @media (min-width: 480px) and (max-width: 1024px) {
  p {
    font-size: calc(14px + (18 - 14) * ( (100vw - 480px) / ( 1024 - 480) ));
  }
}
До 480 и после 1024px размер задан жестко с использованием @media.
Но в целом это все сложно и редко нужно. Я обычно задаю размер фиксированно на двух-трёх диапазонах при помощи @media.UPD: можно даже заставить текст максимально заполнять площадь вьюпорта codepen.io/CrocoDillon/pen/fBJxu

Худший ответ:
@media screen and (max-width:468px) {
   p {font-size: 16px;}
}
это значит, что на экранах с максимальной шириной в 468 пикселей размер шрифта параграфа будет 16 пикселей.
Вопрос: Какими знаниями должен обладать Middle и Senior php developer?

Лучший ответ:
мне не приходилось сталкиваться со многими вещами, с абстракциями, неймспейсами, точнее я понимаю, что они делают и как работают, но сам не использую, так как не вижу смысла.
Что ж - тогда нужно столкнуться. Мидл отличается от Джуна не некими "мистическими знаниями", а опытом решения не стандартных задач.
Что касается используемых фреймворков вами - чем раньше перейдете на Symfony - тем быстрее вырастите. Безусловно, для своих задач yii - не плох, но это средне-маленькие проектики, для больших - это скорее плохой выбор, чем хороший (экспоненциальное разрастание моделей в случае больших команд - это убийственная практика). Kohana на пару с CodeIgniter - вообще учат тому, как писать не стоит((
Собственно чего я набросил на kohana?
1. Фреймворк не должен меняться, и не должен быть "в перемешку" с вашим кодом. Слишком велик соблазн что-то поменять во фреймворке. Как следствие - обновление части кода с фреймворком усложнится.
2. Явная инициализация всех подсистем проекта при загрузке. Зачем? Велика вероятность, что вообще все что там на каждый запрос не нужно.
3. Больше автолоада богу автолоада. Есть принятые стандарты PSR-0 и PSR-4, используйте их. Поймете зачем нужны неймспейсы. А кукули типа My_Very_Perfect_Controller - это практика 2000-х.
4. <?php defined('SYSPATH') or die('No direct access allowed.');
Эта защита имеет смысл только в случае, если ваш код в публичном доступе, чего вообще-то быть не должно. По хорошему в публичном каталоге должен быть только один исполняемый php файл index.php
5. Статика - это путь к бесконтрольной связности проекта. Код с ее использованием тяжело поддается тестированию и изменению.
6. ActiveRecord для больших проектов - это самоубийственная практика, увы. Передавая модель куда-то вы передаете не только данные, но и подключение к БД. Как следствие код, который со всей силы не должен иметь возможность делать запросы к БД - может это делать и будет.
Почитайте на досуге Попросили проверить код, на что смотреть нужно?

Худший ответ:
Upgrade до Middle PHP-разработчика за 3 месяца
А вообще:hh.ru/search/vacancy?text=php+middlehh.ru/search/vacancy?text=php+senior
Вопрос: Как подключить rigger к gulpfile.js из пакета google wsk?

Лучший ответ:
Когда-то, только начав изучать js,  я хотел создать авто-импорт sass файлов и у меня даже получилось, но я потратил больше месяца времени и сам даже не разу не пользовался этим "чудом".
В боевых условиях нет нужды в автоматическом "добавлении скриптов при помощи добавления пути в html", для этого есть BrowserSync. BrowserSync'у стоит лишь пути указать до директорий откуда он будет сам брать файлы и инжектировать их в приложение запущенное у Вас в браузере.
И в заключение хочу сказать, не используйте чьи-то gulpfile, а собирайте свой по мере освоения gulp. И не создавайте таски на будущие, типа "это мне вот потребуется потом, когда я что-то закончу". Сначала закончите, а потом уже создавайте. И после того, как Вы завершите одно-другое приложение, Вы уже сами поймете, что создать один универсальный gulpfile нереально!
И ещё хочу посоветовать не использовать yeoman, пока не закончите несколько проектов.
И ещё, если Вы вообще не знаете js и nodejs, то скачайте редактор, который уже имеет настроенные gulp и ему подобное. А иначе Вы себе мозг надорвете.UPD: забыл добавить, что после того, как Вы закончите приложение, то Вам нужно будет все файлы слить в один и уже полученные несколько файлов руками указать в точке входа приложения. Но если Вы после освоения gulp не захотите это делать, то существуют плагины, которые это сделают за Вас. Но использовать их Вам с самого начала не советую, они попросту не нужны.

Худший ответ:
подключил
вот сюдаvar gulp = require('gulp');
var rigger = require('gulp-rigger');
var $ = require('gulp-load-plugins')();
var del = require('del');
var runSequence = require('run-sequence');
и дописал тут:// Scan your HTML for assets & optimize them
gulp.task('html', function () {
  var assets = $.useref.assets({searchPath: '{.tmp,app}'});

  return gulp.src('app/**/*.html')
    .pipe(assets)
    .pipe(rigger())
    // Concatenate and minify JavaScript
    .pipe($.if('*.js', $.uglify({preserveComments: 'some'})))
    // Remove any unused CSS
    // Note: if not using the Style Guide, you can delete it from
    //       the next line to only include styles your project uses.
    .pipe($.if('*.css', $.uncss({
      html: [
        'app/index.html',
      ],
      // CSS Selectors for UnCSS to ignore
      ignore: [
        /.navdrawer-container.open/,
        /.app-bar.open/
      ]
    })))
    // Concatenate and minify styles
    // In case you are still using useref build blocks
    .pipe($.if('*.css', $.csso()))
    .pipe(assets.restore())
    .pipe($.useref())
    // Update production Style Guide paths
    .pipe($.replace('components/components.css', 'components/main.min.css'))
    // Minify any HTML
    .pipe($.if('*.html', $.minifyHtml()))
    // Output files
    .pipe(gulp.dest('dist'))
    .pipe($.size({title: 'html'}));
});
не работает ни при выгрузки, ни при watch. 
не сочтите за наглость, но может возможно меня ткнуть носом и прописать как нужно? ) спасибо заранее за внимание к вопросу.
Вопрос: Как реализовать импорт местоположений в магазин 1c-битрикс?

Лучший ответ:
Можно написать свой парсер этого csv и воспользоваться API. В частности CSaleLocation::Add.

Худший ответ:
Можно написать свой парсер этого csv и воспользоваться API. В частности CSaleLocation::Add.
Вопрос: Как обновить php на Debian Wheezy не с dotdeb репозитария?

Лучший ответ:
Если пользуетесь помимо официальных репозиториев сторонними, рано или поздно столкнётесь с тем, что какой-то пакет перестанет работать. Ещё и в local ставите из исходников. В такой мусорке просто трудно будет разобраться. Уберите dotdeb из списка репозиториев, поудаляйте всё, что понаставили и поставьте из официальных репов. Там всё это есть.

Худший ответ:
https://packages.debian.org/ru/wheezy-backports/nginx
илиecho 'deb http://nginx.org/packages/debian/ wheezy nginx' >> /etc/apt/sources.list
wget -O - http://nginx.org/keys/nginx_signing.key | apt-key add -
apt-get update
https://packages.debian.org/wheezy/php5-curl
https://packages.debian.org/wheezy/php5-xdebug
https://packages.debian.org/wheezy/php5-fpm
И все будет работать без проблем, как у меня.
Вопрос: Нужен движок портала поиска работы

Лучший ответ:
универсальный движок Друпал.
В вашем случае есть широкие возможности по раздаче прав, а в случае резюме есть механизм ревизий и можно сделать модерацию ревизий резюме

Худший ответ:
Друпал уже вам посоветовали, а ещё можете обратить на учебный проект symfony, он как раз нужной вам тематики, правда дописывать явно придётся www.symfony-project.org/jobeet/1_4/Doctrine/en/
Вопрос: Почему тормозит MySQL сервер?

Лучший ответ:
MyISAM при записях/апдейтах лочит всю таблицу, что тормозит ВСЕ остальные запросы к этим же таблицам, коих накапливается немало, что может привести к нехилым тормозам системы в целом (если у вас много запросов на модификацию). Ну и вдовесок размеры буферов для MyISAM у вас не шибко большие.
Мой совет - переходите на InnoDB. Если нет возможности, то хотя бы буферы побольше сделайте, но боюсь это особо не поможет.

Худший ответ:
Ну так dev.mysql.com/doc/refman/5.0/en/slow-query-log.html и профилировать же dev.mysql.com/doc/refman/5.0/en/explain.html select'ы из лога
Вопрос: Как подключиться к MySQL в Python3 на маке?

Лучший ответ:
pip install mysqlclient
Да и вообще: stackoverflow.com/questions/4960048/python-3-and-mysql

Худший ответ:
pip3.5 install pymysql 
затем в settings.pyDATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'base_name',
        'USER': 'root',
        'PASSWORD': '123'
    }
}
затем в __init__.pyimport pymysql

pymysql.install_as_MySQLdb()
Вопрос: Мобильная и десктопная верстка, как не грузить лишнее?

Лучший ответ:
Если не предполагается использование браузеров раннего палеолита, то можно так:<picture alt="description of image">
  <source src="small.jpg">
  <source src="medium.jpg" media="(min-width: 400px)">
  <source src="large.jpg" media="(min-width: 800px)">
  <img src="small.jpg" alt="description of image">
</picture>

Худший ответ:
Пользуюсь конечно для этого Bootstrap'ом.
вот в этом весь подвох, пользоваться без понимания происходящего
https://developer.mozilla.org/en-US/docs/Web/CSS/M...
первая же строка дает пояснение как делать отдельный цсс (картинки, фоны и тп можно засунуть в этот цсс в дата-урл или просто грузить нужного размера) + srcset + модульная структура
в foundation есть спец функции foundation.zurb.com/docs/components/interchange.html, что в принципе не сложно самому написать как минимодуль
Вопрос: Как можно выполнять скрипт checkmail.php не по cron, а сразу после получения письма сервером nginx?

Лучший ответ:
Если письмо кладется в файл, то можно следить за каталогом с письмами с помощью inotify (linux-only?).
В Дебиане и Убунте смотрите на пакеты incron, iwatch.

Вариант №2 — следить за логами nginx'a и запускать команду при ловле события:
(
date +'%Y.%m.%d %H:%M:%S -- Started...'
while : ; do
    tail -F /var/log/nginx/access.log |
    grep --line-buffered -i -- "smtp" | 
    while read line; do
        date +"%Y.%m.%d %H:%M:%S -- $line"
        php -f /path/to/checkmail.php
    done
    date +'%Y.%m.%d %H:%M:%S -- Restarted...'
    sleep 30
done
) > /var/log/checkmail.log 2>&1 &

Примерно так.

Худший ответ:
Не думаю, что nginx может быть хоть минимально полноценным SMTP сервером.
Насколько я понял, nginx только прокси-авторизатор.
С exim я делал так: 
см. habrahabr.ru/post/164661/
Вопрос: Каким образом приложения привязываются к устройству?

Лучший ответ:
Наверное во время первого логина в систему запоминает на устройстве токен? :-)

Худший ответ:
Используйте токен,у каждого устройства есть токен
Вопрос: Список задач

Лучший ответ:
«P.S> труЪ баг-трекерные системы не предлагайте, товарищ не программист и близко и ему не просто будет пользоваться или.»
Вот это вы зря, багтрекерные системы не для программистов, они для людей. Заказчики прекрасно постят в них баги, или Вы думаете что заказчики — программисты?
простой, удобный, легкий

Худший ответ:
можете попробовать vspisok.org. Простой, есть совместный доступ к спискам. Правда нет обсуждения, можно только править примечание к задачам.
Вопрос: Как настроить нормальный шрифт в Ubuntu?

Лучший ответ:
gnome-tweak-tool или unity-tweak-tool, настройте сглаживание.
Например для gnome-tweak-tool:

Худший ответ:
Поставьте gnome-tweak-tool, в Юнити настройки урезали так, будто они пользователю вовсе не нужны.
Вопрос: Как вытащить слайдер с сайта?

Лучший ответ:
На этом сайте используется вот этот слайдер 
kenwheeler.github.io/slick
Открой Demos и сравни DOM-дерево, оно идентично.

Худший ответ:
чувак, так это обычный bxslider можно поставить и настроить под себя. вытащить будет сложнее
Вопрос: Как сохранить правила iptables после перезагрузки Ubuntu?

Лучший ответ:
в debian и ubuntu добавили пакет iptables-persistent
который использует iptables-save/iptables-restore

#service iptables-persistent 
Usage: /etc/init.d/iptables-persistent {start|restart|reload|force-reload|save|flush}

после настройки правил как нужно, сделать service iptables-persistent save и при следующей загрузке они будут применены

Худший ответ:
Однократно в командной строке:
iptables-save > /etc/network/iptables.save

В /etc/rc.local:
F="/etc/network/iptables.save"
test -f "$F" && /sbin/iptables-restore < $F

Неэлегантно, но работоспособно.
Вопрос: В чем выражается удобство разработки на ROR?

Лучший ответ:
Во-первых, Рельсы — это просто Руби. Все достоинства Рельс вытекают из достоинств Рубей. У Руби довольно хороший АПИ, в котором присутствуют решения для большинства программистских рутинных задач — это очень удобно.
Во-вторых, Рельсы — это набор хорошо спроектированных гемов. Не нравится что-то? Можешь выкинуть или заменить. Никто не заставляет использовать все компоненты Рельс.
В-третьих, Рельсы — это хороший пример возможностей ООП Рубей.
В-четвертых, convention over configuration. Новички называют это магией, но для более-менее опытного руби-программиста в этом нет никакой магии. И благодаря этому подходу, опять же, удалось избавить программиста от постоянного рутинного выполнения одних и тех же, "операционных", задач. Другой пример, демонстрирующий этот принцип, — Backbone и Angular: в Бэкбоне нужно много рутинных задач решать (даже не решать, так как это примитивные задачи, а просто каждый раз прописывать их) самому, а в Англуяре эти задачи уже решены.
В-пятых, Рельсы — вполне зрелый инструмент решения задач веб-разработки. Он уже давно вышел из хипстерской стадии, и вместе с этим ушло большое количество людей, которых привлекают только модные, находящиеся у всех на слуху, технологии. Рельсы (как и Руби) до сих пор развиваются и не собираются умирать.
В-шестых, эстетика и лаконичность Руби. Лично я не вижу никакого смысла в излишних кавычка, скобках, точках с запятой. Не за чем визуально засорять код второстепенными элементами. Языки программирования постепенно становятся более социальными, более доступным людям — и это правильно.
Но это всё дело вкуса, в большей степени. У вас уже сложилось свое видение языков программирования, вам теперь кажется, что отсутствие типов — это недостаток. Лично я считаю, что это неправильно. Это такая же ситуация, как когда ты начинаешь чем-то заниматься (играть на гитаре, например) и изначально делаешь что-то неправильно (постановка пальцев), то у тебя эта вредная привычка закрепляется и потом мешает дальше развиваться. Тебе трудно становится переучиться на другое, так как ты уже сильно привык к этому, неправильному, способу. Я не говорю о том, что строгая типизация это неправильно, нет, дело в другом. Есть разные парадигмы программирования, есть разные подходы к программированию, и хороший программист должен владеть ими (ну или стремиться к этому) и не ставить какой-то из них во главу угла. Главное, не какой язык, а что на нем можно делать, какие задачи решать.

Худший ответ:
Не особо ясно чем смущают вас символы в связях? Нужно понимать, что связи в первую очередь реализуются на уровне БД, а символы в моделях это - элементы ORM, и зачем собственно валидации типов в языке с динамической типизацией ?
1) следует разобраться с чем, что такое ORM.
2) понять как устроен Ruby.
3) понять как работают MVC фреймворки.