LINUX.ORG.RU

Сообщения kamre

 

Не получается обновить приложения

На смартфоне свободно встроенной памяти 65мб из 512Мб. Все установленные приложения, которые могут быть перенесены на карту памяти, уже перенесены, на карте свободно более 10Гб. При обновлении приложений в Play Market пишет, что не хватает памяти.

Что можно сделать, чтобы приложения обновлялись? Почему скачивание не происходит сразу на карту памяти, где места предостаточно?

 

kamre ()

Понедельник как первый день недели

Ubuntu 12.04 с Unity. Интерфейс нужен на английском.

Как поставить понедельник первым днем недели, а то сейчас вот так показывается?

В настройках ничего подходящего найти не удалось...

 ,

kamre ()

Mutable map with default value in scala

Как в scala создать mutable.Map, чтобы при обращении создавалось значение по умолчанию?

Нужен аналог вот такого:

from collections import defaultdict

d = defaultdict(list)
d[0].extend((1, 2, 3))
d[2].extend((4, 5, 6))

for k, v in d.items():
  print str(k) + ': ' + str(v)
или такого:
#include <map>
#include <vector>
#include <iostream>

int main() {
  std::map<int, std::vector<int>> m;
  m[0] = {1, 2, 3};
  m[2] = {4, 5, 6};
  for (auto& v : m) {
    std::cout << v.first << ": ";
    for (auto i : v.second)
      std::cout << i << ", ";
    std::cout << std::endl;
  }
}

Попытка применить метод withDefault ничего не дает:

import scala.collection._

object TestMap extends App {
  type Values = mutable.ArrayBuffer[Int]
  val m = new mutable.HashMap[Int, Values].withDefault(i => new Values())
  m(0).append(1, 2, 3)
  m(2).append(4, 5, 6)
  println(m)
}

Как это делается в scala?

 

kamre ()

Переписать код на Java, чтобы он не тормозил и не жрал память

Хочу переписать свою поделку с унылого C++ на Java или даже сразу на Scala. В программе очень много операций над разными двумерными объектами, поэтому большая часть данных - это координаты на плоскости и их преобразования.

Решил проверить насколько быстро такие операции будут работать в в Java:

import java.util.ArrayList;
import java.util.List;

public class CalcVectors {
    private static class Vector2D {
        public final double x, y;

        private Vector2D(double x, double y) {
            this.x = x;
            this.y = y;
        }

        public Vector2D add(Vector2D v) {
            return new Vector2D(x + v.x, y + v.y);
        }

        public Vector2D mult(Transform2D t) {
            return new Vector2D(x * t.cos - y * t.sin + t.tx,
                                y * t.sin + y * t.cos + t.ty);
        }

        @Override
        public String toString() {
            return "Vector2D(" + "x=" + x + ", y=" + y + ')';
        }
    }

    private static class Transform2D {
        public final double cos, sin, tx, ty;

        private Transform2D(double angle, double tx, double ty) {
            this.cos = Math.cos(angle);
            this.sin = Math.sin(angle);
            this.tx = tx;
            this.ty = ty;
        }
    }


    private static Vector2D calc(List<Vector2D> l, Transform2D t) {
        Vector2D res = new Vector2D(0, 0);
        for (Vector2D v : l) {
            res = res.add(v.mult(t));
        }
        return res;
    }

    private static void run(String str, List<Vector2D> list, Transform2D transf) {
        System.out.println("Start of " + str);
        Vector2D vector = null;
        int repeat = 1000;
        long started = System.nanoTime();
        for (int i = 0; i < repeat; ++i) {
            vector = calc(list, transf);
        }
        double totalTime = (System.nanoTime() - started)*1e-9;
        System.out.println("Res = " + vector);
        System.out.println("Total time = " + totalTime + " (sec)");
        System.out.println("Average time = " + totalTime/repeat + " (sec)");
        System.out.println("End of " + str);
    }

    public static void main(String[] args) {
        final int size = 1000000;
        List<Vector2D> list = new ArrayList<Vector2D>(size);
        for (int i = 0; i < size; ++i) {
            double d = (1.0*i)/size;
            list.add(new Vector2D(d, d));
        }
        Transform2D transf = new Transform2D(1.0, -2.5, 5.0);
        run("Warm Up", list, transf);
        System.out.println();
        run("Actual", list, transf);
    }
}
Запускаю вот так:
$ java -server -XX:+PrintCompilation CalcVectors
    208    1             java.lang.Object::<init> (1 bytes)
    210    2             java.util.ArrayList::add (29 bytes)
    220    3             java.util.ArrayList::ensureCapacityInternal (26 bytes)
    222    4             CalcVectors$Vector2D::<init> (7 bytes)
    222    5             CalcVectors$Vector2D::<init> (15 bytes)
    223    1 %           CalcVectors::main @ 12 (90 bytes)
    622    1 %           CalcVectors::main @ -2 (90 bytes)   made not entrant
Start of Warm Up
    630    6             java.util.ArrayList::access$100 (5 bytes)
    636    7             java.util.ArrayList$Itr::hasNext (20 bytes)
    639    8             java.util.ArrayList$Itr::next (66 bytes)
    642   10             java.util.ArrayList::access$200 (5 bytes)
    644    9             java.util.ArrayList$Itr::checkForComodification (23 bytes)
    652   11             CalcVectors$Vector2D::mult (56 bytes)
    656   12             CalcVectors$Vector2D::add (26 bytes)
    659    2 %           CalcVectors::calc @ 18 (54 bytes)
   1219   13             CalcVectors::calc (54 bytes)
Res = Vector2D(x=-2650584.18888554, y=5690885.954451363)
Total time = 32.180277053000005 (sec)
Average time = 0.03218027705300001 (sec)
End of Warm Up

Start of Actual
Res = Vector2D(x=-2650584.18888554, y=5690885.954451363)
Total time = 31.393999127 (sec)
Average time = 0.031393999127 (sec)
End of Actual
Видно, что на втором запуске JIT уже ничего докомпилировал. Получилось как-то заметно медленее, чем такой же вариант в C++:
#include <cmath>
#include <ctime>
#include <vector>
#include <iostream>

struct vector2d {
    double x, y;
    vector2d(double x = 0, double y = 0) : x(x), y(y) {}
};

vector2d operator+(const vector2d& v0, const vector2d& v1) {
    return vector2d(v0.x + v1.x, v0.y + v1.y);
}

struct transform2d {
    double cos, sin, tx, ty;
    transform2d(double angle, double tx, double ty)
    : cos(std::cos(angle)), sin(std::sin(angle)), tx(tx), ty(ty) {}
};

vector2d operator*(const vector2d& v, const transform2d& t) {
    double x = v.x*t.cos - v.y*t.sin + t.tx;
    double y = v.x*t.sin + v.y*t.cos + t.ty;
    return vector2d(x, y);
}

vector2d calc(const std::vector<vector2d>& vects, const transform2d& transf) {
    vector2d v;
    for (size_t i = 0; i < vects.size(); ++i) {
        v = v + vects[i]*transf;
    }
    return v;
}

int main() {
    std::vector<vector2d> vects(1000000);
    for (size_t i = 0; i < vects.size(); ++i) {
        double x = (1.0*i)/vects.size();
        vects[i] = vector2d(x, x);
    }
    transform2d tr(1.0, -2.5, 5.0);
    const int repeat = 1000;
    vector2d res;
    std::clock_t start = std::clock();
    for (int i = 0; i < repeat; ++i) {
        res = calc(vects, tr);
    }
    double total = ((double)(std::clock() - start))/CLOCKS_PER_SEC;
    std::cout << "Res = vector2d(" << res.x << "," << res.y << ")\n"
              << "Total time = " << total << " (sec)\n" 
              << "Average time = " << total/repeat << " (sec)" << std::endl;
}
Запуск C++:
$ ./a.out 
Res = vector2d(-2.65058e+06,5.69089e+06)
Total time = 8.52 (sec)
Average time = 0.00852 (sec)
Почти в 4 раза быстрее по сравнению с Java вариантом.

Кроме того, по памяти у Java также все гораздо хуже получилось: более 100Мб из кучи, в то время как C++ вариант 16Мб с копейками, что и ожидалось, т.к. один миллион структур vector2d как раз 16Мб и занимает.

Наверняка что-то сделал не так в Java варианте (ведь Java должна быть быстра почти как C++). Подскажите, как нужно правильно переписать Java вариант, чтобы приблизиться к C++?

 ,

kamre ()

Можно ли разбить face на несолько во freecad?

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

Можно ли, нарисовать sketch на этой грани и разбить по нему. Или еще как-нибудь (скриптом на python)?

 

kamre ()

Выбор continious integraion системы

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

Имеется проект на C++, сборка осуществляется через CMake с оберткой в виде скрипта на питоне. В проекте есть несколько наборов тестов: от самых простых unit тестов (где тест либо пройден, либо завален), до тестов на разные функциональности (где все сложно и во время тестирования собирается множество индикаторов и по ним генерируются отчеты).

Вот минимум, который хотелось бы иметь в готовой continious integraion:

  • сборка и запуск тестов на каждой ревизии (кроме тех, комментарии к которым отмечены специальным тэгом);
  • работа с репозиторием через polling, а не hook, т.к. сервера для VCS и CI разные и под разными платформами;
  • сбор и хранение custom indicators, а не только succeed/failed для unit тестов;
  • построение custom отчетов по custom индикаторам;

Сейчас тестирование организованно на python скриптах, фактически есть один nightly запуск, когда обновляется working copy, осуществляется сборка, запуск тестов и сбор индикаторов в sqlite базу данных, по базе данных строятся отчеты (об изменениях в индикаторах) и рассылаются письма.

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

Какие готовые continious integration системы позволят (возможно, через написание плагинов к ним) интегрировать в себя такие custom индикаторы и отчеты?

Имеющаяся система тестирования на python скриптах в основном устраивает, но нужно добавить в нее запуск на каждый новый коммит и почти сразу после появления этого коммита в репозитории. Стоит ли вообще рассматривать переход на готовые CI системы или проще будет добавить необходимое в имеющуюся систему?

kamre ()

Чем смотреть youtube в 480p?

Имеется планшет на android honeycomb, разрешение экрана 1280x800. Встроенное приложение для просмотра youtube имеет только переключатель HQ между 240p/720p. На 3G смотреть в 720p не удобно, постоянно тормозит, да и трафика много требует. С отключенным HQ картинка получается полный отстой, похоже на 240p. Просмотр через flash в браузере не вариант - постоянно тормозит, неудобно переключаться в 480p или fullscreen.

Вопрос: как удобно смотреть youtube в 480p?

И еще один: где в android многозадачность, чтобы я мог почитать LOR пока там с ютуба видео подкачивается? А то сейчас при переключении в другое приложение (даже смена вкладки в браузере) сразу же вся буферизация видео с youtube сбрасывается.

 ,

kamre ()

[SVN] аналог hg incoming

Как в svn cделать просмотр всех новых (по сравнению с working copy) ревизий, которые появились в репозитории?

svn log -r BASE:HEAD выдает лишние старые ревизии

kamre ()

[openSUSE11.3] Как настроить WiFi на ноутбуке?

Вывод lspci:

03:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8191SEvB Wireless LAN Controller (rev 10)

В KDE Control Module, Network Connections вкладка Wireless не активна, т.е. ее выбрать нельзя. Что нужно доустановить, чтобы заработало?

P.S. В Ubuntu 10.04 (Mint) WiFi обнаружился сразу, но нормально соединяться стал только после обновления ядра из репозитория.

kamre ()

[SWT/JFace] Проблема с TableViewer в Linux

Нужно сделать таблицу, в которой в некоторых ячейках будет выделяться часть текста. Решил использовать StyledCellLabelProvider и переопределять метод update. В WinXP все работает, а в Linux почему-то во всех ячейках для строки таблицы один и тот же текст выводится.

Вот небольшой пример кода, воспроизводящий проблему:

import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;

public class TestTableViewer {
    private static class MyLabelProvider extends StyledCellLabelProvider {
        @Override
        public void update(ViewerCell cell) {
            String element = (String) cell.getElement();
            switch (cell.getColumnIndex()) {
            case 0:
                cell.setText(element);
                break;
            case 1:
                cell.setText(Integer.toString(element.length()));
                break;
            }
        }
    }

    private static class MyContentProvider implements IStructuredContentProvider {
        @Override
        public Object[] getElements(Object input) {
            return (String[]) input;
        }

        @Override
        public void dispose() {
        }

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
    }

    private static void createViewer(Shell shell) {
        Table table = new Table(shell, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
        TableViewer viewer = new TableViewer(table);
        table.setLinesVisible(true);
        table.setHeaderVisible(true);
        TableViewerColumn column;
        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("String");
        column.getColumn().setWidth(200);
        column.getColumn().setResizable(true);
        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("Length");
        column.getColumn().setWidth(200);
        column.getColumn().setResizable(true);
        viewer.setContentProvider(new MyContentProvider());
        viewer.setLabelProvider(new MyLabelProvider());
        viewer.setInput(new String[] { "some string", "some other string", "one more string" });
    }

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        createViewer(shell);
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

Во втором столбце должно быть число (длина строки из ячейки в первом столбце). В WinXP так и выводится, а вот в Linux почему-то не получается. Только в момент изменения размеров окна в Linux текст отображается правильно.

В чем может быть проблема?

P.S. SWT и JFace из Eclipse SDK 3.5

kamre ()

[GTK+] File Chooser Dialog

http://blogs.gnome.org/mortenw/2009/01/21/the-gtk-file-chooser-dialog/

> I hope I am not breaking new ground when I claim that the purpose of the file chooser is to help the user choose a file. How is that going to happen when the area used for files is less than the size of one button?

Это действительно так и задумано в GTK+?

kamre ()

NetBeans 6.1, шрифт в интерфейсе

Сам Ocean L&F не так уж и страшен, но вот шрифт в меню/панелях/... очень уж сильно выбивается из общего вида. Можно ли как-то изменить этот шрифт? Ну и еще шрифты в отображаемом JavaDoc также поправить хотелось бы..

Пробывал запускать с "--laf com.sun.java.swing.plaf.gtk.GTKLookAndFeel", вообще плохо выглядит, и шрифт все равно не тот использует.

>>>

kamre ()

[webkit][firefox] Browser from Gooogle?

http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html

http://www.google.com/googlebooks/chrome/

On the surface, we designed a browser window that is streamlined and simple. To most people, it isn't the browser that matters. It's only a tool to run the important stuff -- the pages, sites and applications that make up the web. Like the classic Google homepage, Google Chrome is clean and fast. It gets out of your way and gets you where you want to go.

We owe a great debt to many open source projects, and we're committed to continuing on their path. We've used components from Apple's WebKit and Mozilla's Firefox, among others -- and in that spirit, we are making all of our code open source as well. We hope to collaborate with the entire community to help drive the web forward.

>>>

kamre ()

Emacs, Interactively Do Things

Имеется "искаропки" такое удобное расширение http://www.emacswiki.org/cgi-bin/emacs-en/InteractivelyDoThings

Хочется как-то его приспособить для следующих вещей:

1. Чтобы при 'M-x' он подсказывал историю уже введенных команд. На wiki есть только для всех возможных команд, что слишком много и долго.

2. Есть дерево исходников, довольно широкое и глубокое. Даже с включенным ido лазить в нем не очень удобно, пока не откроешь все нужные файлы в буферах. Как добиться такого поведения, как будто все исходники уже открыты в буферах, чтобы можно было удобно переключаться через ido, но файл на самом деле подгружался только при первом переключении в соответствующий буфер?

3. В процессе редактирования конкретного исходника на C++, нужна навигация по определениям функций внутри него. Даже с which-function-mode и 'C-M-a' 'C-M-e' это не достаточно удобно получается. Как сделать так, чтобы по хоткею можно было начать набирать в минибуфере название функции, а ido бы подсказывал, дополнял и позволял выбирать нужный вариант? Ведь в принципе информация в каком-то виде уже все равно есть про все функции в текущем буфере?

>>>

kamre ()

Есть ли макросы в редакторе в Eclipse?

Подскажите, пожалуйста, есть ли в этой среде разработки макросы наподобие "Ctrl-x (" в emacs.

>>>

kamre ()

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