У моего хостера физически изъяли серверы в Нидерландах
Разумеется я все хостил в одной локации, у одного поставщика, без балансировщика и зеркал. Чтож, базы данных потеряны, исходный код сохранён, все конфиги сервера, хрон события и другие скрипты мне хватило ума закоммитить. И на том спасибо. Когда подниму все сервисы пройдусь по истории оплат в Robokassa и накину всем токены для @NeurFotoBot, даже если они были потрачены ранее или купили💎 токены за stars. Такие дела, в комментариях написал про этот инцидент подробнее
🥰 @SnowBallCode
😍
Разумеется я все хостил в одной локации, у одного поставщика, без балансировщика и зеркал. Чтож, базы данных потеряны, исходный код сохранён, все конфиги сервера, хрон события и другие скрипты мне хватило ума закоммитить. И на том спасибо. Когда подниму все сервисы пройдусь по истории оплат в Robokassa и накину всем токены для @NeurFotoBot, даже если они были потрачены ранее или купили
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4 1
Удивительно как легко может рухнуть то, что не продуманно до всех возможных мелочей
Вот как предугадать что часть независимой от меня инфраструктуры в момент станет недоступна? Никак. Можно лишь делать бекапы баз данных, а при разрастании проекта создавать realtime реплики на других локациях. В моем случае всё обошлось малыми потерями. Почти всем пользователям я компенсировал потерянные токены. Если кто-то ответит на письмо позже - начислю на их аккаунт тоже. Это моя зона ответственности. На данный момент я всё-таки не готов делать реплики на параллельный сервер, проще делать ежедневные бекапы прямо на VPS и специальным скриптом скачивать самые свежие версии бд на мак по ssh
Сейчас дорабатываю юзерфлоу бота по нейрофотографии убирая лишние сообщения, тк совершенству нет предела. А у вас были факапы? Как справились?
🥰 @SnowBallCode
😍
Вот как предугадать что часть независимой от меня инфраструктуры в момент станет недоступна? Никак. Можно лишь делать бекапы баз данных, а при разрастании проекта создавать realtime реплики на других локациях. В моем случае всё обошлось малыми потерями. Почти всем пользователям я компенсировал потерянные токены. Если кто-то ответит на письмо позже - начислю на их аккаунт тоже. Это моя зона ответственности. На данный момент я всё-таки не готов делать реплики на параллельный сервер, проще делать ежедневные бекапы прямо на VPS и специальным скриптом скачивать самые свежие версии бд на мак по ssh
Сейчас дорабатываю юзерфлоу бота по нейрофотографии убирая лишние сообщения, тк совершенству нет предела. А у вас были факапы? Как справились?
Please open Telegram to view this post
VIEW IN TELEGRAM
Интересно, а что если мне ещё раз пройти теорию из курса Яндекса?
Сейчас я неспешно почитываю карьерный трек, но к заданиям по составлению резюме пока не приступал. В отличие от основной программы которую я прошёл, здесь все темы уже открыты для ознакомления. Нет таких замочков что открывались только после окончания спринта из проекта в проект. Всё-таки я буду немного в этом участвовать и составлю резюме с сопроводительным письмом о своих проектах на Swift, но займусь этим ближе к середине лета. Сейчас хочу сосредоточиться над продвижением своей сетки ботов и двух коммерческих проекта в телеграм. Хочу вывести их на самоокупаемость
Как готовитесь к жаре? Я вот утащил у сестры вентилятор😆
🥰 @SnowBallCode
😍
Сейчас я неспешно почитываю карьерный трек, но к заданиям по составлению резюме пока не приступал. В отличие от основной программы которую я прошёл, здесь все темы уже открыты для ознакомления. Нет таких замочков что открывались только после окончания спринта из проекта в проект. Всё-таки я буду немного в этом участвовать и составлю резюме с сопроводительным письмом о своих проектах на Swift, но займусь этим ближе к середине лета. Сейчас хочу сосредоточиться над продвижением своей сетки ботов и двух коммерческих проекта в телеграм. Хочу вывести их на самоокупаемость
Как готовитесь к жаре? Я вот утащил у сестры вентилятор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Поговорим сегодня о обстоятельствах непреодолимой силы на примере IT
Я уже ныл на тему того, что мой хостер соседствовал с дельцами которые сдавали серверы для развёртывания приватной сети и ею пользовались киберпреступники. Так вот, сегодня вычитал в одном телеграм канале что люди из гд додумались запретить для российских сайтов и приложений авторизацию через зарубежные сервисы. На момент написания статьи этот законопроект принят в 3х чтениях, но ещё застрял в совете федерации и не подписан одним известным лицом. В прошлом месяце была новость о запрете github, но видимо до него дело так и не дошло. Весной вообще хотели заблокировать зарубежные нейросети, видимо кто эту инициативу продвигал не в курсе что почти все западные сервисы и так банят аккаунты россиян. Со всеми перечисленными проблемами я как-то справился, вопрос вот в чём: сколько моих сограждан опустили руки и не нашли решение? Сколько россиян пользуются махом, вк и другими "наш ответ им"?
На моём этапе обойти эти ограничения для работы не составляет труда, но я заметил что обывател вообще порой не понимает разницу между gmail и вк. Если законопроект подпишут, то штрафы будут огромные. Знаете как админы решат проблему? Часть из них обновит шлюзы авторизации, а другие зарегистрируют домены на друга из Казахстана и Россия опять потеряет множество траффика и интересных проектов
🥰 @SnowBallCode
😍
Я уже ныл на тему того, что мой хостер соседствовал с дельцами которые сдавали серверы для развёртывания приватной сети и ею пользовались киберпреступники. Так вот, сегодня вычитал в одном телеграм канале что люди из гд додумались запретить для российских сайтов и приложений авторизацию через зарубежные сервисы. На момент написания статьи этот законопроект принят в 3х чтениях, но ещё застрял в совете федерации и не подписан одним известным лицом. В прошлом месяце была новость о запрете github, но видимо до него дело так и не дошло. Весной вообще хотели заблокировать зарубежные нейросети, видимо кто эту инициативу продвигал не в курсе что почти все западные сервисы и так банят аккаунты россиян. Со всеми перечисленными проблемами я как-то справился, вопрос вот в чём: сколько моих сограждан опустили руки и не нашли решение? Сколько россиян пользуются махом, вк и другими "наш ответ им"?
На моём этапе обойти эти ограничения для работы не составляет труда, но я заметил что обывател вообще порой не понимает разницу между gmail и вк. Если законопроект подпишут, то штрафы будут огромные. Знаете как админы решат проблему? Часть из них обновит шлюзы авторизации, а другие зарегистрируют домены на друга из Казахстана и Россия опять потеряет множество траффика и интересных проектов
Please open Telegram to view this post
VIEW IN TELEGRAM
Четыре популярных алгоритма на Swift с объяснением где их обычно применяют:
1. Линейный поиск. Самый простой способ найти элемент в массиве. Используют когда массив маленький и не отсортирован, например для поиска в коротком списке
2. Бинарный поиск. Гораздо быстрее линейного, но работает только с отсортированными массивами. Используют в больших отсортированных списках, таких как поиск пользователей, товаров, автодополнение и всё такое
3. Пузырьковая сортировка. Медленная, но удобная для обучения. На практике почти не применяется
4. Быстрая сортировка.
Один из самых шустрых алгоритмов, применяют для сортировки больших массивов данных
В реальных приложениях чаще используют готовые методы .sorted(), .firstIndex(of:) и структуры данных из стандартной библиотеки (Array, Set, Dictionary). Также в функциях используется <T: Equatable> и <T: Comparable>. Это дженерики в Swift где <T> универсальный тип-заполнитель, благодаря которому функция работает с любыми данными: Int, String, вашими моделями. Буква T это стандартное обозначение от слова "Type"
🥰 @SnowBallCode
😍
1. Линейный поиск. Самый простой способ найти элемент в массиве. Используют когда массив маленький и не отсортирован, например для поиска в коротком списке
func linearSearch<T: Equatable>(_ array: [T], target: T) -> Int? {
for (index, element) in array.enumerated() {
if element == target {
return index
}
}
return nil
}
// Пример
let numbers = [5, 3, 8, 1, 9, 2]
if let index = linearSearch(numbers, target: 8) {
print("Элемент найден на позиции \(index)") // 2
}2. Бинарный поиск. Гораздо быстрее линейного, но работает только с отсортированными массивами. Используют в больших отсортированных списках, таких как поиск пользователей, товаров, автодополнение и всё такое
func binarySearch<T: Comparable>(_ array: [T], target: T) -> Int? {
var left = 0
var right = array.count - 1
while left <= right {
let mid = left + (right - left) / 2
if array[mid] == target {
return mid
} else if array[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return nil
}
// Пример
let sortedNumbers = [1, 3, 5, 7, 9, 11, 13]
if let index = binarySearch(sortedNumbers, target: 7) {
print("Найдено на позиции \(index)") // 3
}3. Пузырьковая сортировка. Медленная, но удобная для обучения. На практике почти не применяется
func bubbleSort<T: Comparable>(_ array: inout [T]) {
let n = array.count
for i in 0..<n {
for j in 0..<n - i - 1 {
if array[j] > array[j + 1] {
array.swapAt(j, j + 1)
}
}
}
}
// Пример
var unsorted = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(&unsorted)
print(unsorted)4. Быстрая сортировка.
Один из самых шустрых алгоритмов, применяют для сортировки больших массивов данных
func quickSort<T: Comparable>(_ array: [T]) -> [T] {
guard array.count > 1 else { return array }
let pivot = array[array.count / 2]
let less = array.filter { $0 < pivot }
let equal = array.filter { $0 == pivot }
let greater = array.filter { $0 > pivot }
return quickSort(less) + equal + quickSort(greater)
}
// Пример
let array = [10, 80, 30, 90, 40, 50, 70]
let sorted = quickSort(array)
print(sorted)В реальных приложениях чаще используют готовые методы .sorted(), .firstIndex(of:) и структуры данных из стандартной библиотеки (Array, Set, Dictionary). Также в функциях используется <T: Equatable> и <T: Comparable>. Это дженерики в Swift где <T> универсальный тип-заполнитель, благодаря которому функция работает с любыми данными: Int, String, вашими моделями. Буква T это стандартное обозначение от слова "Type"
Please open Telegram to view this post
VIEW IN TELEGRAM
Ого. Кто бы мог подумать что приложения подозреваемые в слежке за пользователями продолжат ликвидировать
Саммери: Apple удалила из App Store сразу несколько приложений VK: Mail точка ru, VK Музыку, VK Видео, VK Мессенджер, Дзен, Одноклассники и другие сервисы. В VK заявили, что удаление произошло без предупреждения и объяснений назвав такое решение необоснованным и неприемлемым. Госдума же потребовала от Apple объяснить причины удаления. Московский суд уже впаял штраф полмиллиона соответствующему юрлицу за "неисполнение обязанностей по распространению информации в интернете". Apple заявила, что действует в рамках санкционных требований. Интересно, теперь начнётся давление на компанию и блокировки серверов обновлений Apple или чего нам теперь ждать?
Хотите квизы по программированию, стартапам, нейросетям или общим темам из it? 👍🏼- да, 👎🏼 - нет
🥰 @SnowBallCode
😍
Саммери: Apple удалила из App Store сразу несколько приложений VK: Mail точка ru, VK Музыку, VK Видео, VK Мессенджер, Дзен, Одноклассники и другие сервисы. В VK заявили, что удаление произошло без предупреждения и объяснений назвав такое решение необоснованным и неприемлемым. Госдума же потребовала от Apple объяснить причины удаления. Московский суд уже впаял штраф полмиллиона соответствующему юрлицу за "неисполнение обязанностей по распространению информации в интернете". Apple заявила, что действует в рамках санкционных требований. Интересно, теперь начнётся давление на компанию и блокировки серверов обновлений Apple или чего нам теперь ждать?
Хотите квизы по программированию, стартапам, нейросетям или общим темам из it? 👍🏼- да, 👎🏼 - нет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8 2👎1 1
На прошлой неделе вы проголосовали за LeetCode, вот две простые задачки на Swift с решениями
🐬 Дан массив целых чисел nums и целое число target. Нужно вернуть индексы двух разных элементов, сумма которых равна target
🐬 Определить, является ли целое число палиндромом (читается одинаково в прямом и обратном порядке)
Решение с объяснением в комментариях. Если понравились изи задачки напиши какие уровни опубликовать в следующий раз. Я их решил не сразу, понадобилось время🤔
🥰 @SnowBallCode
😍
// Пример
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
// Примеры
Input: x = 121 → true
Input: x = -121 → false
Input: x = 10 → false
Решение с объяснением в комментариях. Если понравились изи задачки напиши какие уровни опубликовать в следующий раз. Я их решил не сразу, понадобилось время
Please open Telegram to view this post
VIEW IN TELEGRAM
Выкатил обновлённую контент-фабрику подтянув проект до функционала монетизации!
Суть проста как жизнь автооюбителя в Москве: в первую очередь бот написан админом для админов. В нём можно создавать отложенные публикации, генерировать стилистически похожие тексты, на те, которые уже есть в вашем канале. Ещё можно создавать иллюстрации. Сейчас у сервиса включена монетизация только через stars, жду когда мне включат оплату картой за рубли на робокассе. Там какая-то проблема, пишут что бот не реагировал на старт, хотя я проверил на двух аккаунтах и всё работает. Бекенд крутится, вебхуки обновлены. Вообщем жду ответа
Кстати, у меня есть запас по экономике бота и я возможно поменяю mini модели использующиеся в нём на что-то более крутое, посмотрим
🥰 @SnowBallCode
😍
Суть проста как жизнь автооюбителя в Москве: в первую очередь бот написан админом для админов. В нём можно создавать отложенные публикации, генерировать стилистически похожие тексты, на те, которые уже есть в вашем канале. Ещё можно создавать иллюстрации. Сейчас у сервиса включена монетизация только через stars, жду когда мне включат оплату картой за рубли на робокассе. Там какая-то проблема, пишут что бот не реагировал на старт, хотя я проверил на двух аккаунтах и всё работает. Бекенд крутится, вебхуки обновлены. Вообщем жду ответа
Кстати, у меня есть запас по экономике бота и я возможно поменяю mini модели использующиеся в нём на что-то более крутое, посмотрим
Please open Telegram to view this post
VIEW IN TELEGRAM
OpenAI готовит первую физическую клавиатуру Codex Micro
Это компактный макропад который они сделали вместе с Work Louder специально для работы с их AI-кодинг помощником. Устройство получило механические клавиши джойстик и удобное сенсорное управление благодаря этому можно быстро выполнять основные действия при работе с агентами в Codex одним нажатием, вместо того чтобы каждый раз использовать комбинации клавиш. Будет стоить около 230 $
Думаю такая вещь упростит рутину для тех кому совсем лень работать в Codex с клавиатуры. Кнопка push to talk какбы намекает на это
🥰 @SnowBallCode
😍
Это компактный макропад который они сделали вместе с Work Louder специально для работы с их AI-кодинг помощником. Устройство получило механические клавиши джойстик и удобное сенсорное управление благодаря этому можно быстро выполнять основные действия при работе с агентами в Codex одним нажатием, вместо того чтобы каждый раз использовать комбинации клавиш. Будет стоить около 230 $
Думаю такая вещь упростит рутину для тех кому совсем лень работать в Codex с клавиатуры. Кнопка push to talk какбы намекает на это
Please open Telegram to view this post
VIEW IN TELEGRAM
🤮2 2
Ещё пара интересных задачек с литкода и решением на Swift
🐬 Valid Parentheses: дана строка s, содержащая только символы '(', ')', '{', '}', '[', ']'. Определи, является ли строка валидной: все открытые скобки должны закрываться в правильном порядке и соответствующими типами
Объяснение и решение:
• Используем стек: открывающие скобки кладём, закрывающие проверяем и убираем. • Если в какой-то момент не совпадает или стек не пуст в конце false
🐬 Best Time to Buy and Sell Stock: дан массив prices, где prices[i] это цена акции в i-й день. Нужно найти максимальную прибыль, которую можно получить, купив акцию в один день и продав в другой (можно не покупать вообще)
Объяснение и решение:
• Проходим по массиву один раз.
• Запоминаем самую низкую цену слева.
• На каждой итерации считаем потенциальную прибыль и сохраняем максимум
Эти две задачи отлично дополняют предыдущие (Two Sum + Palindrome Number). Они тоже решаются за 10–20 минут, но уже требуют чуть больше размышлений
🥰 @SnowBallCode
😍
// Примеры
Input: s = "()" → true
Input: s = "()[]{}" → true
Input: s = "(]" → false
Input: s = "([)]" → false
Input: s = "{[]}" → true
Объяснение и решение:
• Используем стек: открывающие скобки кладём, закрывающие проверяем и убираем. • Если в какой-то момент не совпадает или стек не пуст в конце false
class Solution {
func isValid(_ s: String) -> Bool {
var stack: [Character] = []
for char in s {
switch char {
case "(", "{", "[":
stack.append(char) // открывающую скобку кладём в стек
case ")":
if stack.last != "(" { return false }
stack.removeLast()
case "}":
if stack.last != "{" { return false }
stack.removeLast()
case "]":
if stack.last != "[" { return false }
stack.removeLast()
default:
return false
}
}
return stack.isEmpty // в конце стек должен быть пустым
}
}// Примеры
Input: prices = [7,1,5,3,6,4] → 5 (купить в 1, продать в 4)
Input: prices = [7,6,4,3,1] → 0
Input: prices = [2,4,1] → 2
Объяснение и решение:
• Проходим по массиву один раз.
• Запоминаем самую низкую цену слева.
• На каждой итерации считаем потенциальную прибыль и сохраняем максимум
class Solution {
func maxProfit(_ prices: [Int]) -> Int {
var minPrice = Int.max // самая низкая цена, которую мы видели
var maxProfit = 0
for price in prices {
if price < minPrice {
minPrice = price // обновляем минимальную цену
} else {
let profit = price - minPrice
if profit > maxProfit {
maxProfit = profit
}
}
}
return maxProfit
}
}Эти две задачи отлично дополняют предыдущие (Two Sum + Palindrome Number). Они тоже решаются за 10–20 минут, но уже требуют чуть больше размышлений
Please open Telegram to view this post
VIEW IN TELEGRAM
1 4 2🤡1
Литкод задачки с решением на Swift ч.3:
🐬 Climbing Stairs: тебе нужно подняться на вершину лестницы, у которой
Объяснение и решение: Это классическая задача на динамическое программирование (почти числа Фибоначчи)
🐬 Valid Anagram: даны две строки
Объяснение и решение: Самый простой и быстрый способ это посчитать частоту каждой буквы, тоесть когда частоты совпадают то это анаграмма
Эти две задачи тоже легко решаются примерно за 20 минут и отлично развивают мышление (динамика + хеш-таблица)
😍
🥰 @SnowBallCode
😍
n ступенек. Каждый раз ты можешь подняться на 1 или на 2 ступеньки. Сколько существует различных способов подняться наверх?// Примеры
Input: n = 2 → 2
// 1. 1 + 1
// 2. 2
Input: n = 3 → 3
// 1. 1 + 1 + 1
// 2. 1 + 2
// 3. 2 + 1
Input: n = 4 → 5
Объяснение и решение: Это классическая задача на динамическое программирование (почти числа Фибоначчи)
dp[i] = количество способов добраться до i-й ступеньки dp[i] = dp[i-1] + dp[i-2]class Solution {
func climbStairs(_ n: Int) -> Int {
if n <= 2 { return n }
var prev1 = 1 // способы добраться до 1-й ступеньки
var prev2 = 2 // способы добраться до 2-й ступеньки
for _ in 3...n {
let current = prev1 + prev2
prev1 = prev2
prev2 = current
}
return prev2
}
}s и t. Определи, является ли t анаграммой s (то есть можно ли переставить буквы в s так, чтобы получилась t)// Примеры
Input: s = "anagram", t = "nagaram" → true
Input: s = "rat", t = "car" → false
Input: s = "listen", t = "silent" → true
Объяснение и решение: Самый простой и быстрый способ это посчитать частоту каждой буквы, тоесть когда частоты совпадают то это анаграмма
class Solution {
func isAnagram(_ s: String, _ t: String) -> Bool {
guard s.count == t.count else { return false }
var counter = [Character: Int]()
for char in s {
counter[char, default: 0] += 1
}
for char in t {
guard let count = counter[char], count > 0 else { return false }
counter[char] = count - 1
}
return true
}
}Эти две задачи тоже легко решаются примерно за 20 минут и отлично развивают мышление (динамика + хеш-таблица)
Please open Telegram to view this post
VIEW IN TELEGRAM
1 2