Skip to content

Instantly share code, notes, and snippets.

View junjizhi's full-sized avatar
🏠
Working from home

Junji Zhi junjizhi

🏠
Working from home
View GitHub Profile
@junjizhi
junjizhi / resize.bash
Created December 2, 2019 03:12
Resize all image files to half of the sizes
#!/usr/bin/env bash
set -euxo pipefail
# Usage:
# cd /path/to/images/directory
# bash resize.bash
shopt -s extglob
for filename in [^resize]*.?(jpg|jpeg|png); do
newFile="resized-$filename"
@junjizhi
junjizhi / find-sqlite-db-ios-simulator.bash
Created October 10, 2019 00:31
Find the sqlite file location of your iOS / Flutter app
# Returns all db files sorted by modified time. Usually the last one is your sqlite db file.
gfind /Users/<username>/Library/Developer/CoreSimulator/Devices/ -name "*.db" -printf "%T+\t%p\n" | sort
@junjizhi
junjizhi / main.dart
Created July 13, 2019 21:37
Flutter BLoC and Provider: A Shopping Cart Example - Hooking up Bloc with the app
// https://github.com/junjizhi/flutter-shopping-cart
import 'cart_bloc.dart';
import 'package:provider/provider.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<CartBloc>(
builder: (context) => CartBloc(),
child: MaterialApp(
@junjizhi
junjizhi / cart_bloc.dart
Created July 13, 2019 21:19
Flutter BLoC and Provider: A Shopping Cart Example - Cart Bloc
import 'package:flutter/material.dart';
class CartBloc with ChangeNotifier {
Map<int, int> _cart = {};
Map<int, int> get cart => _cart;
void addToCart(index) {
if (_cart.containsKey(index)) {
_cart[index] += 1;
@junjizhi
junjizhi / cart_page.dart
Last active July 13, 2019 21:18
Flutter BLoC and Provider: A Shopping Cart Example - Shopping Cart Page
// https://github.com/junjizhi/flutter-shopping-cart
class CartPage extends StatelessWidget {
CartPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
var bloc = Provider.of<CartBloc>(context);
var cart = bloc.cart;
return Scaffold(
@junjizhi
junjizhi / main_page.dart
Last active July 13, 2019 21:08
Flutter BLoC and Provider: A Shopping Cart Example
// This is a pseudo code to show the overall structure
// of a main page of a shopping cart app built with Flutter.
// For the complete app, please see https://github.com/junjizhi/flutter-shopping-cart
Widget build(BuildContext context) {
var bloc = Provider.of<CartBloc>(context);
int totalCount = 0;
if (bloc.cart.length > 0) {
totalCount = bloc.cart.values.reduce((a, b) => a + b);
}
@junjizhi
junjizhi / cupertino-clickable-card.dart
Created June 16, 2019 15:03
iOS style clickable card demo
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Clickable Card',
@junjizhi
junjizhi / Insert-Date.workflow
Created April 8, 2019 03:22
Applescript: Insert Date and A Horizontal Divider Line
on run {input, parameters}
set _Date to short date string of (current date)
set _DividerLine to "-----------------------------------------------------------------------------------------------"
set clipboard_contents to (the clipboard)
set the clipboard to _Date & return & _DividerLine & return
tell application "System Events" to keystroke "v" using command down
delay 0.2 -- needed because otherwise the next command can run before the paste occurs
set the clipboard to clipboard_contents
end run
@junjizhi
junjizhi / copy-word.el
Created February 1, 2019 17:46
Emacs: copy word without selection
(defun jz/copy-word
(&optional
arg
)
"Copy words at point into kill-ring.
Adapted from https://www.emacswiki.org/emacs/CopyWithoutSelection#toc4
The original implementation doesn't work if the cursor is at the beginning of current word. It copies one word back instead.
With this tweak, this function works in that case, but won't work if the current cursor is at the end of current word.
0xFe1Bab4f773e3159721d1bFce550cf1217a22e2E