GithubHelp home page GithubHelp logo

text-vcard's Issues

export() destroys PHOTO

I use code like this:

use Text::vCard::Addressbook;

# Get card name
my $card_file1 = $ARGV[0];

# Create Addressbook
my $address_book1 = Text::vCard::Addressbook->new({
 'source_file' => $card_file1,
});

my $vcf_file = $address_book1->export();

open(DATEI, ">cardfile_new.vcf") || die "Datei nicht gefunden";
print DATEI $vcf_file;
close(DATEI);

The input vcf-file contains a PHOTO:
(This is only a small part of the file. If you need the full vcf for test, pse. mail.)

PHOTO;TYPE=PNG;ENCODING=b:iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAAA
3NCSVQICAjb4U/gAAAgAElEQVR4nJy8WZNl2VUmuNba05nu4GN4hEdGRkRGKlMppaqlQqIRqgJ
JtDCTTN0YFFaNtRlYFdZYW8MvqGLoMoMnnnjiRQ8M3WZYg6iixKBGFKQQJJISVEipVEbOGRmTh
4f79TudaU+rH/b1G56RShXd28I8rh8/95yz1/7W9K21D1rbKaWstVJK64PW+u6de7/6q796dHR
ERMfHJ/P5fDo5mU6niKiUarpjYwwRNU1TVVXTNAAYQhCkAABIICIAAABHBIDWWwDg07E+LoRIp
yEiEa2+wqwQVqcxA8Z0NUTsuoaIlBJSSm0UAADEGKOUejgcAkDf98y8WCxmJ7MQYHNjo+u6um7
zPCfURVEsFsuiKKSWxpj5fF5V1cbGRtM0g7K6dOnSsp7/3M/93L/6Vz+OiN5bANBae+/FL/3SL
...

The exported file looks like this and the photos are not imported by my OwnCloud:

VERSION:3.0
PHOTO;TYPE=b,png:
IHDRm��os��O� IDATx���Y�e�U&���ә��cx�GFFDF*S)���B��I�0�L�▒V��X�X[�/�b�2�'�x�E �fX���ĠF�$�TH�TF������;�iO����J���<�?���������Z�)���RJ������{����zttDD��'��|:9�N����j�cc 5MSUU�4▒B�H "G��[�ӱ>.�H�!"��¬V�1�t5D캆��RJm�▒��z8@��̼X,f'�sc�뺺n�<'�EQ,ˢ(��Ƙ�|^U���F�4���t�Ҳ�����ܿ�W?���[�Z{��/��/z���D�CB�Eu�ܹ�7o�u]�r�
�[k��Z.�&ι▒cUU�9����{_�I�!��!�޻▒c����▒ ��>�~�#Efh=
!�D��D`f$�1��B�▒�s�8wvv6���*.^�4▒�ڶ˲�P"b��m�fy���R�By���{�z��

Undefined value at line 208

Sorry, my Perl isn't good enough to fix this myself....

The full error text is 'Can't call method "family" on an undefined value at C:/Strawberry/perl/site/lib/vCard/AddressBook.pm line 208

This happens with 2 different address books downloaded from my webmail and a colleagues webmail. I have made a simple address book which works ok so it shouldn't be anything in my setup,
Ross

as_string() garbles wide characters at line breaks on Unix/OS X

When using multibyte UTF-8 characters in a NOTE node, characters are garbled/lost around the newline. I think specifying a newline as raw bytes (\x0D\x0A) is causing the problem. Shouldn't it just be \n an let perl figure it out based on the OS?

Example code:

#!/usr/bin/perl -w
use strict;
use utf8;
use v5.10;
use Text::vCard::Addressbook;
use diagnostics;

binmode STDOUT, ":utf8";

# create an address book
my $address_book = Text::vCard::Addressbook->new();

# single byte example
my $vcard = $address_book->add_vcard();
$vcard->version('3.0');
$vcard->FN('Test User');
$vcard->NOTE('12345678901234567890123456789012345678901234567890123456789012345678901234567890');
say $vcard->as_string();

# multi byte example
$vcard = $address_book->add_vcard();
$vcard->version('3.0');
$vcard->FN('Tèśt Ûšér');
$vcard->NOTE('①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳');
say $vcard->as_string();

open(my $out_fh, '>:encoding(UTF-8)', 'example.vcf') or die "Could not write file ($!)";
print $out_fh $address_book->export();

On my Mac, example.vcf comes out as:

BEGIN:VCARD
VERSION:3.0
FN:Test User
NOTE:1234567890123456789012345678901234567890123456789012345678901234567890
 1234567890
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:Tèśt Ûšér
NOTE:①②③④⑤⑥⑦⑧⑨⑩⑪��
 �⑬⑭⑮⑯⑰⑱⑲⑳①②③④
 ⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯�
 ��⑱⑲⑳①②③④⑤⑥⑦⑧��
 �⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳①
 ②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬�
 ��⑮⑯⑰⑱⑲⑳
END:VCARD

Organisation entries

I'm having some trouble with the module which I'm hoping you can help me with.

When I run the code below:

use vCard::AddressBook;
my $address_book = vCard::AddressBook->new();
$address_book->load_file('Fake.Card.vcf');
print $address_book->as_string();
print "\n";

I get this:
BEGIN:VCARD
VERSION:3.0
N:Card;Card;;;
FN:Fake Card
EMAIL;TYPE=internet:[email protected]
END:VCARD

The vCard is attached, but here's the contents.
BEGIN:VCARD
VERSION:3.0
FN:Fake Card
N:Card;Card;;;
EMAIL;TYPE=WORK:[email protected]
ORG:Fake Card Org
END:VCARD

As you can see from the card there should be an entry for the Organisation, but the output from the script doesn't show an organisation. I've also been trying to use the same module to write vCards, but I can't see how to write the organisation either.

Am I missing something, or is this a bug?

Many thanks in advance,

Andrew

processing sample file latin1.vcf results in error

Getting an error on a file latin1.vcf in the test directory of the directory.

pi@raspberrypi:~/vcard $ perl process.pl latin1.vcf
Can't call method "family" on an undefined value at /usr/local/share/perl/5.20.2/vCard/AddressBook.pm line 208.

where process.pl is:

use vCard::AddressBook;
my $fn = shift;
my $ab = vCard::AddressBook->new();
$ab->load_file($fn); # throws error here.  

Not sure if this is by design or by error.

1 instead of Type

Hi,

i wirte this simple script:
use Text::vCard::Addressbook;
my $addressbook = new Text::vCard::Addressbook();
my $vcard = $addressbook->add_vcard();
$vcard->version('3.0');
$vcard->fullname("My Name");
my $mail_node = $vcard->add_node({'node_type' => 'EMAIL'});
$mail_node->add_types('INTERNET');
$mail_node->value( "[email protected]" );
print $addressbook->export();

But my output is:
BEGIN:VCARD
VERSION:3.0
FN:My Name
EMAIL;1=internet:[email protected]
END:VCARD

There is 1 in EMAIL attribute nstead of TYPE=

Add big warning about probable data loss due to using this program

Please add a warning on vCard::AddressBook that by using this program one might lose 1/4 of their data or more.*

use strict;
use warnings FATAL => q{all};
use open qw/:std :encoding(utf8)/;
my $file = q(contacts.vcf);
open( my $fh, "<", $file ) or die;
my $I;
{ local $/; $I = <$fh>; }
printf "LENGTH IN:  %d\n", length $I;
use vCard::AddressBook;
my $address_book = vCard::AddressBook->new();
$address_book->load_string($I);
printf "LENGTH OUT: %d\n", length $address_book->as_string();

LENGTH IN: 36973
LENGTH OUT: 26285

*Based on tests with a typical contacts.vcf file produced via Google Contacts export.

The problem is anything unrecognized by the program is thrown away. Warn about that please.

In fact why not warn right away during execution that an unknown field has been encountered, and die, (if the user uses use warnings FATAL => q{all};).

See also #51.

Strange race condition on vcf file with empty lines after NOTE:

This is a very simple VCF file except for some reason it has empty lines after NOTE - perhaps from vCard export of outlook. This freezes with the simple script belo
Default_vcf.txt
w. Can you please fix this issue?

use Text::vCard::Addressbook;
$address_book = Text::vCard::Addressbook->new({'source_file' => "Default.vcf"});

Default.vcf (\r\n not shown)
BEGIN:VCARD
VERSION:3.0
PRODID:Z-Push
FN:Microsoft Cunningham
N:Cunningham;Microsoft;;Marcie CIV;
EMAIL;PREF=1:[email protected]
TEL;TYPE=HOME,VOICE:(901) 225-8634
NOTE:

UID:C191AD2C-8658-49B0-9929-995B4A62396E
X-RADICALE-NAME:C191AD2C-8658-49B0-9929-995B4A62396E.vcf
END:VCARD

Strange race condition on parsing a file with multiple line-feed and no carriage return

I noticed an interesting bug in Text::Vcard::Addressbook package. When a file is provided with empty line-feeds the package reaches what looks like aa race-condition infinitely stuck. Here is the sample vcf file and script to trigger this

vi (set list mode)

BEGIN:VCARD^M$
VERSION:3.0^M$
UID:62df1a1531-0de220c1b8-2ffd3b9cee^M$
FN:Extra-IP Billing^M$
EMAIL:[email protected]^M$
PRODID:-//Extra-IP.net//Contact Synchronizer//EN^M$
REV:2016-04-23T01:06:48Z^M$
NOTE: JDJDJDH^M$
$
$
$
$
N:Billing;Extra-IP;;;^M$
END:VCARD^M$

use Text::vCard::Addressbook;    
$address_book = Text::vCard::Addressbook->new({'source_file'  => "Default.vcf"});

vijay@socrates:~/vcard-bomb$ time perl test_vcard.pl
^C
real 0m3.466s
user 0m3.435s
sys 0m0.028s

vijay@socrates:~/vcard-bomb$

triggers a race condition. However if I do a simple override of the "new" subroutine the race condition does not exists

use Text::vCard::Addressbook;
*Text::vCard::Addressbook::new = sub {
my ( $proto, $conf ) = @_;
my $class = ref($proto) || $proto;
my $self = {};

bless( $self, $class );

# create some where to store out individual vCard objects
$self->{'cards'} = [];
$self->{encoding_in}  = $conf->{encoding_in}  || 'UTF-8';
$self->{encoding_out} = $conf->{encoding_out} || 'UTF-8';

# slurp in file contents
if ( defined $conf->{'source_file'} ) {

    croak "Unable to read file $conf->{'source_file'}\n"
        unless -r $conf->{'source_file'};

    my $filename = $conf->{source_file};
    my $file     = $self->_path($filename);
    $conf->{source_text} = $file->slurp( $self->_iomode_in );
}
$conf->{source_text} =~s /\n+/\n/sgi;
# Process the text if we have it.
$self->_process_text( $conf->{'source_text'} )
    if defined $conf->{'source_text'};

return $self;
};
$address_book = Text::vCard::Addressbook->new({'source_file'  => "Default.vcf"});

Updated line just removes repeated line-feed using "$conf->{source_text} =~s /\n+/\n/sgi;" statement

vijay@socrates:/vcard-bomb$ time perl test_vcard.pl
real 0m0.124s
user 0m0.115s
sys 0m0.008s
vijay@socrates:
/vcard-bomb$

Travis CI test fails on Perl <= 5.12

$ dzil smoke --release --author
The program 'dzil' is currently not installed. To run 'dzil' please ask your administrator to install the package 'libdist-zilla-perl'
The command "dzil smoke --release --author" exited with 127.

Wrong quoted printable decode

I have vcard containing long quoted-printable string with soft line break:

begin:vcard
fn;quoted-printable:=D0=98=D0=B3=D0=BE=D1=80=D1=8C =D0=A0=D1=83=D0=B4=D0=B5=D0=BD=D0=BA=D0=BE=
=D0=B2
version:2.1
end:vcard

FN should be decoded as: "игорь руденков", but output of text-vcard module is "игорь руденко=в".

Print input line number where error occurred

We see e.g.,

Data value had 16 elements expecting 1 or less. at /usr/share/perl5/Text/vCard.pm line 575.
Can't call method "family" on an undefined value at /usr/share/perl5/vCard/AddressBook.pm line 208.

Please also mention what line of the input the problem occurred on.
Reproduce with e.g.,

X-ANDROID-CUSTOM:vnd.android.cursor.item/nickname;1-6;;;;;;;;;;;;;;

(an arbitrary custom line, which by the way it would be great if the
man page gave an example of how to deal with. (I only see "If you wish to
extend this package (for custom attributes), overload ..."))

Say load_file() and load_string() add to, not overwrite, the address book

On vCard::AddressBook

   add_vcard()
       Creates a new vCard object and adds it to the address book.  Returns a
       vCard object.

   load_file($filename)
       Load and parse the contents of $filename.  Returns $self so the method
       can be chained.

   load_string($string)
       Load and parse the contents of $string.  This method assumes that
       $string is decoded (but not MIME decoded).  Returns $self so the method
       can be chained.

the latter two should also mention that they add to the address book
just like the first. Otherwise one would assume they overwrite.

vCard 2.1 exported from Palm OS is not parsed

I got an error
Wide character in subroutine entry at /usr/local/lib/perl5/site_perl/Text/vCard/Node.pm line 134.
while trying to read vCard file from Palm OS.

File encoding is cp-1251, my code is

my $address_book = vCard::AddressBook->new(encoding_in => 'cp1251', encoding_out => 'cp1251');
$address_book->load_file('./test.vcf');

Value in vCard has ENCODING=QUOTED-PRINTABLE but also contains characters in cp1251.

Currently vCard first converted from cp1251 to utf-8 and than QUOTED-PRINTABLE is decoded. to fix this problem QP should be decoded and than result string converted from cp1251 to utf-8.

I can share test vCard if need.

Error processing Gmail's contacts.vcf

hi,
i recently started to get this error while processing gmail contacts exported in vcf format:

Can't call method "family" on an undefined value at /usr/local/share/perl/5.26.1/vCard/AddressBook.pm line 208.

this code used to work for years, without problems. I believe something changed on google's side.

add more node types to vCard

or make the underlying Text::vCard object available through a public api.
I want to store the company name which seems to be the ORG type, TITLE, ROLE and NOTE would also be great to have.
Thanks!

Wrong order in export()

If using the export() function, the VERSION String is not directly after BEGIN:VCARD. The result is that Android for instance is not able to import them.

I'm on it. Thinking about hardcodeing it but make it changeable, as it is a mandantory field.

wrong format of fields in created vcard

Because vCard::AddressBook is missing some Nodes i am using Text::vCard::Addressbook.

I am creating address like so:
my $adhome = $vcard->add_node({'node_type'=>'ADR'});
$adhome->add_types('home');
$adhome->pobox('pobox');
$adhome->extended('extended');
$adhome->street('street');
$adhome->city('city');
$adhome->region('region');
$adhome->post_code('postcode');
$adhome->country('country');

It will create it in this scheme:
ADR;TYPE=home:extended;street;city;postcode;country

But when it is imported into Thunderbird the order is not correct because at least one ; char is missing between extended and street or between home and extended. Region is missing too between City and Postcode.

I think correct should be:
ADR;TYPE=home:;;street;city;;postcode;country

It would be also nice if it would always create the correct amount of ; chars if i.e. postcode is missing.

I found also that its not possible to create a unit within ORG.

Hardcoded "\x0D\x0A" fails for parsing vCard on Windows

I was attempt to help a user on SO: http://stackoverflow.com/q/22790520/1733163

However, I was unable to install this module and it's dependencies without errors on Strawberry Perl 5.18.2. In the end I forced install in order to debug the module.

I traced one issue to Line 315 of Text::vCard::Addressbook
my @lines = split "\x0D\x0A", $text;

The above will file to split a file on Windows because \x0D is stripped by perlio in :crlf mode. The only way to bypass this issue is to open import the file in binmode and pass it to he constructor as a string. The following straights:

use strict;
use warnings;
use utf8;

use vCard;

# create the object
my $vcard = vCard->new;

binmode(\*DATA);
my $string = do { local $/; <DATA> };

$vcard->load_string($string);

print $vcard->as_string();

__DATA__
BEGIN:VCARD
VERSION:3.0
N;LANGUAGE=de:name;first
FN:first name
ORG:company
TEL;TYPE=work:+49 (0000) 123456
ADR;TYPE=work:;;Strasse 1;Ortschaft arbeit;;56789;Deutschland
ADR;TYPE=home;PREF:;;Strasse 2;Ortschaft 4;;12345;Deutschland
EMAIL:[email protected]
URL:www.a.de
END:VCARD

Without binmode, the output is:

BEGIN VCARD without matching END at C:/strawberry/perl/site/lib/Text/vFile/asData.pm line 137,

With binmode, the output is:

BEGIN:VCARD
VERSION:4.0
END:VCARD

Obviously there are still more issues to resolve, but I at least wanted to submit this. If I have time to follow up with this issue, or even create a full patch, I will submit those later.

Doesn't handle vcards which use a data uri for binary data

Here is an example from the rfc:

PHOTO:data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhv
AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvb
ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlv
...

The fix will require changes to Text::vCard

export leaves off final \r\n

Text::vCard::Addressbook's export method should produce a trailing \r\n (when there are any vcards) but doesn't:

$ perl
use strict; use warnings; use Text::vCard::Addressbook; use Data::Dumper;
my $ab=Text::vCard::Addressbook->new();
$_->fullname("Foo"),$_->version("4.0") for $ab->add_vcard;
$_->fullname("Bar"),$_->version("4.0") for $ab->add_vcard;
print Data::Dumper->new([$ab->export])->Useqq(1)->Terse(1)->Dump
__END__

"BEGIN:VCARD\r\nVERSION:4.0\r\nFN:Foo\r\nEND:VCARD\r\nBEGIN:VCARD\r\nVERSION:4.0\r\nFN:Bar\r\nEND:VCARD"

The division between RFC2425 and RFC2426 makes it unclear to me whether this is valid there, but under the newer combined RFC6350 it is definitely not valid - every END:VCARD must be followed by \r\n.

NICKNAMEs eaten

Any NICKNAMEs in

my $address_book = vCard::AddressBook->new();
$address_book->load_string();

will not come back out of

print $address_book->as_string();

Can't process own output

For curiosity's sake, I decided to do
load_string($vcard->as_string);

Input:

BEGIN:VCARD
VERSION:3.0
FN:
N:;;;;
TEL;TYPE=WORK:02-25005591
ORG:中國廣播公司節目部
END:VCARD

First run becomes:

BEGIN:VCARD
VERSION:3.0
TEL;TYPE=work:02-25005591
END:VCARD

Second run becomes:

Can't call method "family" on an undefined value at /usr/share/perl5/vCard/AddressBook.pm line 208.

Test failures due to hash randomisation in perl 5.17.6

I've make several patches to V 2.12 of Text::vCard, so the tests now pass under Perl V 5.17.6.
I don't see how to add a file, so here's the diff:
diff -ur Text-vCard-2.12.bak/lib/Text/vCard/Node.pm Text-vCard-2.12/lib/Text/vCard/Node.pm
--- Text-vCard-2.12.bak/lib/Text/vCard/Node.pm 2012-12-20 13:40:59.000000000 +1100
+++ Text-vCard-2.12/lib/Text/vCard/Node.pm 2012-12-20 13:41:24.000000000 +1100
@@ -222,7 +222,7 @@
my $self = shift;
my @types;
return undef unless defined $self->{params};

Only in Text-vCard-2.12: MYMETA.json
Only in Text-vCard-2.12: MYMETA.yml
diff -ur Text-vCard-2.12.bak/t/05-export.t Text-vCard-2.12/t/05-export.t
--- Text-vCard-2.12.bak/t/05-export.t 2012-12-20 13:41:08.000000000 +1100
+++ Text-vCard-2.12/t/05-export.t 2012-12-20 13:41:35.000000000 +1100
@@ -21,7 +21,7 @@
'TEL;pref;home:020 666 6666',
'TEL;cell:0777 777 7777',
'item2.ADR;work:;;Test Road;Test City;;Test Postcode;Test Country',

  • 'item1.ADR;TYPE=pref,home:;;Pref Test Road;Pref Test City;;Pref Test Postcode;Pref Test Country',
  • 'item1.ADR;TYPE=home,pref:;;Pref Test Road;Pref Test City;;Pref Test Postcode;Pref Test Country',
    'VERSION:3.0',
    'FN:T-firstname T-surname',
    'END:VCARD',
    @@ -49,16 +49,16 @@
    'item1.X-ABADR;charset=utf-8:uk',
    'item2.X-ABADR;charset=utf-8:uk',
    'N;charset=utf-8:T-surname;T-first;;;',
  • 'TEL;charset=utf-8;TYPE=pref,home:020 666 6666',
  • 'TEL;charset=utf-8;TYPE=home,pref:020 666 6666',
    'TEL;charset=utf-8;TYPE=cell:0777 777 7777',
    'item2.ADR;charset=utf-8;TYPE=work:;;Test Road;Test City;;Test Postcode;Test Country',
  • 'item1.ADR;charset=utf-8;TYPE=pref,home:;;Pref Test Road;Pref Test City;;Pref Test Postcode;Pref Test Country',
  • 'item1.ADR;charset=utf-8;TYPE=home,pref:;;Pref Test Road;Pref Test City;;Pref Test Postcode;Pref Test Country',
    'VERSION;charset=utf-8:3.0',
    'FN;charset=utf-8:T-firstname T-surname',
    'END:VCARD',
    );
    @lines = split( "\r\n", $adbk->export() );
    -is_deeply( @lines, @DaTa,
    +is_deeply( [sort @lines], [sort @DaTa],
    'set_encoding() - returned data matched that expected' );

is_deeply(@lines,@DaTa,'export() - returned data matched that expected');

Also, I'll add a note in RT#81502.

Cheers
Ron Savage

Catch missing N better

One will get

Can't call method "family" on an undefined value at /usr/share/perl5/vCard/AddressBook.pm line 208, <> line 1686.
unless there is a "N" line.

(A workaround is:)

use vCard::AddressBook;
my $address_book = vCard::AddressBook->new();
my ( $I, $J );

while (<>) {
    s/$/\r/ unless /\r$/;
    $I .= $_;
    next unless /END:VCARD/;
    for ('FN', 'N') {
        if ( $I !~ /^$_\W/m ) {
            $I =~ s/^END:VCARD/$_:\r\n$&/m;
        }
    }
    $J .= $I;
    undef $I;
}
$address_book->load_string($J);

Actually a quick reading of the RFCs says that it is a FN, not an N that
is required. So above I inject both.

Anyways the program should say "missing N!", "N should be present." etc.

encoding_out is broken

Sample code

use utf8;
use vCard;

my $vcard = vCard->new(encoding_out => 'cp1251');

$vcard->version('3.0');
$vcard->full_name('Иван Иванов');
$vcard->given_names([qw/Иван/]);
$vcard->family_names([qw/Иванoв/]);

print $vcard->as_string;

Output of this code

Wide character in print at ./encoding_out.pl line 18.
BEGIN:VCARD
VERSION;CHARSET=cp1251:3.0
N;CHARSET=cp1251:Иванoв;Иван;;;
FN;CHARSET=cp1251:Иван Иванов
END:VCARD

With string in utf-8, but should be

BEGIN:VCARD
VERSION:3.0
N;CHARSET=cp1251:Иванoв;Иван;;;
FN;CHARSET=cp1251:Иван Иванов
END:VCARD

with strings in cp-1251

I personally don't need this feature (discovered by accident) and think that better to have feature removed than broken. But it may be useful for transferring data to legacy software.

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.