Постнагуализм
11 мая 2024, 23:20:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

      Логин             Пароль
В разделе "Свободная территория" можно общаться без аккаунта!
"Тема для быстрой регистрации"
 
   Начало   Помощь Правила Поиск Войти Регистрация Чат Портал  
Страниц: 1 2 3 [4] 5 6  Все
  Ответ  |  Печать  
Автор Тема: HTML - CSS - Javascript (Web Dev Log)  (Прочитано 10615 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #45 : 26 сентября 2023, 21:19:59 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

научите как с помощью Javascript вызвать командную строку(на удалённом компе в.т.ч.)

А тебе зачем?

Лучше уж alert() - выскакивает в браузере окошко с предупреждением .. или угрозой!!! Типа сейчас ваш комп будет отформатирован  ;)

А консоль для js - только в параметрах песочницы будет доступна. Тем более на чужом компе.
Это в браузере можно напакостить.. считать пароли, личные данные, номера кредиток..
Но на комп врят ли воздействовать получится. Для этого программа должна быть установлена пользователем. То есть быть самостоятельной программой, а не встроенным аплетом как джаваскрипт.
Или как трояны - клиентская часть в компе у клиетов, а у тебя серверная часть. Ниче не портит, сидит незаметно, но собирает информацию.. ну может ресурсы  компа использовать.. например для рассылки спама с него...

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

Записан

джелави
Постоялец
***
Offline Offline

Пол: Мужской
Сообщений: 1460


« Ответ #46 : 27 сентября 2023, 13:21:38 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

А тебе зачем?
когда компы в сеть соединены, то можно программы запускать находящиеся на жестком диске чужого компа. Почему через веб сервер это не получается? Надо сначала скачать, а это время. Если это не просто экзэшник а установленная программа, тогда вообще никак. Но способ должен быть
Записан
Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #47 : 27 сентября 2023, 18:29:14 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

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


Зеркала? Фаерволы? Защита вшитая и обновляемая в операционку?

А ты думаешь почему трояны в старое время рассылали по эл почте?
Пока не откроешь письмо, или не кликнешь по ссылке клиентская часть трояна не загрузится на комп - клиент.
А теперь и в почте антивирусы стоят, почту нашу читают прежде чем мы ее откроем..

А то помню не так давно ребенок из Белорусии взломал компы то ли фрс, то ли пентагона.. вот кипиш был..
И где сейчас тот мальчик? В цру работает?  Или безвести пропал?

Наверно способы есть. Но очевидно это не так просто, как было раньше))

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

Это было весело  ;D
Правда не мне, а ребятам, которые потом вирусню вычищали.. я им так надоела видимо, с переустановками, что они мне дарили диски с операционками и прогами и драйверами, и научили самой лов форматить с диск.. ставить операционку, устанавливать программы нужные мне для работы. А так же устанавливать сломанные программы ( помню была одна, стоила 6000$ оригинал, 3d maya версии 3...чтоб ее установить, даже взломанную, приходилось еще те танцы с бубном проделывать..
А фотошоп 2 кстати стоил 700$ оригинал.. а мы и знать не знали. У всех стоял ломанный, купленный на базаре за пару тугриков   ;)
Сейчас он в бесплатном доступе на сайте Адоба с ключами к нему..

По сути то о чем я и писала в теме про развитие разума.. противостояние с потенциальным врагом заставляет человека развиваться.. а его разум эволюционировать..

Записан

Pipa
Техник
Старожил
*
Offline Offline

Пол: Женский
Сообщений: 12443



Email
« Ответ #48 : 27 сентября 2023, 23:29:21 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

когда компы в сеть соединены, то можно программы запускать находящиеся на жестком диске чужого компа. Почему через веб сервер это не получается? Надо сначала скачать, а это время. Если это не просто экзэшник а установленная программа, тогда вообще никак. Но способ должен быть

    Собственно, как язык, Javascript умеет делать всё, но та его реализация, которая встроена в браузер, специально "кастрируется" - очень многое ей запрещается делать ради безопасности. Т.е. если бы браузер предоставлял возможность внешнего управления клиентским компьютером, то эта была бы дыра в браузере, а компания, выпустившая такой браузер в свет, по ныне действующему международному законодательству пошла бы под суд. Поэтому браузерный Javascript способен оперировать только на страницах документа, который этим браузером открыт и не распространяется на другие. Например, если у вас в браузере открыты два сайта: личный кабинет банка, откуда вы можете распоряжаться своим банковским счетом, и другой сайт со "зловредным" JS-кодом, то последний никакого доступа на банковский сайт иметь не будет. Короче говоря, браузерный Javascript используется в весьма ограниченных целях, хотя по своему синтаксису и возможностям это вполне полноценный язык.

    В этом контексте мой вопрос к Соне: каким интерпретатором языка Javascript вы пользуетесь? А точнее - на каком интерпретаторе вас тренируют на этих курсах?
