Skip to content

Instantly share code, notes, and snippets.

View ericlewis's full-sized avatar

Eric Lewis ericlewis

View GitHub Profile
@ericlewis
ericlewis / CodableAppStorage.swift
Last active February 2, 2024 07:19
Using Codable with AppStorage, the easy way!
import Foundation
import SwiftUI
// MARK: Demo
struct Example: RawRepresentable, Codable {
let id: UUID
}
// This is functionally the same as above, but we have a neater type without creating a new protocol.
import * as SecureStore from 'expo-secure-store';
import AsyncStorage from '@react-native-async-storage/async-storage';
class EphemeralSecureStore {
static prefix = "EphemeralSecureStore";
static getEphemeralKey(key) {
return `${this.prefix}_${key}`;
}
@ericlewis
ericlewis / .directions.md
Last active October 25, 2023 18:25
A conversational chatbot experience.

Prerequisites

  • API key for OpenAI.
  • API key for Picovoice
  • API key for ElevenLabs
  • mpg123 installed
  • node 18+

Directions

  • git clone https://gist.github.com/ericlewis/ccd3f0b7a17fcbe2473121a473082c8f
  • edit .env with your keys
@ericlewis
ericlewis / tinyotp.swift
Last active July 29, 2023 11:31
A tiny pure swift implementation of HOTP & TOTP
import Foundation
import CryptoKit
protocol PasswordProtocol {
var name: String {get}
var issuer: String? {get}
var image: URL? {get}
var generator: GeneratorProtocol {get}
}
@ericlewis
ericlewis / ContentView.swift
Last active May 10, 2023 13:11
Dynamic Island Progress Demo in SwiftUI. Demo here: https://twitter.com/ericlewis/status/1656283504747880451
import SwiftUI
let size: CGSize = {
return .init(width: 126.0, height: 36.9)
}()
let origin: CGPoint = {
return .init(x: UIScreen.main.bounds.midX - 0.3, y: 29.4)
}()
@ericlewis
ericlewis / WKChatGPT.swift
Created December 22, 2022 18:58
A way of using ChatGPT with SwiftUI
import SwiftUI
import WebKit
// MARK: Observable Object
public class Chat: NSObject, ObservableObject {
internal var webView: WKWebView
private var decoder: JSONDecoder = {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
@ericlewis
ericlewis / index.js
Last active June 29, 2022 06:07
Example of having Morgan Freeman explain what code is doing using OpenAI Codex DaVinci & Uberduck's style transfer APIs.
import { Configuration, OpenAIApi } from "openai";
import download from "download";
import ora from "ora";
import soundPlayer from "play-sound"
import prompts from "prompts";
// Get your own keys, nerd.
const kOpenAI = "YOUR_API_KEY";
const kUberDuck = "PRIVATE_KEY:PUBLIC_KEY";
import LinkPresentation
import Combine
extension LPMetadataProvider {
func startFetchingMetadataPublisher(for url: URL) -> AnyPublisher<LPLinkMetadata?, Error> {
Future<LPLinkMetadata?, Error> { completion in
self.startFetchingMetadata(for: url) { meta, error in
guard let error = error else {
return completion(.success(meta))
}
extension Published: Encodable where Value: Encodable {
public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
let value = _PublishedValueExtractor.shared.extractValue(from: self)
try container.encode(value)
}
}
fileprivate struct _PublishedValueExtractor {
static let shared = _PublishedValueExtractor()
import SwiftUI
import swiftui_betterpicker
struct GridPickerView: View {
enum Colors: CaseIterable {
case red
case blue
case green
case purple
case yellow