cs-interview-questions | Personal Solutions to Interview Questions | Learning library
kandi X-RAY | cs-interview-questions Summary
Support
Quality
Security
License
Reuse
- Command - line parser
- Test program
- Main function for testing
- Main method for testing purposes
- Main method for testing only
- Main method for testing
- Utility method for debugging
- Main entry point
- Main method for testing
- Get the sum bit of two strings
- Returns an array of integers sorted by frequency
- Main method to search for a string
- Return the first 3 characters of the given string
- Returns the most common word in a sentence
- Return average of all nodes in the tree
- Gets the smallest K sorted k numbers
- Find the minimum value in an array
- Creates a linked list of all nodes in the given subtree
- Add string to string
- Merges two words
- Evaluate a rpn expression
- Returns the k weakest rows of a matrix
- Compute the sum of two strings
- Returns the sum of the given numbers
- Prints the binary representation of the input
- Calculates the sum of the given number of doubles
- Computes the morse representation of the given words
- Convert a string to an integer
cs-interview-questions Key Features
cs-interview-questions Examples and Code Snippets
Trending Discussions on Learning
Trending Discussions on Learning
QUESTION
I have been trying to learn about functional programming, but I still struggle with thinking like a functional programmer. One such hangup is how one would implement index-heavy operations which rely strongly on loops/order-of-execution.
For example, consider the following Java code:
public class Main {
public static void main(String[] args) {
List nums = Arrays.asList(1,2,3,4,5,6,7,8,9);
System.out.println("Nums:\t"+ nums);
System.out.println("Prefix:\t"+prefixList(nums));
}
private static List prefixList(List nums){
List prefix = new ArrayList<>(nums);
for(int i = 1; i < prefix.size(); ++i)
prefix.set(i, prefix.get(i) + prefix.get(i-1));
return prefix;
}
}
/*
System.out:
Nums: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Prefix: [1, 3, 6, 10, 15, 21, 28, 36, 45]
*/
Here, in the prefixList
function, the nums list is first cloned, but then there is the iterative operation performed on it, where the value on index i relies on index i-1 (i.e. order of execution is required). Then this value is returned.
What would this look like in a functional language (Haskell, Lisp, etc.)? I have been learning about monads and think they may be relevant here, but my understanding is still not great.
ANSWER
Answered 2022-Mar-07 at 21:17This is not an index-heavy operation, in fact you can do this with a one-liner with scanl1 :: (a -> a -> a) -> [a] -> [a]
:
prefixList = scanl1 (+)
indeed, for the list of Nums
, we get:
Prelude> prefixList [1 .. 9]
[1,3,6,10,15,21,28,36,45]
scanl1
takes the first item of the original list as initial value for the accumulator, and yields that. Then each time it takes the accumulator and the next item of the given list, and sums these up as new accumulator, and yields the new accumulator value.
Often one does not need indexing, but enumerating over the list is sufficient. Imperative programming languages often work with for
loops with indexes, but in many cases these can be replaced by foreach
loops that thus do not take the index into account. In Haskell this also often helps to make algorithms more lazy.
If you really need random access lookups, you can work with data structures such as defined in the array
and vector
packages.
QUESTION
system:Mac OS software:AnyLogic 8 Personal Learning Edition 8.7.6 language: Java
When I run my model, the console print this info:
Warning: the fonts "Times" and "Times" are not available for the Java logical font "Serif", which may have unexpected appearance or behavior. Re-enable the "Times" font to remove this warning.
ANSWER
Answered 2021-Aug-01 at 11:11We also recently had this issue on a mac running the latest public beta of Monterey.
For some reason the Times font was no longer installed or active on the Mac.
You can check in FontBook
You can simply reinstall it
I struggled to find a source online - her is one suggestion - https://www.freebestfonts.com/timr45w-font
QUESTION
Im attempting to find model performance metrics (F1 score, accuracy, recall) following this guide https://machinelearningmastery.com/how-to-calculate-precision-recall-f1-and-more-for-deep-learning-models/
This exact code was working a few months ago but now returning all sorts of errors, very confusing since i havent changed one character of this code. Maybe a package update has changed things?
I fit the sequential model with model.fit, then used model.evaluate to find test accuracy. Now i am attempting to use model.predict_classes to make class predictions (model is a multi-class classifier). Code shown below:
model = Sequential()
model.add(Dense(24, input_dim=13, activation='relu'))
model.add(Dense(18, activation='relu'))
model.add(Dense(6, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
-
history = model.fit(X_train, y_train, batch_size = 256, epochs = 10, verbose = 2, validation_split = 0.2)
-
score, acc = model.evaluate(X_test, y_test,verbose=2, batch_size= 256)
print('test accuracy:', acc)
-
yhat_classes = model.predict_classes(X_test)
last line returns error "AttributeError: 'Sequential' object has no attribute 'predict_classes'"
This exact code was working not long ago so struggling a bit, thanks for any help
ANSWER
Answered 2021-Aug-19 at 03:49This function were removed in TensorFlow version 2.6. According to the keras in rstudio reference
update to
predict_x=model.predict(X_test)
classes_x=np.argmax(predict_x,axis=1)
Or use TensorFlow 2.5 or later.
If you are using TensorFlow version 2.5, you will receive the following warning:
tensorflow\python\keras\engine\sequential.py:455: UserWarning:
model.predict_classes()
is deprecated and will be removed after 2021-01-01. Please use instead:*np.argmax(model.predict(x), axis=-1)
, if your model does multi-class classification (e.g. if it uses asoftmax
last-layer activation).*(model.predict(x) > 0.5).astype("int32")
, if your model does binary classification (e.g. if it uses asigmoid
last-layer activation).
QUESTION
I started learning about discord.js but now I am facing this issue. I tried some googling but couldn't manage to fix it.
const Discord = require('discord.js');
// const Discord = require('discord.js');
// using Intents class
const client = new Discord.Client();
client.on('message', (msg) => {
// Send back a reply when the specific command has been written by a user.
if (msg.content === '!hello') {
msg.reply('Hello World!');
}
});
client.login('my_token');
ANSWER
Answered 2021-Aug-07 at 16:34You need to specify the events which you want your bot to receive using gateway intents.
Instead of
const client = new Discord.Client();
Use
const client = new Discord.Client({ intents: [Enter intents here] })
For example
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] })
Here's another useful link: https://discord.com/developers/docs/topics/gateway
QUESTION
I got this error when learning Next.js, using npx create-next-app
command according to site documentation here https://nextjs.org/docs/api-reference/create-next-app. Everything works until I start the server,
Error stack:
$ npm run dev
> devto-clone@0.1.0 dev
> next dev
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
info - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at BulkUpdateDecorator.hashFactory (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:138971:18)
at BulkUpdateDecorator.update (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:138872:50)
at OriginalSource.updateHash (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack-sources3\index.js:1:10264)
at NormalModule._initBuildHash (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68468:17)
at handleParseResult (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68534:10)
at C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68628:4
at processResult (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68343:11)
at C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68407:5
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at BulkUpdateDecorator.hashFactory (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:138971:18)
at BulkUpdateDecorator.update (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:138872:50)
at OriginalSource.updateHash (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack-sources3\index.js:1:10264)
at NormalModule._initBuildHash (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68468:17)
at handleParseResult (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68534:10)
at C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68628:4
at processResult (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68343:11)
at C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68407:5
node:internal/crypto/hash:67
this[kHandle] = new _Hash(algorithm, xofLen);
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at BulkUpdateDecorator.hashFactory (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:138971:18)
at BulkUpdateDecorator.update (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:138872:50)
at OriginalSource.updateHash (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack-sources3\index.js:1:10264)
at NormalModule._initBuildHash (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68468:17)
at handleParseResult (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68534:10)
at C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68628:4
at processResult (C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68343:11)
at C:\xampp\htdocs\devto-clone\node_modules\next\dist\compiled\webpack\bundle5.js:68407:5 {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v17.0.1
package.json :
{
"name": "devto-clone",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"next": "11.1.2",
"react": "17.0.2",
"react-dom": "17.0.2"
},
"devDependencies": {
"eslint": "7.32.0",
"eslint-config-next": "11.1.2"
}
}
ANSWER
Answered 2021-Nov-24 at 21:38I found this solution https://github.com/webpack/webpack/issues/14532
if using bash just run
NODE_OPTIONS=--openssl-legacy-provider
before any commandadding
NODE_OPTIONS=--openssl-legacy-provider
to package.json
"scripts": {
"start": "SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
"build": "SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts build"
},
Edit
In my case, I'm using Nodejs 17.0.1 version and causing this error.
Firstly I'm using this command export NODE_OPTIONS=--openssl-legacy-provider
before any command in GitBash Windows to fix this issue.
But, I think it's not an efficient way, so what I do is :
- Uninstall Nodejs 17.0.1
- Install it again Nodejs 16.13.0 version
- I'm facing error another error when I start the server using "yarn serve" (another of my exiting Vuejs project), I don't remember what is this, but after I run "yarn" and "yarn serve", everything works now as I accept
QUESTION
please, I'm learning a VueJS 3 and I have probably begineer problem. I have warn in browser developer console like this one:
The Message is:
[Vue warn]: Extraneous non-props attributes (class) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.
I'm passing array of objects to the child Component. In my parent views/Home.vue
compoment I have this implemenation:
In child compoment components/ItemProperties.vue
I have this code:
{{ object.name }}:
{{ object.icon }}
{{ object.value }}
It doesn't matter if I have default()
function or not. Also doesn't matter if I have v-if
condition or not. If I have cycle in the Array, I got this warning
Data are in data.js
file. The part of file is here:
export const data = [
{
title: 'White shirt',
properties: [
{ name: 'Material', value: 'Cotton', type: 'string', icon: '' },
{ name: 'Size', value: 'M', type: 'string', icon: '' },
{ name: 'Count', value: 4, type: 'number', icon: '' },
{ name: 'Absorption', value: 4, type: 'rating', icon: '💧' },
{ name: 'Rating', value: 2, type: 'rating', icon: '⭐️' },
{ name: 'Confort', value: 2, type: 'rating', icon: '🛏' },
{ name: 'Sleeves', value: 'Short', type: 'string', icon: '' },
{ name: 'Color', value: 'White', type: 'string', icon: '' },
],
},
]
PS: Application works but I'm afraid about that warning. What can I do please like right way?
I will be glad for any advice. Thank you very much.
ANSWER
Answered 2021-Aug-16 at 13:32The ItemProperties
component has multiple root nodes because it renders a list in the root with v-for
.
Based on the class name (infobox-item-properties
), I think you want the class to be applied to a container element, so a simple solution is to just add that element (e.g., a div
) in your component at the root:
// ItemProperties.vue
...
QUESTION
I am trying to use tailwindCSS in a ReactJS app
These are the scripts commands in package.json
file
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
"eject": "react-scripts eject"
}
This is my craco.config.js
module.exports = {
style: {
postcss: {
plugins: [
require('tailwindcss'),
require('autoprefixer'),
],
},
},
}
When I am used npm run start
command, I am facing this error
TypeError: match.loader.options.plugins is not a function
at extendsPostcss (C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\style\postcss.js:54:51)
at overrideLoader (C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\style\postcss.js:97:9)
at C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\style\postcss.js:118:13
at Array.forEach ()
at overridePostcss (C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\style\postcss.js:117:17)
at overrideStyle (C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\style\style.js:9:25)
at mergeWebpackConfig (C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\merge-webpack-config.js:77:30)
at overrideWebpackDev (C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\lib\features\webpack\override.js:11:36)
at C:\Development\Open Source\Learning Hub\react\node_modules\@craco\craco\scripts\start.js:27:5
Things that I have tried :
- Reinstall
node_modules
Got this error, when I tried to do that
$ npm i @craco/craco
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: first-react-app@0.1.0
npm ERR! Found: react-scripts@5.0.0
npm ERR! node_modules/react-scripts
npm ERR! react-scripts@"5.0.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react-scripts@"^4.0.0" from @craco/craco@6.4.3
npm ERR! node_modules/@craco/craco
npm ERR! @craco/craco@"*" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
ANSWER
Answered 2021-Dec-18 at 22:00It looks like the Tailwind configuration from CRACO is not needed anymore.
https://github.com/facebook/create-react-app/issues/11771#issuecomment-997217680
Look at Tailwind 3.0 install steps: https://tailwindcss.com/docs/guides/create-react-app
QUESTION
I have a large dataset (~5 Mio rows) with results from a Machine Learning training. Now I want to check to see if the results hit the "target range" or not. Lets say this range contains all values between -0.25
and +0.25
. If it's inside this range, it's a Hit
, if it's below Low
and on the other side High
.
I now would create this three columns Hit, Low, High and calculate for each row which condition applies and put a 1
into this col, the other two would become 0
. After that I would group the values and sum them up. But I suspect there must be a better and faster way, such as calculate it directly while grouping. I'm happy for any idea.
import pandas as pd
df = pd.DataFrame({"Type":["RF", "RF", "RF", "MLP", "MLP", "MLP"], "Value":[-1.5,-0.1,1.7,0.2,-0.7,-0.6]})
+----+--------+---------+
| | Type | Value |
|----+--------+---------|
| 0 | RF | -1.5 | <- Low
| 1 | RF | -0.1 | <- Hit
| 2 | RF | 1.7 | <- High
| 3 | MLP | 0.2 | <- Hit
| 4 | MLP | -0.7 | <- Low
| 5 | MLP | -0.6 | <- Low
+----+--------+---------+
pd.DataFrame({"Type":["RF", "MLP"], "Low":[1,2], "Hit":[1,1], "High":[1,0]})
+----+--------+-------+-------+--------+
| | Type | Low | Hit | High |
|----+--------+-------+-------+--------|
| 0 | RF | 1 | 1 | 1 |
| 1 | MLP | 2 | 1 | 0 |
+----+--------+-------+-------+--------+
ANSWER
Answered 2022-Feb-10 at 16:13You could use cut
to define the groups and pivot_table
to reshape:
(df.assign(group=pd.cut(df['Value'],
[float('-inf'), -0.25, 0.25, float('inf')],
labels=['Low', 'Hit', 'High']))
.pivot_table(index='Type', columns='group', values='Value', aggfunc='count')
.reset_index()
.rename_axis(None, axis=1)
)
Or crosstab
:
(pd.crosstab(df['Type'],
pd.cut(df['Value'],
[float('-inf'), -0.25, 0.25, float('inf')],
labels=['Low', 'Hit', 'High'])
)
.reset_index().rename_axis(None, axis=1)
)
output:
Type Low Hit High
0 MLP 2 1 0
1 RF 1 1 1
QUESTION
#include
int& addOne(int& x)
{
x += 1;
return x;
}
int main()
{
int x {5};
addOne(x) = x;
std::cout << x << ' ' << addOne(x);
}
I'm currently in the middle of learning about lvalues and rvalues and was experimenting a bit, and made this which seems to be getting conflicting results. https://godbolt.org/z/KqsGz3Toe produces an out put of "5 6", as does Clion and Visual Studio, however https://www.onlinegdb.com/49mUC7x8U produces a result of "6 7"
I would think that because addOne
is calling x
as a reference, it would explicitly change the value of x
to 6 despite being called as an lvalue. What should the correct result be?
ANSWER
Answered 2022-Feb-02 at 00:42Since C++17 the order of evaluation is specified such that the operands of =
are evaluated right-to-left and those of <<
are evaluated left-to-right, matching the associativity of these operators. (But this doesn't apply to all operators, e.g. +
and other arithmetic operators.)
So in
addOne(x) = x;
first the value of the right-hand side is evaluated, yielding 5
. Then the function addOne
is called and it doesn't matter what it does with x
since it returns a reference to it, to which the right-hand value 5
is assigned.
Formally, evaluating the right-hand side first means that we replace the lvalue x
by the (pr)value it holds (lvalue-to-rvalue conversion). Then we call addOne(x)
to modify the object that the lvalue x
refers to.
So, imagining temporary variables to hold the results of the individual evaluations, the line is equivalent to (except for extra copies introduced by the new variables, which don't matter in the case of int
):
int t = x;
int& y = addOne(x);
y = t; // same as x = t, because y will refer to x
Then in the line
std::cout << x << ' ' << addOne(x);
we first evaluate and output x
, resulting in 5
, and then call addOne
, resulting in 6
.
So the line is equivalent to (simplified, knowing that operator<<
will return std::cout
again):
int t1 = x;
std::cout << t1 << ' ';
int t2 = addOne(x);
std::cout << t2;
The output 5 6
is the only correct one since C++17.
Before C++17, the evaluation order of the two sides of the assignment operator was unsequenced.
Having a scalar modification unsequenced with a value computation on the same scalar (on the right-hand side of your assignment) causes undefined behavior normally.
But since you put the increment of x
into a function, an additional rule saying that the execution of a function body is merely indeterminately sequenced with other evaluations in the calling context saves this. It means that the line wont have undefined behavior anymore, but the order in which the evaluations of the two sides of the assignment happen could be either left-first or right-first.
This means we won't know whether x
is evaluated first and then addOne(x)
or the other way around.
Therefore after the line, x
may be 5
or 6
.
6
would be obtained if the evaluation happened equivalently to
int& y = addOne(x);
int t = x;
y = t;
Then in the line
std::cout << x << ' ' << addOne(x);
pre-C++17 the same issue applied. The evaluations of the arguments to <<
were indeterminately sequenced, rather than left-to-right and so addOne(x)
could be evaluated before the left-hand x
, i.e. in addition to the previous order, the evaluation could also be equivalent to
int t2 = addOne(x);
int t1 = x;
std::cout << t1 << ' ' << t2;
In this case x
is first incremented and then its new value is printed twice.
Therefore possible program output could be either of the following:
5 6
6 6
6 7
7 7
(Technically the int t2 = addOne(x)
are two evaluations: One call to addOne
returning a reference and then the lvalue-to-rvalue conversion. These could happen interleaved with the other evaluations, but this doesn't give any new program outputs.)
You can specify to use C++17 (or newer versions like C++20) with the -std=c++17
flag to the compiler if you are using GCC or Clang and /std:c++17
if you are using MSVC. Which standard version is chosen by-default depends on the compiler and compiler version.
QUESTION
I am new to flutter and recently tried to develop a test app for learning sake with latest version Flutter 2.5. By looking at some tutorial online, I have added flutter_native_splash: ^1.2.3
package for splash screen. And works fine.
However, when I launch app for the first time, it shows following debug message
W/FlutterActivityAndFragmentDelegate(18569): A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
After visiting the above link, I am not able to understand much what is supposed to be done.
Code in pubspec.yaml
flutter_native_splash:
color: "#FFFFFF"
color_dark: "#000000"
image: assets/images/splash_720.png
android: true
ios: true
android12: true
Also, compileSdkVersion and targetSdkVersion is set to 31 in build.gradle
Please help. Thanks in advance.
ANSWER
Answered 2022-Jan-19 at 05:24AndroidManifest.xml
file.
Previously, Android Flutter apps would either set
io.flutter.embedding.android.SplashScreenDrawable
in their application manifest, or implementprovideSplashScreen
within their Flutter Activity. This would be shown momentarily in between the time after the Android launch screen is shown and when Flutter has drawn the first frame. This is no longer needed and is deprecated – Flutter now automatically keeps the Android launch screen displayed until Flutter has drawn the first frame. Developers should instead remove the usage of these APIs. - source
As per the flutter 2.8.0 update, The newly created project doesn't have this warning.
They removed unused API from Androidmanifest.yml
but still have belove mentioned code.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install cs-interview-questions
You can use cs-interview-questions like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the cs-interview-questions component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .
Support
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesExplore Kits - Develop, implement, customize Projects, Custom Functions and Applications with kandi kits
Save this library and start creating your kit
Share this Page