Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Установка чистого Linux на смартфон [закрыт]

#linux


        
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 2 года назад.
                                                                                
           
                
        
Доброго времени,
Интересует возможность установки на смарт Linux, без эмуляции в Андройде, именно
чистая установка!
С телефона андроид сносим. взамен нужно поставить linux, желательно debian. 

Linux нужно без проприетарных библиотек (Ubuntu Touch не подойдет). 
Гугление результатов особых не принесло, хотя много интересного почитал. 

Возможно кто-нибудь пробовал/слышал как реализовать.
Любые Ваши советы будут крайне полезны.
    


Ответы

Ответ 1



Подключаешься по adb и удаляй dalvik - будет чистый линукс, с которым можно работать дальше только по adb. Нужно разблокировать раздел на запись, установить busybox, дальше можно вычищать всё что не нравится. Андроид - это набор библиотек, которые лежат обычными файлами. Ядро перебирать смысла нет - потому что драйвера на железо смартфона обычно в свободном доступе не найти. Насчет дебиана. Берете debootstrap и на компе собираете папку с нужными программами. Закачиваете в смарт на освобожденный раздел и выполняете там mount, switchroot, init. Linux андроида и bysybox поработают в качестве initramfs для Debian.

Ответ 2



Установка "чистого" gnu/linux возможно только на очень малое количество телефонов. Объединяет их только факт открытого кода загрузчика т.н. bootloader. Но даже при том условии что бутлоадер будет открыт, установке "чистого" линукса может помешать факт того, что дайверов устройств телефона не найти в открытом доступе. По теме вопроса, линукс можно накатить только на телефоны вроде этого: https://en.wikipedia.org/wiki/Openmoko А так же на все поделия, собранные на базе raspberry pi.

При change select в val() показывает уже выбранное значение, а как взять старое?

#jquery #события


При 



$('select').on('change', function() {
  var val = $(this).val(); // Показывает значение выбранное сейчас
})






А если у меня быо выбрано: "мото" до выбора, как это определить в рамках события change? 
    


Ответы

Ответ 1



Воспользуемся событием focus для первого сохранения и далее просто обновляем: (function(){ let previous; $("select").on('focus', e => previous = e.target.value).change(e => { // Прошлое значение value console.info(previous); // Необходимо обновить, иначе последующие смены не будут работать previous = e.target.value; }); }());

Ответ 2



$(function() { $('select').each(function() { $(this).data('old_val', $(this).val()); }); $('select').on('change', function() { var old = $(this).data('old_val'); // Старое значение берём var val = $(this).val(); // Показывает значение выбранное сейчас alert('Было ' + old + ' стало ' + val); // ...... $(this).data('old_val', $(this).val()); // Старое значение обновляем }); });

Как исправить ошибку “PuTTY Fatal Error - Network error: Connection refused”?

#ssh #putty


купил виртуальный хост, дали мне ip-адрес, логин и пароль, только подключится к нему
немогу, сразу после нажатия появляется консоль и выскакивает ошибка - "PuTTY Fatal
Error - Network error: Connection refused" как исправить? может кто-то сталкивался
с таким и знайтет как решить
техподержка говорит что я неверно пароль ввожу, этого быть не может, все тщательно
проявлял. Брандмауэр Защитника Windows отключал. Толку ноль! 

OS: Windows 10,
Клиент: PuTTY





UPD:
через браузер заходит.
По SSH не работает. Подключится могу лишь через VPN или через 3G-интернет.  



    


Ответы

Ответ 1



Наиболее вероятную причину в лице хулиганящего провайдера уже указали, но можно собрать ещё чуть больше информации с помощью plink.exe (входит в состав PuTTY): Откройте консоль cmd Выполните plink -v ваш_хост В ответ plink выдаст дополнительную информацию по используемому при подключении протоколу, что также позволит отсечь некоторые причины, типа устаревшего обмена ключами. Пример подключения: C:\Programs\PuTTY>plink -v <...> Looking up host "<...>" Connecting to <...> port 22 We claim version: SSH-2.0-PuTTY_Release_0.67 Server version: SSH-2.0-OpenSSH_7.5p1 Ubuntu-10 Using SSH protocol version 2 Doing Diffie-Hellman group exchange Doing Diffie-Hellman key exchange with hash SHA-256 Host key fingerprint is: ssh-rsa 2048 45:f8:02:48:a0:76:db:93:1a:a4:1a:70:ea:1f:5f:71 The server's host key is not cached in the registry. You have no guarantee that the server is the computer you think it is. The server's rsa2 key fingerprint is: ssh-rsa 2048 45:f8:02:48:a0:76:db:93:1a:a4:1a:70:ea:1f:5f:71 If you trust this host, enter "y" to add the key to PuTTY's cache and carry on connecting. If you want to carry on connecting just once, without adding the key to the cache, enter "n". If you do not trust this host, press Return to abandon the connection. Store key in cache? (y/n) n Initialised AES-256 SDCTR client->server encryption Initialised HMAC-SHA-256 client->server MAC algorithm Initialised AES-256 SDCTR server->client encryption Initialised HMAC-SHA-256 server->client MAC algorithm login as: Disconnected: No username provided ^C

Ответ 2



По большей видимости у Вас настроен Firewall на внешний интерфейс на сервере. Чтобы разрешить подключение к 22ому порту на Ubuntu (во многих версиях) достаточно выполнить команды: $ sudo ufw allow 22 $ sudo ufw enable Если же у Вас нету возможности выполнить или действия выше ни на что не повлияли, то Вам следует связаться с Вашим хостинг-провайдером для решения данной проблемы. p.s. В таких случаях подключение может блокировать и провайдер, если ничего уж не помогает, то советую связаться с ним

Ответ 3



Проверить Ping - доступен ли вообще сервер с вашего IP - Проверили - работает (непонятно только почему winMTR пишет no response) Зайти в консоль управления сервером из браузера, проверить диапазоны IP адресов, с которых разрешен доступ к серверу. - web консоли управления виртуальным сервером, я так понимаю, нету (а то, что Apache2 на Ubuntu стоит - это очень хорошо - It works!) Если нет web консоли - связаться с провайдером у которого сервер покупали и выяснить, как они сами туда подключаются, поднят ли SSH, и с каких IP адресов доступно подключение по SSH (может быть еще что-то дополнительно в настройках нужно указать, вообще-то, для SSH нужен не только логин-пароль, а еще пара .pem ключей - один у вас - один на сервере). Проверили - SSH поднят, и .pem ключи не нужны, т. к. с другого устройства подключение есть без них. Осталось проверить диапазоны IP адресов с которых доступно SSH подключение. Настроить их можно например с того же телефона.

VK API user.get - почему некоторые поля пустые?

#java #json #vkontakte_api #api #вконтакте


Разбираюсь с vk api. Хочу вытащить информацию о пользователе по полям games,education,occupation.
На тестовой странице по https://vk.com/dev/users.get возвращаются все поля:


Но когда делаю через JAVA SDK. Приходят не все поля:


Вот фрагмент моего кода:

String str = vk.users().get(new UserActor(app_id, access_token))
                .userIds("5933129")
                .fields(UserField.EDUCATION,
                        UserField.GAMES,
                        UserField.OCCUPATION)
                .executeAsString();
System.out.println(str);


Из документации узнал, что 



Но я же вроде передаю access_token через объект UserActor, или я что то не так понимаю.
В качестве access_token использую 'Сервисный ключ доступа' который взял из настроек
в личном кабинете приложения. 

Попробовал через браузер выполнить:

https://api.vk.com/method/users.get?user_ids=5933129&fields=games,education,occupation&access_token=xxxxxxx3&v=5.69


также приходит hidden : 1

Вопрос как добиться, чтобы возвращались все поля?
    


Ответы

Ответ 1



Когда вы выполняете запрос через страницу https://vk.com/dev/users.get вы выполняете его с ключом доступа пользователя. Видимо пользователь скрыл интересующие вас данные от неавторизованных пользователей. Чтобы все работало нормально вам надо получить ключ доступа пользователя

Пропорции 2 тулбаров и 2 фрагментов под ними

#android #android_layout


Хотел сделать 2 тулбара и 2 фрагмента на одном экране.

Задал пропорции тулбарам (70/30) и фрагментам (69/31).

Между тулбарами и между фрагментами есть вертикальная разделительная полоска. Она
не совпадает.



Дело в том, что у меня нет возможности поставить в один слой тулбар с фрагментом
и в другой слой, так как стоит сторонняя библиотека - боковой бар.

Он (расположен слева на картинке) занимает 72dp и "зажимает" фрагмент1, поэтому такие
пропорции тулбарам (70/30) и фрагментам (69/31).

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


Ответы

Ответ 1



Так как на разных экранах альбомной ориентации пропорции ширины тулбаров и фрагментов разные, я решил взять ширину контейнера от фрагмента2 и установить её, как ширину тулбара2 container.post(new Runnable() { @Override public void run() { toolbar2.setLayoutParams( new LinearLayout.LayoutParams(container.getWidth(), ViewGroup.LayoutParams.WRAP_CONTENT)); Log.d(TAG, "onCreate: container.getWidth(): " + container.getWidth()); } }); Где container - это контейнер правого фрагмента(fragment2). Делаю я это в onCreate() в классе MainActivity. Также я поставил условие, если устройство - планшет и в альбомной ориентации, то только тогда отображать 2й тулбар и устанавливать необходимую ширину. Вдохновлялся отсюда (eng. S.O.)

SocketIO_client не срабатывает метод disconnect() как обойти?

#python #python_3x #websocket #socketio_client


Возникли проблемы с увеличением соединений, посмотрел либу, нашел проблему с методом
disconnect() однако для меня данный патч не работает.

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

>>> from socketIO_client import SocketIO
>>> s = SocketIO('127.0.0.1:8008')
DEBUG:socketIO-client:127.0.0.1:8008/socket.io [engine.io transport selected] websocket
DEBUG:socketIO-client:127.0.0.1:8008/socket.io [engine.io heartbeat reset]
>>> s



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

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


Ответы

Ответ 1



В исходном коде зарегистрирован триггер на выход. Вам нужно всего лишь вызывать _close() у объекта SocketIO. Этот метод принадлежит родительском классу. Вы используете не лучшую библиотеку для работы с socketio. Я вам рекомендую miguelgrinberg - python-socketio

Какие методы, прописанные/указанные в приложении, вызывает непосредственно Система, а не приложение?

#android


Отметил в процессе чтения некоторой литературы для себя один тонкий нюанс о вызовах
методов в Android-приложении, а именно то, что методы жизненного цикла Activity вызывает
не приложение, которое мы реализуем и в которое их помещаем. Вызывает Система в зависимости
от действий Пользователя или ситуации в Системе. Система оповещает этими методами приложение
об изменении состояния. То есть, мы указываем в этих методах, что делать приложению,
когда Система будет это приложение оповещать, в данном случае, о событиях изменения
жизненного цикла.

Почему то раньше я не обращал на это внимание. 

Интересно следующее. Какие еще методы, кроме методов жизненного цикла, прописанные/указанные
в приложении вызывает непосредственно Система, а не приложение? Корректно ли вообще
задавать такой вопрос?
    


Ответы

Ответ 1



В общем то все, что помечается @override и это идет не из наследников вашего класса относится к системе. Конкретно по активити вы можете установить курсор на класс активити и нажать CTRL + O (override metods .., так же в основном меню: Code -> Override Metods) и посмотреть, какие методы можно переопределить. В основном системный отклик - это колбэки, (как жизненного цикла), узнать колбэк можно по начальному on- в названии, как onCreate(). Некоторые из колбэков, вызываемых системой (колбэки жизненного цикла не включены сюда): onConfigurationChanged() - изменение в конфигурации (смена языка, ориентации, подключение устройств и тп.) onBackPressed() - нажатие системной кнопки "назад" onSaveInstanceState()/onRestoreInstanceState() - запись/восcтановление состояния onTouchEvent() - касания экрана onRequestPermissionsResult() - результат запроса разрешений onLowMemory() - недостаточно памяти

Ответ 2



То, что вы называете системой, это по сути контейнер, в котором разворачивается какое-либо приложение. Контейнер получает запросы извне и создаёт по мере необходимости определённые объекты приложения. Т.е. не мы определяем момент создания объектов нашего приложения, а возможно даже и очерёдность их создания, а контейнер сам решает, какие объекты создавать и каков их жизненный цикл. Помимо вашего приложения у этого контейнера может быть ещё множество других приложений и, конечно, большое разнообразие системных переменных и объектов, о которых вообще можно не знать разработчику. Задача разработчика приложения - написать такое приложение, которое будет соответствовать требованиям данного контейнера. А задача разработчиков контейнера - создать контейнер, который реализует все необходимые интерфейсы, которые могут понадобиться запускаемым в нём приложениям.