21

(13 відповідей, залишених у *nix)

Itari написав:

Или якісь перепони є?

Коли перезапускаю ПК, то я не можу визвати меню BOOT(чи як його там..) Коли запускаю з диском він також підвисає(на логотипі ПК) а коли запускаю без диска, то все ок. Можна вибрати яку ОС запускати і інші опції. Чи можно запустити диск в Убунті? Якщо - так, то як саме це зробити?

22

(13 відповідей, залишених у *nix)

Як можна переустановити Ubuntu 14.04? Файли зберігати не потрібно. Я хочу її встановити, видаливши віндовс 8(раніше вони працювали паралельно на одному жорсткому диску) який почав дуже тупити, а сьогодні я його добив що він тепер навіть не запускається(просить диск-інсталятор віндовс). Є диск з убонтую за допомогою якого я її і встановив.

FakiNyan написав:

я щось таке робив, коли писав тетріс на JavaScript.. і так, я там домножав координати точок на якесь значення...
але я то все зробив просто спостерігаючи за тим, як мають змінюватись координати точок, якщо ми крутимо їх в ту чи іншу сторону
от я щось намалював, це для повороту направо, наче знайшов формулу для 'y', а для 'x' самі зробіть

дисклеймер

автор не математик і рахувати не вміє

Прихований текст

http://не-дійсний-домен/lPHrQ/964fd17729.png

Дякую за відповідь. Я використовую в якості матриць масив 3х3. У мене виникає проблема з функцією rotate(rad). Звісно, є алгоритм і він працює. Я не можу сформулювати принцип дії алгоритма в своїй голові. Коли дивлюсь на алгоритм, ніби все зрозуміло, а от сформулювати(або розписати дії алгоритму на папері) я не можу і тупашу. А оскільки не можу сформулювати, то виходить що я нічого не розумію.

Поясніть мені як саме обертати зображення. Бажано мовою Java SE.
Я розумію тригонометричні функції(sin, cos, tan(tg), cot(ctg), csc, sec) і також оборненні функції, як іх знаходити, вирішувати рівняння і т.п.
А от як повернути зображення(навколо довільної точки) - не розумію.

25

(2 відповідей, залишених у Android/iOS, програмування для мобільних пристроїв)

Для цього потрібно в методі який обробляє клік по кнопці, написати відповідний алгоритм. Стандартно, це метод - OnClick(View view), класа, який наслідує інтерфейс View.OnClickListener() та підписаний на відповідну кнопку.

Torbins написав:

DES - дуже слабкий алгоритм, на сьогоднішній час.
І не варто зберігати ключі у відкритому вигляді в коді:

Це стоковий ключ. Його не рекомендовано вживати) Я зробив кнопки для генерації випадкового ключа, а якщо хтось буде відправляти повідомлення, то вже потрібно буде самому подбати про обмежений доступ до ключа(як зробити це программно, Я ще не придумав). Стоковий ключ видно при запуску програми)) Я його не ховаю) він зроблений задля демонстрації шифрування та дешифрування тексту)) а за статтю - спасибі. Буду знати)

quez написав:

Кодом не поділитесь? Так нам буде легше зламати програму.

Зламати можна тільки знаючи ключ шифру, а інакше - це дуже затратна операція)
Зачекайте хвилинку. Я прикріплю соурс-код до першого посту)

Я написав программу для шифрування тексту. Программа застосовує один із базових алгоритмів шифрування які наявні в Java SE. Інструкція в программі. Як Вам сама задумка і що можно добавити в программу? Є додаткові кнопки для копіювання/вставки данних із буфера обміну вашого телефону. Критика приймається в повній мірі))
P.S. Якщо Ви щось не зрозуміли, то звертайтеся в тему. Программа застосовує відкриті ключи для шифрування/дешифрування тексту. Один із таких, а саме "стоковий" знаходиться під кнопкою - "DefKey"

Класс шифрування повідомлення:

Прихований текст
package com.badsoft.layoutinflate;

import android.util.Base64;

import javax.crypto.*;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * Класс предназначен для шифровки и дешифровки текста.
 * 
 * @author Румянцев О.В. (c) BadSoft Team.
 *
 */
public class StringCrypter {
    Cipher ecipher;
    Cipher dcipher;

    SecretKey key;
    /**
     * Конструктор класса
     *
     * @param k - секретный ключ для шифрования/расшифрования данных
     * @throws NoSuchAlgorithmException
     * @throws NoSuchPaddingException
     * @throws InvalidKeyException
     */
    public StringCrypter(SecretKey k) throws NoSuchAlgorithmException,
            NoSuchPaddingException, InvalidKeyException {
        key = k;

        ecipher = Cipher.getInstance("DES");
        dcipher = Cipher.getInstance("DES");

        ecipher.init(Cipher.ENCRYPT_MODE, key);
        dcipher.init(Cipher.DECRYPT_MODE, key);
    }

    /**
     * Шифрование строки.
     *
     * @param str - строка для шифрования данных.
     * @return - возвращает зашифрованную строку.
     * @throws UnsupportedEncodingException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public String encrypt(String str) throws UnsupportedEncodingException,
            IllegalBlockSizeException, BadPaddingException {
        byte[] utf8 = str.getBytes("UTF-8");
        byte[] enc = ecipher.doFinal(utf8);
        return Base64.encodeToString(enc, 0);
    }

    /**
     * Расшифровка строки.
     * ВНИМАНИЕ! Важно что бы ключ был одинаковый.
     *
     * @param str - строка которую нужно расшифровать.
     * @return
     * @throws IOException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public String dcrypt(String str) throws IOException, IllegalBlockSizeException,
            BadPaddingException {
        byte[] dec = Base64.decode(str, 0);
        byte[] utf8 = dcipher.doFinal(dec);
        return new String(utf8, "UTF-8");
    }

}

Головна Activity программи:

Прихований текст
package com.badsoft.layoutinflate;

import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import android.util.Base64;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * Главная активность приложения
 * 
 * @author Румянцев О.В. (c) BadSoft Team.
 *
 */
public class MainActivity extends Activity {
    EditText ecrypt, dcrypt, edKey;

    //текст который идет перед ключом..
    //private final String descrip = "javax.crypto.spec.SecretKeySpec";

    SecretKey key = null;
    StringCrypter encrypter;
    final String defaultKey = "T0pUKoXIFnM";
    
    Runtime runtime = Runtime.getRuntime();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_main);
        
        ecrypt = (EditText) findViewById(R.id.text_crypt);
        dcrypt = (EditText) findViewById(R.id.cryptMessage);
        edKey  = (EditText) findViewById(R.id.edKey);
        
        //применяем стандартный ключ - defaultKey
        byte[] encodeKey = Base64.decode(defaultKey, defaultKey.length());
        edKey.setText(defaultKey);
        key = new SecretKeySpec(encodeKey, 0, encodeKey.length, "DES");

        edKey.setText(defaultKey);
        
        runtime.gc();
    }


    /**
     * Метод "обрабатует" ключ для показа "внятного" для пользователя видa
     *
     * Метод уже не используется...
     *
     * @param key - собственно, это ключ
     * @return - возвращается урезанная строка
     */
    public String subKey(String key) {
        //стандартное значение - 31 символ нужно урезать
        return key.substring(0);
    }
    
    /**
     * Декодируем ключ для вывода в текстовое поле.
     * 
     * @param key - актуальный ключ
     * @return - строка, которая выходит из ключа
     */
    public String encodeKey(SecretKey key) {
        String str = Base64.encodeToString(key.getEncoded(), key.toString().length());
        return str;
    }

    /**
     * Обработчик кнопки шифрования сообщения
     *
     * @param view - не важно что это.
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws NoSuchAlgorithmException
     * @throws NoSuchPaddingException
     */
    public void cryptMessages(View view) throws IllegalBlockSizeException, BadPaddingException,
            IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException{
        Toast.makeText(this, "Crypt message", Toast.LENGTH_SHORT).show();

        encrypter = new StringCrypter(key);

        String str = ecrypt.getText().toString();
        dcrypt.setText(encrypter.encrypt(str));
    }

    /**
     * Обработчик кнопки для дешифровки сообщения
     *
     * @param view - в данном случаем это - неважно
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws NoSuchAlgorithmException
     * @throws NoSuchPaddingException
     */
    public void encryptMessages(View view) throws IllegalBlockSizeException, BadPaddingException,
            IOException, NoSuchAlgorithmException, NoSuchPaddingException{
        Toast.makeText(this, "Encrypt message", Toast.LENGTH_SHORT).show();

        try{
            encrypter = new StringCrypter(key);
        } catch(InvalidKeyException e) {
            Toast.makeText(this, "Неверный ключ!", Toast.LENGTH_SHORT).show();
        }

        String str = dcrypt.getText().toString();
        ecrypt.setText(encrypter.dcrypt(str));
    }
    
    /**
     * Обработчик кнопок
     * Копирование текста в буфер "обмана"
     * 
     * @param view
     */
    public void btnCopyHandler(View view) {
        switch(view.getId()) {
        case R.id.btnCopyDecrypt:
            copyInBuffer(dcrypt);
            Toast.makeText(this, "Скопировано!", Toast.LENGTH_SHORT).show();
            break;
        case R.id.btnCopyKey:
            copyInBuffer(edKey);
            Toast.makeText(this, "Скопировано!", Toast.LENGTH_SHORT).show();
            break;
        default:
            return;
        }
    }
    
    /**
     * Обработчик для кнопки "Вставить" (eng. - Paste)
     * 
     * @param view
     */
    public void btnPasteHandler(View view) {
        switch(view.getId()) {
        case R.id.btnPasteDecrypt:
            paste(dcrypt);
            break;
        case R.id.btnPasteKey:
            paste(edKey);
            break;
        }
    }

    /**
     * Метод для очистки сообщения которое нужно зашифровать.
     *
     * @param view - неважно
     */
    public void btnClearEncrypt(View view) {
        ecrypt.setText("");
    }

    /**
     * Метод для очистки дешифрованного сообщения
     *
     * @param view - заглушка
     */
    public void btnClearDecrypt(View view) {
        dcrypt.setText("");
    }

    /**
     * Метод генерации нового ключа
     *
     * @param view - заглушка
     */
    public void btnGenKey(View view) {
        try{
            key = KeyGenerator.getInstance("DES").generateKey();
            edKey.setText(encodeKey(key));
        } catch(NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * Обработчик кнопки "загрузить ключ"
     * !!! он НЕ работает на данный момент ибо Я отключил кликабельность кнопки
     *      потому что метод не преобразовует строку в ключ. Занимаюсь этой проблемой.
     *      
     *      [fix] Уже работает
     *
     * @param view - заглушка
     */
    public void btnKeyLoad(View view) {
        byte[] encodeKey = Base64.decode(edKey.getText().toString(), edKey.getText().toString().length());
        key = new SecretKeySpec(encodeKey, 0, encodeKey.length, "DES");
    }

    /**
     * Метод для очистки ключа
     *
     * @param view - заглушка
     */
    public void btnClearKey(View view) {
        edKey.setText("");
    }
    
    /**
     * Кнопка, которая делает актуальным стандартный ключ(переменная defaultKey)
     * 
     * @param view
     */
    public void btnDefKey(View view) {
        byte[] encodeKey = Base64.decode(defaultKey, defaultKey.length());
        edKey.setText(defaultKey);
        key = new SecretKeySpec(encodeKey, 0, encodeKey.length, "DES");
    }
    
    /**
     * Обработчик нажатия на кнопку ХЕЛП
     * @param view
     */
    public void btnHelp(View view) {
        Intent intent = new Intent(MainActivity.this, HelpActivity.class);
        startActivity(intent);
    }
    
    /**
     * Копирует данные из текстового поля в буффера обмена.
     * 
     * @param edText - тестовое поле из которого копировать данные
     */
    public void copyInBuffer(EditText edText) {
        int androidCurVer = Build.VERSION.SDK_INT;
        //Узнаем версию андроида
        if(androidCurVer >= Build.VERSION_CODES.HONEYCOMB) {
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("copy", edText.getText().toString());
            clipboard.setPrimaryClip(clip);
        } else {
            ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
            clipboard.setText(edText.getText().toString());
        }
    }
    
    /**
     * Вставить данные из буффера обмена
     * 
     * @param ed - текстовое поле куда будут вставлены данные
     */
    public void paste(EditText ed) {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        ed.setText(clipboard.getText());
    }
}

P.S.S. Писав для себе. Можливо, десь затупив, але Я тільки навчаюсь) Критику приймаю)

29

(39 відповідей, залишених у Робота)

Анатолій написав:

Дуже класно розказано в статті, мені подобається раніше читав, я навіть скинув посилання в  своїй статті пана funivan ще раз окремо дякую,

що ж до свого резюме чи б то портфоліо, то я лиш вчора написав своє портфоліо


Так що навіть згоден вислухати зауваження та пропозиції щодо свого резюме, що не так чи навпаки...

На мою думку не вистачає категорії про Ваші знання та навички)) а так сайт мені чимось та й сподобався)

30

(39 відповідей, залишених у Робота)

Sensetivity написав:

Ви перебільшуєте.
-----------------
За вашою логікою початківців взагалі б не мали брати у компанію, допоки ті не зроблять якогось великого проекту. От тільки нащо тоді їм потрібна буде контора?)

Якщо вже на те пішло - спробуйте знайти якусь разову роботу на фрілансі, буде і досвід і що показати HR.

Ні, Ви не зовсім зрозуміли мій месседж... Я про те, що треба дивитися на те як Джуніор виконає тестове завдання, а не на резюме

31

(39 відповідей, залишених у Робота)

VertoX написав:
generation написав:

ну в резюме мені, поки що, нічого написати, але в мене є приклад мого коду на GitHub'і ну і один недо-сайт який Я розробив для мого друга і , каюсь, що розробив на Kohana Framework адже коду там не багато було в принципі... Але Я навчився виправляти помилки при переносі сайту з локальної мережі на хостинг(якщо цікаво дам посилання).

Після цього тексту не розумію вашого подиву через відсутність зв"язку збоку менеджерів ІТ компаній!))
P.S. Ви навіть мене переплюнули! Я хоча б питав порад як ШВИДШЕ вивчити програмування для заробітку,а з вашого тексту виходить,що часу у вас нема і вам ШВИДКО треба робота PHP джуна!)

Ну Я тестові завдання виконував і якщо було щось не так то ШВИДКО виправляв і повертав їм знову виправлене завдання. Що тут не так? Відсутність проектів? Так з таким темпом кожна людина зможе встановити чужий скрипт на хостинг і видати за свій... Ну, звичайно Сеньору(Міддлу) потрібно мати в резюме свої  проекти та і докази що ти брав в їх розробці участь... А для Джуніка навряд чи це буде показником, а якщо ти про фрейморк, то там Я дійсно дізнався багато цікавого та і вирішував деякі задачі самостійно, а отже отримав цікавий досвід у налаштуванні як фреймворку так і сервера.

P.S. поясню свою думку щодо проектів в резюме джуніка... Поріг входження дуже низький, а отже наплив людей - великий. У новачків велике бажання видати чужий скрипт за свій, а більшість, Я навіть впевнений, що так і зроблять, а отже довіряти Джунікам не має підстав, як і тому що написано в їх резюме. Тут допоможе тестове завдання. А у Міддла/Сеньора повинен буди такий досвід обов'язково, а отже і проекти в їх резюме.

32

(39 відповідей, залишених у Робота)

funivan написав:

Дали мені задачу знайти junior php кодера =)
було не легко, так як зараз народу багато на цю посаду, але толкових мало.
Фішка не тільки у тому як ви знаєте PHP а і у деяких інших факторах:
1. Як ви спілкуєтесь, видаєте інформацію.
2. Який у вас шлях вирішення різних задач.
3. Який рівень зарплати ви бажаєте.
та інше =)

Скиньте резюме. Почитаємо ;)
Можливо буде цікаво: http://funivan.com/code-c10/iak-ya-shuk … o-p84.html

ну в резюме мені, поки що, нічого написати, але в мене є приклад мого коду на GitHub'і ну і один недо-сайт який Я розробив для мого друга і , каюсь, що розробив на Kohana Framework адже коду там не багато було в принципі... Але Я навчився виправляти помилки при переносі сайту з локальної мережі на хостинг(якщо цікаво дам посилання).

33

(39 відповідей, залишених у Робота)

Sensetivity написав:

Пройшов 11 співбесід, взяли у 2 контори. Причому у 2 останні :)
Якщо після ТЗ тиждень не давали нічого знати- дзвонив/писав сам.
-----------------
Кожен хоче взяли кращого спеца за менші гроші. Тому, можливо, запара не лише у знаннях, а в апетитах?
Питання, які мені задавали:
http://replace.org.ua/post/57152/#p57152

також, Я сам виходив на зв'язок з менеджерами(електронною поштою), але від них щоб дочекатися повідомлення  потрібно години так зо 3-5 в кращому випадку... Мабуть один менеджер в їхній компанії бо стільки часу йде на відповідь.

34

(39 відповідей, залишених у Робота)

reverse2500 написав:

може ти показав шо ти розумніший за менеджера ?

та куди там мені...

35

(39 відповідей, залишених у Робота)

quez написав:

Терпіння вам не вистачає. Менеджери можуть обирати з-поміж бездоганно виконаних завдань, тому беріть до уваги їхні зауваження і продовжуйте шукати далі.

Відповіді чекаю тривалий час від них. Та і часу не дуже багато у мене...

36

(39 відповідей, залишених у Робота)

Чи можливо влаштуватися на вакансію Junior PHP в Україні і що для цього потрібно?
Начебто, Я відповідаю всім критеріям на вакансію, але чомусь менеджери не звертають на мене уваги чи зовсім ігнорують... Траплялося що виконував, відповідно до критеріїв, тестове завдання, а потім вони вказували на незначні помилки на виправлення котрих витрачалося не більше 20-30 хв., але відповіді чекав тижнями...
Я розумію OOP, PDO, MVC, але не досконало(для джуніка це допустимо!?). Що порадите, реплейсери? Можливо це через мій вік? хоча навряд...

37

(9 відповідей, залишених у PHP)

Дякую всім за допомогу. Завдання Я виконав ще вчора)) там трішки на тупив

38

(9 відповідей, залишених у PHP)

quez написав:

Все правильно вони сформулювали. Винесіть обробку БД в окремий клас, а в класі моделі створіть об’єкт цього класу.

ну екземпляр абстрактного класу Я створите не зможу, а з моделі не виходить викликати методи властиві об'єкту PDO

39

(9 відповідей, залишених у PHP)

quez написав:
generation написав:

Абстрактний клас повинний бути батьківським класом щоб була можливість виклику його функцій, тобто успадкувати його повинна "модель"(в мене вже є цей клас-батько для всіх інших моделей) щоб всі функції були доступні в інших моделях

Ні. В загальному випадку обробник БД і модель — це різні речі, їх ні в якому разі не можна зв’язувати за допомогою наслідування. Ваша модель має включати обробник БД в себе.

так, Я також так гадав, але мені потрібно написати окремий клас який працюватиме з БД... сам не розумію навіщо все ускладнювати. Можливо вони не так сформулювали чи Я не так зрозумів...

40

(9 відповідей, залишених у PHP)

Ну, Я отримав тестове завдання від одної компаній і виконав його. Сьогодні мені дали позитивну відповідь на мою роботу і попросили модернізувати свій "фреймворк"... в одному пункті вказувалося на те що потрібно винести в окремий клас всі операції з БД і зробити його абстрактним. Як реалізувати таку структуру коду з використанням MVC? Абстрактний клас повинний бути батьківським класом щоб була можливість виклику його функцій, тобто успадкувати його повинна "модель"(в мене вже є цей клас-батько для всіх інших моделей) щоб всі функції були доступні в інших моделях, але в мене це не виходить... модель_користувача->батьківська_модель->клас_для_БД
Я чомусь не можу викликати стандартні методи PDO, можливо вони втрачаються при виклику батьківської моделі?
Гадаю, не сильно Вас заплутав...