Записан
Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #49 : 28 сентября 2023, 01:58:03 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Например, если у вас в браузере открыты два сайта: личный кабинет банка, откуда вы можете распоряжаться своим банковским счетом, и другой сайт со "зловредным" JS-кодом, то последний никакого доступа на банковский сайт иметь не будет. Короче говоря, браузерный Javascript используется в весьма ограниченных целях, хотя по своему синтаксису и возможностям это вполне полноценный язык.


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

Ну и если вы войдете из полученного письма, вставите данные и пароль... то эти данные попадали в руки к злоумным парням. Которые снимали ваши деньги переведя на временный подставной счет..
Потому видимо такие танцы с бубном им приходилось делать, что никак иначе вашей личной информации получить не могли.
Но сейчас видимо и такие страницы отфильтровываются или ваш браузер ее не откроет. Поэтому злоумным ребятам просто осталось клянчить деньгу, притворясь либо адвокатами вашего богатого умирающего родственника, то нигерианским принцем ... а , еще мода была на американских ветеранов афганской войны...
Сейчас мода на украинских бизнесменов, которые хотят хранить миллионы у вас на счету,  а не в банке в своей стране..
Вот кажется смешно, но из миллионов разосланных писем, хотя бы сотня идиотов попадется...


В этом контексте мой вопрос к Соне: каким интерпретатором языка Javascript вы пользуетесь? А точнее - на каком интерпретаторе вас тренируют на этих курсах?

На чем пишем в личном кабинете? В браузере?
Это их собственный интерпретатор, он встроен в страницы с уроками в личном кабинете.
Написан на javascript  и react native. Они сами хвастались..ну не то что бы хвастались, но упоминали неоднократно, в контексте курсов по JS.
Для меня, лично,  за строками и словами упоминаний, это звучало, как замануха, типа вот будете умничками, выучите javascript хорошо,  и вы такую классную штуку сможете создать..  это действительно возможно!!!
Коуч, как ты и говоришь...
Не знаю, понадобится ли мне вообще когда нибудь такую штуку создавать, скорее всего нет. Но это так обалденно!!! Это как предложить стать божком браузерной песочницы...
 ;D
Я купилась конечно ))

А домашки ( на своем компе ) я пишу на vs code обычно.  Тот что синенький.. не фиолетовый
Записан

Pipa
Техник
Старожил
*
Offline Offline

Пол: Женский
Сообщений: 12443



Email
« Ответ #50 : 28 сентября 2023, 03:15:48 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

В этом контексте мой вопрос к Соне: каким интерпретатором языка Javascript вы пользуетесь? А точнее - на каком интерпретаторе вас тренируют на этих курсах?

Это их собственный интерпретатор, он встроен в страницы с уроками в личном кабинете.
Написан на javascript  и react native. Они сами хвастались..ну не то что бы хвастались, но упоминали неоднократно, в контексте курсов по JS.

     Интерпретатор не может интерпретировать сам себя :). Положим они написали Javascript'а на его же собственном языке. Ну и на чем этот код запускать? Курица не может родить сама себя.
Записан
Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #51 : 28 сентября 2023, 10:08:23 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Интерпретатор не может интерпретировать сам себя . Положим они написали Javascript'а на его же собственном языке. Ну и на чем этот код запускать? Курица не может родить сама себя.

В одном из старых ответов на форуме академии (за 2013 год) нашла, но ссыль устарела..
It’s Ace-editor http://ace.ajax.org

Насколько понимаю - этот опенсорсный онлайн редактор Ace взят за основу.
Наверно раскрасили и поддержку языкам дописали.
На сайте академки - он не работает вживую. Надо нажать кнопку "сохранить".
Тогда и получаешь результат проверки.

https://ace.c9.io

гугла -
Ace — встраиваемый редактор кода, написанный на JavaScript. Он соответствует функциям и производительности родных (нативных) редакторов, таких как Sublime, Vim и TextMate. Его можно легко встроить в любую веб-страницу и приложение JavaScript. Ace остается основным редактором Cloud9 IDE и является преемником проекта Mozilla Skywriter (Bespin).

Пипа может его можно тут на форум прикрутить? Вот красота будет!!! Или он совсем "сырой" и много мороки?


//
Еще нашла рассуждения на тему  как оно обрабатывает JS код (перевела гуглой.
может брехня, я в этом ниче не понимаю)

https://www.quora.com/What-is-the-technology-stack-behind-Codecademy-How-does-it-process-JavaScript-code-thats-written-by-students

Внешний интерфейс:

