Skip to content

Instantly share code, notes, and snippets.

View mfaani's full-sized avatar

Mohammad Faani mfaani

View GitHub Profile
@mfaani
mfaani / codeabe.swift
Last active December 19, 2022 15:42
A quick example of codeable based off of a Hackingwithswift tutorial
// https://www.hackingwithswift.com/articles/119/codable-cheat-sheet
import Foundation
struct Packet: Decodable {
var value: Int
var array: [Packet]?
}
enum Lett {
indirect case a(m: M)
@mfaani
mfaani / stdin_vs_stdout.md
Last active September 16, 2022 18:20
stdin vs stdout

Great video on stdin vs stdout: https://www.youtube.com/watch?v=OsErpB0-mWY

stdin

As a standard your input usually comes from the keyboard. Ex cat file.txt. <- here you're passing file.txt as a parameter.

However you can do cat < $file_name i.e. make the input to the cat command a variable.

Both cat file.txt & cat < file.txt achieve the same, but through different mechanics. < is passing something as an input.

I suppose it's because the cat command has abilities to handle file names as arguments and through stdin

@mfaani
mfaani / learning.md
Created May 15, 2021 23:08
Gatsby learning
  1. Learned how to search for files in VSC. Need to use cmmd+P
  2. The config.js is king
  3. For the config.js stuff to come to an affect, you need to do gatsby develop again.
  4. gatsby build doesn't work locally. Not sure what it does. ?????
  5. The location of media assets are under the static/media not sure why it's in there. For more see https://www.gatsbyjs.com/docs/how-to/images-and-media/static-folder/
@mfaani
mfaani / hasValidParenthesis.swift
Last active April 29, 2021 14:01
Valid Parentheses
class Solution {
var remaining : [String: Int] = ["(": 0, "[": 0, "{": 0]
func isValid(_ s: String) -> Bool {
let validChars = ["(", ")", "[", "]","{", "}"]
let opens = ["[", "(", "{"]
let closes = ["]", ")", "}"]
for c in s {
let c = String(c)
@mfaani
mfaani / removeKdigits
Created April 27, 2021 01:56
// Remove K Digits
class Solution {
func removeKdigits(_ num: String, _ k: Int) -> String {
var drops = k
var maxStack: [Character] = []
for digit in num {
// only if there is something bigger in the stack to drop...
while drops > 0 && !maxStack.isEmpty && maxStack.last! > digit {
maxStack.popLast()
drops -= 1
@mfaani
mfaani / original-proposal.md
Created January 19, 2021 06:00
original proposal written for privacy_details cocoapods contribution
  • Authors: @prohoney, @AliSoftware
  • Date: 1 Jan, 2021

Motivation

Starting from December 8, 2020, Apple has required new apps and app updates to include App privacy details on the App Store. App owners have to go through every pod and all its dependency's readmes or if nothing is revealed then reach out to pod creators to just figure out what information the pod collects. The current process is not transparent nor easy.

Proposal

@mfaani
mfaani / DispatchWorkItemCanceled
Created April 1, 2020 14:42
Related to https://stackoverflow.com/a/38372384/5175709 Trying to show setting `item` to `nil` doesn't seem to be necessary
import Foundation
class Foo {
func testDispatchItems() {
let queue = DispatchQueue.global()
var item: DispatchWorkItem?
item = DispatchWorkItem { [weak self] in
for i in 0 ... 10 {
import Foundation
//Cancel without setting `item` to `nil`
class Foo {
func testDispatchItems() {
let queue = DispatchQueue.global()
var item: DispatchWorkItem?
item = DispatchWorkItem { [weak self] in
// https://stackoverflow.com/questions/55446713/true-false-question-about-swift-subclass-superclass
class Person {
var age : Int?
func incrementAge() {
guard age != nil else {
age = 1
return
}
@mfaani
mfaani / closures.swift
Last active March 20, 2019 20:32
how to write weird closures :)
class C {
lazy var x: () -> Void = {
return { print("hi") }
}()
lazy var y: (Int) -> Void = { // `input in` shouldn't be written here!
return { input in
print(input)
}
}()