Pull to refresh
10
0
Григорьев Никита @noopic

User

Send message
Сталкивался. Решение:
1. Откройте файл lite-client/crypto/vm/cells/CellUsageTree.h.
2. Найдите строчку 48.
3. Внесите исправления в код и сохранить файл.
- std::array<td::uint32, CellTraits::max_refs> children{0};
+ std::array<td::uint32, CellTraits::max_refs> children{{0}};


У меня потом также вылезала следующая ошибка:
fatal error: auto/tl/ton_api.h: No such file or directory


Тут в комментариях описана эта ошибка и её решение:
https://habr.com/ru/post/453714/#comment_20208282
В работе для последних двух проектов, которые пишутся уже больше года, взял Yii2. Для pet проекта написал свой микро фереймворк на PHP7.

Свой фреймворк разделил на две части, API и web. API принимает параметры через GET или POST, валидирует их и возвращает JSON с успешным результатом или ошибкой. Web выводит HTML. Реализовал всё самое необходимое: простейший роутинг, локализацию, мирграции, подключение ассетов, вывод шаблонов, валидацию параметров. Больше пока не понадобилось. Задокументировал, покрыл тестами на 70%. Пустую страницу выводит быстрее, чем Yii2, в 5 раз. Yii2 — 2.5ms, my — 0.5ms.

Возникают мысли выложить исходники в открытый доступ, но пока не вижу в этом целесообразности, так как писался он под определённую задачу, и многие популярные вещи, такие, как ORM, подключение шаблонизатора, вроде Twig, кастомные логи и прочее, в нём отсутствуют.
В первом варианте количество пользователей не впечатляет. Владелец сайта может написать хоть миллиард пользователей. Эту информацию никак не проверить. В том же ВКонтакте аватарки людей появляются, если навести на число. Хотя, опять же, не известно реальные это люди, или купленные аккаунты. На обычном сайте эта информация, на мой взгляд, бесполезна. Лучше бы сделали мини галерею пользователей, на фоне монитора с их продуктом, и то, интересней было бы.

Во втором варианте иконки ужасные. Первая ассоциация, которая появилась при взгляде на иконки,: «Это рекламный баннер».

Третий пример. Считаю, что все эти значки доверия вредны. Они, как бы говорят, мы вас не обманем. Если мне в торговой точке вам такое скажет продавец, повысится ли ваше доверие к нему?

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

На мой взгляд, интереснее гораздо лучше вместо a/b тестирования делать a/b/c/d/e/f/g/h/i/j/k/l/m/n. Тогда информация будет более полной. А так, это гадание на кофейной гуще. Единственный полезный посыл статьи — не слушаете других, тестируйте все сами.
Во-первых, эта функция используется вместо вычисления индексов. То есть код выглядит вот-так.

var topPixel:int = (i == 0) ? START_COLOR : bitmapData.getPixel(1, i - 1);
var centerPixel:int = bitmapData.getPixel(1, i);
var bottomPixel:int = (i == imageHeight - 1) ? START_COLOR : bitmapData.getPixel(1, i + 1);
var pixelColor:int = getPixelColor(topPixel, centerPixel, bottomPixel);
bitmapData.setPixel(0, i, pixelColor);


Цвета передаются потому что мы ищем не максимум среди индексов, а цвет, который соответствует максимальному индексу. Если не передавать цвета в функцию, то мы найдём индекс, но, как узнать, какой цвет этому индексу соответствует?

Во-вторых, про N-1. Допустим, пойдём этим способом, находим индекс в два сравнения. Сравнили topPixelIndex c centerPixelIndex и записали максимум. Потом сравнили полученный максимум с bottomPixelIndex и узнали, какой индекс самый большой. А теперь возвращаемся к вопросу, который я уже задавал. Как теперь узнать, какой цвет соответствует этому индексу? Опять нужно будет делать проверку.

var maxIndex:int = Math.max(topPixelIndex, centerPixelIndex, bottomPixelIndex);
if (maxIndex == topPixelIndex) pixelColor = topPixel;
else if (maxIndex == centerPixelIndex) pixelColor = centerPixelIndex;
else pixelColor = bottomPixel;


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

Собственно, я сам отвечу на свой вопрос. Узнать индекс быстро мы можем, если будем записывать цвета по индексу в массив. Тогда не нужно будет сравнение с If. Получится вот это.
import flash.geom.Point;
import flash.display.BitmapData;
import flash.display.Bitmap;

const START_POINT:Point = new Point(1, 0);
const CELL_SIZE:int = 10;
const START_COLOR:int = 0xFFFFFF;

var imageWidth:int = stage.stageWidth / CELL_SIZE;
var imageHeight:int = stage.stageHeight / CELL_SIZE;
 
var bitmapData:BitmapData = new BitmapData(imageWidth, imageHeight, false, START_COLOR:int); 
var indexes:Object = {};
var colors:Array = [];
// Лучше использовать Vector вместо Array, но парсер кода Habrahabr из-за этого ломает всё подсветку синтаксиса.
// var colors:Vector.<int> = new Vector.<int>();
var colorIndex:int;

addColor(START_COLOR);

var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.scaleX = bitmap.scaleY = CELL_SIZE;
addChild(bitmap);

stage.addEventListener(MouseEvent.CLICK, onStageClick);
stage.addEventListener(Event.ENTER_FRAME, onStageEnterFrame);

function addColor(color:int):void {
    indexes[color] = colorIndex;
    colors[colorIndex] = color;
    colorIndex++;
}
 
function onStageClick(e:MouseEvent):void {
    var position:int = e.localY / CELL_SIZE;
    var color:int = Math.random() * 0xFFFFFF;
    addColor(color);
    bitmapData.setPixel(0, position, color);
}
 
function onStageEnterFrame(e:Event):void {
    bitmapData.lock();
    bitmapData.copyPixels(bitmapData, bitmapData.rect, START_POINT);
    for (var i:int = 0; i < imageHeight; i++) {
        var topPixel:int = (i == 0) ? START_COLOR : bitmapData.getPixel(1, i - 1);
        var centerPixel:int = bitmapData.getPixel(1, i);
        var bottomPixel:int = (i == imageHeight - 1) ? START_COLOR : bitmapData.getPixel(1, i + 1);
        var topPixelIndex = indexes[topPixel];
        var centerPixelIndex = indexes[centerPixel];
        var bottomPixelIndex = indexes[bottomPixel];
        var maxIndex:int = Math.max(topPixelIndex, centerPixelIndex, bottomPixelIndex);
        var pixelColor:int = colors[maxIndex];
        bitmapData.setPixel(0, i, pixelColor);
    }
    bitmapData.unlock();
}


А теперь поговорим об оптимизации и читаемости. Соглашусь, последний вариант читается проще. Но также, я считаю, что читаемость первого варианта тоже хороша. Там довольно простой код. А это главное. Код должен легко читаться.

Мой первый вариант выполняется быстрее всех остальных более, чем 20% и использует меньше памяти. Когда писал этот, код я учитывал это, зная, что обращение к элементу массива во Flash медленнее, чем две операции сравнения.

Изначально у нас три пикселя, и городить дополнительную функцию для N значений, при этом заведомо замедляя работу, когда можно просто сравнить три значения при вполне читаемом коде, я не вижу ни какого смысла.
Мне тоже приятно. Не сразу додумался до решения, которые вы предложили. Знакомство с кидания говна начинаю не всегда, только тогда, когда у меня плохое настроение. К вам лично негативных эмоций не испытываю. По-другому моё сообщение можно прочитать так: «Я взял за основу ваш код и решил его немного улучшить. Посмотрите, пожалуйста.».
В условиях текущей задачи буду решать так:
function getPixelColor(...arguments):int
{
    var maxIndex:int;
    var result:int;
    var length:int = arguments.length;
    for (var i:int = 0; i < length; i++)
    {
        var color:int = arguments[i];
        var colorIndex:int = colors[color];
        if (maxIndex < colorIndex)
        {
            maxIndex = colorIndex;
            rusult = color;
        }
    }
    return result;
}


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

var bmp:BitmapData = new BitmapData(Width, Height, false, 0x000000);
var buffer:BitmapData = new BitmapData(Width, Height, false, 0x000000);
var display:BitmapData = new BitmapData(Width*Size, Height*Size, false);


Вот, более адекватный код со сдвигом картинки и расчётом только первого столбца.
import flash.geom.Point;
import flash.display.BitmapData;
import flash.display.Bitmap;

const START_POINT:Point = new Point(1, 0);
const CELL_SIZE:int = 10;
const START_COLOR:int = 0xFFFFFF;

var imageWidth:int = stage.stageWidth / CELL_SIZE;
var imageHeight:int = stage.stageHeight / CELL_SIZE;
 
var bitmapData:BitmapData = new BitmapData(imageWidth, imageHeight, false); 
var colors:Object = {};
var colorIndex:int;

addColor(START_COLOR);

var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.scaleX = bitmap.scaleY = CELL_SIZE;
addChild(bitmap);

stage.addEventListener(MouseEvent.CLICK, onStageClick);
stage.addEventListener(Event.ENTER_FRAME, onStageEnterFrame);

function addColor(color:int):void {
    colorIndex++;
    colors[color] = colorIndex;
}
 
function onStageClick(e:MouseEvent):void {
    var position:int = e.localY / CELL_SIZE;
    var color:int = Math.random() * 0xFFFFFF;
    addColor(color);
    bitmapData.setPixel(0, position, color);
}
 
function onStageEnterFrame(e:Event):void {
    bitmapData.lock();
    bitmapData.copyPixels(bitmapData, bitmapData.rect, START_POINT);
    for (var i:int = 0; i < imageHeight; i++) {
        var topPixel:int = (i == 0) ? START_COLOR : bitmapData.getPixel(1, i - 1);
        var centerPixel:int = bitmapData.getPixel(1, i);
        var bottomPixel:int = (i == imageHeight - 1) ? START_COLOR : bitmapData.getPixel(1, i + 1);
        var topPixelIndex = colors[topPixel];
        var centerPixelIndex = colors[centerPixel];
        var bottomPixelIndex = colors[bottomPixel];
        var pixelColor:int;
        if (topPixelIndex >= centerPixelIndex && topPixelIndex >= bottomPixelIndex) pixelColor = topPixel;
        else if (centerPixelIndex >= topPixelIndex && centerPixelIndex >= bottomPixelIndex) pixelColor = centerPixel;
        else pixelColor = bottomPixel;
        bitmapData.setPixel(0, i, pixelColor);
    }
    bitmapData.unlock();
}
Стартапер – основатель стартапа. Не всегда нужно ужимать до одного слова. Или давайте тогда уж всему определения придумывать. Человек, который ест борщ, – борщеед.

А вообще, каждому зарубежному слову, например, такому, как «стартап», нужно сначала дать четкое определение, потом уже, по возможности, подбирать к этому определению русские аналоги. Стаптап и начинание, ну, никак не вяжется у меня, что это одно и то же.
Есть такая парадигма, что данные от представления хранятся отдельно. То есть координаты объекта храниться будут не в Sprite а в отдельной переменной. И все расчеты будут вестись с этой переменной, а при обновлении кадра Sprite просто будет брать значение из переменной.
Спасибо за статью. Мне, пожалуй, больше всего интересно узнать про пляски с бубном во время установки MAC OS и публикации приложения.
Гос сайты там на курьих ножках
Стоят за миллиард рублей.
Картинку бы ещё.
Не хочу показаться диванным экспертом, который против любых идей, но спортом занимаются ради спорта и получения огромного кайфа. Никакие $10 не заставят полюбить тренировки.
Что-то мне подсказывает, что так было всегда.
Вообще фиолетово, как делал игры на Flash, так и буду делать. Покажите мне технологию, которая удобнее, и я с радостью перейду на неё.
За что минусы? Всё правильно. В игре обязана быть кнопка выключения музыки.
Дизайнер Flash/Flex. Кто это?
Вот ещё хорошая статья с картинками Краткое описание формата GIF.
Блин, я немного завидую тем, кто начал делать игры на Flash раньше. Тогда проще было продать. Сейчас даже от хорошего качества игры спонсоры воротят нос.
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity