9 RNNを使ったテキスト生成
import os
[1] 2019-11-10 14:13:51 (4.01ms) python3 (4.01ms)
9.1 Setup
import tempfile
import time
import numpy as np
import tensorflow as tf
[2] 2019-11-10 14:13:51 (1.93s) python3 (1.93s)
9.1.1 Download the Shakespeare dataset
path_to_file = tf.keras.utils.get_file(
"shakespeare.txt",
"https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt",
)
[3] 2019-11-10 14:13:53 (33.0ms) python3 (1.96s)
9.1.2 Read the data
# Read, then decode for py2 compat.
text = open(path_to_file, "rb").read().decode(encoding="utf-8")
# length of text is the number of characters in it
print("Length of text: {} characters".format(len(text)))
[4] 2019-11-10 14:13:53 (12.0ms) python3 (1.97s)
Length of text: 1115394 characters
# Take a look at the first 250 characters in text
print(text[:250])
[5] 2019-11-10 14:13:53 (18.0ms) python3 (1.99s)
First Citizen:
Before we proceed any further, hear me speak.
All:
Speak, speak.

All:
Resolved. resolved.
First Citizen:
First, you know Caius Marcius is chief enemy to the people.
# The unique characters in the file
vocab = sorted(set(text))
print("{} unique characters".format(len(vocab)))
[6] 2019-11-10 14:13:53 (46.9ms) python3 (2.04s)
65 unique characters
9.2 Process the text
9.2.1 Vectorize the text
# Creating a mapping from unique characters to indices
char2idx = {u: i for i, u in enumerate(vocab)}
idx2char = np.array(vocab)
text_as_int = np.array([char2idx[c] for c in text])
[7] 2019-11-10 14:13:53 (185ms) python3 (2.22s)
9.2.2 Create training examples and targets
# The maximum length sentence we want for a single input in characters
seq_length = 100
examples_per_epoch = len(text) // (seq_length + 1)
# Create training examples / targets
char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int)
for i in char_dataset.take(5):
print(idx2char[i.numpy()])
[8] 2019-11-10 14:13:53 (1.39s) python3 (3.61s)
F
i
r
s
t
sequences = char_dataset.batch(seq_length + 1, drop_remainder=True)
for item in sequences.take(5):
print(repr("".join(idx2char[item.numpy()])))
[9] 2019-11-10 14:13:55 (31.2ms) python3 (3.64s)
'First Citizen:\nBefore we proceed any further, hear me speak.\n\nAll:\nSpeak, speak.\n\nFirst Citizen:\nYou '
'are all resolved rather to die than to famish?\n\nAll:\nResolved. resolved.\n\nFirst Citizen:\nFirst, you k'
"now Caius Marcius is chief enemy to the people.\n\nAll:\nWe know't, we know't.\n\nFirst Citizen:\nLet us ki"
"ll him, and we'll have corn at our own price.\nIs't a verdict?\n\nAll:\nNo more talking on't; let it be d"
'one: away, away!\n\nSecond Citizen:\nOne word, good citizens.\n\nFirst Citizen:\nWe are accounted poor citi'
def split_input_target(chunk):
input_text = chunk[:-1]
target_text = chunk[1:]
return input_text, target_text
dataset = sequences.map(split_input_target)
for input_example, target_example in dataset.take(1):
print("Input data: ", repr("".join(idx2char[input_example.numpy()])))
print("Target data:", repr("".join(idx2char[target_example.numpy()])))
[10] 2019-11-10 14:13:55 (166ms) python3 (3.81s)
Input data: 'First Citizen:\nBefore we proceed any further, hear me speak.\n\nAll:\nSpeak, speak.\n\nFirst Citizen:\nYou'
Target data: 'irst Citizen:\nBefore we proceed any further, hear me speak.\n\nAll:\nSpeak, speak.\n\nFirst Citizen:\nYou '
9.2.3 Create training batches
# Batch size
BATCH_SIZE = 64
# Buffer size to shuffle the dataset
# (TF data is designed to work with possibly infinite sequences,
# so it doesn't attempt to shuffle the entire sequence in memory. Instead,
# it maintains a buffer in which it shuffles elements).
BUFFER_SIZE = 10000
dataset = dataset.shuffle(BUFFER_SIZE).batch(BATCH_SIZE, drop_remainder=True)
dataset
[11] 2019-11-10 14:13:55 (15.6ms) python3 (3.82s)
<BatchDataset shapes: ((64, 100), (64, 100)), types: (tf.int32, tf.int32)>
9.3 Build The Model
# Length of the vocabulary in chars
vocab_size = len(vocab)
# The embedding dimension
embedding_dim = 256
# Number of RNN units
rnn_units = 1024
[12] 2019-11-10 14:13:55 (15.7ms) python3 (3.84s)
def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
model = tf.keras.Sequential(
[
tf.keras.layers.Embedding(
vocab_size, embedding_dim, batch_input_shape=[batch_size, None]
),
tf.keras.layers.GRU(
rnn_units,
return_sequences=True,
stateful=True,
recurrent_initializer="glorot_uniform",
),
tf.keras.layers.Dense(vocab_size),
]
)
return model
model = build_model(
vocab_size=len(vocab),
embedding_dim=embedding_dim,
rnn_units=rnn_units,
batch_size=BATCH_SIZE,
)
[13] 2019-11-10 14:13:55 (349ms) python3 (4.19s)
9.4 Try the model
for input_example_batch, target_example_batch in dataset.take(1):
example_batch_predictions = model(input_example_batch)
comment = "# (batch_size, sequence_length, vocab_size)"
print(example_batch_predictions.shape, comment)
[14] 2019-11-10 14:13:55 (2.42s) python3 (6.60s)
(64, 100, 65) # (batch_size, sequence_length, vocab_size)
model.summary()
[15] 2019-11-10 14:13:58 (27.9ms) python3 (6.63s)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (64, None, 256) 16640
_________________________________________________________________
gru (GRU) (64, None, 1024) 3938304
_________________________________________________________________
dense (Dense) (64, None, 65) 66625
=================================================================
Total params: 4,021,569
Trainable params: 4,021,569
Non-trainable params: 0
_________________________________________________________________
9.5 Train the model
9.5.1 Attach an optimizer, and a loss function
def loss(labels, logits):
return tf.keras.losses.sparse_categorical_crossentropy(
labels, logits, from_logits=True
)
example_batch_loss = loss(target_example_batch, example_batch_predictions)
print(
"Prediction shape: ",
example_batch_predictions.shape,
" # (batch_size, sequence_length, vocab_size)",
)
print("scalar_loss: ", example_batch_loss.numpy().mean())
[16] 2019-11-10 14:13:58 (19.2ms) python3 (6.65s)
Prediction shape: (64, 100, 65) # (batch_size, sequence_length, vocab_size)
scalar_loss: 4.1742816
model.compile(optimizer="adam", loss=loss)
[17] 2019-11-10 14:13:58 (25.1ms) python3 (6.68s)
9.5.2 Configure checkpoints
# Directory where the checkpoints will be saved
checkpoint_dir = tempfile.mkdtemp()
# Name of the checkpoint files
checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt_{epoch}")
checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(
filepath=checkpoint_prefix, save_weights_only=True
)
[18] 2019-11-10 14:13:58 (6.06ms) python3 (6.68s)
9.5.3 Execute the training
EPOCHS = 10
history = model.fit(dataset, epochs=EPOCHS, callbacks=[checkpoint_callback])
[19] 2019-11-10 14:13:58 (4min10s) python3 (4min17s)
Epoch 1/10
172/172 [==============================] - 24s 141ms/step - loss: 2.6709
Epoch 2/10
172/172 [==============================] - 23s 135ms/step - loss: 1.9486
Epoch 3/10
172/172 [==============================] - 24s 137ms/step - loss: 1.6814
Epoch 4/10
172/172 [==============================] - 25s 145ms/step - loss: 1.5361
Epoch 5/10
172/172 [==============================] - 25s 148ms/step - loss: 1.4494
Epoch 6/10
172/172 [==============================] - 26s 149ms/step - loss: 1.3900
Epoch 7/10
172/172 [==============================] - 26s 149ms/step - loss: 1.3450
Epoch 8/10
172/172 [==============================] - 26s 151ms/step - loss: 1.3061
Epoch 9/10
172/172 [==============================] - 26s 151ms/step - loss: 1.2722
Epoch 10/10
172/172 [==============================] - 26s 151ms/step - loss: 1.2382
9.6 Generate text
9.6.1 Restore the latest checkpoint
model = build_model(vocab_size, embedding_dim, rnn_units, batch_size=1)
model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
model.build(tf.TensorShape([1, None]))
model.summary()
[20] 2019-11-10 14:18:08 (381ms) python3 (4min17s)
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_1 (Embedding) (1, None, 256) 16640
_________________________________________________________________
gru_1 (GRU) (1, None, 1024) 3938304
_________________________________________________________________
dense_1 (Dense) (1, None, 65) 66625
=================================================================
Total params: 4,021,569
Trainable params: 4,021,569
Non-trainable params: 0
_________________________________________________________________
9.6.2 The prediction loop
def generate_text(model, start_string):
# Evaluation step (generating text using the learned model)
# Number of characters to generate
num_generate = 1000
# Converting our start string to numbers (vectorizing)
input_eval = [char2idx[s] for s in start_string]
input_eval = tf.expand_dims(input_eval, 0)
# Empty string to store our results
text_generated = []
# Low temperatures results in more predictable text.
# Higher temperatures results in more surprising text.
# Experiment to find the best setting.
temperature = 1.0
# Here batch size == 1
model.reset_states()
for i in range(num_generate):
predictions = model(input_eval)
# remove the batch dimension
predictions = tf.squeeze(predictions, 0)
# using a categorical distribution to predict the word returned by the model
predictions = predictions / temperature
predicted_id = tf.random.categorical(predictions, num_samples=1)[-1, 0].numpy()
# We pass the predicted word as the next input to the model
# along with the previous hidden state
input_eval = tf.expand_dims([predicted_id], 0)
text_generated.append(idx2char[predicted_id])
return start_string + "".join(text_generated)
print(generate_text(model, start_string=u"ROMEO: "))
[21] 2019-11-10 14:18:08 (6.06s) python3 (4min23s)
ROMEO: I will propage my life,
Pasd ages of the e blown by the morning days sky
left sixing at him that little thus
fled provost all under soul.
COMINIUS:
One that good us not Northumberland,
That, in men's love, when it tears true-happier being breath,
Thus have fing of your bapremat-bastand's report
A man bit the court, as ne'er oncent you out
Of dreadful tears: now pray you.

MIRANDA:
For your heard! true man's power,
I will be marrye to my heart, and perdice
Last his own runk, with another for our cobstry and right butcher's spreadgh.
TYRREL:
If thou hadst nomes your fine as so.
CLIFFORD:
O excels the house of York.
EDWARD:
So, friar? O he that craps's kildly
That shook had yet he should smell but made a
chaught of togs.
AEdY:
No fit to him, what cannot charge
you and the prench chase! Even in the head,
All this slip rough enough the world that ne'er gross of the eyes to whither.'
That is herself: 'tai
9.7 Advanced: Customized Training
model = build_model(
vocab_size=len(vocab),
embedding_dim=embedding_dim,
rnn_units=rnn_units,
batch_size=BATCH_SIZE,
)
optimizer = tf.keras.optimizers.Adam()
[22] 2019-11-10 14:18:14 (201ms) python3 (4min24s)
@tf.function
def train_step(inp, target):
with tf.GradientTape() as tape:
predictions = model(inp)
loss = tf.reduce_mean(
tf.keras.losses.sparse_categorical_crossentropy(
target, predictions, from_logits=True
)
)
grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
return loss
[23] 2019-11-10 14:18:15 (7.00ms) python3 (4min24s)
# Training step
EPOCHS = 10
for epoch in range(EPOCHS):
start = time.time()
# initializing the hidden state at the start of every epoch
# initally hidden is None
hidden = model.reset_states()
for (batch_n, (inp, target)) in enumerate(dataset):
loss = train_step(inp, target)
if batch_n % 100 == 0:
template = "Epoch {} Batch {} Loss {}"
print(template.format(epoch + 1, batch_n, loss))
# saving (checkpoint) the model every 5 epochs
if (epoch + 1) % 5 == 0:
model.save_weights(checkpoint_prefix.format(epoch=epoch))
print("Epoch {} Loss {:.4f}".format(epoch + 1, loss)) # type: ignore
print("Time taken for 1 epoch {} sec\n".format(time.time() - start))
model.save_weights(checkpoint_prefix.format(epoch=epoch))
[24] 2019-11-10 14:18:15 (4min14s) python3 (8min38s)
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.iter
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_1
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.beta_2
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.decay
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer.learning_rate
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-0.embeddings
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-1.cell.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-1.cell.recurrent_kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'm' for (root).layer_with_weights-1.cell.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-0.embeddings
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-2.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-2.bias
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-1.cell.kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-1.cell.recurrent_kernel
WARNING:tensorflow:Unresolved object in checkpoint: (root).optimizer's state 'v' for (root).layer_with_weights-1.cell.bias
WARNING:tensorflow:A checkpoint was restored (e.g. tf.train.Checkpoint.restore or tf.keras.Model.load_weights) but not all checkpointed values were used. See above for specific issues. Use expect_partial() on the load status object, e.g. tf.train.Checkpoint.restore(...).expect_partial(), to silence these warnings, or use assert_consumed() to make the check explicit. See https://www.tensorflow.org/alpha/guide/checkpoints#loading_mechanics for details.
Epoch 1 Batch 0 Loss 4.175241470336914
Epoch 1 Batch 100 Loss 2.3230133056640625
Epoch 1 Loss 2.1752
Time taken for 1 epoch 25.7055401802063 sec
Epoch 2 Batch 0 Loss 2.129734992980957
Epoch 2 Batch 100 Loss 1.9308865070343018
Epoch 2 Loss 1.7829
Time taken for 1 epoch 25.109810829162598 sec
Epoch 3 Batch 0 Loss 1.7903985977172852
Epoch 3 Batch 100 Loss 1.684728741645813
Epoch 3 Loss 1.5635
Time taken for 1 epoch 25.23121738433838 sec
Epoch 4 Batch 0 Loss 1.5300925970077515
Epoch 4 Batch 100 Loss 1.4672574996948242
Epoch 4 Loss 1.4777
Time taken for 1 epoch 25.337522745132446 sec
Epoch 5 Batch 0 Loss 1.4624003171920776
Epoch 5 Batch 100 Loss 1.448387861251831
Epoch 5 Loss 1.4165
Time taken for 1 epoch 25.446640729904175 sec
Epoch 6 Batch 0 Loss 1.4028750658035278
Epoch 6 Batch 100 Loss 1.3973259925842285
Epoch 6 Loss 1.3690
Time taken for 1 epoch 25.407334089279175 sec
Epoch 7 Batch 0 Loss 1.3469080924987793
Epoch 7 Batch 100 Loss 1.3726792335510254
Epoch 7 Loss 1.3087
Time taken for 1 epoch 25.37715220451355 sec
Epoch 8 Batch 0 Loss 1.2957813739776611
Epoch 8 Batch 100 Loss 1.3158564567565918
Epoch 8 Loss 1.2709
Time taken for 1 epoch 25.398983478546143 sec
Epoch 9 Batch 0 Loss 1.2178534269332886
Epoch 9 Batch 100 Loss 1.2948020696640015
Epoch 9 Loss 1.3018
Time taken for 1 epoch 25.447317838668823 sec
Epoch 10 Batch 0 Loss 1.2016081809997559
Epoch 10 Batch 100 Loss 1.25323486328125
Epoch 10 Loss 1.2214
Time taken for 1 epoch 25.641273975372314 sec


Chocolate is a typically sweet, usually brown food preparation of Theobroma cacao seeds, roasted and ground. It is made in the form of a liquid, paste, or in a block, or used as a flavoring ingredient in other foods.A food preparation in the form of a paste or solid block made from roasted and ground cacao seeds, typically sweetened.
ေခ်ာကလက္က စားလို့အရမ္းေကာင္းပါတယ္ ေျမပဲပါရင္ပိုစားရတာ အရသာပိုရွိပါတယ္
Coffee is a brewed drink prepared from roasted coffee beans, which are the seeds of berries from the Coffea plant. The genus Coffea is native to tropical Africa, and Madagascar, the Comoros, Mauritius and Réunion in the Indian Ocean.
ေကာ္ဖီဆုိတာလည္းအရမ္းေသာက္လို့ေကာင္းပါတယ္ခင္ဗ်ာ
ဂ်ယ္လီေလးနဲ့မတည့္တာတစ္ခုပဲ
A hamburger or burger is a sandwich consisting of one or more cooked patties of ground meat, usually beef, placed inside a sliced bread roll or bun. The patty may be pan fried, barbecued, or flame broiled.
ဟန္ဘာကာကေတာ့ ေျပာေနစရာမလုိပါဘူးးဗ်ာ


Events
About Us
Events
Media
Contact Us
Upcoming Appearences
Small calendar can go here
Previous Appearences


{{form.primary_source | attr:"class:form-control"}}
Select the survey question you'd like to analyze.
{{form.census_areas | attr:"class:form-control basic-multiple"}}
Select one or multiple Census geographies to compare to the data collected for this question.
Don't see the census area you need? Create a new one here.
{{form.short_description | attr:"class:form-control"}}
{{form.order}}
{{form.id}}
Write a short description of your survey question and analysis.


TOUCH OF EVIL A film review by Jeremiah Kipp Copyright 2000 filmcritic.com filmcritic.com
God, I love Charlton Heston movies. He can always be relied on to give an, er, square-jawed performance. He's appropriately square-jawed here, with a pencil-thin moustache and a swaggering demeanor. Yes, sir. You want to make a compulsively watchable movie, you throw old Chuck a bone and cast him in the lead role.
On top of that, Touch of Evil makes him a Mexican! I love it! Charlton Heston plays a Mexican detective!
Mexican, man. Mexican...
Now that I've got that out of my system, on with my review.
Everyone who has seen Touch of Evil justifiably remembers that one long opening shot, the one that feels like it runs for twenty minutes. It's nothing short of exceptional. Pure pulp. A bomb is placed in the back seat of a car, and we follow this car through the dilapidated city streets of Los Robles, a rusty old town on the border of Mexico.
As the car cruises round, we see shifty locals in dirty t-shirts and scarlet women lounging in doorways, second-rate clubs and seedy hotels. E nter newlywed cop Mike Vargas (our man Heston) and his no-nonsense wife, Susan (Janet Leigh), just in town on their honeymoon. Why they've chosen the armpit of the earth is anyone's guess.
BOOM!
We cut away to the car as it explodes. The dramatic effect is undeniable. Moving from that hypnotic long take which went up and down streets, allowing characters to move in and out of the camera's range, to an abrupt cut to the explosion and flames is bold, exciting, and pure Orson Welles.
Welles wound up directing this film when Heston made a big fuss over it. The studio originally intended him to only be involved as an actor, playing the shady, overweight, degenerate junkie of a sheriff, Quinlan. He shows up on the scene shortly after the explosion, and he doesn't hit it off with Vargas. See, it's Quinlan's beat, and that's that. He gruffly considers it an open and shut case and when Vargas promises not to cause any trouble, Quinlan chomps on his cigar and sneers, "You bet your sweet life you won't."
It's mano a mano, shot in slightly canted close-ups that seem to bring out their intense eyes and beads of sweat. Immediately, we know where this story is going. Vargas, being a good man with an inherent sense of decency, can't let it go (even though he's just married). We know these men will be involved in a battle, and that the local sheriff is clearly in on the scheme. The big question is, how far will they go?
Quinlan proceeds to work in cahoots with the local gangsters to frame Vargas in a drug scandal and lure his wife to a remote hotel where she will be drugged and held hostage. Things move at a breakneck pace, with Welles' trademark eye for strong visuals, unusual low-angle cinematography, and impenetrable shadows.
Two versions of the film are available on video, but for the purposes of this review let's discuss the director's cut, newly available on video and DVD. The studio had final cut of the project back in 1958, and made changes based on what they felt was either too risqué or too "intelligent" (to put it bluntly) for an audience to handle. As always, they assumed the worst from the masses.
The original cut is still a fine piece of work. The opening shot remains intact, you've got credible performances from the leads, and an eclectic rogue's gallery in the supporting cast. However, Welles felt so passionate about some of the small (and cumulative) details within the film that he wrote a 58-page memo to the studio heads begging for crucial changes.
That famous opening shot no longer has the original music or credits overlaid, instead using the sounds of the street and the distant club music in the background. During those scenes where poor Janet Leigh is trapped in a hotel (she always seems to run into trouble in roadside hotels) there are stronger implications that she was raped by those blank-faced goons who terrorize her in the bedroom, merely by lingering on each menacing shot a little longer.
There's also a moment between Quinlan and a gypsy woman who reads fortunes (played in a cameo by Marlene Dietrich). In the original cut, lighthearted music treats her like a joke -- your standard comic relief role. In this new cut, that hokey music is removed and the lingering close-ups show a quiet despair under the interactions over how Quinlan is getting fat on her chili and "the pianola sure brings back memories."
It's subtle character shading which adds depth and meaning to Quinlan, a small moment in his backstory which showed his aspiration for something close to love. In the studio cut, since the fortune teller is treated like a fool to be laughed at, Quinlan remains a comic brute when he's not an outright murderous villain. In Welles' cut, he arouses some small touch of pathos which pays off in the final confrontation with Vargas.
Sadly, after the debacle over Touch of Evil, Orson Welles found his directorial privileges revoked in Hollywood. As a filmmaker, he never worked in the town again. (The fortune teller even says, in a prophetic moment, "Your future is all used up.")
To his credit, Orson Welles made a class act potboiler which still feels fresh and exciting over forty years later. It's pure gritty entertainment, like a fine Jim Thompson novel or a shot of tequila. He conjures up a vivid atmosphere and plants himself right in the center opposite a formidable foe -- our favorite Mexican, Charlton Heston. What could be more exciting than that?

The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Krisztian Nagy
Frontend Developer
I work at Vodafone Shared Services Budapest as a frontend developer. I also like to use React and I'm a hobbyist game developer (Unity3D).
Icons by flaticon.com Under CC: Dave Gandy, SimpleIcon, Elegant Themes, Icomoon


DETAILS
To add/edit content, a branch must 'have focus'.
- git checkout <branch>
-
If <branch> exists (with the same name) in the remote, it will be 'linked' to that remote branch.
To add/edit content, a branch must 'have focus'.
If <branch> exists (with the same name) in the remote, it will be 'linked' to that remote branch.