четверг, 24 ноября 2016 г.
По просьбам пользователей я добавила в плагин Zygo Profile 3 новых поля:

checkbox - одинарный чекбокс
checkboxes - несколько чекбоксов, по сути поле соответствует полю списка множественного выбора
html - произвольный html-код


Поля checkbox и checkboxes генерируются на основе стандартных полей Joomla
пятница, 28 октября 2016 г.
В плагине ZygoProfile появился новый функционал - теперь можно назначать дополнительные поля одной или нескольким группам пользователей. Так, например, поле, которые Вы назначили пользователям группы manager, будет отображаться в профиле у пользователей, приналежащих этой группе. Так же у них появится возможность редактировать содержимое данного поля.


Отдельное спасибо Aoki Daisuke, который нашел проблему с отображением календаря. Я ее поправила и сделала возможность отображать календарь либо средствами Joomla (по умолчанию), либо средствами HTML5



пятница, 21 октября 2016 г.
среда, 28 октября 2015 г.
Несколько лет назад я написала плагин HKM_PROFILE, позволяющий генерировать поля расширенного профиля cms joomla. Сейчас хочу поделиться с вами его развитием - zygo_profile


Скачать:
  •   Zygo Profile - Плагин расширенного профиля пользователя
  •   Zygo Profile Content - Плагин вывода полей расширенного профиля в материалы joomla
  •   Zygo Online - Модуль "кто на сайте" с выводом аватаров пользователей из расширенного профиля
  Демо - сайт с установленными расширениями Zygo Profile


Для чего все это нужно? Приведу маленький обзор, сопровождаемый скриншотами:

четверг, 22 октября 2015 г.
IValueVariable - переменные, которым присваивается какое-то конкретное значение и которые не принимают на вход аргументы.

 Чтобы создать такие переменные, можно указать в plugin.xml точку расширения "org.eclipse.core.variables.valueVariables": таким образом, заданы 2 переменные coffeevar и othervar

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<extension
     point="org.eclipse.core.variables.valueVariables">
  <variable
        initialValue="arabica"
        name="coffeevar"
        description="Some sort of coffee">
  </variable>
  <variable
        initialValue="другое значение"
        name="othervar"
        description="описание другой переменной">
  </variable>      
</extension>
(Аналогично, можно на вкладке "Extensions" при открытии plugin.xml добавить указанную точку расширения и добавить 2 указанные переменные)




В MANIFEST.MF необходимо добавить org.eclipse.core.variables в Require-Bundle 
Получить значения переменных из кода можно при помощи интерфейса IStringVariableManager:

1
IValueVariable varVal = VariablesPlugin.getDefault().getStringVariableManager().getValueVariable(myStr);

где myStr - значение поля "name" тега variable Пример доступа к значениям переменных:

понедельник, 19 октября 2015 г.

Недавно написала приложение-тренажер, позволяющее более эффективно запоминать неправильные испанские глаголы. Точнее, портировала его на мобильные устройства (В качестве эксперимента с применением технологии Python + Kivy). N-лет назад я сделала web-версию, и тогда оно приносило пользу первокурсникам, как в свое время принесло и мне, когда я готовилась к экзамену по грамматике испанского языка у замечательного преподавателя Журавлевой Наталии Юрьевны.


Надеюсь, оно принесет пользу и вам.

Вот, собственно, как оно выглядит:


Микро-справка - как работать с приложением:

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

Время, наклонение и лицо указаны в выпадающих списках над неопределенной формой

Обратите внимание: ответ надо вводить целиком, с учетом частицы se и отрицания (если таковые имеются).

sobrevestirse - no te sobrevistas

После того, как вы правильно введете слово, поле ввода подсветится зеленым цветом.
Затем нажмите кнопку Siguiente >> или клавишу Enter

Чтобы вернуться к предыдущим словам, нажмите << Anterior. В программе запоминается история вопросов.

Если вам необходима подсказка - нажмите нижнюю кнопку "Mostrar la respuesta".Чтобы спрятать подсказку - нажмите "Ocultar la respuesta".


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

Чтобы настроить содержимое списков, нажмите на значок настроек на верхней панели.
В четырех вкладках, соотвествующих наклонениям в таблицах на пересечении времен и лиц можно выбирать необходимые значения.
При нажатии на названия колонок с временами и лицами выделяется/снимается выделение со всего ряда/колонки.
При нажатии на кнопку ALL выделяется/снимается выделение со всей таблицы наклонения.



При установке приложения, скорей всего, устройство вас попросит разрешить устанавливать приложения из непроверенных источников - в play market я приложение еще не выкладывала. Поэтому на данный момент я являюсь непроверенным источником :)

Предложения, критика и советы по улучшению только приветствуются. Пока что я выкладываю версию под Android.
Если кто-то желает стать подопытным кроликом тестером приложения под IOS (IPhone) - напишите мне. За неимением подобного устройства я тестировала версию под IOS под эмулятором.

Желаю вам успехов в изучении испанского языка!


P.S: пару слов об эксперименте с Kivy + Python.
Если вы не интересуетесь разработкой мобильных приложений - дальше можно не читать.

Почему Kivy?
  1. Во-первых, потому что это разработка на моем любимом Python с получением на выходе APK
  2. Во-вторых, потому что это кроссплатформенно. Можно собрать как мобильное (Android, IOS), так и десктопное (Linux, Windows) приложение.
  3. В-третьих, потому что это эксперимент и интересно пробовать все новое. Почему нет?

Ну а теперь ложка дегтя:

  1. Увы, загрузка приложения (5-10 секунд), первоначальная отрисовка интерфейса - медленнее, чем в теоретическом аналоге на java, написанный традиционным способом.
  2. Вес приложения - почти 8.8 MB, при том, что чистый вес исходников, включая базу неправильных глаголов (sqlite) - 3.3MB. Многовато.
  3. На данный момент Python-for-android работает только под Python 2. Я писала приложение под python 3. Это даже не минус, просто это означает, что надо учитывать специфику python 2, в частности, работу с кодировками.

В остальном претензий нет (по крайней мере, у меня).

Итог: если нужно быстро сделать мобильное приложение на python и скорость загрузки и отрисовки интерфейса большой роли не играют - Kivy - вполне подходящий вариант

Передо мной встала задачка - создать плагин для Eclipse, позволяющий открывать директорию выбранного файла/папки/проекта в дереве проектов Package Explorer. Директория открывается при выборе соответсвующего пункта контекстного меню или нажатия комбинации клавиш (CTRL+8)

В результате получилось следующее:


Расскажу как делала по шагам:

1) Для начала создаю сам проект com.zygo.openfolder на базе шаблона "Hello, World Command"
(см. Welcome -> Eclipse Plug-in Development -> Create a plug-in)
На последнем шаге указываю: Handler Class Name - ZygoHandler

2) Вношу изменения в созданный plugin.xml
(Для этого можно открыть plugin.xml и выбрать нижнюю вкладку "plugin.xml")

Заменяю часть кода:

   <extension
         point="org.eclipse.ui.menus">
        ....
    </extension>

На

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
            <command
                  commandId="com.zygo.openfolder.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Open Containing Folder"
                  id="com.zygo.openfolder.toolbars.sampleCommand"
                  label="Show in FileManager">
            </command>
      </menuContribution>
      <menuContribution
            locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu">
            <command
                  commandId="com.zygo.openfolder.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Open Containing Folder"
                  id="com.zygo.openfolder.toolbars.sampleCommand"
                  label="Show in FileManager">
            </command>
      </menuContribution>
      <menuContribution
            locationURI="popup:org.python.pydev.navigator.view#PopupMenu">
            <command
                  commandId="com.zygo.openfolder.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Open Containing Folder"
                  id="com.zygo.openfolder.toolbars.sampleCommand"
                  label="Show in FileManager">
            </command>
      </menuContribution>     
   </extension>

Я добавляю три почти одинаковых тега menuContribution для того, чтобы новый пункт контекстного меню отображался в Package Explorer (для перспективы Java), в Project Explorer (напр. для отображения в перспективе Plug-in Development) и в PyDev Package Explorer.
Выбор трех указанных эксплореров определялся непосредственно моей задачкой - по большей части я занимаюсь разработкой в перспективе PyDev.

Существует, конечно, другой вариант: <extension point="org.eclipse.ui.popupMenus">, но я решила им не пользоваться, поскольку данный extension point уже deprecated и имеет ряд ограничений - например, сложность с привязыванием комбинации клавиш (решение есть, но довольно громоздкое) и прочие неудобства.

3) В файла src / com.zygo.openfolder.handlers / ZygoHandler.java добавляю следующий код:



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.zygo.openfolder.handlers;

import java.io.IOException;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;


public class ZygoHandler extends AbstractHandler {
 
 // файловый менеджер в убунту по умолчанию
 // при запуске "xdg-open /path/to/location" откроет файловый менеджер в
 // директории /path/to/location
 private String DefaultUbuntuFilemanager = "xdg-open";

   IResource extractSelection(ISelection sel) {
       if (!(sel instanceof IStructuredSelection))
          return null;
       IStructuredSelection ss = (IStructuredSelection) sel;
       Object element = ss.getFirstElement();
       if (element instanceof IResource)
          return (IResource) element;
       // @TODO: if (element instanceof SourceMember) ...      
       if (!(element instanceof IAdaptable)){
          return null;
       }
       IAdaptable adaptable = (IAdaptable)element;
       Object adapter = adaptable.getAdapter(IResource.class);
       return (IResource) adapter;
 }
 
 public Object execute(ExecutionEvent event) throws ExecutionException {

  // определяем, что выделено в данный момент
  ISelection selection = HandlerUtil.getCurrentSelectionChecked(event);
  
  if (!(selection instanceof TreeSelection)){
   return null;
  }
  
  IResource res = extractSelection(selection);
  
  if(res == null){
   return null;
  }
  
        String folderPath = "";       
      
        // 1 соотвествует файлу, 2 - директория, 4 - проект
      
        if(res.getType() == 1){
         folderPath = res.getParent().getLocation().toString(); 
        }else if (res.getType() == 2 || res.getType() == 4){
         folderPath = res.getLocation().toString();
        }
      
  if(!folderPath.isEmpty()){
   try {
       String command = DefaultUbuntuFilemanager+" "+folderPath;
       Runtime.getRuntime().exec(command);
      } catch (IOException e) {
       System.out.println(e);
      }
  }       
      
  return null;
 }
}

Вместо "xdg-open" можно подставить другой файловый менеджер, принимающий на вход как аргумент путь к нужной директории.


Еще я заменила комбинацию клавиш с CTRL+6 (стандартной), на нужную мне.
В plugin.xml <extension point="org.eclipse.ui.bindings"> в теге key вместо опции sequence="M1+6" (т.е. CTRL+6) я поставила CTRL+8.
M1, M2 и M3 соотвествуют клавишам CTRL, SHIFT и ALT. Т.е., если бы я хотела выбрать комбинацию клавиш CTRL+SHIFT+3, я могла бы использовать M1+M2+3

Вот и все. Собираю стандартными средствами эклипса jar-aрхив (Вкладка "Overview" > "Exporting" в plugin.xml), затем помещаю его в директорию эклипса dropins. Работает!

Критика, советы и пожелания приветствуются.