#how to embed stack view in ios
Explore tagged Tumblr posts
whatdoesshedotothem · 4 years ago
Text
Monday 16 September 1839 Travel Journal
5
11 35/..
fine morn[in]g and F[ahrenheit] 56° at 5 a.m. off at 6 –
at Lillpero at 7 38/.. – off at 7 58/..
just out of Wiborg [Vyborg] bouldery com[mo]n
i.e. aft[e]r pass[in]g thro’ the suburb w[i]th the
good ch[ur]ch – then fr[om] there for so[me] dist[an]ce
thinned young Scotch fir forest and
a few lit[tle] corn fields and aft[er]w[ar]ds young rocky bouldery young Scotch
fir forest and coarse sandy r[oa]d as yest[erday] – ver[y] few cot[tage]s
b[u]t I slept gr[ea]t p[ar]t of the way look[in]g out ev[er]y now and then –
Lillpero well en[ou]gh lit[tle] lone h[ou]se – Russ[ia]n – we ha[ve]
met sev[era]l lit[tle] waggons load[e]d w[i]th so[me]th[in]g cov[ere]d gen[erall]y
w[i]th matt[in]g – no [servant] ab[ou]t at Wiborg [Vyborg] so ga[ve]
noth[in]g – fr[om] Lillpero to the frontier 86 [w] at 12 k[opek]
=26/64 I shall ha[ve] en[ou]gh Finnish mon[ey] left -  
Lillpero in the forest and forest forw[ar]ds b[u]t yest[erday]
gen[erall]y and today so far the forest less swampy than
 Wiborg [Vyborg] 18 2/3
Hotoka [Kotka] 17
St. P- [Petersburg] 83 2/3
Heslingfors [Helsinki] 300.
 Sept[embe]r Mon[day] 16
common – r[oa]d good – sandy soil as yest[erday]
b[u]t r[oa]d hard and good – the police declin[e]d search[in]g
carr[ia]ge at W- [Wiborg] [Vyborg] s[ai]d they c[oul]d n[o]t do it – now (9 10/60) 1st
view of sea or lake or wat[e]r s[in]ce leav[in]g Wiborg [Vyborg] – and now nice
woody open count[r]y and farms and cot[tage]s a lit[tle] [?] – pass[e]d a
farm or 2 ab[ov]e 1/2 h[ou]r ago in a break of the forest –
fields – no corn out – good flock of
sheep recently shorn in 1/2 h[ou]r ago saw a pl[an]t of cranberry in
flow[e]r – at the beyond stat[io]n at 9 13/.. h[a]d to turn b[a]ck - alight at our stat[io]n
at Hotoka [Kotka] comf[orta]ble rooms
at 9 1/4 br[eak]f[a]st – beaut[iful]
view fr[om] our br[eak]f[a]st r[oo]m wind[ow]
of the fine wood[e]d fjord – Russ[ia]n – our beard[e]d landlord
ver[y] civ[i]l and good look[in]g – the men m[u]ch bet[ter] look[in]g than the
wom[e]n – br[eak]f[a]st boil[e]d milk and 4 boil[e]d eggs and br[ea]d and butt[e]r
they br[ou]ght us butt[e]r b[u]t we h[a]d our own and br[ea]d spar[e]d of
yest[erday]s’ din[ner] – br[eak]f[a]st at 9 38/.. to 10 5/.. – sev[era]l nice
outbuild[in]gs – off at 10 19/..
thin bouldery young forest and sea
(right) coup[le] of hund[re]d y[ar]ds off
ver[y] beaut[iful] – and at 10 27/.. peep
of the sea n[o]t far off (left) – at 10 33/..
(in 14 min[ute]s) ha[ve] lost sight of sea exc[ept]
our lit[tle] glimpse or 2 soon aft[er]w[ar]ds – and a beaut[iful] peep ag[ai]n of sea (left) –
10 40/.. unpainted hamlet 1 st[ree]t of gable-ends to the r[oa]d perh[aps] 200 y[ar]ds
long – the 1st vil[lage] there ans[werin]g Handb[oo]ks’ descript[io]n p[age] 142 it is in [?]
break of the forest, w[i]th nice clean even lit[tle] corn fields
asleep – till at 11 1/2 ver[y] pict[uresque] vil[lage] irregul[a]r vil[lage] of
Kyröla [Kyrölä] and our good stat[io]n – large good one story wood h[ou]se
 Stolpebod – stolpe, stoop
Baaum (beam) tree
 Hotacka [Kotka]
Lillpero 17 v[ersts]
Kyröla [Kyrölä] 14 v[ersts]
St. P- [Petersburg] 100 2/3 v[ersts]
Viborg [Vyborg] 35 2/3
 SH:7/ML/TR/14/0009
Sept[embe]r Mon[day] 16
yellow (b[u]t old paint[e]d) w[i]th whi[te] wind[ow] frames –
ver[y] nice lit[tle] neat new-look[in]g fresh paint[e]d (yellow w[i]th pea green roof)
ch[ur]ch – and 2 or 3
good h[ou]ses w[i]th red roofs
oldish yel[low] paint
I th[in]k – the rest of the vil[lage] hamlet-like
and unpaint[e]d – by irreg[ula]r I mean that
the mid[dle] of the vil[lage] street swell[e]d out into
a sort of large square cont[ainin]g the ch[ur]ch and good h[ou]ses
ver[y] pret[ty] ab[ou]t here – fine br[oa]d expanse of wood[e]d
islandy wat[e]d left – and extens[ive] view of open
wood[e]d count[r]y – woody birchy and firs along our r[oa]d
capit[a]l r[oa]d – and n[o]t hilly today – this last vil[lage] of
Kyröla [Kyrölä] or Krasnoje Selo [Krasnoe Selo]  the prett[ies]t we ha[ve] seen  
ver[y] nice drive this stage – open birchy Scotch fir forest –
freq[uen]t peeps of the wat[e]r left – nice dry upland forest –
sandy b[u]t r[oa]d good – and mo[re] hilly than bef[ore] – the wat[e]r
left m[u]st be part of the series of lakes fr[om] Viborg [Vyborg]
that join the Ladoga? – plenty of cranberries
al[on]g b[u]t the pret[ty] red birnes n[o]t larg[e]r than our bilberry –
at 1 3/4 at [Pampala] good sm[all] unpaint[e]d lone h[ou]se
in nice dry airy break in the forest
snow plough – a calèche drove up –
just aft[e]r us – off at 1 12/.. – at 1 22/..  
(in 10 min[ute]s) nice peep ov[e]r the forest
up fine wood[e]d extens[ive] count[r]y all ar[ou]nd us [crossed word] –
sev[era]l lit[tle] s[u]ch peeps last stage fr[om] the tops of lit[tle] hills –
sandy b[u]t r[oa]d good – at 2 10/.. (right – near) large pict[uresque]
ch[ur]ch on hill – yel[low] w[i]th dark col[oure]d roof exc[ept] East
end cupola roof red – and unpaint[e]d hamlet at its f[ee]t
 Krasnoje Selo [Krasnoe Selo]                    Hotacka [Kotka]  14
St. P- [Petersburg] 87                                  Pampala 15 1/2
V- [Vyborg] 49 2/3
Helsingfors [Helsinki] 326 2/3
  Kyröla [Kyrölä] 15 2/3
Kivinebb 13
St. P- [Petersburg] 71
 Sept[embe]r Mon[day] 16
and our stat[io]n (good unpaint[e]d h[ou]se at 2 12/.. might ha[ve] slept
here appar[entl]y ver[y] well) – 2 snow ploughs –
nice hilly wood[e]d op[e]n airy count[r]y all
r[ou]nd ab[ou]t – the vil[lage] nicely plac[e]d on highgr[ou]nd –
off ag[ai]n at 2 1/2 – on ris[in]g the hill, the
count[r]y ver[y] pret[ty] here – fine extens[ive]
view – hamlets and farms scatt[ere]d up and d[o]wn – yel[low] stub[ble] f[iel]ds and green
young rye and good green pasturage – the unpaint[e]d (drab) hamlets and dark pine
wood[e]d hills finely contrast[e]d – b[u]t the hills n[o]t high – mere
rising gr[ou]nds all ar[ou]nd us – all right and left a wide woody plain
pret[ty] well peopl[e]d – no over-flow[in]g populat[io]n anywhere –
in this cold nord – gr[ea]t deal of birch all today –
now at 2 50/.. the wide plain right seems one sheet
of dark pine forest we pass thro’ a lit[tle] unpaint[e]d
scatt[ere]d hamlet or 3 or 4 or a series of scatt[ere]d farms and the villages
num[erou]s hamlet-like appurt[enan]ces – here and ev[er]y where
the wood fences as in S. and N- [South and North] at 3 5/.. cross good
riv[e]r and wood br[idge] and 14 men w[i]th as many one horse
ploughs plough[in]g in one stubble f[iel]d – cattle –
3 lit[tle] corn stacks in a f[iel]d – nice farm[in]g here –
7 nar[row] lines (bet[ween] Stakes or rails or [how] of
so[me]th[in]g like peasholm – plenty of geese here –
abund[an]ce of them at Viborg [Vyborg] in the Baltic near the
2 steams, and on the ramparts and in the st[ree]ts and
ev[er]ywhere – one stage hill this ti[me] and r[oa]d sandy b[u]t good
at 3 23/.. unpaint[e]d scattered hamlet and pret[ty] lit[tle] lake near right
and a bit of sm[all] bould[e]r stone cobble wall fence
the 1st I ha[ve] seen in the north – S.N. [South and North] or here)
 Kiviniebb
Pampala 13 v[ersts]
Raiaioki 12 1/2 v[ersts]
St. P- [Petersburg] 58 v[ersts]
 Geese
 1st cobble st[one]
wall.
 SH:7/ML/TR/14/0010
Sept[embe]r Mon[day] 16
at the stat[io]n at 3 33/.. – on highgr[ou]nd – lone
h[ou]se unpaint[e]d body – red roof
good en[ou]gh look[in]g h[ou]se – m[i]ght sleep
appar[entl]y as well as at many of the
oth[e]r stat[io]ns – the hamlet scatt[ere]d ab[ou]t
at a lit[tle] dist[an]ce – the appurt[enan]ces of the
stat[io]n num[erou]s as us[ua]l and hamlet-like
wide wood[e]d plain right and left and surely it the sea we
just see in the extreme dist[an]ce before us (right) –
off at 3 47/.. ver[y] pret[ty] at 3 52/.. lit[tle] steep desc[en]t on to
wood[e]n br[idge] ov[e]r lit[tle] stream that is perh[aps] the boundary?
steep boulder stones pav[e]d asc[en]t – en[ou]gh for our horses to do to get
us up – and good largeish houses – good all the way fr[om]
Viborg [Vyborg] – pret[ty] and hilly and m[u]ch birch – thin
forest, and pasture and cows – yes! (now 4 3/4) it
is the sea, a long sweep, in the dist[an]ce (right) –
the pavé roughish beg[a]n on this side the bridge at 3 52/..
b[u]t we go on the sides (sandy b[u]t ver[y] fine) now and then
ver[y] m[u]ch – and aft[e]r all the pavé is n[o]t so bad
so far – I w[oul]d rath[e]r risk our carr[ia]ge here than
fr[om] Hamburg to Lubeck, or even in the st[ree]ts of
Stockholm where if the pavé is so[me]th[in]g between the
deep chan[nel]s are terrib[le] – now at 4 5/.. the aft[ernoo]n
is dullish – shall we ha[ve] r[ai]n? now at 4 1/4 fine
wood[e]d count[r]y – range of wood[e]d hill left,
closes in (at perh[aps] 7 or 8 inches Eng[lish]) our plain
at the left  - low birch wood bushes and young Scotch
firs scatt[ere]d here and to the right (in the dist[an]ce)  
 Raiaioki
Kivinebb 12 1/2 v[ersts]
Walkiasari 12 1/2 v[ersts]
St. P- [Petersburg] 45 4/6 v[ersts]
 Sept[embe]r Mon[day] 16
and to the right in the dist[an]ce the fine sweep of
sea w[i]th a dark line at the b[a]ck of it form[in]g the horizon
lookd[o]wn in front in the dist[an]ce up[on] dark plan
ris[in]g to the horizon – and now 4 25/.. a scatt[ere]d hamlet
unpaint[e]d as us[ua]l – the sea now sweeps 1/2 r[ou]nd us
in the dist[an]ce fr[om] right to en face – we look up[on]
one sheet of forest belt[e]d right and in front by sea –
now towns or vil[lage]s distinguishable – the r[oa]d now
sandy (at 4 1/2) and goodish – the pavé nowhere
prev[ente]d my writ[in]g – at 4 1/2 lose my pen – in tak[in]g
off bon[ne]t m[u]st ha[ve] kick[e]d it out – now at 4 1/2 ver[y]
sandy and heavy –
the birch gen[erall]y green shew[in]g merely a tinge of autumn
here and there – hilly stage – now at 4 55/.. a lit[tle]
town or vil[lage] in sight bef[ore] us (right) w[i]th handso[me]
white, blue-cupolaed, ch[ur]ch – now at 5 first
buckwheat that I ha[ve] obs[erve]d part stand[in]g ripe,
and part cut, ti[e]d up in lit[tle] sheaves, and in stock – and
our road now and for a lit[tle] whi[le] b[a]ck as broad as
3 r[oo]ds (perh[aps] 60 y[ar]ds wide) and we go on the grass or
as well as we can thro’ the sand – and now (5 5/..) a few scatt[ere]d
farmsteads – our r[oa]d this stage the worse we ha[ve] h[a]d in
Denm[ar]k Swed[e]n or Norway, b[u]t still the r[oa]d to Hazelunen
m[u]ch worse in point of sand, and the r[oa]d fr[om] Hamburg to
Lubeck m[u]ch worse in 1833 in point of pavé –
the pavé beg[i]ns ag[ai]n now at 5 10/.. (we h[a]d it fr[om] 3 52/.. to 4 1/2)
b[u]t we keep on the side – on the sand – sev[era]l lit[tle] long nar[row]
stacks w[i]th spruce fir branches laid on the thatch (as obs[erve]d
once before) steep pitch d[o]wn to wood br[idge] x [cross] stream – then ascend to the
town, and at the Station at 5 1/4 at Walkiasari
 SH:7/ML/TR/14/0011
