# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule
# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule
# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule
| import com.cloudbees.hudson.plugins.folder.AbstractFolder | |
| import hudson.model.AbstractItem | |
| import groovy.transform.Field | |
| def jobName = "Android-Verify" // jobName can be set to a Job or a Folder. If a folder, it will clean all jobs in that folder | |
| //jobName should be full job name from root if mutliple levels down(for example "Folder1/Folder2/Job") | |
| def resetBuildNumber = false // If this is true, the build number will be set back to 1 | |
| @Field def dryRun = false // If this is true, the job will run without deletion. | |
| @Field def cleanedJobsTotal = 0 | |
| @Field def keepDays = 0 // Days to keep. |
| package com.besimplify.android.test.ui.login; | |
| import android.os.AsyncTask; | |
| import android.os.Bundle; | |
| import android.support.v7.app.AppCompatActivity; | |
| import android.text.Editable; | |
| import android.text.TextWatcher; | |
| import android.util.Patterns; | |
| import android.view.KeyEvent; | |
| import android.view.View; |
| def propertiesFile = new File(rootDir, "local.properties") | |
| if (propertiesFile.exists()) { | |
| def properties = new Properties() | |
| properties.load(propertiesFile.newDataInputStream()) | |
| if (properties.containsKey("gradleScripts.dir")) { | |
| ext.gradleScriptsDir = properties.getProperty("gradleScripts.dir") | |
| } else { | |
| throw new IllegalArgumentException("ERROR: Gradle Scripts location not found. " + | |
| "Define location with gradleScripts.dir in the local.properties file") | |
| } |
- Proxyman https://proxyman.io
- Toggl
- Monosnap https://apps.apple.com/us/app/monosnap-screenshot-editor/id540348655?mt=12 chụp màn hình và highlight trên mackbook.
- https://whimsical.com/signup for flow chart.
- Spectacle for split windows.
- GitUP or GitFork
- Sequelpro (my sql)
- Robo3T (mongo db)
| typealias Next<A, R> = (param: A) -> R | |
| typealias Middleware<A, R> = (param: A, next: Next<A, R>) -> R | |
| private class NextImpl<A, R>( | |
| private val middleware: Middleware<A, R>, | |
| private val next: Next<A, R> | |
| ) : Next<A, R> { | |
| override fun invoke(param: A): R { |
Khi đối diện với một thảm kịch tang thương hay một tai họa hiểm nghèo, ai mà không hướng lời van xin về một Đấng Tối Cao? Ai mà không cầu nguyện khi bị vây hãm với thần chết, với bệnh hiểm, với những huyền bí ngoài sự hiểu biết của con người? Cái trực giác sâu kín này đã đến từ đâu, mà mỗi con người hay thú vật đều phải dùng đến trong những giờ phút hiểm nguy?
Mắt chúng ta sẽ tự động chớp khi có một bàn tay đưa ngang. Chân cẳng chúng ta sẽ tự động giật khi có ai gõ vào đầu gối. Đe dọa một người nào bằng cái “Hù” bất chợt, miệng hắn sẽ tự động nói “Trời ơi”. Cái trực giác tự động này, từ đâu tới?
Dù tôi không phải là một con chiên hay một tín đồ rất ngoan đạo, tôi cũng nhận hiểu cái huyền nhiệm cao cả này của thiên nhiên. Tất cả mọi sinh vật trên trái đất này, kể cả con người, đều chia chung các trực giác về sự cầu nguyện.
Và lời cầu nguyện chỉ là một van xin lớn tiếng hướng về một Đấng Tối Cao. Khi thiên nhiên đã ban cho con lừa, con chim, con người khả năng và trực giác để cất cao lời van x
| @file:Suppress("BlockingMethodInNonBlockingContext") | |
| package features.file.download | |
| import android.content.Context | |
| import androidx.hilt.Assisted | |
| import androidx.hilt.work.WorkerInject | |
| import androidx.lifecycle.Observer | |
| import androidx.work.Constraints | |
| import androidx.work.CoroutineWorker |
| /** | |
| * Source: https://medium.com/androiddevelopers/suspending-over-views-19de9ebd7020 | |
| */ | |
| suspend fun Animator.awaitEnd() = suspendCancellableCoroutine<Unit> { cont -> | |
| // Add an invokeOnCancellation listener. If the coroutine is | |
| // cancelled, cancel the animation too that will notify | |
| // listener's onAnimationCancel() function | |
| cont.invokeOnCancellation { cancel() } | |
| addListener(object : AnimatorListenerAdapter() { |
| /* | |
| Given an array of integers, find the first repeating element in it. | |
| We need to find the element that occurs more than once and whose index of first occurrence is smallest. | |
| Example 1: | |
| - Input: arr = {10, 5, 3, 4, 3, 5, 6} | |
| - Output: 5 | |
| Example 2: | |
| - Input: arr = {6, 10, 5, 4, 9, 120, 4, 6, 10} |