Pull to refresh
138
0
Владимир Губарьков @xonix

CTO

Send message
Python 3 не используется

Спорное утверждение.
python3wos.appspot.com/
Процесс идет, медленно но верно.
Дело не в xPDO (Это же что-то типа библиотеки ORM для PHP?). А дело в архитектуре вашей CMS.

Почему так много классов наследуют объект работы с БД? Где инкапсуляция? Где абстракция от ORM слоя? Почему modEvent, modActiveUser, modScript и т.д. могут невозбранно лезть в БД? Чем это лучше олдового кондового пхп где можно было в любом месте делать mysql_query?

Если весь этот ужас приправить примесями, боюсь даже представить, насколько усугубится этот бардак.

О да,

fossies.org/dox/modx-2.2.6-pl/classxPDOObject.html
fossies.org/dox/modx-2.2.6-pl/classmodAccessibleSimpleObject.html

И это вы считаете образцом хорошего ООП дизайна?
И зачем

Есть классы Домашнее_животное и Дикое_животное (производные от Животное).


Не проще ли обойтись одним классом Животное с полем boolean дикое?
Аналогично, есть сомнения в необходимости остальных перечисленных классов.
Ну Python, Ruby как-то смогли. Начинали с того же примерно, что и в PHP в этом плане.
Угу, и это в 2013 году в языке, который HyperText Preprocessor. В Java полная поддержка unicode была уже в 1998 году.
Лучше бы нативную поддержку юникода сделали…
Пошто у Вас все ссылки через bit.ly? Предпочел бы видеть адрес ссылки по которому хочу перейти.
Как-то тэги странно (я бы даже сказал, бессмысленно) сокращаются:

dl.dropbox.com/u/4766398/tmp/freelansim.PNG
Подход TypeScript кажется более разумным. Хотя бы потому, что Dart не представляет удобных механизмов интеграции с уже написанным JS кодом, например, использование возможностей того же JQuery или других JS библиотек.
>Вместо старого Денвера есть Open Server

Можно еще XAMPP упомянуть тогда ru.wikipedia.org/wiki/XAMPP
А для iOS есть похожее?
>Что касательно разработки, то есть яркий пример — до появления NuGet процент использующих open source библиотеки и код был относительно мал.

Прям так мал. Maven это уже давно позволяет.
>Была где-то статья про историю логгеров в Java.

habrahabr.ru/post/113145/
github.com/vkostyukov/logy/blob/master/src/main/java/logy/logger/FileLogger.java#L33

Открывать и закрывать файл на каждую запись в него? Не думаю, что это хорошая идея…
Одна из основных проблем в системах логирования это скорость. Необходимо, чтобы логирование как можно меньше замедляло программу.
У Вас информация о классе и методе берется программно из стека вызовов, что обычно очень неоптимально, и всякие библиотеки типа log4j не рекомендуют вообще пользоваться такой возможностью в критичных к скорости программах.
Ну и по мелочи. Ваши вспомогательные функции принимаютс Object… а значит на каждый вызов оборачивают свои аргументы в массив, что тоже не прибавляет скорости.
Мой велосипед для подобного в питоне

habrahabr.ru/post/71427/
Да, признаю, с делегатами я ошибся.
Но к Func<...> аргумент по-прежнему применим.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var a = new A();
            var b = new B();

            var f1 = new A.PointComparator(b.compare);
            var f2 = new A.PointDistanceFinder(b.compare);
  
            Console.WriteLine(a.compare(f1, 2, 5));
            Console.WriteLine(a.distance(f2, 2, 5));
            
            Func<int, int, int> f = b.compare; 
            Console.WriteLine(a.compareF(f, 2, 5));
            Console.WriteLine(a.distanceF(f, 2, 5));// <-- not correct use.

            Console.Read();
        }
    }

    class B
    {
        public int compare(int a, int b)
        {
            return a.CompareTo(b);
        }
    }
    class A
    {
        public delegate int PointComparator(int x, int y);
        public delegate int PointDistanceFinder(int x, int y);

        public int compare(PointComparator pointComparator, int x, int y)
        {
            return pointComparator(x, y);
        }

        public int distance(PointDistanceFinder pointDistanceFinder, int x, int y)
        {
            return pointDistanceFinder(x, y);
        }

        public int compareF(Func<int,int,int> pointComparator, int x, int y)
        {
            return pointComparator(x, y);
        }

        public int distanceF(Func<int, int, int> pointDistanceFinder, int x, int y)
        {
            return pointDistanceFinder(x, y);
        }
    }
}
То что для анонимных типов это оправдано. А для остальных случаев можно было оставить явный вид, сократив многословность другим способом, например

Dictionary<string, List<decimal>> prices = new Dictionary<string, List<decimal>>();
->
Dictionary<string, List<decimal>> prices = new Dictionary<>();


>Вы, кстати, не видели type inference в каком-нибудь f#

Видел в Mercury. Думаю, там нечто похожее =)

Information

Rating
Does not participate
Date of birth
Registered
Activity