Sept[embe]r Mon[day] 16
John stopt at the stat[io]n h[ou]se and we h[a]d s[e]nt Gross to
the douane, and g[o]t the bask[e]ts and cloaks out bef[ore] they ca[me] to say the
carr[ia]ge and all m[u]st go to the place – there at 5 25/.. and A- [Ann] and I there 3/4 h[ou]r –
then ca[me] b[a]ck sided our r[oo]m and A- [Ann] made tea – sat ov[e]r it till 8 10/..
then prepared our bed – on[l]y one in the h[ou]se – h[a]d Grotza at
8 3/4, when we h[a]d g[o]t all ready – and then till now (10 p.m.)
ink[e]d ov[e]r the latt[e]r 2/3 of the last p[age] and so far of this –
Jean w[a]s in desp[ai]r at the th[ou]ght of our stay[in]g all night –
s[ai]d if we d[i]d we must sleep up[on] hay for there were
no beds – and in ca[me] a large bundle of nice soft
hay w[hi]ch now lies in the corn[e]r of our r[oo]m – we ha[ve]
spr[ea]d out the one scant[l]y fill[e]d bed (w[i]th flocks I suppo[se])
on sofa and chairs so as to be wide en[ou]gh for us both –
of the 2 pieces  of linen each n[o]t qui[te] clean ab[ou]t 1 1/2 y[ar]d sq[uare] we ha[ve] made
[crossed word] an und[e]r sheet, and shall put our cloaks ov[e]r
us – we ha[ve] the luxury of 4 pillows, and shall do ver[y]
well – we ha[ve] our own br[ea]d and butt[e]r and tea and sug[a]r b[u]t they
br[ou]ght ver[y] fair br[ea]d (wheat) and good butt[e]r, and 4 boil[e]d
eggs and a lit[tle] bowl of milk w[i]th the cream on it for our tea –
the cream made our tea excell[en]t and we sat ov[e]r and enjoy[e]d
it, declar[in]g how well off we were – we h[a]d g[o]t well
thro’ the ordeal of the douane, and congrat[ulate]d ours[elves] on being
in Russia – our b[oo]ks I bel[ieve] were all tak[e]n out of the carr[ia]ge
and look[e]d at; b[u]t, as desir[e]d, I cop[ie]d the list I ha[ve] and the Stockholm [crossed word] date
dat[e]d it Stockholm as really dat[e]d there, and sign[e]d it
= A. [Anne] Lister [sign]                   and then enclos[e]d it an envelope,
‘de Shibden hall’ and as desir[e]d seal[e]d it w[i]th my own seal
my arms, wr[ote] on the back ‘List of the books belonging to Mrs. Lister’
 Sept[embe]r Mon[day] 16