HTML5, новые теги, такие как <header> и <footer>, но поддержка устаревших браузеров тщательно сохраняется.
Используется Javascript, jQuery. Сама консоль основана на плагине jQuery под названием jq-console (https://github.com/amasad/jq-console).
Обработка входного Javascript: Не похоже, что у них есть интерпретатор, написанный с нуля, а скорее рассчитывают на то, что Javascript браузера интерпретирует входные данные, а затем захватывает выходные данные.
Определение правильности ввода: страница загружается с переменной excercisionData, которая содержит отдельные упражнения с тестовыми примерами Javascript, которые выполняются на основе результатов обработки пользовательского ввода. Таким образом, корректность вопроса определяется на стороне клиента. После того, как пользователь нажимает «ввод» в консоли, выполняется POST-запрос, содержащий вводимые пользователем данные и информацию о том, удовлетворен ли он конкретным упражнением.

Back end:

Rails running on nginx + varnish
MongoDB for persistence
Standard AJAX for client - server communication


про проверку кредитных карточек по их номерам, напишу попозже.
Не нравится мне одна из функций, которую написала... думаю, как бы ее покрасивше и короче переписать..
хотя для конкурса важна только функциональность. Говорят рефракцией кода займетесь позже, главное чтоб  правильно работала.
Да потом надо закинуть на Git hub, хотя кому такая хрень нужна в портофолио? там совершенно не на что смотреть..

« Последнее редактирование: 28 сентября 2023, 20:16:33 от Соня (Bruja) » Записан

Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #52 : 30 сентября 2023, 11:03:22 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

//Конкурсный проект: проверка кредитных карт
//Challenge Project: Credit Card Checker
// Мое решение на gist.github:
//https://gist.github.com/mtapirina/41c32800b7a452f516b7090933dc3e58
//https://gist.github.com/codecademydev/db9f766146d5000a2dcf526e247b879a

// Все действительные номера кредитных карт
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8];
const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9];
const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6];
const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5];
const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];

// Все недействительные номера кредитных карт
const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3];
const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4];
const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4];

//Может быть действительным или недействительным
const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4];
const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9];
const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3];
const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3];
const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3];

//Массив из всех массивов выше
const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2,invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4,mystery5];

//Мои массивы для тестирования
const test = [4, 5, 3, 9, 6, 8, 9, 8, 8, 7, 7, 0, 5, 7, 9, 8];
const test1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5];
const test2 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];


//неверное первое число — 9 — для проверки «Компания не найдена»
const test3 = [9, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5];
//неверный пакетный массив (массив из массивов с неверными номерами карт
const batchInv = [ invalid1, test3, invalid2,invalid3, invalid4, invalid5];

/*Создайте функцию validateCred() , которая имеет параметр массива. Цель validateCred() — вернуть true, если массив содержит цифры действительного номера кредитной карты, и false, если он недействителен. Эта функция НЕ должна изменять значения исходного массива.*/

function validateCred(array){
/*шаг 1 — Удалить последний элемент из массива,
(но помните: вы не хотите изменять исходный массив!):*/

const arr = array.slice();//copy of array
//console.log((array === arr) + '  copy of array');
let checkDigit = arr.pop();//Remove the last element from the array
//шаг 2 — Переверните массив (теперь без последней цифры):
const reverseArray = arr.map((_, index) =>
    arr[arr.length - 1 - index]);
/*Шаг 3. Умножьте цифры в нечетных позициях.
(например, первая цифра, третья, пятая и т. д.) на 2.
Если полученное число больше 9, вычтите 9 из числа:*/

let sum = 0;
for (let i = 0; i < reverseArray.length; i++){
    let x = reverseArray; // currentIndex
    
    if(  i % 2 === 0 ){
        x *= 2;
        x > 9?x -= 9:x;
    }
    sum += x;
}
/*Шаг 4. Сложите все числа в массиве, а также пропущенную цифру из шага 1. Если сумма по модулю 10 равна 0 , то массив содержит допустимое число: */
return (sum + checkDigit) % 10 === 0? true : false;
};

/* Создайте еще одну функцию findInvalidCards() , имеющую один параметр для вложенного массива номеров кредитных карт.
Роль findInvalidCards()  — проверить во вложенном массиве недопустимые числа и вернуть другой вложенный массив недействительных карточек.
*/


function findInvalidCards(array){
const invalidCards = array.filter((element) => !validateCred(element));
return invalidCards;
};


/*5
Создайте функцию idInvalidCardCompanies() , которая имеет один параметр для вложенного массива недопустимых чисел и возвращает массив компаний.
В настоящее время существует 4 принятые компании, каждая из которых имеет уникальные первые цифры.
3   Amex (American Express)
4   Visa
5   Mastercard
6   Discover
Если номер не начинается ни с одной из перечисленных цифр, распечатайте сообщение типа: «Компания не найдена».
idInvalidCardCompanies() должен возвращать массив компаний, которые разослали карты с недопустимыми номерами. Этот массив НЕ должен содержать дубликатов, т. е. даже если есть две недействительные карты Visa, Visa должна появиться в массиве только один раз.
*/



function idInvalidCardCompanies(array){

const pushArr = [];

array.forEach((el)=>{
   //console.log(el[0])
        switch(el[0]){
            case 3:
            if(pushArr.indexOf('Amex (American Express)')=== - 1){
                pushArr.push('Amex (American Express)');
               }
            break;
            case 4:
            if(pushArr.indexOf('Visa')=== - 1){
                pushArr.push('Visa');
               }
            break;
            case 5:
            if(pushArr.indexOf('Mastercard')=== - 1){
                pushArr.push('Mastercard');
               }
            break;
            case 6:
            if(pushArr.indexOf('Discover')=== - 1){
                pushArr.push('Discover');
               }
            break;
            default:
            if(pushArr.indexOf('Company not found')=== - 1){
                pushArr.push('Company not found');
               }
            break; };
    })

  return pushArr;
};

/*extra:
Чтобы проверить номера кредитных карт, создайте функцию, которая принимает строку и преобразует ее в массив чисел, подобный изначально предоставленным массивам.*/

function convertToNumbersArray (string){
//преобразовать строку => в массив символов
    let x = Array.from(string);
     console.log(x);
//новый массив чисел => преобразовать символы в числа
    const toNumbersArray = x.map(el =>{
        let toNum = parseInt(el);
        return toNum;
        
       });
       //если элемент нового массива NaN?
       const validNumbers = toNumbersArray.some(el=>
         Number.isNaN(el));
       //console.log(validNumbers);

       //console.log(toNumbersArray);
     if(!validNumbers){
        return toNumbersArray;
     }else{
    return 'Wrong number of Credit Card. This function accepts only numbers!'
     }
};


//Преобразовать недействительный номер кредитной карты в действительный

function convertToValidCard (array){
    const arr = array.slice();// копия исходного массива
    let lastDigit = arr.pop(); //удалим последнюю цифру из arr и сохраним ее в переменной lastDigit
   //console.log(lastDigit);
   //console.log(arr);
   //применить обратный цикл к массиву arr (к копии урезанного номера кредитной карты)
    let sum = 0;
    for(let i = arr.length - 1; i >= 0; i--){
        let x = arr;
        if(i % 2 === 0){
            x *= 2;
            x > 9? x -= 9:x;
        }
        //console.log(x)
        sum += x;
      
    }
    //console.log(sum + ' sum');
    //console.log(lastDigit + ' - last digit');

    let result = sum + lastDigit;
   //console.log(result + ' - result');
    
    if(result % 10 !== 0){
       let y = Math.round(result/10)* 10;
       //console.log(y + ' - result round 10%');
       if(sum % 10 === 0){
        lastDigit = 0;
       }else{
       lastDigit = y - sum;
       }
       //console.log(lastDigit + ' - last digit changed');
       arr.push(lastDigit);
    }else{
        return 'This Credit Card is valid. Please insert invalid Credit Card number'
    }
    //console.log(arr);
    return arr;

};



// test
//console.log('test2(invalid) convert to valid cc number');
//console.log(convertToValidCard(test2));
//console.log(validateCred(convertToValidCard(test2)));
//console.log('parse Int - new array of integers');
//console.log(convertToNumbersArray ('49161591k0658210'));
//console.log('batchInvalid - Company not found =>');
//console.log(idInvalidCardCompanies(batchInv));
//console.log('batch - id Invalid Card Companies =>');
//console.log(idInvalidCardCompanies(batch));
//console.log('batch - findInvalidCards(8) =>');
//console.log(findInvalidCards(batch));
//console.log('batchInvalid - findInvalidCards(6) =>');
//console.log(findInvalidCards(batchInv))
//console.log('test true - validateCred =>');
//console.log(validateCred(test));
//console.log(validateCred(test2));
//console.log(validateCred(valid1));
//console.log('test false - validateCred =>');
//console.log(validateCred(convertToNumbersArray ('3542403720469485746')));
//console.log(validateCred(invalid1));
//console.log('test mystery (false = 2, true = 3) - validateCred =>');
//console.log(validateCred( mystery5));



Возможно, все это можно сделать как то короче и красивее... Но я в принципе довольна и тому что у меня получилось.
Работает вроде бы правильно, по крайней мере мне ошибки удалось исправить и больше они не повторялись..
Вообще этот конкурс мне очень понравился! По ходу поиска решений узнала кое что новое.. Например как округлять до десятка ближайшего с помощью Math.round(var/10)* 10;
или о том, что копию - дубликат массива быстро и просто можно сделать  так
const arr = array.slice(); и при проверке - это именно другой масив, а исходный останется не тронутым.
О проверке Number.isNaN() - существует ли число, или его нет (нет никакого значения) и т.д.



