Coder Social home page Coder Social logo

zxing.net.mobile's Introduction

ZXing.Net.Mobile

Join the chat at https://gitter.im/Redth/ZXing.Net.Mobile

ZXing.Net.Mobile Logo

ZXing.Net.Mobile is a C#/.NET library based on the open source Barcode Library: ZXing (Zebra Crossing), using the ZXing.Net Port. It works with Xamarin.iOS, Xamarin.Android, Tizen, and UWP. The goal of ZXing.Net.Mobile is to make scanning barcodes as effortless and painless as possible in your own applications.

Build Status NuGet NuGet

Usage

The simplest example of using ZXing.Net.Mobile looks something like this:

buttonScan.Click += (sender, e) => {

	#if __ANDROID__
	// Initialize the scanner first so it can track the current context
	MobileBarcodeScanner.Initialize (Application);
  	#endif
  	
	var scanner = new ZXing.Mobile.MobileBarcodeScanner();

	var result = await scanner.Scan();

	if (result != null)
		Console.WriteLine("Scanned Barcode: " + result.Text);
};

Xamarin Forms

For Xamarin Forms there is a bit more setup needed. You will need to initialize the library on each platform in your platform specific app project.

Android

On Android, in your main Activity's OnCreate (..) implementation, call:

Xamarin.Essentials.Platform.Init(Application);
ZXing.Net.Mobile.Forms.Android.Platform.Init();

ZXing.Net.Mobile for Xamarin.Forms also handles the new Android permission request model for you via Xamarin.Essentials, but you will need to add the following override implementation to your main Activity as well:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

The Camera permission should be automatically included for you in the AndroidManifest.xml however if you would like to use the Flashlight API you will still need to add the Flashlight permission yourself. You can do this by using the following assembly level attribute:

[assembly: UsesPermission (Android.Manifest.Permission.Flashlight)]
iOS

In your AppDelegate's FinishedLaunching (..) implementation, call:

ZXing.Net.Mobile.Forms.iOS.Platform.Init();
Windows Universal UWP

In your main Page's constructor, you should add:

ZXing.Net.Mobile.Forms.WindowsUniversal.Platform.Init();

If you notice that finishing scanning or pressing the back button is causing your Page to jump back further than you'd like, or if you're having trouble updating the UI of a Page after scanning is completed, you may need to set NavigationCacheMode="Enabled" within your Page's XAML <Page ... /> element.

macOS

In your AppDelegate's FinishedLaunching (..) implementation, call:

ZXing.Net.Mobile.Forms.MacOS.Platform.Init();

Features

  • Xamarin.iOS
  • Xamarin.Android
  • Tizen
  • UWP
  • Xamarin.Mac (rendering only, not scanning)
  • Simple API - Scan in as little as 2 lines of code!
  • Scanner as a View - UIView (iOS) / Fragment (Android) / Control (WP)

Custom Overlays

By default, ZXing.Net.Mobile provides a very simple overlay for your barcode scanning interface. This overlay consists of a horizontal red line centered in the scanning 'window' and semi-transparent borders on the top and bottom of the non-scanning area. You also have the opportunity to customize the top and bottom text that appears in this overlay.

If you want to customize the overlay, you must create your own View for each platform. You can customize your overlay like this:

var scanner = new ZXing.Mobile.MobileBarcodeScanner();
scanner.UseCustomOverlay = true;
scanner.CustomOverlay = myCustomOverlayInstance;
var result = await scanner.Scan();
//Handle result

Keep in mind that when using a Custom Overlay, you are responsible for the entire overlay (you cannot mix and match custom elements with the default overlay). The ZxingScanner instance has a CustomOverlay property, however on each platform this property is of a different type:

  • Xamarin.iOS => UIView
  • Xamarin.Android => View
  • UWP => UIElement

All of the platform samples have examples of custom overlays.

Barcode Formats

By default, all barcode formats are monitored while scanning. You can change which formats to check for by passing a ZxingScanningOptions instance into the StartScanning method:

//NOTE: On Android you should call the initialize method with an application instance
#if __ANDROID__
// Initialize the scanner first so it can track the current context
MobileBarcodeScanner.Initialize (Application);
#endif

var options = new ZXing.Mobile.MobileBarcodeScanningOptions();
options.PossibleFormats = new List<ZXing.BarcodeFormat>() { 
    ZXing.BarcodeFormat.Ean8, ZXing.BarcodeFormat.Ean13 
};

var scanner = new ZXing.Mobile.MobileBarcodeScanner(); 
var result = await scanner.Scan(options);
//Handle result

Samples

There is a sample for each platform including examples of how to use custom overlays.

Using the ZXingScanner View / Fragment / Control

On each platform, the ZXing scanner has been implemented as a reusable component (view, fragment, or control), and it is possible to use the reusable component directly without using the MobileBarcodeScanner class at all. On each platform, the instance of the view/fragment/control contains the necessary properties and methods required to control your scanner. By default, the default overlay is automatically used, unless you set the CustomOverlay property as well as the UseCustomOverlay property on the instance of the view/fragment/control. You can use methods such as ToggleTorch() or StopScanning() on the view/fragment/control, however you are responsible for calling StartScanning(...) with a callback and an instance of MobileBarcodeScanningOptions when you are ready for the view's scanning to begin. You are also responsible for stopping scanning if you want to cancel at any point.

The view/fragment/control classes for each platform are:

  • iOS: ZXingScannerView (UIView) - See ZXingScannerViewController.cs View Controller for an example of how to use this view
  • iOS: AVCaptureScannerView (UIView) - This is API equivalent to ZXingScannerView, but uses Apple's AVCaptureSession Metadata engine to scan the barcodes instead of ZXing.Net. See AVCaptureScannerViewController.cs View Controller for an example of how to use this view
  • Android: ZXingScannerFragment (Fragment) - See ZXingActivity.cs Activity for an example of how to use this fragment
  • UWP: ZXingScannerControl (UserControl) - See ScanPage.xaml Page for an example of how to use this Control

Using Apple's AVCaptureSession (iOS7 Built in) Barcode Scanning

In iOS7, Apple added some API's to allow for scanning of barcodes in an AVCaptureSession. The latest version of ZXing.Net.Mobile gives you the option of using this instead of the ZXing scanning engine. You can use the AVCaptureScannerView or the AVCaptureScannerViewController classes directly just the same as you would use their ZXing* equivalents. Or, in your MobileBarcodeScanner, there is now an overload to use the AV Capture Engine:

//Scan(MobileBarcodeScanningOptions options, bool useAVCaptureEngine)
scanner.Scan(options, true);

In the MobileBarcodeScanner, even if you specify to use the AVCaptureSession scanning, it will gracefully degrade to using ZXing if the device doesn't support this (eg: if it's not iOS7 or newer), or if you specify a barcode format in your scanning options which the AVCaptureSession does not support for detection. The AVCaptureSession can only decode the following barcodes:

  • Aztec
  • Code 128
  • Code 39
  • Code 93
  • EAN13
  • EAN8
  • PDF417
  • QR
  • UPC-E

Thanks

ZXing.Net.Mobile is a combination of a lot of peoples' work that I've put together (including my own). So naturally, I'd like to thank everyone who's helped out in any way. Those of you I know have helped I'm listing here, but anyone else that was involved, please let me know!

License

Apache ZXing.Net.Mobile Copyright 2012 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/).

ZXing.Net

ZXing.Net is released under the Apache 2.0 license. ZXing.Net can be found here: https://github.com/micjahn/ZXing.Net A copy of the Apache 2.0 license can be found here: https://github.com/micjahn/ZXing.Net/blob/master/COPYING

ZXing

ZXing is released under the Apache 2.0 license. ZXing can be found here: http://code.google.com/p/zxing/ A copy of the Apache 2.0 license can be found here: https://github.com/zxing/zxing/blob/master/LICENSE

System.Drawing

The System.Drawing classes included are from the mono source code which is property of Novell. Copyright notice is intact in source code files.

zxing.net.mobile's People

Contributors

akompanas avatar alexsorokoletov avatar alfredmyers avatar amersch avatar andreinitescu avatar bkaankose avatar brucewilkins avatar brunolins16 avatar bruzkovsky avatar cheesebaron avatar chrisntr avatar dansiegel avatar dmitryakulich avatar eekay avatar f1nzer avatar fredrikhaglund avatar gtbuchanan avatar hbrinj avatar knocte avatar mdkitzman avatar meyersurix avatar molmsteadbrock avatar mulhaus1 avatar patridge avatar paulvrugt avatar redth avatar sprodan avatar strifex avatar svrooij avatar woehrl01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zxing.net.mobile's Issues

Toogle torch not working

Hi,
It seems to be a problem when trying to turn on the flashlight.
It just doesn't work on a HTC Desire S I use to develop. I cant find where the problem is, the permission to use the flashligth is included in the manifest.
Any help?

Unable to use camera hardware, android 2.2

I've not been able to get any responds from the camera hardware, on both an HTC Desire and the emulated version of android 2.2.

I get the following error:
TypeRef ResolutionScope not yet handled (4) for .CameraInfo in image /data/data/BarcodeTest2.BarcodeTest2/files/.override/ZXing.Net.Mobile.dll

Code:

        buttonScan.Click += (sender, e) => {

            var scanner = new ZXing.Mobile.MobileBarcodeScanner(this);
            scanner.Scan().ContinueWith(t => {   
                if (t.Result != null)
                    Console.WriteLine("Scanned Barcode: " + t.Result.Text);
            });

        };;

FLAG_ACTIVITY_NEW_TASK required exception

Every time I call scanner.Scan() method I get back this exception and the result status is always "Faulted"

Full exception message:

Calling startActivity() from outside of an Activity  context requires the
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

Unable to scan QR from Android Tablet

Great work on fixing those issues the past few days!! ๐Ÿ‘

Now, I downloaded the current code and tried scanning with my Samsung Galaxy Tab 2 from my computer screen. I was able to scan EAN-8 and EAN-13 to reasonable satisfaction. However, I have not been able to scan any QR codes at all, no matter how I rotate my device.

I am using TryHarder and AutoRotate and specifying QR specifically as the type in options.

I am pointing my tablet to my computer screen, where I show a QR code, generated by http://www.terryburton.co.uk/barcodewriter/generator/

If the current code base is working for you when you try scanning a QR code from an Android Phone, I have two ideas what might be causing this:

  • The scanned image from the Tablet has a very large size so either ZXing.NET or ZXing.NET.Mobile only looks at parts of the image (?).
  • The camera on a Galaxy Tab 2 seems to stretch the image somewhat. When I rotate my device, I can see that the square QR code is higher when I rotate to landscape than in portrait. Now, if that is just the screen that is unproportional or if it is the camera, I don't know...

I will try to get my hands on an Android Phone instead this weekend so that I can try with a smaller device.

Can anyone confirm that they can scan QR codes on Android?

iOS - Default scan overlay opens on top of existing view temporarily

When I call .Scan() using the default overlay the scanner view slides over the top of my existing screen, and then after a second or two, the previous screen disappears and is replaced by the camera display. The behavior should be to blank the screen first, then display the overlay (and then when the camera is ready it can replace the black screen under the overlay).

Using:
PC: VS 2012 update 2
Mac: Xamarin Studio 4.0.8, Xamarin.iOS 6.2.5
iPhone: iOS 6.1.3

iOS TryInverted option does not work

We need to recognize the white-on-black data-matrix and QR codes, but the MobileBarcodeScanningOptions.TryInverted option that works perfectly on the Droid version does not work on iOS

zxing.monotouch references a missing Collections.cs file

The zxing.monotouch project references a file src/ZXing.Net/common/Collections.cs that doesn't exist in master. Removing the reference allows the project to build OK. Is the file really missing, or is it just an old reference that needs to be cleaned up?

Cannot be used with Xamarin.iOS (critical)

Using the latest version of Xamarin Studio 4.0.8 and Xamarin.iOS 6.2.6.6.

When building a project with ZXing component there is a build error:

Error MT2002: Failed to resolve "System.Boolean System.Type::op_Equality(System.Type,System.Type)" reference from "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" (MT2002) (TableServiceTerminal)

Unable to scan any barcodes

Using the sample application from head, I am unable to scan any barcodes. I have tried various stuff on my desk, as well as generating and printing barcodes from http://www.terryburton.co.uk/barcodewriter/generator/ in different sizes and in different lighting. I have tried generating EAN-8, EAN-14 and QR codes but the scanner does not react. It starts up the camera and everything but it never finds anything.

Could there be some small issue in the head version?

System.IndexOutOfRangeException in BitMatrix.cs

When I try to scan an EAN-8 barcode that I generated, I get a System.IndexOutOfRangeException on line 118 of BitMatrix.cs. I used this generator with the EAN-8 option to generate the barcode: http://www.terryburton.co.uk/barcodewriter/generator/

In case line 118 in BitMatrix.cs is different in your local code, it is the return line of this:

  public bool this[int x, int y]
  {
     get
     {
        int offset = y * rowSize + (x >> 5);
        return (((int)((uint)(bits[offset]) >> (x & 0x1f))) & 1) != 0;
     }
     set
     {
        if (value)
        {
           int offset = y * rowSize + (x >> 5);
           bits[offset] |= 1 << (x & 0x1f);
        }
     }
  }

I might add that I also tried scanning some random barcodes on stuff on my desk and I got the same issue.

I attached an image of the barcode I generated, that can be used to reproduce the error.

barcode

Camera not working on Android - Samsung Galaxy S3 running Jellybean

The code executes and the scanner activity is started but the camera is not working. All I see is a black / gray screen with a red flashing line.

As mentioned in the title this is with Samsung Galaxy S3 running Jellybean.

Attaching a screenshot:
screenshot_2013-05-17-16-07-48

Here is my code: (this is for a fragment, but I've tried both fragments and activities with the same result)

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    var view = inflater.Inflate(Resource.Layout.token, container, false);

    var scanTokenButton = view.FindViewById<Button>(Resource.Id.scan_token_button);
    scanTokenButton.Click += (sender, e) =>
    {
        var scanner = new ZXing.Mobile.MobileBarcodeScanner(Activity);
        scanner.Scan().ContinueWith(t =>
        {
            if (!t.IsFaulted && t.Result != null)
                Toast.MakeText(Activity, "Scanned Token: " + t.Result.Text, ToastLength.Long).Show();
        });
    };

    return view;
}

Not scanning in portrait mode on Galaxy S3

I am unable to scan in portrait mode on a Galaxy S3 using Android 4.1.1.

This is also confirmed on a Galaxy Nexus. Using Android 4.2.2 on Nexus.

Let me know if you need more information.

This is in reference to 1d barcode.

I also am unable to scan QR codes on either device using the sample app and my own.

Couldn't execute samples

I've tried the Android and Windows Phone samples, none of then worked on my devices.
Are you having problems with that?

Code 39 scanning not posible

Hi,

I' can't scan any code 39 Barcodes with the current sample (MonoDroid). It works fine with the previous Version.

Testdevice: Nexus 4

Cannot build the MonoForAndroid Sample in VISUAL STUDIO 2010

@Redth

i got 4 errors like this when i'm building the project. please help me to fix this problem sir.

Error 4 Argument 1: cannot convert from 'Android.Graphics.Bitmap' to 'Android.Graphics.Bitmap [c:\Program Files\Reference Assemblies\Microsoft\Framework\MonoAndroid\v2.2\Mono.Android.dll]' C:\Users\user\Documents\Visual Studio 2010\Projects\Light\Light\Activity1.cs 137 65 Light

and
Error 2 Cannot convert lambda expression to type 'Java.Lang.IRunnable' because it is not a delegate type C:\Users\user\Documents\Visual Studio 2010\Projects\Light\Light\Activity1.cs 137 27 Light

and

Error 3 The best overloaded method match for 'Android.Widget.ImageView.SetImageBitmap(Android.Graphics.Bitmap)' has some invalid arguments C:\Users\user\Documents\Visual Studio 2010\Projects\Light\Light\Activity1.cs 137 33 Light

and

Error 1 The type 'Android.Graphics.Bitmap' is defined in an assembly that is not referenced. You must add a reference to assembly 'Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065'. C:\Users\user\Documents\Visual Studio 2010\Projects\Light\Light\Activity1.cs 135 13 Light

Missing Xamarin source?

I have just downloaded the source code and am trying to compile ZXing.Net.Mobile.MonoTouch.sln. It is getting an error regarding some source code which is not in the github tree. I noticed you have recently moved the github project and am hoping some files were simply missed in the reload.

Compilation failed: 9 error(s), 0 warnings

error CS2001: Source file /Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/Bitmap.monotouch.cs' could not be found error CS2001: Source file/Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/Color.cs' could not be found
error CS2001: Source file /Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/ColorConverter.cs' could not be found error CS2001: Source file/Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/ColorTranslator.cs' could not be found
error CS2001: Source file /Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/KnownColor.cs' could not be found error CS2001: Source file/Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/KnownColors.cs' could not be found
error CS2001: Source file /Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/RGBLuminanceSource.monotouch.cs' could not be found error CS2001: Source file/Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/SystemColors.cs' could not be found
error CS2001: Source file `/Users/xxx/Projects/ZXing.Net.Mobile-master/src/ZXing.Net/xamarin/BitmapRenderer.monotouch.cs' could not be found

Use Front Camera on Android

While I realise that it would be a bit awkward to use, it would be nice if a device that only has a front camera (e.g Nexus 7) could still scan barcodes.

Perhaps an option could be added to choose which camera to use if more than one is available.

How to rotate the barcode scanner UI? Problem with TopText & BottomText as well.

May I know how to rotate the barcode scanner UI? I rotate my phone but the scanner is still portrait. i want it to rotate as my phone, rotate side ways = landscape. using the MonoForAndroid sample on Visual Studio 2012 :)

Also, I try to insert text into the scanner.TopText and scanner.BottomText, but nothing appear on the barcode scanner.

Once I build the application, I got 338 warning... but my app still can be run..

Torch button throws null after the first launch

Very strange problem here.
When first launching a scanner with a custom overlay, the flash button works fine. But, when returning to the main activity and trying the same thing, I get a null reference exception.
I'm using the sample code to debug on a Nexus 4. I've tried numerous fixes, creating a new scanner when the button is clicked, and more, but I can't seem to get it to work.
Screen Shot 2013-03-27 at 11 52 39 AM

UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at ZXing.Mobile.ZxingSurfaceView.Torch (bool) <IL 0x00031, 0x0011c>
at ZXing.Mobile.ZxingActivity.SetTorch (bool) <IL 0x00007, 0x0005b>
at ZXing.Mobile.ZxingActivity.m__2 (bool) <IL 0x00002, 0x0004f>
at (wrapper delegate-invoke) .invoke_void__this___bool (bool) <IL 0x00026, 0x0006b>
at ZXing.Mobile.ZxingActivity.RequestTorch (bool) <IL 0x0000e, 0x000bb>
at ZXing.Mobile.MobileBarcodeScanner.Torch (bool) <IL 0x00008, 0x00077>
at ZXing.Mobile.MobileBarcodeScanner.ToggleTorch () <IL 0x0000a, 0x0006b>
at ZxingSharp.MonoForAndroid.Sample.Activity1.m__4 (object,System.EventArgs) [0x00000] in /Users/devuser/Downloads/ZXing.Net.Mobile-master 2/samples/MonoForAndroid/MonoForAndroid.Sample/MainActivity.cs:58
at Android.Views.View/IOnClickListenerImplementor.OnClick (Android.Views.View) [0x0000b] in /Users/builder/data/lanes/monodroid-lion-bigsplash/0e0e51f9/source/monodroid/src/Mono.Android/platforms/android-12/src/generated/Android.Views.View.cs:950
at Android.Views.View/IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (intptr,intptr,intptr) [0x00010] in /Users/builder/data/lanes/monodroid-lion-bigsplash/0e0e51f9/source/monodroid/src/Mono.Android/platforms/android-12/src/generated/Android.Views.View.cs:921
at (wrapper dynamic-method) object.409939fd-4337-4c82-b9ba-db7300d6001e (intptr,intptr,intptr) <IL 0x00017, 0x00043>

MonoForAndroid - when scanner rotate, it doesn't use customized overlay.

When ever I rotate my phone (portrait to landscape), the scanner rotate will rotate(to landscape) but it doesn't display the customized overlay anymore. Even when I rotate back to portrait, the customized overlay is not display back. Any solution for this?

Also, option.AutoRotate = false; does not work, the scanner still auto rotate..

Embed QR Code scanner in subview

Hello,

I'm wandering if there is a way to embed the scanner view in a subview of a controller.
I tried hard to embed it, in order to show it with other components in the same view?

Thank you,
Simone

Generating barcode causes IndexOutOfBounds

I try to generate a barcode like this:

        var renderer = new BitmapRenderer();
        var matrix = new BitMatrix(600, 200);
        var options = new EncodingOptions {Margin = 0, Height = 200, Width = 600, PureBarcode = true};
        var bitmap = renderer.Render(matrix, BarcodeFormat.EAN_13, "0123456789012", options);
        BarCodeImageView.SetImageBitmap(bitmap);

Am I doing something wrong? I get an exception for IndexOutOfBounds in the Matrix index getter... here:

  public bool this[int x, int y]
  {
     get
     {
        int offset = y * rowSize + (x >> 5);
        return (((int)((uint)(bits[offset]) >> (x & 0x1f))) & 1) != 0;
     }

java.lang.NullPointerException when TopText and BottomText is not set

I started trying out your excellent library yesterday but was unable to get things to work. The application blew up spectacularly every time I started, without any notice on what might be wrong.

I tried your sample app and since that was working, I was able to find out that if you do not set "TopText" and "BottomText", you will get this crash.

It would probably be nice to fix this, not to scare off newcomers. I wrote my test-app based on your Xamarin talk and in that first sample, you do not set TopText and BottomText so other people might do what I did and left wondering...

Good luck with your awesome lib!

The imported type `System.Func<TResult>' is defined multiple times (CS0433)

Hey Jon,

I'm getting the following compilation error after adding references to ZXing.Net.Mobile.dll and zxing.monotouch.dll (the same assemblies that included with the sample project):

Error CS0433: The imported type `System.Func' is defined multiple times (CS0433)

The offending line is a public field of type Func<CLLocation>:

public Func<CLLocation> DefaultLocation;

I can reproduce the problem in your sample project by adding the same line of code, or something similar that uses a Func<TResult>, in HomeViewController.cs.

I see there is a System namespace and a variety of "Func" delegates defined in zxing.monotouch.dll (/net2.0/Func.cs). Are they clashing with delegates defined in the System assembly we reference directly from our iOS projects? Am I barking up the wrong tree?

Cheers,
Ben

iOS ZXingScannerView - Show (default) overlay in simulator mode

I have made some local modifications on the source in src/ZXing.Net.Mobile/MonoTouch/ZXingScannerView.cs:106 (Master-Branch 2013-06-21 08:51). Please see my comments [schmittch Mod 2013-08-07] below.

        /* ZXingScannerView.cs:105 ... */

        public void StartScanning(Action<ZXing.Result> callback, MobileBarcodeScanningOptions options)
        {
            Setup (this.Frame);

            this.options = options;
            this.resultCallback = callback;

            Console.WriteLine("StartScanning");

            this.InvokeOnMainThread(() => {
                if (!SetupCaptureSession())
                {
                    //Setup 'simulated' view:
                    Console.WriteLine("Capture Session FAILED");
                    var simView = new UIView(this.Frame);
                    simView.BackgroundColor = UIColor.LightGray;
                    this.AddSubview(simView);

#if true
/* [schmittch Mod 2013-08-07]: Display the scanner overlay, to get the cancel button in the simulator. */
                    stopped = true;
                    if (overlayView != null)
                    {
                        this.AddSubview (overlayView);
                        this.BringSubviewToFront (overlayView);

                        //overlayView.LayoutSubviews ();
                    }
#endif
                }
            });
        }

ZXing.Net.Mobile.MonoForAndroid - freeze

Hi
I have some problem in ZXing.Net.Mobile.MonoForAndroid

  • Camera freeze when scanned completed.
  • Then I press undo button on andriod device, App will stop alway.

please look my log

06-12 17:00:40.947 D/dalvikvm( 1895): GC_FOR_ALLOC freed 1128K, 16% free 7752K/9184K, paused 23ms, total 23ms
06-12 17:00:41.467 D/dalvikvm( 1895): GC_CONCURRENT freed 338K, 15% free 7867K/9184K, paused 3ms+1ms, total 18ms
06-12 17:00:41.797 D/ZXing.Mobile( 1895): Barcode Found: http://en.m.wikipedia.org
06-12 17:00:56.877 D/dalvikvm( 1895): GC_CONCURRENT freed 344K, 14% free 7907K/9180K, paused 28ms+4ms, total 72ms
06-12 17:01:31.637 D/dalvikvm( 1895): GC_CONCURRENT freed 51K, 11% free 8240K/9180K, paused 18ms+3ms, total 66ms
06-12 17:02:06.367 D/dalvikvm( 1895): GC_CONCURRENT freed 51K, 7% free 8572K/9180K, paused 17ms+5ms, total 70ms
06-12 17:02:08.827 D/AndroidRuntime( 1895): Shutting down VM
06-12 17:02:08.827 W/dalvikvm( 1895): threadid=1: thread exiting with uncaught exception (group=0x4132a930)
06-12 17:02:08.837 E/AndroidRuntime( 1895): FATAL EXCEPTION: main
06-12 17:02:08.837 E06-12 17:02:08.837 E/AndroidRuntime( 1895): java.lang.RuntimeException: Unable to pause activity {ProductionConfirm_andriod.ProductionConfirm_andriod/zxing.mobile.ZxingActivity}: android.support.v4.app.SuperNotCalledException: Fragment ZXingScannerFragment{41bc6fe0 #0 id=0x7f06000f ZXINGFRAGMENT} did not call through to super.onPause()
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3016)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2971)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2949)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread.access$800(ActivityThread.java:141)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1251)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.os.Handler.dispatchMessage(Handler.java:99)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.os.Looper.loop(Looper.java:137)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at java.lang.reflect.Method.invokeNative(Native Method)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at java.lang.reflect.Method.invoke(Method.java:511)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at dalvik.system.NativeStart.main(Native Method)
06-12 17:02:08.837 E/AndroidRuntime( 1895): Caused by: android.support.v4.app.SuperNotCalledException: Fragment ZXingScannerFragment{41bc6fe0 #0 id=0x7f06000f ZXINGFRAGMENT} did not call through to super.onPause()
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.support.v4.app.Fragment.performPause(Fragment.java:1623)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:957)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.support.v4.app.FragmentManagerImpl.dispatchPause(FragmentManager.java:1875)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.support.v4.app.FragmentActivity.onPause(FragmentActivity.java:401)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.Activity.performPause(Activity.java:5206)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1226)
06-12 17:02:08.837 E/AndroidRuntime( 1895): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3002)
06-12 17:02:08.837 E/AndroidRuntime( 1895): ... 12 more

Best Regard.

iOS ZXingScannerView - BarcodeReader createLuminanceSource-Delegate

I have made some local modifications on the source in src/ZXing.Net.Mobile/MonoTouch/ZXingScannerView.cs:255 (Master-Branch 2013-06-21 08:51). Please see my comments [schmittch Mod 2013-07-09] below.

            /* ZXingScannerView.cs:254 ... */

            var barcodeReader = new BarcodeReader(null, (img) =>     
            {
                var src = new RGBLuminanceSource(img); //, bmp.Width, bmp.Height);

#if false
/* [schmittch Mod 2013-07-09]: UIDeviceOrientation has more cases
 *                             (Unknown, Portrait, PortraitUpsideDown, LandscapeLeft, LandscapeRight, FaceUp, FaceDown)
 *                             than for the algorithem are interesting. ...
 */

                //Don't try and rotate properly if we're autorotating anyway
                if (options.AutoRotate.HasValue && options.AutoRotate.Value)
                    return src;

                switch (UIDevice.CurrentDevice.Orientation)
                {
                    case UIDeviceOrientation.Portrait:
                        return src.rotateCounterClockwise().rotateCounterClockwise().rotateCounterClockwise();
                    case UIDeviceOrientation.PortraitUpsideDown:
                        return src.rotateCounterClockwise().rotateCounterClockwise().rotateCounterClockwise();
                    case UIDeviceOrientation.LandscapeLeft:
                        return src;
                    case UIDeviceOrientation.LandscapeRight:
                        return src;
                }

                return src;
#else
/* [schmittch Mod 2013-07-09]: ... Therefore, UIInterfaceOrientation should be used to avoid undefined states. */

                //Don't try and rotate properly if we're autorotating anyway
                if (options.AutoRotate.HasValue && options.AutoRotate.Value)
                {
                    return src;
                }
                else
                {
                    switch (UIApplication.SharedApplication.StatusBarOrientation)
                    {
                        case UIInterfaceOrientation.Portrait:
                            return src.rotateCounterClockwise().rotateCounterClockwise().rotateCounterClockwise();
                        case UIInterfaceOrientation.PortraitUpsideDown:
                            return src.rotateCounterClockwise().rotateCounterClockwise().rotateCounterClockwise();
                        default:
                            return src;
                    }
                }
#endif

            }, null, null); //(p, w, h, f) => new RGBLuminanceSource(p, w, h, RGBLuminanceSource.BitmapFormat.Unknown));

            /* ... */

Otherwise, a great library!

Cannot build the MonoForAndroid Sample

First off, thanks for the great effort.

I could build and deploy the MonoTouch sample smoothly, but could not build or deploy the MonoForAndroid sample, I get the following compile error.

The type 'Android.Content.Context' is defined in an assembly that is not referenced. You must add a reference to assembly
The best overloaded method match for 'ZXing.Mobile.MobileBarcodeScanner.MobileBarcodeScanner(Android.Content.Context)' has some invalid arguments
cannot convert from 'ZxingSharp.MonoForAndroid.Sample.Activity1' to 'Android.Content.Context'
The type 'Android.Views.View' is defined in an assembly that is not referenced. You must add a reference to assembly 'Mono.Android, Version=0.0.0.0,

I can run many other MonoForAndroid Apps but not this sample, I can see that my Android SDK is installed fine, and the libraries references is correct. Is there any hard-coded reference that I need to change, or is there anything that I am missing ?

scanning problems with iPhone 5, 6.1.4

i have been writing an app using this package and on iphone 4S, 6.1.3
it works perfectly, but running on an iPhone 5, 6.1.4 i have two problems -
one is that the scan view is quite slow to present.

the other, more important problem is that if i cancel the scan, the
next attempt almost always fails to get the camera - i see the overlay but
the camera view is not beneath it.

Supplement relating to issue #47 ==> iOS ZXingScannerView - BarcodeReader createLuminanceSource-Delegate

Supplement relating to issue #47 ==> iOS ZXingScannerView - BarcodeReader createLuminanceSource-Delegate

After an Xamarin.iOS update, i get an UIKitThreadAccessException ("UIKit Consistency error: you are calling a UIKit method that can only be invoked from the UI thread.") when the method UIApplication.SharedApplication.StatusBarOrientation is called.

switch (UIApplication.SharedApplication.StatusBarOrientation)

So, you have to call it in the UI thread:

UIInterfaceOrientation tmpInterfaceOrientation = UIInterfaceOrientation.Portrait;
this.InvokeOnMainThread(delegate
{
    tmpInterfaceOrientation = UIApplication.SharedApplication.StatusBarOrientation;
});
switch (tmpInterfaceOrientation)

Scanner "scans" a barcode that's on the screen when the scanner starts

When you have a barcode or QR-code on your screen (a simple image of a barcode), and you start the scanner, it immediately returns with the code represented by that barcode, and the camera is locked on the screen.

Steps to reproduce:

  • Create a view (controller) with an image of a barcode in the view
  • Launch the scanner by calling .Scan()
  • Watch as it returns immediately with the code represented by the barcode in your original view
  • The scanner (camera) remains on the screen and can no longer be closed or used

Exception thrown in Android

I'm using the simplified example you provided but I'm receiving an exception on Android. The exception happens at the very beginning as soon as I click the button - I never see the camera screen or anything like that. This is running on Android Jellybean.

Here is my code:

        this.FindViewById<Button>(Resource.Id.scan_token_button).Click += delegate
        {
            var scanner = new ZXing.Mobile.MobileBarcodeScanner();
            scanner.Scan().ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    Log.Error("TEST", t.Exception.ToString());
                }
                else if (t.Result != null)
                {
                    Log.Error("TEST", t.Result.Text);
                }
            });
        };

Here is the exception:

04-26 12:21:46.994 E/Step It Up( 6577): System.AggregateException: ---> Android.Util.AndroidRuntimeException: Exception of type 'Android.Util.AndroidRuntimeException' was thrown.
04-26 12:21:46.994 E/Step It Up( 6577): at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] in :0
04-26 12:21:46.994 E/Step It Up( 6577): at Android.Content.ContextWrapper.StartActivity (Android.Content.Intent intent) [0x00000] in :0
04-26 12:21:46.994 E/Step It Up( 6577): at ZXing.Mobile.MobileBarcodeScanner+<>c__DisplayClass3.b__0 () [0x00000] in :0
04-26 12:21:46.994 E/Step It Up( 6577): at System.Threading.Tasks.TaskActionInvoker+FuncInvoke1[ZXing.Result].Invoke (System.Threading.Tasks.Task owner, System.Object state, System.Threading.Tasks.Task context) [0x00000] in <filename unknown>:0 04-26 12:21:46.994 E/Step It Up( 6577): at System.Threading.Tasks.Task.InnerInvoke () [0x00000] in <filename unknown>:0 04-26 12:21:46.994 E/Step It Up( 6577): at System.Threading.Tasks.Task.ThreadStart () [0x00000] in <filename unknown>:0 04-26 12:21:46.994 E/Step It Up( 6577): --- End of managed exception stack trace --- 04-26 12:21:46.994 E/Step It Up( 6577): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 04-26 12:21:46.994 E/Step It Up( 6577): at android.app.ContextImpl.startActivity(ContextImpl.java:944) 04-26 12:21:46.994 E/Step It Up( 6577): at android.app.ContextImpl.startActivity(ContextImpl.java:931) 04-26 12:21:46.994 E/Step It Up( 6577): at android.content.ContextWrapper.startActivity(ContextWrapper.java:284) 04-26 12:21:46.994 E/Step It Up( 6577): at dalvik.system.NativeStart.run(Native Method) 04-26 12:21:46.994 E/Step It Up( 6577): 04-26 12:21:46.994 E/Step It Up( 6577): --- End of inner exception stack trace --- 04-26 12:21:46.994 E/Step It Up( 6577): --> (Inner exception 0) Android.Util.AndroidRuntimeException: Exception of type 'Android.Util.AndroidRuntimeException' was thrown. 04-26 12:21:46.994 E/Step It Up( 6577): at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue[] parms) [0x00000] in <filename unknown>:0 04-26 12:21:46.994 E/Step It Up( 6577): at Android.Content.ContextWrapper.StartActivity (Android.Content.Intent intent) [0x00000] in <filename unknown>:0 04-26 12:21:46.994 E/Step It Up( 6577): at ZXing.Mobile.MobileBarcodeScanner+<>c__DisplayClass3.<Scan>b__0 () [0x00000] in <filename unknown>:0 04-26 12:21:46.994 E/Step It Up( 6577): at System.Threading.Tasks.TaskActionInvoker+FuncInvoke1[ZXing.Result].Invoke (System.Threading.Tasks.Task owner, System.Object state, System.Threading.Tasks.Task context) [0x00000] in :0
04-26 12:21:46.994 E/Step It Up( 6577): at System.Threading.Tasks.Task.InnerInvoke () [0x00000] in :0
04-26 12:21:46.994 E/Step It Up( 6577): at System.Threading.Tasks.Task.ThreadStart () [0x00000] in :0
04-26 12:21:46.994 E/Step It Up( 6577): --- End of managed exception stack trace ---
04-26 12:21:46.994 E/Step It Up( 6577): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
04-26 12:21:46.994 E/Step It Up( 6577): at android.app.ContextImpl.startActivity(ContextImpl.java:944)
04-26 12:21:46.994 E/Step It Up( 6577): at android.app.ContextImpl.startActivity(ContextImpl.java:931)
04-26 12:21:46.994 E/Step It Up( 6577): at android.content.ContextWrapper.startActivity(ContextWrapper.java:284)
04-26 12:21:46.994 E/Step It Up( 6577): at dalvik.system.NativeStart.run(Native Method)
04-26 12:21:46.994 E/Step It Up( 6577):
04-26 12:21:47.024 D/dalvikvm( 6684): GC_CONCURRENT freed 347K, 5% free 9337K/9828K, paused 2ms+2ms, total 28ms

DialogFragment.

When I use a DialogFragment (Monodroid), calling the ZXing component does not show the camera view.

Barcode Not Scanning for mono for android using c#

I have added zxingmonoandroid.dll,Zxing.Net.Mobile.dll and ZXing.Net.Mobile.MonoForAndroid.dll to my Mono for Android Project.
Tested On:
Android Version:2.3.6
Model Number GT-S5360

Iam able to see Scanner but it is unable to Scan Barcode Please help me :(

Sample project works but not simple example code

Hi, I've been playing with Zxing the whole day just trying to get a rudimentary scanner going, to no avail.

I've created a new android project in xamarin studio, I've copied the simple code:

var scanner = new ZXing.Mobile.MobileBarcodeScanner(this);
scanner.Scan().ContinueWith(t => {
if (t.Result != null)
Console.WriteLine("Scanned Barcode: " + t.Result.Text);
});

This is simple stuff.
A bit of research showed me that i had to include the "Mono.Android.Support.v4" library to let the project even build. My project builds, and everything is quite dandy right up until the moment I click the button that runs the scanner code, then I'm met with this ugly bugger:
[] TypeRef ResolutionScope not yet handled (83) for .CameraInfo in image /data/data/BarcodeScanTest2.BarcodeScanTest2/files/.override/ZXing.Net.Mobile.dll

I've googled around and found no answers, Copied all settings in the AndroidManifest.xml (not entirely sure what it does yet, but I have a feelingt hat it at least sets what my app is allowed to do on the phone).

I'm not sure what else I can try, I can't see any differences between my own project, and the sample project, except that my own project doesn't work.
If more info is needed I'll be happy to share it.

Also I got Zxing from the "get more components" thingy in Xamarin.

Xamarin version is up to date, the phone being emulated is android version 4.0.4 , and the ZXing.Net.Mobile is version 1.3.5

New iOS Scanning Engine

New iOS scanning engine that captures data right from the camera using an AVCaptureSession instead of how the old engine works, which is by taking a screenshot of the actual screen and analyzing that (it subclassed UIImagePickerViewController to get the live camera preview effect).

Does not recognize EAN 13

I have been trying for over two days to make it recognize EAN 13 barcodes with different devices. I started with an iPod touch (4th Gen) and when I saw that it does not recognize I tried with iPad 3 and then iPhone 4s under different light conditions (flash no flash etc.) I have a similar project with Objective-C and ZBar and I had no problem even with the terrible camera of the iPod touch. In my trials I got some scans but I had to move the device trying for the best shot for several minutes each time. Tried different options but no luck.

QR-Codes not working ?

I tested with the samples on Android and iPhone 4. Both are working very well with 1D Barcodes,
but not with QR-Codes.
Did i miss something to scan QR-Codes ?

Regards,
Alex

Issues with IOS simulator and Camera picker

Hello,

I just started iPhone / Monodroid development 3 days ago, so I may be breaking as much as repairing and I don't own a device to test. When I first tried to use this library after downloading Monotouch tools,I got Source type must be UIImagePickerControllerSourceTypeCamera

I did some debugging and moved some things around and the simulator runtime errors magically disappeared!

Inside ZxingCameraViewController.cs, I moved around some initializations and camera property assignments.

region Public methods

    public void Initialize()
    {
        this.InvokeOnMainThread (() => {
            if (IsSourceTypeAvailable (UIImagePickerControllerSourceType.Camera))
            {
                SourceType = UIImagePickerControllerSourceType.Camera;

                ShowsCameraControls = false;


                var tf = MonoTouch.CoreGraphics.CGAffineTransform.MakeScale (1.25f, 1.25f); //CGAffineTransformScale(_picker.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM);
                CameraViewTransform = tf;




            }
            else
                SourceType = UIImagePickerControllerSourceType.PhotoLibrary;

            AllowsEditing = true;

            WantsFullScreenLayout = true;
            UIView overlayView = null;

            if (Scanner.UseCustomOverlay && Scanner.CustomOverlay != null)
                overlayView = Scanner.CustomOverlay;

            SurfaceView = new ZxingSurfaceView (this, Scanner, this.ScanningOptions, overlayView);


    if (IsSourceTypeAvailable (UIImagePickerControllerSourceType.Camera))
            {

CameraOverlayView = SurfaceView;
}

        });
    }

I also added a null pointer check inside of ZxingSurfaceView.cs, which I believe speeds things up because it didn't bury the UI thread nearly as much.

                        try
                    {
                        var result = _multiFormatReader.decodeWithState(bitmap); //
                        //var result = _multiFormatReader.decodeWithState (bitmap);

                            //srcbitmap.Dispose();

                        if(result != null && result.Text!=null)
                        {
                            //BeepOrVibrate();
                            _parentViewController.BarCodeScanned(result);
                        }
                    }
                    catch (ReaderException)
                    {
                    }

(Sorry if dumb post, noob and didn't find any answers on the interwebz).

WP8: Crashes if app is tombstoned

If your application gets tombstoned whilst the qr code scanner is visible you get a crash in SimpleCameraReader.cs on line 147:
_reader = this.Options.BuildMultiFormatReader()

as Options is null.

The options either need to be serialized into the state, or you should navigate back I would imagine.

Backgrounding iOS app with viewer open causes crash or freeze

Hey Jon,

During QA testing of our iOS app, a tester noticed that "bad things" happen when the app is sent to the background (tap home button) and then restored to the foreground. In our app the outcome is not always the same, but typically results in a freeze that eventually causes the OS to kill the app.

I see similar behavior in your iOS sample app. It sometimes takes a few goes to get the app to crash, but it happens pretty consistently taking 1-4 tries. To see it happen, launch the sample app and tap "Scan with Default View". Once the viewer is open, press the home button and then restart the app from memory. Repeat until a freeze, and eventual crash, occurs.

Any ideas? Does it do the same for you, too?

Cheers,
Ben

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.