and s[e]nt this by Gross to the Douane to be forward[e]d
to St. Petersburg, I engaging to go w[i]thin six weeks to the
committee of censorship to claim the list – s[ai]d I sh[oul]d
go to Mrs. Wilsons’ – we are thus allow[e]d to ta[ke] all our
b[oo]ks and th[in]gs and go in comf[or]t – How m[u]ch bet[ter] than to the poth[e]r
we sh[oul]d ha[ve] h[a]d if we h[a]d arriv[e]d at St. P- [Petersburg] by the steamer! –
our journ[e]y thro’ Finland h[a]s really been a ver[y]
agreeab[le] and a ver[y] economic[a]l one; and we ha[ve] seen
the count[r]y and the peop[le] – the latt[e]r alw[a]ys civ[i]l and ready to do
their utm[o]st to please, and the form[e]r well-farm[e]d (made
the m[o]st of) and interest[in]g – the r[oa]ds ev[er]ywhere good till
this last stage – and the sand of this noth[in]g to that of Hazelunen
and the for post aft[ernoo]n post pavés of the s[ou]th of Fr[an]ce often qui[te] m[u]ch or more as jolt[in]g and try[in]g to
the springs of a carr[ia]ge then the 43 min[ute]s out 88 min[ute]s
(fr[om] 3 47/.. to 5 1/4) here – this is the 1st ti[me] we ha[ve] fail[e]d
to find good clean beds and sheets at the Stat[io]n houses
and on[l]y once or twice we ha[ve] the peop[le] been w[i]thout
whi[te] (wheat) bread – the lit[tle] steep pitches are too short
to be dang[erou]s – the horses rarely stumble; and a man m[u]st be
a ver[y] bad driv[e]r and totally unaccust[ome]d to this sort of r[oa]ds if
he can[no]t get on comf[ortabl]y ev[e]n w[i]th a heavy Eng[lish] carr[ia]ge like ours ab[ou]t
8 versts an h[ou]r – I nev[e]r obs[erve]d the man or boy (Holcar)
ask for anyth[in]g mo[re] than wh[a]t w[a]s due for the horses
6 kopeks each fr[om] country stat[io]ns and doub[le] that fr[om] towns –
Åbo is a good town – Heslingfors [Helsinki] ver[y] beaut[iful]
cheerful and comf[orta]ble (the Societys’ h[ou]se good hot[e]l) and one
might ha[ve] advantages fr[om] the univers[it]y prof[essor]s (all the
students away – vacance for a fortnight longer) –
Viborg [Vyborg] dull as all fortresses of such sort m[u]st be? b[u]t a good
town and its fjord and situat[io]n beaut[iful] – the cold
SH:7/ML/TR/14/0012
September Monday 16the cold weather is coming – I have had a little chilblain in my right little finger these 2 days or more and Jean has got a little lumbago since Saturday – fine day (tho’ dullish coldish in the morning and dampish in the afternoon) – F56 ¼° now at 10 ¾ pm our 2 rooms have been warmed by a stove; for they were quite comfortably warm on our arrival no pot ath [at] breakfast and we have a tureen for one tonight Raining now at 10 ¾ pm
5 notes · View notes
youngsterdev-blog · 8 years ago
Video
youtube
Introduction to Auto Layout with Xcode (Part-3) - Stack View
0 notes
mobappdevelopmentcompany · 4 years ago
Text
An Extensive Guide on Making a Modern-day Messaging App in 2021!
Tumblr media
A few years back, sending a single text message to someone used to be charged quite a bit. But since the emergence of new-age messaging apps, chatting with anyone from any corner of the world is now free. So it is no surprise that more than 50% of all smartphone users have one or more messaging apps installed on their phones.
This niche has progressed tremendously in the last decade. With around 2 Billion users on WhatsApp and 1.3 Billion users on Facebook Messenger, it is evident that the popularity of the messaging applications is at its peak. Besides, there are a plethora of other famous apps like Snapchat, WeChat, Telegram, Skype, Viber, etc. that attract millions of users daily. No wonder why start-ups, leading entrepreneurs, and even giant enterprises are competing to create such messaging apps.
So, are you one amongst them? Do you want to create such a captivating messaging application? If yes, this post is for you.
Here we have explained how to create an appealing chat app despite the tough competition in the market. What features are to be embedded in it? What are the challenges involved? We will also shed light on the security best practices and time required to design a full-fledged chat app. So, let’s dive deeper.    
Must-have Features of a New-age Messaging Application
It is essential to pick the right feature-set for creating an impactful messaging app. The app should be user-friendly, convenient, and support multitasking. The app should easily provide the users with their chat records. Also, it should be quick in responding to them without long hold times.  
Here are some fundamental and powerful features to integrate into such an app. These will make the app appealing to the end-users and provide them a unique chatting experience.
Authorization of the Users to easily sign-up via phone numbers, social media, email IDs, etc.
Account creation, profile setting, and ability to customize their profiles on the chat app.
Instant messaging, message delivery status, group chats, etc.
Ability to import contacts so that the users can instantly connect with others in their contact list.
File sharing functionality to exchange files like photos, audio clips, documents, videos, and any other similar content.
Blocking or reporting unwanted users.
Push notifications
Geo-location tracking
End-to-end encryption
Synchronization of the app across multiple devices
A Few more Advanced Features to Consider
Voice and video calling
Ability to permanently destroy messages, statuses, stories, etc.
Photo editing feature
Public channels for users to connect with like-minded users or simply read/view the content they like through these channels
Entertainment elements like emoticons, gifs, animations, stickers, etc.
Live-streaming options
Chatbots- an advanced marketing tool for monetization
In-app games (though it is a rare feature)
Vital Steps to Architect an Engaging Messaging App
Research by doing a thorough analysis of the market, best apps available, current trends, competitors, target audience, etc. Try downloading and using some of the existing apps for in-depth knowledge of messaging apps and also identify the issues in such apps.
Decide on the concept of the app, its unique selling proposition, and brainstorm on how the app will befit the target audience. Ensure that you are targeting to fix some issues and gaps that the existing apps from stores have.
Identify your business objectives, strategy to create the app, and app monetization techniques.
Decide whether to go for messaging app's MVP or a feature-rich model.
Choose the platform- whether Android or iOS or both.
Pick reliable features to be embedded in the app from the aforesaid list.
Identify a proven and experienced messaging app development company and partner with it for your project.
Share your objectives with their team and work together to create your dream app with a seamless UX/UI design.
Communicate with them from time to time during the chat app development process.
Test the app thoroughly before launching it in the market and modify it if required.
Implement the planned monetization strategies before the app’s release.
Now publish the app on the respective stores.
Collect inputs from the users, conduct surveys, etc. to get insights on how well is your app doing in the market.
Keep maintaining it and improving it according to the response from the target users.
Gradually add new features as you progress.
In the write-up, “What are the Key factors a Startup should Focus on While Developing a Mobile App?” you will get additional insights on this subject.
Potential Challenges in the Messaging App Development Journey
Security Threats: Users want assurance that their conversations are safe and their data does not leak out in any case. This can be challenging to implement for chat app development companies. Please read along as we have discussed in detail the best security practices in the later section.
Server Overload: As the app users start rising, servers may get overloaded, particularly during peak load times. So, the server setup should be capable of handling such loads. Also, all other probable downsides of the server you identify and the remedial measures for those issues should be considered in advance.
Unstable Internet Connections: Internet connectivity can weaken or cut off due to several unpredictable reasons. At such times, some messages sent by users could get lost. So, the apps should be designed to work in an offline mode. When the connection restores, the lost messages should be reproduced.
Issues during App Updates: It must be ensured that while updating the apps with new features and functionalities, existing data shouldn’t be lost owing to architecture configuration or server issues. Ensuring this is especially challenging in real-time chat apps.
Multiple Solutions in One App: Nowadays, users expect a chat app to be much more than a simple app that exchanges texts, calls, multimedia, etc. They expect extra facilities like in-app payments, gaming, capabilities for online marketing of their business, etc.
Security Best Practices to Employ
Messaging apps hold a monumental amount of personal, confidential, and sensitive data of the users, and hence, security must be a vital consideration in the messaging app development process.
Let us have a glance at what some of the renowned apps have done to achieve top-grade security.
WhatsApp developed an end-to-end encryption system by partnering with Open Whisper Systems, a software development group at Signal.org. This system ensures the privacy and security of all the communications happening via the app and even WhatsApp cannot decrypt the chats.
Another app Telegram makes its app secure by utilizing its in-house encryption protocol. Every week or whenever the users complete sending a pre-defined number of messages, cryptographic keys in the app are changed. Even though a single message is intercepted, all other messages remain encrypted.
So, for attaining this kind of security in your chat app, go through the below-given security practices and ensure that they are implemented in the app.
For any kind of client-server connection, make use of TLS/SSL protocols.
Utilize powerful authentications like two-factor authentication in the app.
Implement end-to-end encryption, private and public-key encryption, etc. for the content like text, audio/video calls, etc.
Ensure that your app complies with data protection and privacy requirements of GDPR i.e. General Data Protection Regulation.
Back up everything on the app from time to time.
Use biometrics for the users while accessing the app.
Never save sensitive data of the users in the database. You can either use hashing algorithms or encode such data.
For infrastructure deployment, using a private network is one of the best solutions.
Apply throttling and rate-limiting.
Users should be able to download media files only when they are active or online. To ensure this, Private File Object storage can be used for each chat with authorization and authentication.
Make use of an SHA-512 hashing algorithm in the apps.
Display privacy policies to the users and create additional functionality for them to ensure better data protection.
For gaining some more knowledge on the security of mobile apps, do read the blog- “Actionable Tips for Top-grade Security in Mobile Apps!”.
Timeline Required and Budget Considerations for Creation of a Chat App
Predicting the exact time and pricing of a chat app is not possible until the knowledge of certain factors. This includes the factors like the number of features you decide to embed and their complexity, the number of screens, the platforms you choose for messaging app development, design requirements, the technology stack that you finalize, any peculiarities of the third parties involved, country of development, etc.
Timeline and costing also depend on whether you want to have an MVP model developed first, or a full-fledged app. Based on these factors, the messaging app development services may require a minimum of 2 months and a maximum of 5 months approximately. The pricing could range from $20,000- $50,000; which may somewhat vary from vendor to vendor. Reach out to us to get an estimate for your tailored requirements.
Concluding Thoughts:
The digital world and the end-users always await the arrival of unique messaging apps having compelling concepts, despite the presence of myriad apps in the market. So, entrepreneurs across the globe are experimenting to architect such new-age chat apps. Besides, several existing apps are also being updated with the chat functionality to allure more users as well as gain a competitive edge.
So, are you also wanting to embed this vital feature in your app? Or do you have an amazing concept in mind? Biz4Solutions, an experienced messaging app development company based in Texas, can assist you through the process. Just drop us a line!
To know more about our core technologies, refer to links below:
React Native App Development Company
Angular App Development Company
Blockchain app development
0 notes
steveroger1508-blog · 5 years ago
Text
Cross-platform frameworks in 2020
Are you confused about choosing the cross-platform mobile app frameworks? Most of the developers prefer cross-platform app development framework because it saves time and resources.
Technology has speeded up human evolution. The lifestyle of people has raised and became more dependent on technology. Mobiles are the best invention of technology which made mankind go easy to manage their lives. A small pocket and user-friendly device with the capability to reach the world in seconds. There are “n” of mobile applications that not only made our tasks easy. but gave a new path to technology enhancement.
Android and iOS are widely used mobile app development platforms used by a large number of people around the globe. Let’s face it, without these platforms life wouldn’t be easy going. Don’t you wonder how these apps are built? The answer has multiple platforms on which applications are developed. The native application frameworks started many years back when the application word came into technology.
But the native app framework has a disadvantage. It requires separate coding in both Android and iOS. This leads to an increase in the cost of application and was time-consuming. In comparison to the native app framework, the cross-platform app development framework seems to be widely accepted by the world.
The application platforms widely came into acceptance, people started enhancing the features in it. Developers from the world started developing their frameworks to make mobile application development go smoother. The concept came into existence which partially replaces the native was, Cross-platform mobile app development. The cross-platform technology allows the developer to code once and runs the same code for Android and iOS. Isn’t it great? It saves the time of the developer and the spending cost of customers.
Cross-platform, in simple terms, a better and more advanced version of native app development that has brought a revolution in the app industry.
Embed this infographic on your site
What are the Cross-platform App Development Advantages
Code reusability
Advanced and seamless UI designs
Cost-effective solutions
Quick and safe applications
Increase productivity and saves time
Easy customization
Various options for app development
Today, there’s a list of cross-platform frameworks available in the market. Each framework has features that make it different from each other. The developers have a wide range of cross-platform frameworks available to choose according to the demand of the project. Let’s list of them.
6 Best Cross Platform App Development Frameworks
Xamarin
Launched in 2011, Xamarin is an open-source framework that solved the problem of disjointed native technology. It uses C# for coding, allowing it to work easily on array issue for Android and iOS. Xamarin is the product by Microsoft which has covered a strong community of developers. It is one of the best tech stacks for faster development and makes the software secure development.
Related Article: Why is Xamarin the best for Cross-Platform App Development? Infographic
React Native
React native was launched in 2017 by Facebook. It became in the list of top trending cross-platform in the market with “Learn once, Write anywhere.” It can share about 80-90% of codebase across the platforms, regardless of complexity. It’s advanced “Hot Reload” feature lets developers see the changes within seconds which make the development process quick. React Native has the best UI views and responsive interface. Besides, it offers native features such as camera functionality, Accelerometer, etc.
There are renowned apps that use react-native: Instagram, Skype, Pinterest, etc.
Related Article: The New Era of App Development Using React Native
Flutter
Get a beautiful application in no time. From alluring UI designs to high-speed performance applications, Flutter as launched with all advanced features in 2017 by Google. It is one of open source and free cross-platform which enables single codebase and interacting user interface. Flutter has a “Hot Reloading” feature which permits developers to see the changes in seconds. Instead of spending a large amount of money on Android and iOS separately, one can build its mobile application in a flutter. It also has widgets which makes the customization easy and ideal for cross-platform app development. Widgets in Google’s Material Design and Apple with Cupertino pack. The flutter is also helpful for some web app frameworks.
List of famous flutter apps: Alibaba, Google Ads, Google.
PhoneGap
Previously is known as Apache Cordova, PhoneGap has wide popularity among developers across the globe. It is a simple platform that uses HTML, CSS, and JavaScript. It allows you to share the application with the team to get the feedback and has offered the cloud solution. With its advanced features which enable access to third-party tools and various other plug-in makes it different from other cross-Platforms. The famous and a common source of getting answers is “Wikipedia”, which also uses the same technology.
Ionic
Ionic is an open-source app platform app framework that uses HTML5 for translation. It is quite similar to Angular, in terms of designing and architecture. A few of its designs are also similar to Android and iOS. It allows you to build native lookalike hybrid apps for progressive web apps. It is based on the SAAS UI framework which grants numerous UI components. Ionic is backed by a massive community of developers across the world. Few popular apps have used Ionic technology are NASA, IBM, SAP.
Related Article: Ionic 4: Hire Ionic Developers To Build Web And Mobile Apps Using Ionic 4
Node.js
Node.js is an amazing framework for developing cross-platform applications. It is an open-source environment with a JavaScript run-time framework built on the Chrome V8 JavaScript engine. These frameworks are highly efficient and responsive. The built-in Node.js library is responsible for the speedy code execution process. The app made in Node.js does not buffer. Node.js uses a single-threaded model with the advancement of event looping functionality. This activity makes the server more scalable.
Conclusion
Cross-platform has provided a spine to mobile app development technology. Android and iOS have the same codebase with relevant UI views.
Does a question arise that cross-platform mobile application development is perfect for my application? The answer is: it depends. It depends on your app features which makes you choose the best framework to develop an application.
Also, every day the technology is stepping towards the changes and advancements. These activities invent features that make the app development go easy and smoother. We’ve chosen the best cross-platform app development framework that might help you to reach app development success.
Originally published by The NineHertz
Tumblr media
0 notes
ios-goodies · 6 years ago
Text
Week 295
Happy Thursday! Let's keep it short this week and go straight to the links!
Articles
Writing an Elegant and Extensible Network Stack in Swift, by @plivesey453
Embed Preset / Preload database in app with Realm, by @soulchildpls
Building BarChart with Shape API in SwiftUI, by @mecid
Error handling in Combine explained with code examples, by @twannl
Drag and Drop Tutorial for iOS, by Christine Abernathy
Computed properties in Swift, by @johnsundell
Advanced lldb tricks for Swift — Injecting and changing code on the fly, by @rockthebruno
Tools/Controls
FlexibleHeader - A container view that responds to scrolling of UIScrollView, by @kanglpmg
Combine101 - A gentle but thorough introduction to Combine.
CombineDataSources - Table and collection view data sources for Combine, by @icanzilb
Business/Career
Selling a watchOS-only App Before watchOS 6 Hits - by @SasmitoAdibowo
How to build social connection in a remote team, by @clairejlew
UI/UX
It’s not always about making things easier: When to make your sign up flow harder, by @IrrationalLabs
Why We Hate Not Finishing What We Start, by @101babich
Innovation > Replication, by @lathamhenry
Credits
k-lpmg, plivesey, cupnoodle, adib, mecid, moelnaggar14, rbarbosa
0 notes
premayogan · 7 years ago
Text
React Native vs Ionic: Which Is Better?
In this article, we will try to highlight the most important conceptual comparison of React Native vs Ionic. We will study both the strong and weak sides of RN and Ionic. This will probably give you the knowledge you need to make an educated decision of the stack that will work best for your startup.
Native Apps and Hybrid apps
Before discussing the differences between RN and Ionic, let’s quickly understand what are Native and Hybrid Apps. Native apps generally build using specific target platforms and language like Swift for iOS or Java for Android etc. We cannot share the code across platforms. These apps are built using HTML, CSS, and JavaScript and execute the same code in different platforms. The native can access all the features offered by the platforms without any constraint. Hybrid Apps are basically websites embed in mobile apps through WebView. These apps use native features using tools such as PhoneGap and Cordova. Read More: Native Mobile App vs Web App. 
React Native vs Ionic?
Let’s explore both the frameworks in detail so you can easily choose the one for your next startup.
React Native
Facebook launched React Native framework in 2015. It is a cross-platform framework based on JavaScript. Most of the code can be shared across platforms.  It allows developers to build enhanced and native-like apps using a single code base.
Ionic
Ionic is a very common hybrid app development framework. It uses web technologies in code and needs PhoneGap or Cordova for the native compilation. Ionic leverages web technologies like HTML, CSS, and JavaScript-based framework. It is one of the popular frameworks to build feature-rich, advanced and elegant apps.
React Native vs Ionic: Language Stack
Ionic
Ionic is an Angular based framework. It uses HTML for its views. Using Ionic cross-platform development is somewhat easier since much of the basic underlying framework rests the same. Ionic will give some designers and developers a common ground to work. Whereas, React might involve further work, particularly when co-operating with other team members.
React Native
React Native is based on a JavaScript framework called React. It uses JavaScript code which resembles HTML. It is something most developers are comfortable with. React native app has smooth UI components for app development.
React Native vs Ionic: Write Once, Run Everywhere
Ionic
A standard hybrid app runs the same code on all platforms. However, in order to give the more native app-like experience, it adapts some behaviors according to the platform.
React Native
RN doesn't allow developers to write once and runs everywhere. However, React Native enables the developer to utilize the maximum customizable options.  
React Native vs Ionic: Testing During development
Ionic
Ionic allows previewing your app in the web browser and mobile devices. It immediately refreshes as you make modifications to your application.
React Native
React Native allows to test the application along the way during the development. The developer doesn’t need to recompile and rebuild again and again. The emulator or a real device shows the result instantly.
React Native vs Ionic: Community and Plugins
While opting for an open source platform, it is very essential to evaluate how vivid the community around it is. Both Ionic and RN have developed from established ecosystems React and Angular. Both have very good online support ecosystems. You can easily find information online, answers to your problems, or get bugs fixed.
Ionic
Cordova and PhoneGap are being used for a while so you can get plugins easily. There is also a marketplace where developers offer pre-built Ionic plugins. Well, React Native has more stars on Github than Ionic. While the former has about 71,0001 plugins the latter has 38,842. React Native and Ionic both inherit the community they are based on -React and Angular. And both have a very good ecosystem.
React Native
The number of plugins already available for the React Native is huge. There is also a plugin to use PhoneGap or Cordova. With this, you can quickly inherit the hundreds of ready-made plugins from the community.
Which is better?
Of course, React Native and Ionic are both powerful platforms. For the startups who prefer creating native apps, React is more effective. React Native makes apps quicker and more responsive. Whereas, Ionic is a truly hybrid development platform with more emphasize on speed and usability. Cost and time are usually the reasons startups choose to hybrid development platforms. Discuss your idea, preferences, and requirements with us. And we at Pentoz will help you to turn your idea into reality! Read the full article
0 notes
mbaljeetsingh · 7 years ago
Text
Capacitor in 2019: Native Progressive Web Apps for All
👋 if you’re new here, Capacitor is the latest project from the team behind Ionic Framework that provides an abstraction on top of Native SDKs so you can write modern web apps and access any Native SDK through a cross-platform, portable layer. Capacitor apps work on iOS, Android, Electron, and the web as a PWA.
It’s our take on a stew with Cordova and Turbolinks and a bit of React Native for seasoning, focused on building modern web apps on mobile, what we call “Native Progressive Web Apps.”
Capacitor and Ionic Framework are a delightful pairing, with Ionic providing the cross-platform UI controls, and Capacitor providing the runtime and Native SDK access. You might even detect subtle notes of cherry and leather and cigar smoke.
So…2018…Amiright?
In 2018, Capacitor largely flew under the radar. This was intentional. Today, most Ionic apps run Cordova, which is working well for many users. We felt no need to cause even more of a stir by forcing a whole new native layer on users, and we also knew that there would be bugs, as Capacitor, in general, wouldn’t be production ready for a bit. With Ionic 4 creating enough stress as it were, we didn’t want to add more to the mix with Capacitor.
Despite that, we were excited to see an increased interest in Capacitor from the Ionic community and communities outside of Ionic. Many Ionic users built apps with Capacitor and had very positive impressions of the project. I also personally received encouraging inbound interest from reporters and some dev rel folks at projects like Angular. Despite being largely an improvement on existing approaches, something about Capacitor felt new and fresh.
Above all, what got me jazzed most about Capacitor is how many folks from non-web JS projects like React Native and NativeScript were excited about Capacitor. The feedback from them was similar: “I always wanted to continue to build with web technologies on mobile, but I struggled with Cordova and the native tooling and at some point, I got fed up and was just done with it. Capacitor will bring me back.”
This feedback was critical for us, as it meant that Capacitor was following the right vision (“the web will win”), and that making some major UX improvements on how past tools like Cordova worked were paying off.
During the rest of 2018, the Capacitor team, now led by Julio Cesar with contributions from the community, added a number of key features to Capacitor. Those features included Push and Local Notification support out of the box, so apps can get notifications without worrying about installing extra plugins or adding new libraries—Plus, support for Electron, tons of bug fixes, and web implementations for key plugins.
Fast forward to November 2018, and the team at Ionic is finally coming up for air with Ionic 4 final fast approaching. We’ve been having a lot of internal conversations about our plans for open source in 2019 and where Capacitor fits in…
2019
In 2019, Capacitor will become the official native abstraction and runtime for all Ionic apps. But in order to get there, a few things need to happen:
First, we need to ship the 1.0, production-ready release of Capacitor. We plan to do that close to the v4 final release which is slated for January.
Next, while we added Capacitor support to Ionic CLI this year, we haven’t promoted it or made a big splash about it, yet. In 2019, we are going to encourage users to try it out for new apps. That means prompts in the CLI and more promotion on the getting started guide.
Finally, Capacitor needs to be integrated into our commercial DevOps product (Ionic Pro). Developers need to be able to do builds with Capacitor and push remote updates in Capacitor apps—All that work will be ongoing in 2019.
For the project itself, a big priority for 2019 is not adding features, but instead doubling down on stability. That means investing in more unit and automated testing. We want Capacitor to be the most stable mobile platform around, and we do that by letting the community build on top of it, while we focus on creating a wonderfully stable and reliable core runtime.
Speaking of the community, we have work to do to help the community flourish and be everything that it can be. Despite the fact that we did not do a lot of community work in 2018, I am thrilled about the 1300 folks that joined our Slack and the volume of PRs and contributions we’ve had on the Capacitor Github repo. Whenever you make something new like Capacitor it’s always hard to know if it’s going to be a thing. Having seen projects like Ionic definitely become a thing, it’s thrilling to see the same early adopter passion for Capacitor that Ionic had when we started.
Beyond community development, a major priority for us is making it easy for developers to build awesome plugins and native integrations, and getting those in front of the Capacitor community. That means adding an index of existing Capacitor plugins and investing in our plugin development guides.
What about Cordova?
Even though Ionic has been working on a new project that essentially replaces Cordova, we still use Cordova heavily and continue to invest in the platform. In fact, we are planning on directly supporting Cordova for Enterprise customers for a long time to come. That means our investment in the platform will grow rather than shrink. Stay tuned for more updates on this specific support plan in 2019.
We get asked often: why couldn’t we have just improved or modified Cordova? Unfortunately, I don’t have an answer that will satisfy many people as for why we built our own thing instead. The open source space is filled with new projects that built on older projects and made tangible improvements that couldn’t have been done without radically changing the original product, which is what Capacitor would have required. We felt like we couldn’t do that with Cordova for technical and political reasons. Whether that is right or wrong that is the conclusion we came to.
On the plus side, Ionic now controls almost all of its stack. When you build an Ionic v4 app and use Capacitor, we control the native runtime layer, the UI controls, and the “framework” used to build the controls (Stencil). The only part we don’t control is the frontend framework you use on top (Angular, React, Vue, or nothing). This is significant: If there’s an issue in any part of the stack that we control, we can fix it right away. We are already seeing some wonderful returns on this investment and it’s enabling us to build a stronger Ionic and focus on what we do uniquely well.
One last thing: For our enterprise customers that are using some of our premium Cordova plugins like Identity Vault or Couchbase Lite Enterprise integration, expect those plugins to work for both Cordova and Capacitor in 2019 as we have been deliberate in building them in a cross-runtime fashion.
So, no new features?
Well, okay, maybe a few, but we’re not necessarily forcing them to happen in 2019.
One of the big things that I want to see happen with Capacitor is easier integration with Native SDKs. The reality of the mobile market is that many services and SDK vendors are pulling back from building plugins for third-party frameworks like Cordova or React Native, and instead focusing on their native iOS and Android SDKs (while encouraging the community to build wrappers for their framework of choice). A lot of this is a reaction to the sheer number of options in the market, as it’s just not feasible for many companies to support every cross-platform solution under the sun.
We’ve been noodling on an idea we are calling Capacitor Native Views: A super simple way to wrap a Native SDK and expose it as a reusable component that can be easily consumed in JavaScript.
Some toolkits, like NativeScript, take the approach of exposing every Native SDK API to JavaScript. We think the security implications of that are undesirable, and it doesn’t remove your need to learn platform-specific APIs. We don’t think you should have to learn those APIs if you don’t want to, and we don’t think you should expose all Native APIs to JavaScript for security reasons.
Instead, Native Views provide a structure for wrapping and consuming a Native SDK so that it can be easily and safely exposed to JS and your web code, with rich TypeScript support and minimal maintenance required for the actual wrapper.
This idea is still super early, so don’t expect this to land in 2019, but we mainly want to gauge interest in the concept and figure out what we need to do to make it happen at a larger scale.
Beyond that, we want to make it easy for Capacitor to embed into existing native projects, something we’ve already started to see. In fact, we’ve had several requests for embedding Capacitor into a React Native shell so you can build most of your app with Ionic + Web Technology, and wrap it with some React Native calls. That was something we didn’t anticipate, but is really exciting because it further proves to us that developers can get huge productivity gains by building 90%+ of their app with web technology. Expect to see embed work happen in 2019.
Until next time…
We’re heads down and focused on getting some big releases out at Ionic for the end of the year, Capacitor included. We’re more excited than ever about the opportunity to make building mobile apps even easier than before, all by focusing on the most widely used and known technology stack in the world: The web.
Stay tuned for a big 1.0 update from us on Capacitor soon, and until then we hope to see you around the repo!
Interested in getting started with Capacitor? Check out our announcement webinar:
VIDEO
via The Official Ionic Blog https://ift.tt/2rE0no0
0 notes
testmodule · 7 years ago
Text
How Quiz System Plugin Works
Tumblr media
Wordpress system plugin enables clients to make tests, reviews or audits supported on their wordpress present. Guide people to your site and make pay with your tests, outlines and reviews by setting takes note. Before long you can incorporate an exceedingly enchanting party of people to your business districts and online journals effectively consolidate an especially astonishing and clearly dazzling test, audit or story to your site page. Then again add natural sections to an attracting sharp site or blog page that outcomes with more prominent development, obligation and leads. Wordpress Quiz System Plugin is a premium wordpress module endeavored to get your guests commitment by techniques for a master, thought grabber think about.
Make boundless reviews, test, questions and replies with presenting choices. Wordpress Quiz System Plugin is a champion amongest the most simple technique for making race battles, tossing a vote battles, investigating tries, overview battles. Before long you can viral substance that individuals are to an incredible degree stimulated and anxious to share. Your guests can appreciate the test and studies you make, and this broadens obligation by and large. You can make huge number of Quizzes with Wordpress Quiz System Plugin, and each test, study and study will be responsive. Along these lines, your guests can take an intrigue even from their cell phones, tablets (Android And IOS).
We have made the module by reviewing with most recent WordPress oversees so you can utilize the module rest guaranteed that will wear out all the WordPress subjects you may have.
• Manage the a lot of your wordpress contemplates and considers from one          dashboard.
• View the full help rundown of clients and you can follow. (IP, name, email,            telephone and social profiles)
• Filter the test and concentrate part list as shown by tossing.
• Each and each and every survey and test shape is adaptable. You can re-          attempt the audit highlight to arrange your necessities.(e.g. show up/don't            display number of diagram cast a ticket, exhibit audit results already/in the          wake of tossing a count, arrange contemplate sides by most examination give    a count or a job as organized)
• Customize the survey measure, think about substance style, consider shading    subject yourself or select from pre-depicted examination styles and review          sizes.
• Embed the audits in various regions. You can consolidate a sidebar audit, an      article diagram, or concentrates in an investigation domain on your site.
• Prevent continue tossing a ticket in the examination. Utilize treat based, IP          based and social profile based frameworks to square continue tossing a count    in your investigation.
• Redirect voters after they vote in the survey. You can driving force to involve        the voters, in context of their vote in the diagram.
• Set an expiry date for the outline, you can design the time in which the survey    will be along these lines shut. You can in like way for every circumstance              physically open or close the review.
• Set a right answer in the examination, to make an unplanned data think about.
• Add a checked logo to your audit.
• Add an email gathering contact edge to the diagram, so clients are asked for      to leave their email before review the audit results
• Add a telephone number, first name and last name layout in the examinations      with the target that clients must need to leave their/share their motivations of        interest. (Not stoppable)
• View estimations of the outline, including the clients that cased a count on the    audit, the time spent on the investigation cast a survey, diagrams that                  presentation the examination results.
• And in a general sense more inside!
Your examination, test or outline can be kept an eye on with a stirred up/right structure, a based framework or a framework not in the scarcest degree. You request contact data toward the start or the end and you pick which contact fields are required. You can utilize the majority of the demand or just a picked few picked heedlessly. You can in like way set the measure of demand per page or have the majority of the demand on one page.
The straight forward with which it enables a site editorial manager to fuse substance, annals, and sound records, has made it the most essential quality measurement for site undertaking. In any case, with the greater part of the induced highlights for web joining that it offers, it is fundamental for your urging relationship to accomplish issues with the stage as it attempts to keep your site page running viably. In the event that you are needing to do the change to Wordpress, or in the event that you are utilizing an obsolete change, by then it might be the ideal open entryway for a Wordpress module to animate stacking time. There are an alternate arrangement of reasons why you should work speedier, or equal to, trade zones out there.
Above all, Google and other web records need to comprehend that your webpage stays in the current style for each the current mechanical models. Quality substance and persevering posting rates are major, at any rate they will do you extraordinary if your stacking times are move back to the point out they dash out possible readership. By remaining over the updates that Wordpress gives and utilizing a module to your control board that makes coordination basic, you can rest guaranteed that when somebody taps on one of your affiliations, they are seeing your substance in not more than seconds.
In addition, Wordpress test system can shield you from persuading the chance to be powerless against pollution's and other malware by remaining ahead on updates and site reinforce. Security breakdowns can rapidly crash your capacity as a site page proprietor, and without the best instruments set up to remain before the Internet predators out there, you can rapidly end up tumbling down the web list positions. This happens in light of the way that clients begin to lose trust in a site on the off chance that it remains separated or swarmed with malicious exercises.
Thirdly, Wordpress modules make bargain into your empowering stage essential and additional you from completing a cluster of vain work in showing your site the manner by which you mean for it to be seen. Keeping up control over the vibe and development of your site is basic in the event that you can work in the most clear of courses of action. For a couple, Wordpress is it since it engages one regardless a free blog to looking the activities down before affirmation makes to the point where a man feels they can deal with the assignments in isolation space.
The Internet is a place for the vivacious and the dead. Undoubtedly, you have to require phenomenal substance to succeed, yet you should also be great, in development and moreover in introduction. In the occasion that you're not picking up by your site.Find Article, by then it might be an uncommon opportunity to attempt a Wordpress structure module and watch availability take off.
0 notes
martechadvisor-blog · 7 years ago
Text
10 Powerful Data Visualization Tools
  Data Visualization techniques present data as visual objects like graphs, charts or other pictorial formats to help identify patterns, trends, and correlations that might go undetected in text-based data.
Importance of Data Visualization
If you are keeping a record of data, you are most likely to use it in decision making.  You should be able to effectively utilize information lying in large volumes of data to its full potential. Data Visualization tools represent data in a visual form so that you can make sense of it faster and within shorter time frames thereby increasing your productivity. These tools also aid in analysis and decision making by bringing out hidden trends and correlations that might have been missed in layers of spreadsheets and reports.
There is a range of data tools and it’s difficult to pick the best, as each one does things differently.
Take a look at 10 of them and see which one best fits your needs:
ChartBlocks: ChartBlocks is an easy-to-use online chart building tool. Its salient feature is that you can import data not only from spreadsheets and databases but from live feeds too. The chart building wizard helps you pick right data for your chart, choose from hundreds of customization options to create charts that suit your requirements. ‘Embed wizard’ converts raw data into responsive visuals that can be rendered to multiple devices and screen sizes. You can embed charts on websites or share results on social media sites. All this can be done with the need to code at any level. Pricing starts from a free Basic plan to an Elite plan costing $65 per month.
DataWrapper: DataWrapper too doesn’t require any coding. It is a user-friendly application that largely targets media organizations. You can simply copy-paste your spreadsheet data, upload CSV, PDF files or even provide links to data sourced for live charts. There are many chart and map options to choose from which can be customized or annotated and they are mobile responsive. The chart designs can be customized to seamlessly integrate with your brand. You can embed your chart on your website or print an image or PDF version. The cost of DataWrapper depends on the kind of functionality you need, starting from Trial to Enterprise versions.
FusionCharts: FusionCharts is different because users can plug-in their data directly to any of the live templates instead of starting from scratch. It is based on a JavaScript API and you can seamlessly integrate with JavaScript Frameworks. It comes with open-source plugins for popular libraries (jQuery), frameworks (AngularJS & React) and languages (ASP.NET & PHP) making it easy to integrate with your current stack. They offer over 90 charts and 1000+ maps, which are customizable and extensive event handling can control how your charts behave under different scenarios like data loading, chart rendering etc. For pricing and plans, have a look here.
HighCharts: offers quick and simple visualization. They also offer other products with which you can create interactive charts, timeline charts, maps and online charts. It’s a free tool for non-commercial purposes. Click here for detailed shopping options. You don’t need much of training to start using it. It offers cross-browser support i.e. anyone can view and run its interactive visualizations. The downside is that there are limited possibilities to customize your charts.
Infogram: Though priced a little on the higher side, Infogram can process information in real time. It provides variety of templates to create infographics, dashboards, charts, images, videos, maps and much more. The platform has an intuitive drag and drop editor which lets you choose styles and also eases data import functions. The charts are interactive and easily embeddable.
Klipfolio: Klipfolio has plenty of visualization types and you can forge your own by using HTML and CSS. Instead of a drag and drop functionality, users have to implement computations using functions and formulas. It supports multiple file formats like XSL, CSV, JSON, XML and has the ability to integrate multiple data sources in a single report. This tool provides a self-serving KPI editing platform. Along with a free trial plan, pricing starts at $29 pm besides other customizable plans.
Plotly: is integrated with analytics-oriented programming languages like Python, R, and Matlab; offering complex and sophisticated visualizations. You can create slick graphics using its built-in library and chart development widget. No coding is required and it supports multiple data import and analysis options. You can simply plugin data and get going. Charts can be exported, embedded and even stored in well-organized folders. Costing varies significantly according to plans, although there is a free option too.
QlikView: QlikView has a steep learning curve and is slightly expensive, but it is amongst the major players in the BI space. Its features include strong data visualization capabilities, powerful BI, analytics and enterprise reporting capabilities and a clean UI. Users can explore and discover data as QlickView maintains and automatically manipulates data associations. Users don’t have to preconfigure data to identify relationships. It offers a quick and rich user experience by allowing storage and access of data by several users at a time, thereby allowing for faster queries. Dashboards and reports are easy to navigate but require developer skills to build reports.
Sisense: provides a full stack analytics platform. You can create charts, complex graphics and interactive visualizations using it’s drag and drop interface. Multiple data sources can be gathered in repositories, allowing for instantaneous querying and an option to share across the organization. Look at their subscription plans here.                                                         
Tableau: Tableau is one of the biggest market players in the industry. With a gentle learning curve and no programming required Tableau encourages intuitive and easy visualizations. The rich library of visualization types include “word clouds” and “bubble charts” making for faster data comprehension. Tree diagrams and treemaps provide contextual information.
 It integrates with a large number of advanced database solutions like Hadoop, Amazon AWS, My SQL, SAP and Teradata and thus can handle huge and dynamic datasets.
It has special features of Data Blending and can also collaborate in real time. You can share the reports in Tableau: by publishing them to a Tableau server; via email Tableau Reader capability; by publishing Tableau workbook openly and giving access to anyone who has a link. Tableau Public is a free software and Tableau offers various pricing options.
If this wasn’t enough, some other tools that can give more power to your BI are Chartio, GeckoBoard, Google Data Studio, Visually and many more.
Have a thought on any of them? Reach out to us on [email protected]
This article was first appeared on MarTech Advisor
0 notes
iyarpage · 8 years ago
Text
Updated Course: Scroll View School
Last week, we released an update to our Beginning Collection Views course. Today, we’re excited to share Scroll View School with you, updated for Swift 4 and iOS 11!
In this 34-video course, you’ll learn various aspects of implementing scroll views from manipulating frames and bounds to facing Auto Layout challenges. You’ll also explore some cool use cases for scroll views, like paging controls and custom pull to refresh solutions!
Let’s have a look at what’s inside.
Part 1: Beginning Scroll Views
In this first part, you’ll learn the basics of scroll views, including how to set the content size and solve Auto Layout challenges.
This section contains 12 videos:
Introduction: Scroll views are used everywhere in iOS. In this video, you’ll learn where they are used and why they are important to learn.
Frames and Bounds: Every view has a frame and has bounds. This video introduces these concepts and how they relate to scroll views.
DIY Scroll View: By writing a little code, you can write your own Do-It-Yourself custom scroll view.
Challenge: Update Frame and Bounds: In this challenge, you’ll see how frames and bounds work by altering these properties. Your job is to write the code.
Your First Scroll View: Now that you have an idea of how a scroll view works, you’ll be introduced to using the UIScrollView that is included with iOS.
Challenge: Set Content Size: Setting the content size determines the scrolling size of scroll view. In this video, you’ll learn how to set it.
Zooming: Pinch to zoom is a great way to increase or decrease the size of a view. In this video, you’ll learn how to implement it.
Centering Content: This video will show you the process of centering the content by way of adding padding.
Auto Layout: Learn how to setup constraints in your scroll views in order to layout your views.
Challenge: Auto Layout in a Scroll View: In this challenge, create a simply layout in a scroll view, using constraints.
Stack Views: Stacks Views are great to create layouts, but can be a pain when dealing with Auto Layout. This video will walk you through the issues.
Conclusion: This wraps up the section on beginning scroll views. In this video, you’ll get a glimpse at the next section.
Part 2: Intermediate Scroll Views
Dig into more advanced scroll topics such as nesting scroll views, content insets, and paging controls!
This section contains 11 videos:
Introduction: This video provides an overview of some of the topics that will be covered in this part of the course.
Embedding Layouts Often times, you’ll need to embed existing layouts into a scroll view. This video will show you how to do it.
Nesting Scroll Views: Sometimes you’ll need to embed a scroll view inside of a scroll view. This video shows how to do it without any issues.
Content Insets: Content insets are where you can add padding to a scroll view. This video will show you how.
Challenge: Adding Scroll View Insets: Now that you understand insets, this challenge will have you add them to a scroll view.
Keyboard Insets When a keyboard appears, it’s helpful to adjust a scroll view to account for the size of it. This is done by way of insets which you’ll learn here.
Challenge: Adding Keyboard Insets: Your challenge is to add some keyboard insets to the sample project.
Paging Scroll Views: Scroll views can be used to layout view controllers next to each other. This allows you to add paging to your app.
Paging Control A paging control shows the user where they are located in a series of pages. You’ll learn how to use this control in this video.
Challenge: Adding a Paging Control: Your challenge is to add a paging control to the sample app.
Conclusion: This video concludes this section and gives a brief overview of the next and final section.
Part 3: Scroll View Recipes
In the final part, learn how to implement some useful applications of scroll views like slide out navigation bars and custom refresh controls.
This section contains 11 videos:
Introduction: This video introduces the final section of the course.
Slide Out Sidebar: This video covers the theory behind the slide out navigation bar that you’ll construct in this section.
Challenge: Scroll View Offset: Your challenge is to add an offset to the scroll view so that the proper view controller is displayed.
Fixing Slide Out Issues: This video will fix the remaining issues with the slide out navigation bar.
Refresh Control: iOS comes with a pull to refresh control right out of the box. This video will show you how to use it.
Challenge: Add Refresh Control: Now you know how to use a refresh control, your challenge is to add it to the sample app.
Custom Refresh Control: While the stock pull to refresh is nice, a custom pull to refresh is pretty awesome. In the remaining videos, you’ll learn how to make a cool-looking pull to refresh using scroll views.
Parallax Scrolling: The custom pull to refresh has many different image elements. With a bit of code, this video will show you how to add a parallax effect.
Locking Scroll Views: When a user pulls down on the refresh view, a nice effect is to lock it into place. This video will show you how.
Finishing Touches: This video adds some polish to the pull to refresh and even makes Super Cat fly.
Conclusion: This final video reviews everything that was covered in this series.
Where To Go From Here?
Want to check out the course? You can watch the first three videos for free! The rest of the course is for raywenderlich.com subscribers only. Here’s how you can get access:
If you are a raywenderlich.com subscriber: The entire 34-part course is complete and available today. You can check out the course here.
If you are not a subscriber yet: What are you waiting for? Subscribe now to get access to our updated Scroll View School course and our entire catalog of over 500 videos.
Stay tuned for more new and updated iOS 11 courses to come. I hope you enjoy our course! :]
The post Updated Course: Scroll View School appeared first on Ray Wenderlich.
Updated Course: Scroll View School published first on http://ift.tt/2fA8nUr
0 notes
mobilith · 8 years ago
Text
Storyboards Tutorial for iOS: Part 2
Storyboards, Segues and Static Cells
Update note: This tutorial has been updated for Xcode 9, iOS 11, and Swift 4 by Nicholas Sakaimbo. The original tutorial was written by Matthijs Hollemans.
If you want to learn about storyboards, you’ve come to the right place!
In the first part of this series, you covered the basics of using Interface Builder to create and connect various view controllers, along with how to make custom table view cells directly from the storyboard editor.
In this second and final part of this storyboards tutorial series, we’ll cover segues, static table view cells, the Add Player scene, and game picker scene!
We’ll start where we left off last tutorial, so open your project from last time, or download the example code from the previous tutorial here.
OK, now you’ll dive into some of the other cool features in storyboards!
Introducing Segues
It’s time to add more view controllers to the storyboard. You’re going to create a scene to add new players to the app.
Open Main.storyboard and drag a Bar Button Item into the right slot of the navigation bar on the Players scene. In the Attributes inspector change System Item to Add, and set its Style to Bordered.
When the user taps this button, you want the app to pop up a new modal scene for entering details of a new player.
Drag a new Table View Controller into the canvas to the right of the Players scene. Remember you can double-click the canvas to zoom out so you have more room to work. With the new Table View Controller selected, choose Editor\Embed in\Navigation Controller.
Here’s the trick: Select the + button you just added on the Players scene and ctrl-drag to the new Navigation Controller. Release the mouse button and select Present Modally from the popup menu:
This places a new arrow between the Players scene and the Navigation Controller:
This type of connection is known as a segue (pronounce: seg-way) and represents a transition from one scene to another. The storyboard connections you’ve seen so far were relationships and they described one view controller containing another. A segue, on the other hand, changes what’s on the scene. Segues are triggered by taps on buttons, table view cells, gestures, and so on.
The cool thing about using segues is you don’t have to write any code to present the new scene, or hook up your buttons to IBAction methods. What you just did, dragging from the Bar Button Item to the next scene, is enough to create the transition. (Note: If your control already has an IBAction connection, the segue overrides it.)
Build and run the app and tap the + button. A new table view will slide up from the bottom.
This is called a modal segue. The new scene completely obscures the previous one. The user cannot interact with the underlying scene until they close the modal scene first. Later you’ll see “show” segues that push a new scene onto a Navigation Controller’s navigation stack.
The new scene isn’t very useful yet – you can’t even close it to go back to the main scene. That’s because segues only go one way – so while it can go from the Players scene to this new one, it can’t go back.
Storyboards provide the ability to ‘go back’ with something called an unwind segue, which you’ll implement next. There’s three main steps:
Create an object for the user to select, usually a button.
Create an unwind method in the controller you want to return to.
Hook up the method and the object in the storyboard.
First, open Main.storyboard and select the new Table View Controller scene. Change the title of the scene to Add Player (by double-clicking in the navigation bar). Next, add two Bar Button Items, one to each side of the navigation bar. In the Attributes inspector, set the System Item property of the left button to Cancel, and the right button to Done.
Next, add a new file to the project using the Cocoa Touch Class template – name it PlayerDetailsViewController and make it a subclass of UITableViewController. Next, open Main.storyboard and select the Add Player scene. In the Identity inspector set its Class to PlayerDetailsViewController. I always forget this very important step, so to make sure you don’t; I’ll keep pointing it out.
Now you can finally create the unwind segue. Open PlayersViewController.swift, add the following extension above your UITableViewDataSource extension:
// MARK: - IBActions extension PlayersViewController { @IBAction func cancelToPlayersViewController(_ segue: UIStoryboardSegue) { } @IBAction func savePlayerDetail(_ segue: UIStoryboardSegue) { } }
cancelToPlayersViewController(_:) is simply a marker for the unwind segue. Later you’ll add code to savePlayerDetail(_:) to allow it to live up to it’s name!
Finally, open Main.storyboard and hook up the Cancel and Done buttons to their respective action methods. Ctrl-drag from the bar button to the exit object above the view controller then pick the correct action name from the popup menu:
Note the name you gave the cancel method. When you create an unwind segue, the list will show all unwind methods (i.e. ones with the signature @IBAction func methodname(_ segue:)) in the entire app, so create a name you can recognize.
Build and run the app, tap the + button, and test the Cancel and Done buttons. A lot of functionality for very little code!
Storyboards Static Cells
When you’re finished with this section, the Add Player scene will look like this:
That’s a grouped table view, but you don’t have to create a data source for this table. You can design it directly in the storyboard — no need to write tableView(_:cellForRowAt:) for this one! Static cells is the feature that makes this possible.
Open Main.storyboard and select the table view in the Add Player scene. In the Attributes inspector change Content to Static Cells. Change Style from Plain to Grouped and give the table view 2 sections.
Note: When you change the value of the Sections attribute, the editor will clone the existing section. (You can also select a specific section in the Document Outline on the left and duplicate it.)
The finished scene will have only one row in each section, so select two cells in each of the sections and delete them using the Document Outline.
Next, select the top table view section (from the Document Outline) and set the header value to Player Name.
Drag a new Text Field into the cell for this section. Stretch out its width and remove its border so you can’t see where the text field begins or ends. Set the Font to System 17.0 and uncheck Adjust to Fit.
You’re going to make an outlet for this text field on the PlayerDetailsViewController using the Assistant Editor feature of Xcode. While still in the storyboard, open the Assistant Editor with the button from the toolbar (the one at the top right with two intertwining rings). It should automatically open on PlayerDetailsViewController.swift (if it doesn’t, use the jumpbar in the right hand split window to select PlayerDetailsViewController.swift).
Select the new text field and ctrl-drag to the top of PlayersDetailViewController, just below the class definition. When the popup appears, name the new outlet nameTextField, and click Connect. Xcode will add the property to the PlayersDetailViewController class and connect it in the storyboard:
Creating outlets for views on your table cells is exactly the kind of thing I said you shouldn’t try with prototype cells, but for static cells it’s OK. There will be only one instance of each static cell so it’s perfectly acceptable to connect their subviews to outlets on the view controller.
Select the second section of the table view in the Document Outline and delete the placeholder “Section-2” text in the Header field in the Attributes Inspector. Set the Style of the static cell in the second section to Right Detail. This gives you a standard cell style to work with. Change the label on the left to read Game by double clicking it and give the cell a Disclosure Indicator accessory.
Just as you did for nameTextField, make an outlet for the label that says Detail and name it detailLabel. The labels on this cell are just regular UILabel objects. You might need to click a few times on the text “Detail” to select the label (and not the whole cell) before ctrl-clicking and dragging to PlayerDetailsViewController.swift. Once done, it will look similar to the following:
The final design of the Add Player scene looks like this:
Note: The scenes you’ve designed so far in this storyboard all have the width and height of the 4.7-inch screen of the iPhone 7, which is 667 points tall. Obviously, your app should work properly with different screen sizes, and you can preview these sizes within your Storyboard.
Open the Assistant Editor from the toolbar, and use the jump bar to select Preview. At the bottom left of the assistant editor, click the + symbol to add new screen sizes to preview. To remove a screen size, select it and hit the Delete key.
For the Ratings app, you don’t have to do anything fancy. It only uses table view controllers and they automatically resize to fit the screen space. When you do need to support different layouts for different sized devices, you’ll use Auto Layout and Size Classes.
Build and run the app. You’ll notice the Add Player scene is still blank!
When you use static cells, your table view controller doesn’t need a data source. Since you used an Xcode template to create the PlayerDetailsViewController class, it still has some placeholder code for the data source and this prevents the static cells from working properly. Time to fix it!
Open PlayerDetailsViewController.swift and delete everything from the following line down (except for the class closing bracket):
override func viewDidLoad() { super.viewDidLoad() }
Build and run the app. Now the new scene displays the static cells, and all without writing a line of code.
One more thing about static cells: they only work in UITableViewController. Even though Interface Builder will let you add them to a table view inside a regular UIViewController, this won’t work during runtime. The reason is UITableViewController provides some extra magic to take care of the data source for the static cells. Xcode prevents you from compiling such a project with the error message: “Illegal Configuration: Static table views are only valid when embedded in UITableViewController instances”. Prototype cells, on the other hand, work just fine in table view’s placed inside regular view controllers.
Note: If you’re building a scene with a lot of static cells — more than can fit in the visible frame — you can scroll through them in Interface Builder with the scroll gesture on the mouse or trackpad (2 finger swipe).
You can’t always avoid writing code altogether though, even for a table view of static cells. When you dragged the text field into the first cell, you probably noticed it didn’t fit completely. There’s a small margin of space around the text field. The user can’t see where the text field begins or ends, so if they tap in the margin and the keyboard doesn’t appear, they’ll be confused.
To avoid this, let a tap anywhere inside the row bring up the keyboard. Open PlayerDetailsViewController.swift and add the following extension to the end of the file:
// MARK: - UITableViewDelegate extension PlayerDetailsViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.section == 0 { nameTextField.becomeFirstResponder() } } }
If the user taps the first cell, the app should activate the text field. There’s only one cell in the section so you only need to test for the section index. Making the text field the first responder will automatically bring up the keyboard.
Note: when adding a delegate method, or overriding a view controller method, just start typing the method name (without preceding it with “func”), and you’ll be able to select the correct method from the available list.
You should also set the Selection for the cell to None in the storyboard Attributes Inspector, otherwise the row appears highlighted when the user taps in the margin around the text field.
All right, that’s the design of the Add Player scene. Now to actually make it work!
The Add Player Scene at Work
For now you’ll ignore the Game row and just let users enter the name of the player.
When the user taps the Cancel button the scene should close and the data entered should be lost. This already works with the unwind segue.
When the user taps Done, you should create a new Player object, fill its properties and update the list of players.
prepare(for:sender:) is invoked whenever a segue is about to take place. You’ll override this method to store the data entered into a new Player object before dismissing the view.
Note: Never call prepare(for:sender:) yourself. It’s a message from UIKit to let you know a segue has just been triggered.
Open PlayerDetailsViewController.swift, and add the following property at the top of the class:
// MARK: - Properties var player: Player?
Next, add the following method below your IBOutlets definitions:
// MARK: - Navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "SavePlayerDetail", let playerName = nameTextField.text { player = Player(name: playerName, game: "Chess", rating: 1) } }
prepare(for:sender:) creates a new Player instance with default values for game and rating. It does this only for a segue with the identifier SavePlayerDetail.
Open Main.storyboard, find the Add Player scene in the Document Outline and select the unwind segue tied to savePlayerDetail:. Change Identifier to SavePlayerDetail:
Next, open PlayersViewController and replace the unwind segue method savePlayerDetail(_:) with the following:
@IBAction func savePlayerDetail(_ segue: UIStoryboardSegue) { guard let playerDetailsViewController = segue.source as? PlayerDetailsViewController, let player = playerDetailsViewController.player else { return } // add the new player to the players array players.append(player) // update the tableView let indexPath = IndexPath(row: players.count - 1, section: 0) tableView.insertRows(at: [indexPath], with: .automatic) }
This obtains a reference to the PlayerDetailsViewController via the segue reference and resolves the Player object. Next, append the new Player object to the players array. Finally, inform the table view a new row was inserted at the bottom, since the table view and its data source must always be in sync.
You could have invoked tableView.reloadData() but it looks nicer to insert the new row with an animation. UITableViewRowAnimation.automatic automatically picks the correct animation, depending on where you insert the new row.
Build and run the app, you should now be able to add new players to the list!
Performance
Since you have several view controllers in the storyboard, you might be wondering about performance. Loading a whole storyboard at once isn’t a big deal. The storyboard doesn’t instantiate all the view controllers right away – only the initial view controller is immediately loaded. Since your initial view controller is a Tab Bar Controller, the two view controllers it contains are also loaded (the Players scene from the first tab and the scene from the second tab).
The other view controllers are not instantiated until you segue to them. When you close these view controllers they’re immediately deallocated, so only the actively used view controllers are in memory.
To see this in practice, open PlayerDetailsViewController.swift and add the following below your IBOutlet definitions:
// MARK: - Initializers required init?(coder aDecoder: NSCoder) { print("init PlayerDetailsViewController") super.init(coder: aDecoder) } deinit { print("deinit PlayerDetailsViewController") }
You’re overriding init?(coder:) and deinit, and making them log a message to the Xcode Debug pane.
Build and run the app. Open the Add Player scene. You should see the print() log statement from init?(coder:).
When you close the Add Player scene, either by tapping Cancel or Done, you should see the print() log statement from deinit. If you open the scene again, you should also see the message from init?(coder:) again. This should reassure you that view controllers are loaded on-demand only.
The Game Picker Scene
Tapping the Game row in the Add Player scene should open a new scene to let the user pick a game from a list. This means you’ll add another table view controller, although this time you’re going to push it on the navigation stack rather than show it modally.
Open Main.storyboard and drag a new Table View Controller into the canvas. Next, select the Game table view cell in the Add Player scene (be sure to select the entire cell, not one of the labels) and ctrl-drag to the new table view controller to create a segue between them. Select Show under Selection Segue in the popup, not Accessory Action.
Select this new segue and give it the identifier PickGame in the Attributes Inspector.
Select the new table view controller in the Document Outline and in the Attributes Inspector, name this scene Choose Game.
Next, select the prototype table view cell and set the Style of the prototype cell to Basic, and give it the reuse identifier GameCell. That’s all you need to do for the design of this scene:
Add a new Swift file to the project, using the Cocoa Touch Class template and name it GamePickerViewController, subclass of UITableViewController.
Next, open Main.storyboard and select the Choose Game Scene. In the Identity Inspector, set its Custom Class to GamePickerViewController.
Now you’ll give this new scene some data to display. Open GamePickerViewController.swift, and add replace everything in the class definition with the following:
// MARK: - Properties var games = [ "Angry Birds", "Chess", "Russian Roulette", "Spin the Bottle", "Texas Hold'em Poker", "Tic-Tac-Toe" ]
Next, add the following extension to the end of the file:
// MARK: - UITableViewDataSource extension GamePickerViewController { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return games.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "GameCell", for: indexPath) cell.textLabel?.text = games[indexPath.row] return cell } }
Here you’re setting up the data source to use the games array and placing the string values in the cell’s textLabel.
Build and run the app and tap the Game row. The new Choose Game scene will slide into view. Tapping the rows won’t do anything yet, but because this scene is presented on the navigation stack, you can always tap the back button to return to the Add Player scene.
This is pretty cool, huh? You didn’t have to write any code to invoke this new scene. You just ctrl-dragged from the static table view cell to the new scene and that’s it. The only code you wrote was to populate the contents of the table view, which is typically something more dynamic rather than a hardcoded list.
Currently, this new scene isn’t very useful since it doesn’t send any data back. You’ll have to add a new unwind segue.
In GamePickerViewController add the following properties below the games property:
var selectedGame: String? { didSet { if let selectedGame = selectedGame, let index = games.index(of: selectedGame) { selectedGameIndex = index } } } var selectedGameIndex: Int?
Whenever selectedGame is updated, didSet will locate the game string in games array and automatically update selectedGameIndex with the correct index from the table.
Next, replace tableView(_:cellForRowAt:) with the following:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "GameCell", for: indexPath) cell.textLabel?.text = games[indexPath.row] if indexPath.row == selectedGameIndex { cell.accessoryType = .checkmark } else { cell.accessoryType = .none } return cell }
This sets a checkmark on the cell containing the name of the currently selected game. Small gestures such as these will be appreciated by users of the app.
Next, add the following extension below the UITableViewDataSource extension:
// MARK: - UITableViewDelegate extension GamePickerViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) // Other row is selected - need to deselect it if let index = selectedGameIndex { let cell = tableView.cellForRow(at: IndexPath(row: index, section: 0)) cell?.accessoryType = .none } selectedGame = games[indexPath.row] // update the checkmark for the current row let cell = tableView.cellForRow(at: indexPath) cell?.accessoryType = .checkmark } }
This method is called whenever the user taps a row. First deselect the row after it was tapped (makes it fade from the gray highlight color back to white). Finally, remove the checkmark from the previously selected cell, and puts it on the just tapped cell.
Build and run the app. Tap the name of a game and its row will get a checkmark. Tap the name of another game and the checkmark moves to that row.
The scene should close when the user taps a row but that doesn’t happen yet because you haven’t hooked up an unwind segue. Sounds like a great next step!
Open PlayerDetailsViewController.swift, and add the following below the player property:
var game: String = "Chess" { didSet { detailLabel.text = game } }
This property will hold the selected game so it can be stored in the Player object later. didSet will display the name of the game in the static table cell whenever the name changes.
Still in PlayerDetailsViewController.swift, add the following extension above your UITableViewDelegate extension:
// MARK: - IBActions extension PlayerDetailsViewController { @IBAction func unwindWithSelectedGame(segue: UIStoryboardSegue) { if let gamePickerViewController = segue.source as? GamePickerViewController, let selectedGame = gamePickerViewController.selectedGame { game = selectedGame } } }
This method is executed once the user selects a game from the Choose Game Scene and updates both the label on screen and the game property based on the game selected. The unwind segue also pops GamePickerViewController off the navigation controller’s stack.
Open Main.storyboard, ctrl-drag from the tableview cell to the Exit as you did before, and choose unwindWithSelectedGame: from the popup list:
In the Attributes Inspector give the new unwind segue the Identifier SaveSelectedGame.
Build and run the app. Create a new player, select the player’s game row and choose a game.
The game is not updated on the Add Player scene!
Unfortunately, the unwind segue method is performed before tableView(_:didSelectRowAt:), so the selectedGameIndex is not updated in time. Fortunately, you can override prepare(for:sender:) and complete the operation before the unwind happens.
Open GamePickerViewController, and add the following method below your property definitions:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard segue.identifier == "SaveSelectedGame", let cell = sender as? UITableViewCell, let indexPath = tableView.indexPath(for: cell) else { return } let index = indexPath.row selectedGame = games[index] }
The sender parameter of prepare(for:sender:) is the object that initiated the segue, which in this case was the selected game cell. You can use the indexPath to locate the selected game in games array then set selectedGame so it’s available in the unwind segue.
Build and run the app and select the game, it’ll update the player’s game details!
Next, you need to change PlayerDetailsViewController‘s prepare(for:sender:) to return the selected game, rather than the hardcoded “Chess”. This way, when you complete adding a new player, their actual game will be displayed on the Players scene.
Open PlayerDetailsViewController.swift, replace prepareForSegue(_:sender:) with the following:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "SavePlayerDetail", let playerName = nameTextField.text { player = Player(name: playerName, game: game, rating: 1) } }
When you complete the Add Player scene and tap done, the list of players will now update with the correct game.
One more thing – when you choose a game, return to the Add Player scene, then try to choose a game again, the game you chose before should have a checkmark by it. The solution is to pass the selected game stored in PlayerDetailsViewController over to the GamePickerViewController when you segue.
Still in PlayerDetailsViewController.swift, add the following to the end of prepare(for:sender:):
if segue.identifier == "PickGame", let gamePickerViewController = segue.destination as? GamePickerViewController { gamePickerViewController.selectedGame = game }
Note you now have two if statements checking segue.identifier. SavePlayerDetail is the unwind segue going back to the Players list, and PickGame is the show segue going forwards to the Game Picker scene. The code you added will set the selectedGame on the GamePickerViewController just before the view is loaded. Setting selectedGame will automatically update selectedGameIndex which is the index the table view cell uses to set a checkmark.
Awesome. You now have a functioning Choose Game scene!
One More Thing: Storyboard References
Open Main.storyboard and zoom out. You’ll see the complete project has several scenes.
This bird’s-eye-view of your project is nice, but you can imagine a large number of scenes could become unwieldy to navigate. In addition, multiple people working in the same storyboard file can lead to nasty merge conflicts in version control.
To mitigate these issues, you can use Storyboard References to split up an existing storyboard into one or more smaller storyboard files, separated by logical areas of functionality. Let’s see how this works by refactoring all view controllers from the Players tab into their own storyboard.
To do this, click + drag to select all view controllers starting from PlayerViewController‘s containing navigation controller to the Choose Game scene (you may need to zoom out sufficiently to do this). Alternatively, you could also use Command + click to select view controllers in the Document Outline.
Next, select Editor\Refactor to Storyboard to consolidate the selected scenes into their own storyboard.
When prompted for a filename, type “Players” and hit “Save”. You’ll see a new Players.storyboard file in your project containing all the scenes you just built. In addition, back in Main.storyboard, you’ll see the tab bar controller now points to the Players Storyboard Reference and not directly to the Players scene.
Build and run the project to confirm everything works as before. Voila! Refactoring storyboards is easy and could save you down the road – it’s a great tool to have in your toolbelt.
Where To Go From Here?
Here is the final Ratings example project with all of the code from the above tutorial.
Congratulations, you now know the basics of using the Storyboard Editor, and can create apps with multiple view controllers transitioning between each other with segues! Editing multiple view controllers and their connections to each other in one place makes it easy to visualize your app as a whole.
One item you didn’t add as part of this tutorial is the ability to change the player rating, but you now know enough about storyboards to implement this yourself for practice. :]
You’ve also seen how easy it is to customize table views and table view cells. Static cells make it easy to set up an interface without implementing all the data source methods.
If you want to learn more about storyboards, check out our book the iOS Apprentice.
If you have any questions or comments on this tutorial or on storyboards in general, please join the forum discussion below!
The post Storyboards Tutorial for iOS: Part 2 appeared first on Ray Wenderlich.
Storyboards Tutorial for iOS: Part 2 syndicated from http://ift.tt/2uHrXAJ
0 notes
techforum-blog · 8 years ago
Text
Hands-on: Web advancement in a hurry with Diet Coda for iPad Frenzy's portable Web advancement device is great, in spite of some harsh edges.
Panic has authoritatively discharged Coda 2, a noteworthy new form of the organization's honor winning Web improvement application. Freeze likewise accepted the open door to dispatch Diet Coda, another lightweight Web improvement device for the iPad. We did a few hands-on testing with Diet Coda to perceive how it stacks up for versatile altering.
Slim down Coda is lightweight apparatus that incorporates remote record administration abilities, content editing, and terminal get to. These capacities are entwined in an unmistakable interface that is fresh, expressive, and very much outlined. The center usefulness is all around executed, however the list of capabilities is scanty in spots and we found a modest bunch of bugs that reduced the nature of the client encounter.
Delving in
Count calories Coda begins at the webpage list, which demonstrates the greater part of your sites in a network. Every one is shown with a graphical thumbnail of the landing page. The client can include another site by tapping the in addition to button.Site arrangement is a generally clear process: the client inputs a server address, accreditations, and remote envelope. Eat less Coda can interface with a server by means of FTP, SFTP, and FTP with SSL. The client can likewise alternatively determine the SSH server deliver and login accreditations to use for terminal access with each site.File administration
After the client associates with a server, Diet Coda will show a double sheet record administration see. Remote document administration is a range where Diet Coda truly sparkles. The element is planned in a truly convincing, natural, and utilitarian way–exactly what you would anticipate from the general population who fabricated Transmit. The right-hand segment shows data about the chose record or organizer and gives catches to performing document administration operations.The left half of the interface shows the filesystem. The filesystem view is designed according to the Miller sections format utilized as a part of the Mac OS X finder–as the client plunges through the envelope chain of command, the substance of each chose organizer will be shown in another vertical segment. The section show can be dragged forward and backward evenly, making it simple to get go down to larger amounts of the registry structure.
The program enables clients to move, copy, erase, and rename records. With the exception of renaming, those operations can likewise alternatively be performed in clump mode. Slim down Coda additionally enables the client to alter document consents, a component that is bolstered with a shrewd finger-accommodating client interface.The just real frustration with essential record administration in Diet Coda is that the move operation doesn't seem to enable the client to intelligently pick the destination–the program requires the client to sort (or glue) the way of the goal.
I likewise experienced a minor bug that happens once in a while when endeavoring to erase an envelope. On the off chance that you have chosen a thing inside the organizer and after that backpedal and select the envelope itself, hitting the erase catch will regularly erase the thing rather than the parent organizer of course.
Content editing
Abstain from food Coda accompanies an inherent editorial manager for adjusting documents. It bolsters sentence structure highlighting and essential auto-finish on CSS, HTML, JavaScript, PHP, and Ruby. The support for HTML and CSS is sensibly great. CSS and JavaScript content that are inserted in a HTML archive are dealt with legitimately. The sentence structure highlighting utilizes great hues that are simple on the eyes yet at the same time have a lot of contrast.The autocompletion for CSS handles property names, however doesn't seem to work for qualities. The HTML autocompletion bolsters the standard labels and will consequently embed both an opening and shutting tag when utilized.
Writing computer programs is a range where Diet Coda misses the mark. The auto-consummation for Ruby, PHP, and JavaScript is primitive and doesn't seem to have any consciousness of the client's code. To the extent I can advise, it's quite recently coordinating against a huge inherent lexicon of standard capacity names and images.
The Ruby sentence structure highlighting didn't work extremely well and displayed various odd practices. In a few lines, for instance, everything after a twofold colon is highlighted inaccurately. The linguistic structure highlighting likewise seemed to have some trouble with Ruby's string interjection language structure, which got appropriate highlighting at times however not others.
It's important that Ruby isn't recorded as an upheld programming dialect on the Diet Coda website–the include gives off an impression of being exploratory. Extra programming dialects, for example, Python are not bolstered by any means. The Diet Coda site shows, be that as it may, that support for extra dialects is arranged later on.
The proofreader has a decent inherent find-and-supplant framework that alternatively bolsters standard expressions for coordinating. It additionally has a brilliant bits framework that you can use to characterize pieces of content that you need to have the capacity to effortlessly embed later.You can alternatively connect your scraps with a particular programming dialect or site. When you begin writing something that matches a bit, the editorial manager's auto-fruition system will offer to embed the applicable piece for you.One of the most delightful components in the Diet Coda content tool is the Super Loupe, a custom instrument for moving the cursor around inside the content cradle. Freeze supplanted the conventional round amplifying focal point with an amplifying hinder that traverses the whole width of the archive. It's a tiny bit confusing to use at to begin with, yet it's extremely viable in everyday utilize. It makes it a ton less demanding to see your position in the present line.
Site administration and terminal
At the point when the client is perusing records or altering a report, they can tap the purple catch in the upper left-hand corner to get to the archive list, which is outlined somewhat like the stage multitasking board. The Sites catch at the far left will take the client back to the site list. The Terminal catch will open the implicit SSH client.All of the reports that the client has right now open for the dynamic site will fill whatever is left of the line. The client can click any archive to hop back to altering it. The record rundown is particular to each site and will persevere between employments of the application.
Shutting a record is a great deal like erasing an application on the iOS home screen: the client does a long-press to make every one of the symbols shake and afterward hits the white X on top of the symbol. On the off chance that the record has unsaved changes, the client will be inquired as to whether they need to spare. This inner assignment administration interface is truly shrewd and it more often than not functions admirably, yet on two events the application hung when I played out a long-push on one of the symbols.
The terminal is a genuinely standard SSH customer that works generally of course. It's based on top of a similar motor that Panic utilizes as a part of Prompt, the organization's remarkable iPad SSH customer. There gives off an impression of being a bug, in any case, that makes message in the terminal not reliably display.Conclusion
In a 2010 meeting with Ars Technica's Jacqui Cheng, Cabel Sasser of Panic examined the likelihood of conveying the Coda client experience to the iPad. Building an entire site on a tablet PC didn't appear to be down to earth, he let us know at the time, however he perceived the potential benefit of empowering Web engineers to refresh their current sites from a tablet.
The Diet Coda application appears to have been customized around that sentiment–it is most appropriate for brisk altering on the fly. The application gives you a frictionless approach to get into your Web substance and begin rolling out improvements without jumping through a great deal of bands. It's particularly viable for clients who are working with a great deal of static HTML content.
Consume less calories Coda is less appropriate for Web application designers who are hoping to do genuine programming. The inherent manager in Diet Coda has some truly decent elements, however it misses the mark regarding committed programming editors for the iPad, for example, Textastic. The absence of certain basic elements like disconnected altering additionally restrains Diet Coda's handiness.
Regardless of the insufficiencies, Diet Coda is a noteworthy application with much to offer. It's present $19.99 cost in the iOS App Store is a tiny bit much for what you get, yet with some bugfixing, more extensive dialect bolster, and different enhancements, it can possibly in the long run turn into an irreplaceable instrument for Web designers.
0 notes
hotspreadpage · 8 years ago
Text
How to get started with 360-degree content for VR
Once a time and resource-heavy exercise, creating and embedding 360 degree imagery has become much cheaper and easier over the past couple of years.
The advent of mobile apps that can take 360-degree photographs, or ‘photo spheres’, has made creating 360-degree images accessible to those without specialized equipment.
At the same time, it has become easier to embed and share photospheres directly within webpages, and the virtual reality headsets which allow users to experience them are increasingly widespread and affordable.
Even without a virtual reality headset, users can still enjoy 360-degree imagery using their web or mobile browser, giving them the opportunity to experience a location or a visual idea in an immersive and memorable way.
So why should marketers be creating 360-degree content, and how can you get started with your own?
Why create 360-degree content?
In spite of the fact that 360-degree imagery is becoming easier to create, it’s still relatively rare, which makes it an effective way to stand out if you can do it well.
A 360-degree image is unusual, interactive, and offers a level of detail that even the most well-framed photograph can’t capture. Industries like travel, hotel, real estate or design lend themselves particularly well to 360-degree content, but it can work in any type of marketing if you’re prepared to get creative.
For instance, NASA – which is known for its inventive social media and content marketing – used 360-degree imagery on Facebook to allow users to ‘float around’ inside the Tranquility Module on the International Space Station.
Explore the Tranquility Module on the International Space Station in this 360° experience! (For best results, use a mobile device to float around)
Posted by NASA – National Aeronautics and Space Administration on Thursday, 9 June 2016
And Salesforce used it to show off an impressive 360-degree view of their lobby, complete with a massive projector wall for the big game:
We’re ready for Game 4! Are you? Check out a 360 view of our Salesforce West lobby at HQ!
Posted by Salesforce on Friday, 10 June 2016
Once you’ve got your creative idea and set out to create some 360-degree content, how do you go about it? Let’s take a look at some tools you can use.
How to create 360-degree imagery
Cardboard Camera
If you’ve got a smartphone and want to use it to create some VR content, one of the best options is Google’s Cardboard Camera – especially if you want to later use Google’s VR View to embed your image (more on that later).
Cardboard Camera is a free app specifically designed for the purpose of creating 360-degree images to be viewed in VR, and it’s available on both Android and iOS. Cardboard Camera images also come with an extra dimension – sound – to add to the experience, though you can disable this while recording if you want to.
To export your image afterwards, select any of the sharing options within Cardboard Camera (which you can bring up by tapping the Share  button), which will create a link that allows you to access the image on any device.
Native mobile camera apps
A number of mobile devices now come with pre-installed camera apps that have native 360-degree photo capabilities. Note that this isn’t quite the same as the ‘panorama’ feature on your smartphone camera, as panoramas are only 180 degrees; but they work for many of the same purposes, and can be embedded on Facebook in the same way as 360-degree images.
Google originally introduced photo sphere functionality with the Nexus 4, and the functionality remained for subsequent Nexus models. LG then built on this with its VR Panorama app, and Samsung made a photo sphere mode available for individual download on the Galaxy S5 and upwards.
Google also released a standalone camera app for Android, Google Camera, which has panorama and photo sphere capabilities. But if you’re not an Android user, don’t despair: Google released a Photo Sphere app for iOS as well in 2014.
There are a few other free to download apps which claim to offer 360-degree capabilities, but it’s worth reading the reviews first, as a number of them don’t work as advertised or don’t support all device types.
360-degree cameras
If you have a bit more to spend and want to really invest in 360-degree photography, you can of course buy a dedicated 360-degree camera rig. There is a huge range of these available at different price levels, so it’s worth doing your research to find the right device for your budget and needs.
Embedding and sharing VR content
So, you’ve had your idea; you’ve crafted your fantastically immersive 360-degree content. How do you go about embedding or sharing it online?
Embedding into a webpage or mobile app
Until recently, there wasn’t a single dedicated tool for embedding 360-degree imagery into webpages or mobile apps, and some creative coding was required in order to do so. That is, until Google VR View came along in May 2016.
Google’s VR View was created to “address a common developer concern: the limited availability of VR hardware among the general public.” There was definitely a gap in the market for this kind of tool, and by creating it Google has been able to gain a pretty nice monopoly over embedding 360-degree imagery in webpages. And of course in true stereoscopic VR mode, it’s designed to be compatible with Google Cardboard headsets.
A stereoscopic 360 degree image – for a truly immersive VR experience – consists of two images stacked on top of one another. Image: Google VR View
Google has a few different tutorials you can follow depending on whether you want to embed your photosphere into a website, Android app or iOS app. Choose from the links below to access the tutorial of your choice:
Web
Android
iOS
Embedding into WordPress
If you have a website that runs on WordPress, the WP-VR-view plugin for WordPress is the most straightforward and easy way to embed 360-degree images on your site. Just install the plugin, grab the link to your photosphere and follow the instructions in this video demo to embed.
And just to prove it works, below is an image I shot on my smartphone using Cardboard Camera on the banks of not-so-sunny Hammersmith, London, and embedded with the WP-VR-view plugin. (It looks best in full screen mode!)
Sharing 360 degree content via Facebook
As we saw at the beginning of the post, it’s also possible to share your 360-degree content on Facebook as an interactive image post.
All you need to do is upload your 360-degree image or panorama to your Page or profile as you would a regular image, and Facebook will automatically recognize that the post contains a 360-degree image.
  Then all that’s left to do is write your post, and publish!
  We’ve been experimenting with some 360° imagery over at Search Engine Watch – stay tuned for our guide on how to get…
Posted by Search Engine Watch on Monday, 27 February 2017
Stay tuned for our Part 2, where we’re going to look at how you can optimize your 360-degree content for SEO.
How to get started with 360-degree content for VR syndicated from http://ift.tt/2maPRjm
0 notes
kellykperez · 8 years ago
Text
How to get started with 360-degree content for VR
Once a time and resource-heavy exercise, creating and embedding 360 degree imagery has become much cheaper and easier over the past couple of years.
The advent of mobile apps that can take 360-degree photographs, or ‘photo spheres’, has made creating 360-degree images accessible to those without specialized equipment.
At the same time, it has become easier to embed and share photospheres directly within webpages, and the virtual reality headsets which allow users to experience them are increasingly widespread and affordable.
Even without a virtual reality headset, users can still enjoy 360-degree imagery using their web or mobile browser, giving them the opportunity to experience a location or a visual idea in an immersive and memorable way.
So why should marketers be creating 360-degree content, and how can you get started with your own?
Why create 360-degree content?
In spite of the fact that 360-degree imagery is becoming easier to create, it’s still relatively rare, which makes it an effective way to stand out if you can do it well.
A 360-degree image is unusual, interactive, and offers a level of detail that even the most well-framed photograph can’t capture. Industries like travel, hotel, real estate or design lend themselves particularly well to 360-degree content, but it can work in any type of marketing if you’re prepared to get creative.
For instance, NASA – which is known for its inventive social media and content marketing – used 360-degree imagery on Facebook to allow users to ‘float around’ inside the Tranquility Module on the International Space Station.
Explore the Tranquility Module on the International Space Station in this 360° experience! (For best results, use a mobile device to float around)
Posted by NASA – National Aeronautics and Space Administration on Thursday, 9 June 2016
And Salesforce used it to show off an impressive 360-degree view of their lobby, complete with a massive projector wall for the big game:
We're ready for Game 4! Are you? Check out a 360 view of our Salesforce West lobby at HQ!
Posted by Salesforce on Friday, 10 June 2016
Once you’ve got your creative idea and set out to create some 360-degree content, how do you go about it? Let’s take a look at some tools you can use.
How to create 360-degree imagery
Cardboard Camera
If you’ve got a smartphone and want to use it to create some VR content, one of the best options is Google’s Cardboard Camera – especially if you want to later use Google’s VR View to embed your image (more on that later).
Cardboard Camera is a free app specifically designed for the purpose of creating 360-degree images to be viewed in VR, and it’s available on both Android and iOS. Cardboard Camera images also come with an extra dimension – sound – to add to the experience, though you can disable this while recording if you want to.
To export your image afterwards, select any of the sharing options within Cardboard Camera (which you can bring up by tapping the Share  button), which will create a link that allows you to access the image on any device.
Native mobile camera apps
A number of mobile devices now come with pre-installed camera apps that have native 360-degree photo capabilities. Note that this isn’t quite the same as the ‘panorama’ feature on your smartphone camera, as panoramas are only 180 degrees; but they work for many of the same purposes, and can be embedded on Facebook in the same way as 360-degree images.
Google originally introduced photo sphere functionality with the Nexus 4, and the functionality remained for subsequent Nexus models. LG then built on this with its VR Panorama app, and Samsung made a photo sphere mode available for individual download on the Galaxy S5 and upwards.
Google also released a standalone camera app for Android, Google Camera, which has panorama and photo sphere capabilities. But if you’re not an Android user, don’t despair: Google released a Photo Sphere app for iOS as well in 2014.
There are a few other free to download apps which claim to offer 360-degree capabilities, but it’s worth reading the reviews first, as a number of them don’t work as advertised or don’t support all device types.
360-degree cameras
If you have a bit more to spend and want to really invest in 360-degree photography, you can of course buy a dedicated 360-degree camera rig. There is a huge range of these available at different price levels, so it’s worth doing your research to find the right device for your budget and needs.
Embedding and sharing VR content
So, you’ve had your idea; you’ve crafted your fantastically immersive 360-degree content. How do you go about embedding or sharing it online?
Embedding into a webpage or mobile app
Until recently, there wasn’t a single dedicated tool for embedding 360-degree imagery into webpages or mobile apps, and some creative coding was required in order to do so. That is, until Google VR View came along in May 2016.
Google’s VR View was created to “address a common developer concern: the limited availability of VR hardware among the general public.” There was definitely a gap in the market for this kind of tool, and by creating it Google has been able to gain a pretty nice monopoly over embedding 360-degree imagery in webpages. And of course in true stereoscopic VR mode, it’s designed to be compatible with Google Cardboard headsets.
A stereoscopic 360 degree image – for a truly immersive VR experience – consists of two images stacked on top of one another. Image: Google VR View
Google has a few different tutorials you can follow depending on whether you want to embed your photosphere into a website, Android app or iOS app. Choose from the links below to access the tutorial of your choice:
Web
Android
iOS
Embedding into WordPress
If you have a website that runs on WordPress, the WP-VR-view plugin for WordPress is the most straightforward and easy way to embed 360-degree images on your site. Just install the plugin, grab the link to your photosphere and follow the instructions in this video demo to embed.
And just to prove it works, below is an image I shot on my smartphone using Cardboard Camera on the banks of not-so-sunny Hammersmith, London, and embedded with the WP-VR-view plugin. (It looks best in full screen mode!)
Sharing 360 degree content via Facebook
As we saw at the beginning of the post, it’s also possible to share your 360-degree content on Facebook as an interactive image post.
All you need to do is upload your 360-degree image or panorama to your Page or profile as you would a regular image, and Facebook will automatically recognize that the post contains a 360-degree image.
Then all that’s left to do is write your post, and publish!
We've been experimenting with some 360° imagery over at Search Engine Watch – stay tuned for our guide on how to get…
Posted by Search Engine Watch on Monday, 27 February 2017
Stay tuned for our Part 2, where we’re going to look at how you can optimize your 360-degree content for SEO.
from IM Tips And Tricks https://searchenginewatch.com/2017/02/27/how-to-get-started-with-360-degree-content-for-vr/
0 notes
sheilalmartinia · 8 years ago
Text
How to get started with 360-degree content for VR
Once a time and resource-heavy exercise, creating and embedding 360 degree imagery has become much cheaper and easier over the past couple of years.
The advent of mobile apps that can take 360-degree photographs, or ‘photo spheres’, has made creating 360-degree images accessible to those without specialized equipment.
At the same time, it has become easier to embed and share photospheres directly within webpages, and the virtual reality headsets which allow users to experience them are increasingly widespread and affordable.
Even without a virtual reality headset, users can still enjoy 360-degree imagery using their web or mobile browser, giving them the opportunity to experience a location or a visual idea in an immersive and memorable way.
So why should marketers be creating 360-degree content, and how can you get started with your own?
Why create 360-degree content?
In spite of the fact that 360-degree imagery is becoming easier to create, it’s still relatively rare, which makes it an effective way to stand out if you can do it well.
A 360-degree image is unusual, interactive, and offers a level of detail that even the most well-framed photograph can’t capture. Industries like travel, hotel, real estate or design lend themselves particularly well to 360-degree content, but it can work in any type of marketing if you’re prepared to get creative.
For instance, NASA – which is known for its inventive social media and content marketing – used 360-degree imagery on Facebook to allow users to ‘float around’ inside the Tranquility Module on the International Space Station.
(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.3"; fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));
Explore the Tranquility Module on the International Space Station in this 360° experience! (For best results, use a mobile device to float around)
Posted by NASA – National Aeronautics and Space Administration on Thursday, 9 June 2016
And Salesforce used it to show off an impressive 360-degree view of their lobby, complete with a massive projector wall for the big game:
(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.3"; fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));
We're ready for Game 4! Are you? Check out a 360 view of our Salesforce West lobby at HQ!
Posted by Salesforce on Friday, 10 June 2016
Once you’ve got your creative idea and set out to create some 360-degree content, how do you go about it? Let’s take a look at some tools you can use.
How to create 360-degree imagery
Cardboard Camera
If you’ve got a smartphone and want to use it to create some VR content, one of the best options is Google’s Cardboard Camera – especially if you want to later use Google’s VR View to embed your image (more on that later).
Cardboard Camera is a free app specifically designed for the purpose of creating 360-degree images to be viewed in VR, and it’s available on both Android and iOS. Cardboard Camera images also come with an extra dimension – sound – to add to the experience, though you can disable this while recording if you want to.
To export your image afterwards, select any of the sharing options within Cardboard Camera (which you can bring up by tapping the Share  button), which will create a link that allows you to access the image on any device.
Native mobile camera apps
A number of mobile devices now come with pre-installed camera apps that have native 360-degree photo capabilities. Note that this isn’t quite the same as the ‘panorama’ feature on your smartphone camera, as panoramas are only 180 degrees; but they work for many of the same purposes, and can be embedded on Facebook in the same way as 360-degree images.
Google originally introduced photo sphere functionality with the Nexus 4, and the functionality remained for subsequent Nexus models. LG then built on this with its VR Panorama app, and Samsung made a photo sphere mode available for individual download on the Galaxy S5 and upwards.
Google also released a standalone camera app for Android, Google Camera, which has panorama and photo sphere capabilities. But if you’re not an Android user, don’t despair: Google released a Photo Sphere app for iOS as well in 2014.
There are a few other free to download apps which claim to offer 360-degree capabilities, but it’s worth reading the reviews first, as a number of them don’t work as advertised or don’t support all device types.
360-degree cameras
If you have a bit more to spend and want to really invest in 360-degree photography, you can of course buy a dedicated 360-degree camera rig. There is a huge range of these available at different price levels, so it’s worth doing your research to find the right device for your budget and needs.
Embedding and sharing VR content
So, you’ve had your idea; you’ve crafted your fantastically immersive 360-degree content. How do you go about embedding or sharing it online?
Embedding into a webpage or mobile app
Until recently, there wasn’t a single dedicated tool for embedding 360-degree imagery into webpages or mobile apps, and some creative coding was required in order to do so. That is, until Google VR View came along in May 2016.
Google’s VR View was created to “address a common developer concern: the limited availability of VR hardware among the general public.” There was definitely a gap in the market for this kind of tool, and by creating it Google has been able to gain a pretty nice monopoly over embedding 360-degree imagery in webpages. And of course in true stereoscopic VR mode, it’s designed to be compatible with Google Cardboard headsets.
A stereoscopic 360 degree image – for a truly immersive VR experience – consists of two images stacked on top of one another. Image: Google VR View
Google has a few different tutorials you can follow depending on whether you want to embed your photosphere into a website, Android app or iOS app. Choose from the links below to access the tutorial of your choice:
Web
Android
iOS
Embedding into WordPress
If you have a website that runs on WordPress, the WP-VR-view plugin for WordPress is the most straightforward and easy way to embed 360-degree images on your site. Just install the plugin, grab the link to your photosphere and follow the instructions in this video demo to embed.
And just to prove it works, below is an image I shot on my smartphone using Cardboard Camera on the banks of not-so-sunny Hammersmith, London, and embedded with the WP-VR-view plugin. (It looks best in full screen mode!)
Sharing 360 degree content via Facebook
As we saw at the beginning of the post, it’s also possible to share your 360-degree content on Facebook as an interactive image post.
All you need to do is upload your 360-degree image or panorama to your Page or profile as you would a regular image, and Facebook will automatically recognize that the post contains a 360-degree image.
Then all that’s left to do is write your post, and publish at will:
(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.3"; fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));
We've been experimenting with some 360° imagery over at Search Engine Watch – stay tuned for our guide on how to get…
Posted by Search Engine Watch on Monday, 27 February 2017
What are your experiences of creating and sharing 360-degree content? Share them in the comments!
from Search Engine Watch https://searchenginewatch.com/2017/02/27/how-to-get-started-with-360-degree-content-for-vr/
0 notes
mbaljeetsingh · 7 years ago
Text
Capacitor in 2019: Native Progressive Web Apps for All
👋 if you’re new here, Capacitor is the latest project from the team behind Ionic Framework that provides an abstraction on top of Native SDKs so you can write modern web apps and access any Native SDK through a cross-platform, portable layer. Capacitor apps work on iOS, Android, Electron, and the web as a PWA.
It’s our take on a stew with Cordova and Turbolinks and a bit of React Native for seasoning, focused on building modern web apps on mobile, what we call “Native Progressive Web Apps.”
Capacitor and Ionic Framework are a delightful pairing, with Ionic providing the cross-platform UI controls, and Capacitor providing the runtime and Native SDK access. You might even detect subtle notes of cherry and leather and cigar smoke.
So…2018…Amiright?
In 2018, Capacitor largely flew under the radar. This was intentional. Today, most Ionic apps run Cordova, which is working well for many users. We felt no need to cause even more of a stir by forcing a whole new native layer on users, and we also knew that there would be bugs, as Capacitor, in general, wouldn’t be production ready for a bit. With Ionic 4 creating enough stress as it were, we didn’t want to add more to the mix with Capacitor.
Despite that, we were excited to see an increased interest in Capacitor from the Ionic community and communities outside of Ionic. Many Ionic users built apps with Capacitor and had very positive impressions of the project. I also personally received encouraging inbound interest from reporters and some dev rel folks at projects like Angular. Despite being largely an improvement on existing approaches, something about Capacitor felt new and fresh.
Above all, what got me jazzed most about Capacitor is how many folks from non-web JS projects like React Native and NativeScript were excited about Capacitor. The feedback from them was similar: “I always wanted to continue to build with web technologies on mobile, but I struggled with Cordova and the native tooling and at some point, I got fed up and was just done with it. Capacitor will bring me back.”
This feedback was critical for us, as it meant that Capacitor was following the right vision (“the web will win”), and that making some major UX improvements on how past tools like Cordova worked were paying off.
During the rest of 2018, the Capacitor team, now led by Julio Cesar with contributions from the community, added a number of key features to Capacitor. Those features included Push and Local Notification support out of the box, so apps can get notifications without worrying about installing extra plugins or adding new libraries—Plus, support for Electron, tons of bug fixes, and web implementations for key plugins.
Fast forward to November 2018, and the team at Ionic is finally coming up for air with Ionic 4 final fast approaching. We’ve been having a lot of internal conversations about our plans for open source in 2019 and where Capacitor fits in…
2019
In 2019, Capacitor will become the official native abstraction and runtime for all Ionic apps. But in order to get there, a few things need to happen:
First, we need to ship the 1.0, production-ready release of Capacitor. We plan to do that close to the v4 final release which is slated for January.
Next, while we added Capacitor support to Ionic CLI this year, we haven’t promoted it or made a big splash about it, yet. In 2019, we are going to encourage users to try it out for new apps. That means prompts in the CLI and more promotion on the getting started guide.
Finally, Capacitor needs to be integrated into our commercial DevOps product (Ionic Pro). Developers need to be able to do builds with Capacitor and push remote updates in Capacitor apps—All that work will be ongoing in 2019.
For the project itself, a big priority for 2019 is not adding features, but instead doubling down on stability. That means investing in more unit and automated testing. We want Capacitor to be the most stable mobile platform around, and we do that by letting the community build on top of it, while we focus on creating a wonderfully stable and reliable core runtime.
Speaking of the community, we have work to do to help the community flourish and be everything that it can be. Despite the fact that we did not do a lot of community work in 2018, I am thrilled about the 1300 folks that joined our Slack and the volume of PRs and contributions we’ve had on the Capacitor Github repo. Whenever you make something new like Capacitor it’s always hard to know if it’s going to be a thing. Having seen projects like Ionic definitely become a thing, it’s thrilling to see the same early adopter passion for Capacitor that Ionic had when we started.
Beyond community development, a major priority for us is making it easy for developers to build awesome plugins and native integrations, and getting those in front of the Capacitor community. That means adding an index of existing Capacitor plugins and investing in our plugin development guides.
Speaking of Cordova…
What about Cordova?
Even though Ionic has been working on a new project that essentially replaces Cordova, we still use Cordova heavily and continue to invest in the platform. In fact, we are planning on directly supporting Cordova for Enterprise customers for a long time to come. That means our investment in the platform will grow rather than shrink. Stay tuned for more updates on this specific support plan in 2019.
We get asked often: why couldn’t we have just improved or modified Cordova? Unfortunately, I don’t have an answer that will satisfy many people as for why we built our own thing instead. The open source space is filled with new projects that built on older projects and made tangible improvements that couldn’t have been done without radically changing the original product, which is what Capacitor would have required. We felt like we couldn’t do that with Cordova for technical and political reasons. Whether that is right or wrong that is the conclusion we came to.
On the plus side, Ionic now controls almost all of its stack. When you build an Ionic v4 app and use Capacitor, we control the native runtime layer, the UI controls, and the “framework” used to build the controls (Stencil). The only part we don’t control is the frontend framework you use on top (Angular, React, Vue, or nothing). This is significant: If there’s an issue in any part of the stack that we control, we can fix it right away. We are already seeing some wonderful returns on this investment and it’s enabling us to build a stronger Ionic and focus on what we do uniquely well.
One last thing: For our enterprise customers that are using some of our premium Cordova plugins like Identity Vault or Couchbase Lite Enterprise integration, expect those plugins to work for both Cordova and Capacitor in 2019 as we have been deliberate in building them in a cross-runtime fashion.
So, no new features?
Well, okay, maybe a few, but we’re not necessarily forcing them to happen in 2019.
One of the big things that I want to see happen with Capacitor is easier integration with Native SDKs. The reality of the mobile market is that many services and SDK vendors are pulling back from building plugins for third-party frameworks like Cordova or React Native, and instead focusing on their native iOS and Android SDKs (while encouraging the community to build wrappers for their framework of choice). A lot of this is a reaction to the sheer number of options in the market, as it’s just not feasible for many companies to support every cross-platform solution under the sun.
We’ve been noodling on an idea we are calling Capacitor Native Views: A super simple way to wrap a Native SDK and expose it as a reusable component that can be easily consumed in JavaScript.
Some toolkits, like NativeScript, take the extreme approach of exposing every Native SDK API to JavaScript. We think the security implications of that are undesirable, and it doesn’t remove your need to learn platform-specific APIs. We don’t think you should have to learn those APIs if you don’t want to, and we don’t think you should expose all Native APIs to JavaScript for security reasons.
Instead, Native Views provide a structure for wrapping and consuming a Native SDK so that it can be easily and safely exposed to JS and your web code, with rich TypeScript support and minimal maintenance required for the actual wrapper.
This idea is still super early, so don’t expect this to land in 2019, but we mainly want to gauge interest in the concept and figure out what we need to do to make it happen at a larger scale.
Beyond that, we want to make it easy for Capacitor to embed into existing native projects, something we’ve already started to see. In fact, we’ve had several requests for embedding Capacitor into a React Native shell so you can build most of your app with Ionic + Web Technology, and wrap it with some React Native calls. That was something we didn’t anticipate, but is really exciting because it further proves to us that developers can get huge productivity gains by building 90%+ of their app with web technology. Expect to see embed work happen in 2019.
Until next time…
We’re heads down and focused on getting some big releases out at Ionic for the end of the year, Capacitor included. We’re more excited than ever about the opportunity to make building mobile apps even easier than before, all by focusing on the most widely used and known technology stack in the world: The web.
Stay tuned for a big 1.0 update from us on Capacitor soon, and until then we hope to see you around the repo!
Interested in getting started with Capacitor? Check out our announcement webinar:
youtube
via The Official Ionic Blog https://ift.tt/2DBfnu8
0 notes