* Снимок экрана 2023-09-30 в 10.52.31.png (187.72 Кб, 2020x1442 - просмотрено 28 раз.)
« Последнее редактирование: 30 сентября 2023, 11:59:39 от Соня (Bruja) » Записан

Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #53 : 30 сентября 2023, 11:42:49 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Курица не может родить сама себя.

И вот новое задание  на радость Пипе... про ДНК! :)  (конкурсная работа)

Загадочный организм

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

Цели проекта
Контекст: вы являетесь частью исследовательской группы, которая обнаружила новый загадочный организм на дне океана возле гидротермальных источников. Ваша команда называет этот организм Pila aequor (P. aequor) и обнаруживает, что он состоит всего из 15 оснований ДНК. Небольшие образцы ДНК и частота, с которой она мутирует из-за гидротермальных источников, делают P. aequor интересным экземпляром для изучения. Однако P. aequor не может выжить над уровнем моря, а найти P. aequor в глубоком море сложно и дорого. Ваша задача — создавать объекты, имитирующие ДНК P. aequor, для изучения вашей исследовательской группой.
 :)

(Project Goals
Context: You’re part of a research team that has found a new mysterious organism at the bottom of the ocean near hydrothermal vents. Your team names the organism, Pila aequor (P. aequor), and finds that it is only comprised of 15 DNA bases. The small DNA samples and frequency at which it mutates due to the hydrothermal vents make P. aequor an interesting specimen to study. However, P. aequor cannot survive above sea level and locating P. aequor in the deep sea is difficult and expensive. Your job is to create objects that simulate the DNA of P. aequor for your research team to study
.)
Записан

Pipa
Техник
Старожил
*
Offline Offline

Пол: Женский
Сообщений: 12443



Email
« Ответ #54 : 30 сентября 2023, 21:47:05 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Контекст: вы являетесь частью исследовательской группы, которая обнаружила новый загадочный организм на дне океана возле гидротермальных источников. Ваша команда называет этот организм Pila aequor (P. aequor) и обнаруживает, что он состоит всего из 15 оснований ДНК. Небольшие образцы ДНК и частота, с которой она мутирует из-за гидротермальных источников, делают P. aequor интересным экземпляром для изучения. Однако P. aequor не может выжить над уровнем моря, а найти P. aequor в глубоком море сложно и дорого. Ваша задача — создавать объекты, имитирующие ДНК P. aequor, для изучения вашей исследовательской группой.

     На счет вычислительной части проекта я едва ли могу сказать что-то полезное, но "мистический организм" прокомментирую. Начну с того, что такого организма не может быть никогда :). И главная тому причина - слишком короткая ДНК - всего 15 нуклеотидов. А учитывая, что генетический год триплетный (т.е. каждые тройка последовательно расположенных нуклеотидов кодируют одну аминокислоту в белке), то 15 нуклеотидов могут закодировать максимум пептид длиной в 5 аминокислот (15/3=5), которому до функционального белка очень далеко. Тогда как суть генетического кода именно в том, чтобы закодировать белок с настолько сложной структурой, чтобы он мог впоследствии свернуться в такую пространственную форму, которая обладала бы какой-то  активностью (чаще каталитической). В последнем случае пространственная форма белка изгибается так, чтобы образовать "посадочные места" для нужной молекулы или молекул и, как паук, ждать, когда они там завязнут, чтобы потом либо разорвать их на части, или спарить две молекулы друг с другом, чтобы они образовали одну длинную/большую молекулу. Тогда как 5 аминокислот никакую достаточно прочную форму образовать в пространстве не смогут.
     Пошли дальше. У организмов с короткой ДНК/РНК (но конечно всё-таки большей, чем 15 звеньев) их ДНК/РНК свернута в кольцо. Причем не механически, а путем химической связи между крайними звеньями. Точнее говоря, у таких ДНК/РНК концов не бывает, поскольку сама их форма - кольцо. А это нужно именно затем, чтобы такую последовательность можно было копировать/клонировать. Тогда как концы ДНК-цепочки обычно не копируются. Именно поэтому бактерии бессмертны, а люди стареют из-за того что их ДНК при копировании укорачивается. И как только с какого-то края не откопируется что-то важное, человек умирает. Тогда как короткую ДНК из 15 звеньев в кольцо не свернёшь - двойная спираль не позволит ей так сильно изогнуться. Хотя пептиды (короткие белки могут это сделать).
     Даже если начать сочинять всевозможные ДНК из заданного числа звеньев, то неясен сам критерий того, окажется ли организм с такой ДНК жизнеспособным. Т.к. очевидно, что случайная последовательность звеньев никакого живого организма не создаст, т.к. жизнь - довольно редкое явление во Вселенной.
     Например, если мы займемся мутированием какой-то ... книги :), заменяя в ней буквы на другие случайным образом, то должен быть какой-то эксперт, который бы все эти мутированные тексты читал и выдавал заключение о том, представляет ли литературную ценность хотя бы один из них. А кто будет экспертом по части определения, хороша ли данная мутация у ДНК или плоха? В природе этим занимается "естественный отбор", который отсеивает нежизнеспособные формы, а в этом проекте кто это будет делать? Т.е. проблему я вижу не в сложности замены одних звеньев ДНК на другие, а в том, чтобы определить полезность таких замен для живого организма (в смысле жизнеспособности и скорости размножения).
Записан
Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #55 : 06 октября 2023, 02:30:02 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Загадочный организм

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

Цели проекта
Контекст: вы являетесь частью исследовательской группы, которая обнаружила новый загадочный организм на дне океана возле гидротермальных источников. Ваша команда называет этот организм Pila aequor (P. aequor) и обнаруживает, что он состоит всего из 15 оснований ДНК. Небольшие образцы ДНК и частота, с которой она мутирует из-за гидротермальных источников, делают P. aequor интересным экземпляром для изучения. Однако P. aequor не может выжить над уровнем моря, а найти P. aequor в глубоком море сложно и дорого. Ваша задача — создавать объекты, имитирующие ДНК P. aequor, для изучения вашей исследовательской группой.


//Challenge Project: Mysterious Organism
console.log('2 Hi, Organism P. aequor !!!')

// Returns a random DNA base
const returnRandBase = () => {
    const dnaBases = ['A', 'T', 'C', 'G']
    return dnaBases[Math.floor(Math.random() * 4)]
  }
  
 // Returns a random single strand of DNA containing 15 bases
  const mockUpStrand = () => {
    const newStrand = []
    for (let i = 0; i < 15; i++) {
      newStrand.push(returnRandBase())
    }
    return newStrand
  }


2. Просмотрите стартовый код. Есть две вспомогательные функции: returnRandBase() и mockUpStrand(). ДНК состоит из четырех оснований (аденин, тимин, цитозин и гуанин).
При вызове returnRandBase() он случайным образом выбирает базу и возвращает базу («A», «T», «C» или «G»).


3.
Поскольку вам нужно создать несколько объектов, создайте фабричную функцию pAequorFactory() с двумя параметрами:
Первый параметр — это число (не может быть двух организмов с одинаковым номером).
Второй параметр — массив из 15 оснований ДНК.
pAequorFactory() должен возвращать объект, содержащий свойства sampleNum и dna, соответствующие предоставленным параметрам.
На последующих шагах вы также добавите дополнительные методы к этому возвращенному объекту.


//factory function

const pAequorFactory = (n, array) => {
return {
  specimenNum: n,
  dna: array

... ......тело функции................ и встроенные методы будут помещены здесь. кроме функции создающей сразу массив (колбу) с несколькими объектами с разной днк и возможно способными выжить..................

mutate(){},
compareDNA(){},
willLikelySurvive(){},
complementStrand(){}


   }
};

Create_N_pAequor(){};


console.log( pAequorFactory(1, mockUpStrand(returnRandBase()) ))

4.
Ваша команда хочет, чтобы вы смоделировали высокую скорость мутаций P. aequor (изменения в его ДНК).
Чтобы смоделировать мутацию, в возвращаемый объект pAequorFactory() добавьте метод .mutate().
.mutate() отвечает за случайный выбор базы в свойстве dna объекта и изменение текущей базы на другую базу. Затем .mutate() вернет ДНК объекта.
Например, если случайно выбранная база является первой базой и равна «A», базу необходимо изменить на «T», «C» или «G». Но это не может быть снова «А».
Вы можете протестировать этот метод, создав экземпляр pAequor и проверив, что его .dna изменяется после вызова .mutate() на себе.



mutate(){
            //this.dna = arr to change
            const dnaOrigin = this.dna;
            const dnaBases = ['A', 'T', 'C', 'G'];
            const newDna =[];
            let y = [];
            for(let i = 0; i < dnaOrigin.length; i++){
                dnaBases.forEach(el =>{if(el !== dnaOrigin[ i ]){ y.push(el)}});
                newDna[ i ] = y[Math.floor(Math.random() * 3)];
                y.length = 0;
            }
            return newDna;
        },



5.
Ваша исследовательская группа хочет иметь возможность сравнить последовательности ДНК разных P. aequor. Вам придется добавить новый метод (.compareDNA()) к возвращаемому объекту фабричной функции.
.compareDNA() имеет один параметр — другой объект pAequor.
Поведение .compareDNA() заключается в сравнении текущей .dna pAequor с переданной в .dna pAequor и вычислении количества идентичных оснований, находящихся в одних и тех же местах.
 .compareDNA() ничего не возвращает, а печатает сообщение, в котором указывается процент общей ДНК этих двух объектов — используйте .specimenNum, чтобы определить, какие объекты pAequor сравниваются.


Например:
ex1 = ['A', 'C', 'T', 'G']
ex2 = ['C', 'A', 'T', 'T']


ex1 и ex2 имеют только 3-й общий элемент («T») и, следовательно, имеют 25% (1/4) общей ДНК. Полученное сообщение будет выглядеть примерно так: образец № 1 и образец № 2 имеют 25% общей ДНК.

   compareDNA(obj){
            const compare = this.dna.filter((el, i)=> el === obj.dna[ i ] );
            const percent = (compare.length/this.dna.length * 100).toFixed()
            //console.log(percent  + ' == percent == ' + compare.length + ' this ' + compare  + ' = DNA in common');
           console.log( `specimen #${this.specimenNum} and specimen #${obj.specimenNum} have ${percent}% DNA in common`);
        },


6.
У P. aequor больше шансов на выживание, если их ДНК состоит как минимум на 60% из оснований C или G.
В возвращаемый объект pAequorFactory() добавьте еще один метод .willLikelySurvive().
.willLikelySurvive() возвращает true, если массив .dna объекта содержит не менее 60% оснований «C» и/или «G». В противном случае .willLikelySurvive() возвращает false.


willLikelySurvive(){
            const countCorG = this.dna.reduce((total, amount)=>{
                if(amount === 'C'|| amount === 'G'){
                    total++;};
                return total;},0);
                   //console.log((countCorG/this.dna.length*100).toFixed() + '%')
            return (countCorG/this.dna.length*100).toFixed()>= 60?true:false;
        }


7.
После настройки заводской функции ваша команда просит вас создать 30 экземпляров pAequor, которые смогут выжить в своей естественной среде. Сохраните эти экземпляры в массиве, чтобы ваша команда могла изучить их позже.
Для получения объекта из массива в JavaScript можно использовать метод find() . Он принимает функцию обратного вызова, которая будет вызвана для каждого элемента массива. Функция должна вернуть true , если элемент соответствует заданному условию, и false в противном случае.


const Create_N_pAequor = (n) => {
array = [];
let i = 0;
count = 0;
while(i <= n){
    let specimen = pAequorFactory(count ,mockUpStrand());
    if(specimen.willLikelySurvive()){

    count++;
    array.push(specimen);
    i++
   };
};
return array;
};


Отличная работа! Посетите наши форумы
, чтобы сравнить свой проект с нашим примером кода решения. Вы также можете узнать, как разместить свое собственное решение на GitHub, чтобы поделиться им с другими учащимися! Ваше решение может отличаться от нашего, и это нормально! Существует несколько способов решения этих проектов, и вы узнаете больше, просматривая код других.


9.
Если вы хотите бросить себе вызов дальше, вы можете рассмотреть следующее:
Создайте метод .complementStrand() для объекта фабричной функции, который возвращает комплементарную цепь ДНК.
Правила таковы, что буквы «А» совпадают с «Т», и наоборот. Кроме того, буквы «C» совпадают с «G», и наоборот. (Подробнее читайте в подсказке)
Используйте .compareDNA(), чтобы найти два наиболее связанных экземпляра pAequor.
Последовательности ДНК встречаются в природе в виде двухцепочечных структур (спиралей). Правила заключаются в том, что основания A связываются с основаниями T (и наоборот), а основания C связываются с основаниями G (и наоборот).
Предположим, у нас есть две нити ДНК, назовем их нить1 и нить2. Если первое основание цепи 1 — это «А», то противоположное основание цепи 2 — это «Т». Если вторая точка нити 1 — «C», то противоположное основание нити 2 — это «G».
Чтобы отобразить это как часть вашего кода, если последовательность .dna:



[ 'T', 'A', 'C', 'A', 'G', 'A', 'T', 'A', 'C', 'G', 'A', 'C', 'G', 'A', 'T' ]
Then .complementStrand() should return:
[ 'A', 'T', 'G', 'T', 'C', 'T', 'A', 'T', 'G', 'C', 'T', 'G', 'C', 'T', 'A' ]


complementStrand(){
            let complementDna = [];
            const  createComplement = this.dna.forEach((el)=>{
                switch (el){
                case 'A':
                complementDna.push('T');
                break;
                case 'T':
                complementDna.push('A');
                break;
                case 'C':
                complementDna.push('G');
                break;
                case 'G':
                complementDna.push('C');
                break;
                default:
                complementDna.push(el);
                break;};
                });
            return complementDna;
        }

FULL CODE - ОКОНЧАТЕЛЬНЫЙ КОД можно посмотреть тут, на моем  GitHub






* Снимок экрана 2023-10-01 в 22.44.20.png (195.45 Кб, 1318x1244 - просмотрено 25 раз.)

* Снимок экрана 2023-10-06 в 02.02.56.png (408.81 Кб, 1406x1442 - просмотрено 24 раз.)
« Последнее редактирование: 06 октября 2023, 04:06:36 от Соня (Bruja) » Записан

Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #56 : 06 октября 2023, 03:08:15 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Вот с этой скотиной я намучалась.. она мне плешь проела!
Функция, чтобы создать энное количество этих инфузорий сразу, более или менее жизнеспособных(60%), и затолкать их в одну колбочку ( массив)...

const Create_N_pAequor = (n) =>

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


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

Но Пиздец не дремлет... Он подкрался незаметно... Это страшный и ужассссный DOM!!!

Введение: создание интерактивных веб-сайтов


Цель этого модуля — показать, как JavaScript используется для добавления интерактивных возможностей на веб-сайт.

После этого модуля вы сможете:

Сможете добавить JavaScript на сайт для интерактивности
Опишите, что такое DOM
Объяснить, что такое события DOM.
Сможете создать формы с использованием HTML и проверять их с помощью JavaScript.

Все эти знания вы примените на практике в рамках предстоящего проекта. Вы можете завершить Портфолио-проект как параллельно, так и после получения необходимого контента — решать вам!
« Последнее редактирование: 06 октября 2023, 03:39:22 от Соня (Bruja) » Записан

Pipa
Техник
Старожил
*
Offline Offline

Пол: Женский
Сообщений: 12443



Email
« Ответ #57 : 06 октября 2023, 03:39:06 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

У P. aequor больше шансов на выживание, если их ДНК состоит как минимум на 60% из оснований C или G.
В возвращаемый объект pAequorFactory() добавьте еще один метод .willLikelySurvive().
.willLikelySurvive() возвращает true, если массив .dna объекта содержит не менее 60% оснований «C» и/или «G». В противном случае .willLikelySurvive() возвращает false.

    С таким критерием (>= 60% GC) мутации неизбежно приведут к тому, что ДНК только из одних этих GC и будет состоять. Кстати, интересно ли вам, откуда этот критерий взялся?

Но Пиздец не дремлет... Он подкрался незаметно... Это страшный и ужассссный DOM!!!

    Тем не менее, основная польза от JS состоит в том, что с его помощью можно управлять DOMом! А через этот DOM делать HTML-страницы динамичными и интерактивными гораздо в большей мере, что это позволяет сам HTML. Тогда как программирование самом JS в общем-то почти не нужно - практически ничего из тех упражнений по JS для работы с HTML-страницами не пригодится.
Записан
Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #58 : 06 октября 2023, 03:49:27 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Тогда как программирование самом JS в общем-то почти не нужно - практически ничего из тех упражнений по JS для работы с HTML-страницами не пригодится.

это не важно. Когда что то нравится оно все равно потом найдет куда примениться..
Да я видела эти скучные длинные домовские строки.. нудня полная..

А разве не нужен код  для разработки каких то веб приложений.. или для тех же браузерных игр ?

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

где еще используется .. ООП?

С таким критерием (>= 60% GC) мутации неизбежно приведут к тому, что ДНК только из одних этих GC и будет состоять. Кстати, интересно ли вам, откуда этот критерий взялся?

может быть... хотя при том рандоме, никогда не видела более 90%

расскажи, откуда этот критерий взялся?

Там сама понимаешь, проект вымышленный, как и сами эти инфузории туфельки.. у инфозорий наверно и то длиннее ДНК
Записан

Соня (Bruja)
Старожил
*****
Offline Offline

Пол: Женский
Сообщений: 8095


Брушенька, Пипина радость!


WWW
« Ответ #59 : 06 октября 2023, 04:02:10 »
Цитировать выделенноеЦитировать выделенное ПроцитироватьЦитировать

Pipa,
compareDNA(obj){
            const compare = this.dna.filter((el, i)=> el === obj.dna);

Смотри Пипа, что я заметила, страница не отражает [ i ], если квадратные скобки сдвинуты близко к i
Раздвинула скобки по всему тексту.

Почему не видно??


* Снимок экрана 2023-10-06 в 03.00.58.png (86.38 Кб, 1084x368 - просмотрено 26 раз.)
Записан

Страниц: 1 2 3 [4] 5 6  Все
  Ответ  |  Печать  
 
Перейти в:        Главная

+ Быстрый ответ
Postnagualism © 2010. Все права защищены и охраняются законом.
Материалы, размещенные на сайте, принадлежат их владельцам.
При использовании любого материала с данного сайта в печатных или интернет изданиях, ссылка на оригинал обязательна.
Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC