LINUX.ORG.RU

Сообщения Shadow

 

Вид вложений в thunderbird.

Форум — Desktop

Приветствую. Давно хотел узнать, почему в thunderbird такие «дискриминированные» малюсенькие иконки аттачей внизу окна. Например, объяснить моим пожилым родителям по телефону, где найти аттач, было нетривиальной задачей. У себя я для того, чтобы иконки аттачей сразу были видны, использую, стыдно сказать, OutlookAlike расширение.

Раньше использовал conversations, но они делают thunderbird просто эпически тормозным и вообще какие-то кривые и не настраиваемые.

Есть кошерные решения?

 , , ,

Shadow
()

Когда СПО таки торт...

Форум — Talks

Под виндой с дуру начал кодить на питоне с помощью коммерческого дистрибутива. И почему-то это г...о заняло 1,6 гига. И ещё с бубнами и mingw32 собирало модули.
Я его снёс, поставил нормальный, который 16 мб в архиве. Оказалось, Корпорация Зла для него раздаёт готовый c++ тулчейн для беспроблемной сборки модулей, как в линуксе.

 ,

Shadow
()

Canvas в долбоскрипте...

Форум — Web-development

Здравствуйте. Ковыряю некий скрипт, масштабирующий и кропящий картинки. Хочу добавить функционал вращения. С удивлением узнал, что канва вращается вместе с полем координат. Так как кропить надо и после вращения, нужно как-то сообщать реальные координаты функции кропа.

Вопрос: можно ли к объекту канвы добавить своё свойство (перегрузить, так сказать), в котором хранится угол поворота? Это бы сильно улучшило программу и мою карму по сравнению с созданием левой глобальной переменной.

В общем, написал с нуля сам, попутно разбираясь. save() и restore() с растром в контексте не работают, нужно двигать центр координат через translate и СОХРАНЯТЬ УГОЛ ПОВОРОТА в отдельной переменной, чтобы по ней пересчитывать координаты мыши. При этом при последующем вращении к вращаемому контексту всё тот же угол ДОБАВЛЯЕТСЯ к текущему состоянию (это важно при перепозиционировании контекста после поворота), а при пересчёте координат мыши нужно рассчитывать полный суммарный угол.

Код:

<!DOCTYPE html>
<html>
<HEAD>
 <STYLE type="text/css">
 /* Core component styles */
.image-crop {
  align: left;
  width: 300px;
  margin: 0 auto;
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;
}

/* rotate handle */
.image-crop .rotate-handle {
  display: block;
  position: absolute;
  bottom: 6px;
  right: 2px;
  background: rgba(255,255,255,0.7);
  width: 50px;
  height: 50px;
  cursor: pointer;
  border-radius: 50px 50px;
}

.image-crop .rotate-handle > span {
  text-align: center;
  color: rgba(0, 0, 0, 0.5);
  font-size: 34pt;
  display: block;
  position: relative;
  top: -10px;
}

/* zoomin handle */
.image-crop .zoomin-handle {
  display: block;
  position: absolute;
  bottom: 6px;
  left: 2px;
  background: rgba(255,255,255,0.7);
  width: 50px;
  height: 50px;
  cursor: pointer;
  border-radius: 50px 50px;
}

.image-crop .zoomin-handle > span {
  text-align: center;
  color: rgba(0, 0, 0, 0.5);
  font-size: 34pt;
  display: block;
  position: relative;
  top: -10px;
}

/* zoomout handle */
.image-crop .zoomout-handle {
  display: block;
  position: absolute;
  bottom: 6px;
  left: 56px;
  background: rgba(255,255,255,0.7);
  width: 50px;
  height: 50px;
  cursor: pointer;
  border-radius: 50px 50px;
}

.image-crop .zoomout-handle > img {
  text-align: center;
  color: rgba(0, 0, 0, 0.5);
  font-size: 34pt;
  display: block;
  position: relative;
  top: 8px;
  left: 8px;
}

 </STYLE>
</HEAD>
<body>

<div class="image-crop"><canvas id="example" width="300" height="300" style="border:1px solid #d3d3d3;" onmousedown="onCanvasMouseDown(event)" onmousemove="onCanvasMouseMove(event)" onmouseup="onCanvasMouseUp(event)">
Your browser does not support the HTML5 canvas tag.</canvas>
<div class="zoomin-handle" onclick="zoomin(event)"><img src="zoomin.svg"></div>
<div class="zoomout-handle" onclick="zoomout(event)"><img src="zoomout.svg"></div>
<div class="rotate-handle" onclick="rotate(event)"><img src="curved2.svg"></div>
</div>

<script>
    var currentX = 0, currentY = 0, dragging = false, startX = 0, startY = 0, zooming = false;
    zoom = 1;
    var minXPos = 0, maxXPos = 50, minYPos = 0, maxYPos = 50, xangle = 0; 
    var height = 300, width = 300;
            
    function reset() {
            files = [];
            zoom = 1;
            ctx.clearRect(0, 0, $canvas.width, $canvas.height);
            $input.value = null;
            $img.src = '';
          }
        
        function zoomin() {
        zoom = zoom * 1.1;
        var newXPos = currentX * zoom;
        var newYPos = currentY * zoom;
        moveImage(currentX, currentY);
        }
        
        function zoomout() {
        zoom = zoom / 1.1;
        var newXPos = currentX * zoom;
        var newYPos = currentY * zoom;
        moveImage(currentX, currentY);
        }
        
        function moveImage(x, y) {

            var xcos = Math.round(Math.cos(xangle * Math.PI));
            var xsin = Math.round(Math.sin(xangle * Math.PI));

            x2 = x * xcos + y * xsin;
            y2 = y * xcos - x * xsin;

            targetX = x;
            targetY = y;
            ctx.clearRect(0, 0, $canvas.width, $canvas.height);
            ctx.drawImage($img, x2, y2, $img.width * zoom, $img.height * zoom);
          }

          function updateDragBounds() {

            minXPos = $canvas.width - ($img.width * zoom);
            minYPos = $canvas.height - ($img.height * zoom);
          }

    onCanvasMouseUp = function(e) {
            startX = 0;
            startY = 0;
            dragging = false;
            currentX = targetX;
            currentY = targetY;
          };
    
    onCanvasMouseDown = function(e) {
            startX = e.clientX;
            startY = e.clientY;
            zooming = false;
            dragging = true;
          };
          
    onCanvasMouseMove = function(e) {

            if (!dragging) {
              return;
            }
            
            var diffX = startX - e.clientX; 
            var diffY = startY - e.clientY; 
            moveImage(currentX - diffX, currentY - diffY);

          };
          
    rotate = function(e) {

            ctx.translate(150, 150);
            ctx.rotate(0.5 * Math.PI);
            ctx.translate(-150, -150);
            
            xangle = xangle + 0.5;
            
            var tX = currentX;
            var tY = currentY;
           
            currentX = -tY;
            currentY =  tX;
            
            targetX = -tY;
            targetY =  tX;
            moveImage(currentX, currentY);
          };
          
    var $canvas = document.getElementById('example'),
        ctx     = $canvas.getContext('2d'),
        $img     = new Image();
    $canvas.height = 300;
    $canvas.width = 300;
    $img.src = '488132.jpg';
    newWidth = $img.width * zoom;
    newHeight = $img.height * zoom;
    $img.onload = function () {

    ctx.drawImage($img, 0, 0);
    }

</script>

</body>
</html>

 ,

Shadow
()

Кажется, делаю странное: jinja2 + angularjs

Форум — Web-development

Вчера в качестве теплейта в angularjs использовал динамически сгенерированный в jinja2 шаблон. И мне понравилось.

Т.е. данные, которые грузятся один раз в вид, генерируются на сервере сразу вместе с шаблоном. Данные, с которыми непосредственно работает angularjs интерфейс, гоняются между получившимся приложением и бэк-эндом.

Это плохой или хороший путь?

 ,

Shadow
()

Мне показалось, или на английском мануалы по JS лучше???

Форум — Talks

Если в гугле вбить:

angularjs роутинг параметры
появляется куча мутных и многословных хабростатей, выглядящих так, будто пишущий разговаривает сам с собой.

Если вбить

angularjs route params
- получаю простые понятные мануалы и примеры.

 , , ,

Shadow
()

Aptana beta виснет на комментариях '//' в javascript.

Форум — Desktop

Subj. Пользуется ли кто?

PS. Аптана погрязла в обновлениях, да ещё и бета была... Всё снёс поставил релиз, всё ок.

 ,

Shadow
()

Почему функция внутри контроллера AngularJS возвращает какой-то мусор?

Форум — Web-development

Осваиваю Angular.

Есть роутер и контроллеры, в которых:

	var myApp = angular.module('myApp', ['ngRoute','ui.bootstrap']);
	myApp.config(function ($routeProvider) {
		$routeProvider
			.when('/',
				{
					controller: 'SimpleController',
					templateUrl: 'static/ng/v1.html'
				})
			.when('/p2',
				{
					controller: 'PagingController',
					templateUrl: 'static/ng/v2.html'
				})
			.otherwise({ redirectTo: '/'});
		});
		

  myApp.controller('PagingController', function($scope, $http) {
  getData(1,20);
  function getData(page, paging) {
    return $http.get("items?page="+page).then(function(response) {
    	result = response.data;
    	$scope.items = result;
        return(result);
      });
  }

js код пока в index.html, в нём же ng-view.

В static/ng/v2.html такой код:

<div ng-controller="PagingController">
<h4>Sample Server Pagination</h4>
<pagination total-items=2000 max-size=3 ng-model="currentPage" ng-change="pageChanged()" 
items-per-page="20" previous-text="<" next-text=">"></pagination>
<ul>
<li ng-repeat="item in items"><a href="iteminfo?id={{item.id}}">{{item.label}}</a></li>
</ul>
</div>

Внимание, ВОПРОС. Сейчас всё это работает как я хотел, НО! Изначально я хотел обновлять список items так:

$scope.items = getData(1,20);
- а функция getData() должна возвращать JSON объект. Фигушки, она возвращает НЁХ, зато унутри неё всё работает. Более того, она не зависимо от того, что я из неё возвращаю (хоть объект, хоть строку), возвращает НЁХ в виде не опознанного объекта.

Я ХОЧУ ЗНАТЬ, что происходит, и почему я предполагаю одно, а происходит другое. Со scope, как я понял, не связано - из функции ng-repeat отлично заполняется.

PS. LOR wiki открывается только когда я разлогинен, иначе «Произошла неизвестная системная ошибка. Сообщение об ошибке: java.lang.NullPointerException.» WTF?

 , , кибертелепатия

Shadow
()

Туплю читая доки angularjs

Форум — Talks

Или это теперь такая мода пошла писать ТАК документацию и примеры, или я совсем отупел.

Прочитал про роутинг в angularjs, создал объект своего модуля, в нём создал пути (config), сделал подгружаемые темплейты - всё как в примерах.

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

пилять, это ж ng-view! Надо больше отдыхать.

 , ,

Shadow
()

PostgreSQL и á, ë, è, ç поиск как базовых знаков?

Форум — Development

Приветствую.

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

Есть ли возможность сказать постгресу, чтобы искал слова по маскам, где ç указан как c и т.п.?
Упс, нашёл. В постгресе называется «unaccent»

 ,

Shadow
()

Как в питоне скопировать str?

Форум — Development

str.split() возвращает массив, когда присваиваю переменным элементы массива, копируются указатели, а мне нужно данные.

Делать unicode(str.split()[n]) как-то оверхед... Чё-то сразу не нагуглил.

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

Я всё проверил - строки в питоне принципиально копируются в таких ситуациях.

 

Shadow
()

Тут вспомнил по coLinux...

Форум — Talks

А использует ли кто coLinux? Да, он почти 10 лет не развивался, но на сайте описан так вкусно, что по сравнению с ним cygnus прибамбасы для симуляции UNIX/Linux в виндовсе - просто тормоз и отстой.

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

Проблема: coLinux работает ТОЛЬКО на 32-х разрядных виндах. Существует лютая альфа 64-х битного, но это разработка и т.п.

Так что, пока ждём.

Упс, не ждём. Запускаем любой совремнный linux под hyper-v и дальше как andLinux.

 ,

Shadow
()

Проксировать клятый gmail

Форум — Admin

Добрый день.

У меня на gmail основная почта, и её читают по IMAP Thunderbird, виндовый metro клиент и K9 в телефоне.

При попытке поиска по ящику и хождению по папкам (меткам гмыла), всё это дружно валится с too many connections. Больше настраивать нечего, всё сделано как надо.

Есть ли возможность поставить на своём хосте IMAP прокси и коннектиться к gmail, или корпорация добра лишает этой возможности? Я два часа кормил любимый лунный delegate (delegate.org, если кто не в курсе этого божественного лунного прокси и сервера ftp/http) разными параметрами и пытался законнектиться, но не получилось. Есть истории успеха с другими проксями хотя бы?

 , ,

Shadow
()

Старт «Протона» отложат из-за металлической пыли в трубопроводах... Доколе слесаря мусорить будут????

Форум — Talks

Прочитал новость про «Протон» и чуть не заплакал от умиления и ностальгии.
20 лет назад «кооперативные» бензонасосы для «лад» стоили в три раза дороже только потому, что в оригинальных были металлические опилки, которые всё забивали сразу же. Лечилось продувкой ртом.

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

Я одного слесаря знаю, он все детали чуть ли не вылизывает... Зато и востребован при возрасте под 70...

 , ,

Shadow
()

Где тусуются русскоязычные программисты node.js???

Форум — Web-development

Не осилил. Не осилил полную установку этого говна на Windows x64.
Готов даже в job, замена windows на linux на моём ноутбуке существенно ухудшит мой комфорт и пока не рассматривается.

Это говнище при сборки нэйтивных модулей на c++ какими-то костылями вызывает msbuild (да, node.js ТРЕБУЕТ VisualStudio для чего-то большего, чем HelloWorld! Ну или cygwin, но это для совсем тёмных колдунов), и я не нашёл, как распарсить и настроить то, что оно требует от msbuild'а.

На винфаке, по понятным причинам, мне не то что не ппомогут, но даже не поймут.

РЕШЕНИЕ: первая проблема требовала выпиливания старых версий npm-gyp и впиливания новых, знакомых с VS 2013. Вторая проблема (бесконечные пути-имена, не понятные vs++) решается выпиливанием старого npm и установкой свежайшего (ещё пол-года назад полоовина софта под ноду на win не работало).

 ,

Shadow
()

Ещё про хипстеров и jQuery...

Форум — Talks

Пытался сделать мобильное приложение на ratchet - у него плохо с разрешениями экрана. Погуглил, много хвалебных отзывов о chocolatechip... КАК ЖЕ ОН ТОРМОЗИТ! Он тормозит на простых вещах. Навороченнейшие виджеты dojo по сравнению с тупым попапом шоколада ЛЕТАЮТ...

 ,

Shadow
()

Ratchet использует кто? Как у него с разрешением экрана?

Форум — Web-development

Приветствую.

Открыл для себя ratchet, был в диком восторге, пока не залил cordova+ratchet приложение в телефон... Оно на QVGA заточено или как-то так. Это лечится? Или искать другой фреймворк?

 , ,

Shadow
()

Проклятые хипсторы, нода, cordova/phonegap и мануалы!

Форум — Talks

Пытаюсь сделать hello world на кордове. Работю последнее время на питоне в Aptana, поставил из ноды phonegap, поставил ant, поставил плагины эклипса в аптану, обновил яву, поставил android sdk... Все пути в винде прописал, всё хорошо.

Гуглю туториал по первому приложению... Какие-то скриншоты файл-менеджера макинтоша, предложение скопировать jar архивы кордовы в свой проект руками (кажется, последняя кордова вообще это не предполагает), ВИДЕО-ПОДКАСТЫ!!!

Они что, обычные мануалы никогда не видели??? Блин...

PS. На сайте phonegap вообще инструкции юзать кордову... Зачем тогда phonegap ставить?

 , ,

Shadow
()

JSON объект сразу в объект python? надо ли?

Форум — Web-development

Добрый вечер.

По мере погружения в питон, flask и peewee подумалось, что при получении данных от клиента я хочу не парсить в цикле поля и присваивать свойствам объекта ORM, а с помощью json.loads, например, сразу присвоить объекту значения.

Это имеет смысл, или просто выпендрёж?

Т.е. для облегчения кода я могу свою функцию конвертации написать, но я хочу узнать, как хорошо и правильно.

 , , ,

Shadow
()

Javascript: способов сделать больше, чем в perl? Выполнить код после загрузки страницы.

Форум — Web-development

Вопрос такой. Сейчас делаю «тонкого» клиента для restful приложения, соответственно, после загрузки страницы-шаблона должны загрузиться пара json объектов и разместиться по форме страницы.

Мне хочется в конце страницы разместить <script></script> и всё туда накидать. Но во всех мануалах я вижу:

$(document).ready(function(){
код, выполняемый после загрузки
});


Это такое заболевание, которое вызывает любовь к «});», или это только для читабельности, или это ускоряет работу кода, или просто желание делать вообще всё только через события???

Вопрос в чём - как правильнее?

 ,

Shadow
()

REST или JSON: правильная структура HTTP запросов?

Форум — Web-development

Открыл для себя REST. Понравилось. Один параметр запроса, один параметр объектной модели. Стал копать глубже, как правильно на этом строить UI в браузере и бэкенд на сервере. Как я понял, это всё красивые слова, и все дампят json в строку и передают одним параметром??? Какое разочарование...

 , ,

Shadow
()

RSS подписка на новые темы