Tuesday, January 20, 2015

BItrix CIBlockElementRights расширенные права — blog.t2er.com

BItrix CIBlockElementRights расширенные права — blog.t2er.com:

'via Blog this'

Установка ftp на VM Bitrix

Делаем так, взято тут

Для открытия и разделения доступа к папкам по ftp мы сделали следующее:

1. установка ftp демона для Centos

yum install proftpd

2. Ставим эту службу в автозагрузку

chkconfig proftpd on

3. Стартуем сервис

service proftpd start

4. Узнаем id группы и id пользователя, под которым работает Apache. По умолчанию логин и группа этого пользователя - bitrix

[root@CentOS-65-64-minimal ~]# id bitrix
uid=501(bitrix) gid=501(bitrix) groups=501(bitrix)

5. Создаем пользователя с идентификаторами пользователя и группы bitrix для нужной нам директории

adduser userlogin -g501 -o -u501 -d /home/bitrix/www/
6. Задаем пароль пользователю

passwd userlogin

Все. Теперь у нас есть ftp пользователь с доступом только на определенный сайт или раздел сайта в зависимости от заданного пути.

Далее, взято тут

Как правило, режим передачи (активный/пассивный) определяется в настройках FTP-клиента. Большинство клиентов, к сожалению, используют пассивный режим по умолчанию.

Если по какой-то причине активный режим использовать не получается, например, из-за ограничений клиента, или настроек сетевого фильтра на стороне клиента, то на стороне сервера необходимо выполнить дополнительные действия, как то:
Отредактировать шестую строку в файле /etc/sysconfig/iptables-config: заменить IPTABLES_MODULES="" на IPTABLES_MODULES="ip_conntrack_ftp".
Перезапустить iptables:
Код
service iptables save
service iptables restart

После этого FTP заработает в обоих режимах.

После этого в файлике /etc/sysconfig/iptables
добавляем следующий строки
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT.
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT.

П.С. Вот только после этого у меня заработало...

Wednesday, January 14, 2015

Android Expandable List View Tutorial

Android Expandable List View Tutorial:

'via Blog this'

Get Device ID Example in Android | Javatechig

Get Device ID Example in Android | Javatechig:

'via Blog this'

Creating an Alternate-Colored List View in Android

Как сделать брал тут Creating an Alternate-Colored List View in Android | Androidie:

'via Blog this'

Доступно и понятно как разукрасить listview, пришлось поискать как разукрасить
мини код моей реализации

public class ParseGroupViewAdapter extends ParseQueryAdapter<ParseGroups> {
    private final int[] bgColors = new int[]{Color.rgb(245, 245, 245), Color.rgb(224, 255, 255)};
    private Context context;
    private LayoutInflater inflater;
    private ImageLoader imageLoader;
    private LinkedHashSet mySet;


    public ParseGroupViewAdapter(Context context) {
        super(context, new ParseQueryAdapter.QueryFactory<ParseGroups>() {
            public ParseQuery create() {
                ParseQuery query = ParseGroups.getQuery();
                query.setMaxCacheAge(TimeUnit.HOURS.toMillis(4));
                query.setCachePolicy(ParseQuery.CachePolicy.CACHE_ELSE_NETWORK);
                query.whereEqualTo("parentid", "00000000-0000-0000-0000-000000000000");
                query.whereEqualTo("Enable", true);
                query.orderByAscending("sortcode");
                return query;
            }
        });
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.imageLoader = ImageLoader.getInstance();
        this.mySet = new LinkedHashSet();
    }

    public ParseGroupViewAdapter(Context context, final String parentId) {
        super(context, new ParseQueryAdapter.QueryFactory<ParseGroups>() {
            public ParseQuery create() {
                ParseQuery query = ParseGroups.getQuery();
                query.setMaxCacheAge(TimeUnit.HOURS.toMillis(4));
                query.setCachePolicy(ParseQuery.CachePolicy.CACHE_ELSE_NETWORK);
                query.whereEqualTo("parentid", parentId);
                query.orderByAscending("sortcode");
                return query;
            }
        });
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.imageLoader = ImageLoader.getInstance();
        this.mySet = new LinkedHashSet();
    }

    /**
     * Notifies the attached observers that the underlying data has been changed
     * and any View reflecting the data set should refresh itself.
     */
    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }

    @Override
    public View getItemView(ParseGroups object, View view, ViewGroup parent) {
        final ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.groupview, null);
            holder.tvGroupName = (TextView) view.findViewById(R.id.tvName);
            holder.ivGroup = (ParseImageView) view.findViewById(R.id.imageView3);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();

        }
        super.getItemView(object, view, parent);
        mySet.add(object);
        int colorPosition = new ArrayList<ParseItems>(mySet).indexOf(object) % bgColors.length;
        view.setBackgroundColor(bgColors[colorPosition]);

        holder.tvGroupName.setText(object.getString("name"));
        ParseFile photoFile = object.getParseFile("image");
//        holder.ivGroup.setParseFile(photoFile);
//        holder.ivGroup.loadInBackground();
        ImageLoader imageLoader = ImageLoader.getInstance();
        if (photoFile != null) {

            imageLoader.displayImage(photoFile.getUrl(), holder.ivGroup);
        }
//        else
//        {
//            holder.ivGroup = null;
//        }

        return view;
    }

    public class ViewHolder {
        TextView tvGroupName;
        ParseImageView ivGroup;
    }

}

Saturday, January 3, 2015

Публикация картинок на parse.com

Решил переделать схему работы на мобильных устройствах в связи с проблемами в работе SOAP, постоянная не хватка памяти и проблемы в работе с 1С (Скорость и ключи). Возникла проблема в передаче на parse.com картинок в правильном формате, заставила данная проблема повозиться и поискать решений, итого код:


ХТТП = Новый COMОбъект("Microsoft.XMLHTTP");
  
 ХТТП.Open("GET", "https://api.parse.com/1/login?username=1&password=F7/83?b5bf", Ложь);
 ХТТП.SetRequestHeader("Host", "api.parse.com");
 ХТТП.SetRequestHeader("Content-Type", "application/json");
 ХТТП.SetRequestHeader("X-Parse-Application-Id", "*********************************************");
 ХТТП.SetRequestHeader("X-Parse-REST-API-Key","****************************************");
 ХТТП.Send(""); 
 Ses = json.ПрочитатьJSON(ХТТП.ResponseText);
 
 sessionToken = Ses.Получить("sessionToken");
 
 
 ТНом = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор("c564fdf4-247e-11e4-9dd2-000c29ce19d5"));
 СсылкаНаФайл = РаботаСПрайсами.ПолучениеКартинкиНоменклатуры(ТНом,"png",200,200,50,true);
 Если не СсылкаНаФайл=неопределено тогда
  adoStream = Новый COMОбъект("ADODB.Stream");
    
     adoStream.Mode = 3;          // read write
     adoStream.Type = 1;          // adTypeBinary
    
     adoStream.Open();
     adoStream.LoadFromFile(СсылкаНаФайл);
  adoStream.Position = 0;
  
  connectstring = "https://api.parse.com/1/files/"+Строка(ТНом.УникальныйИдентификатор())+".png";
  request = "POST";
  ХТТП.Open(request, connectstring, Ложь);
  ХТТП.SetRequestHeader("Host", "api.parse.com");
  ХТТП.SetRequestHeader("Content-Type", "image/png");
  ХТТП.SetRequestHeader("X-Parse-Application-Id", "***********************************");
  ХТТП.SetRequestHeader("X-Parse-REST-API-Key","******************************");
  ХТТП.SetRequestHeader("X-Parse-Session-Token",sessionToken);
  ХТТП.Send(adoStream.Read(adoStream.Size));
  Сообщить(ХТТП.Status);
  Сообщить( ХТТП.ResponseText);
  ТСО =  json.ПрочитатьJSON(ХТТП.ResponseText);
  fileName = ТСО.Получить("name");
  
  
  
  
 КонецЕсли;