Microsoft & .NETASPPseudo-Objects in Active Server Pages

Pseudo-Objects in Active Server Pages

In this article, I describe pseudo-objects and illustrate how to program with them.

Tools & Resources

The following tools and resources are recommended for testing the example programs that are presented in this article:

  • Access to an ASP web server. This can be Personal Web Server (PWS) on Win95, Win98, or WinNT Workstation, or Internet Information Server (IIS) on Windows NT Server.
  • A database that can be accessed via ODBC, for example Microsoft Access, Microsoft SQL Server, or Oracle.
  • Microsoft Visual InterDev, or your favorite text editor.

Note: Having access to a database is not absolutely necessary. With just a little work, the sample programs that I present can be modified so that they don’t access a database.

Basic Pseudo-Objects

Many ASP programs are written in VBScript, which does not provide a way to create user-defined objects (unlike VB). That is, in VBScript you can’t define your own classes then create objects from those classes.

However, ASP has an object called Dictionary that is similar to an Associative array in Perl or a Hashtable in Java. It provides a mechanism by which you can store key-value pairs. Here [“DictionaryObj.asp”] is a simple program that demonstrates using the Dictionary object. It creates a Dictionary object, adds some items to it, then displays the contents of the object.

With the Dictionary object you can create “objects” with dynamically defined fields. They are not real objects, because they don’t have methods, but are useful nonetheless. Thus, I call them “pseudo-objects”. A simple example program that illustrates a basic pseudo-object called “Car” is here [“BasicObj.asp”]. It creates a new Car pseudo-object, sets the fields, then displays the object.

Even though methods cannot be defined for pseudo-objects, functions and subroutines can be written that manipulate pseudo-objects in a similar manner. For example, the Car_New() function in “BasicObj.asp” creates and returns a New Car object.

The functions and subroutines for a pseudo-object can be packaged together in an include file to create an encapsulated unit that is similar a complete user-defined object. You will see an example of this in the next section.

Database Objects

Database objects provide a layer of separation between the application and the database, because programs only have to deal with the objects, not the database. One way to implement database pseudo-objects is to write functions and subroutines that retrieve, create, update, and delete objects that are stored in a database.

A program that illustrates a database version of the Car pseudo-object shown in the previous section is here [“DatabaseObj.asp”]. It creates a few Car pseudo-objects in the database, loads a list of the cars that match given criteria, shows the list, sets the color of each car in the list to blue, shows the list again, deletes one car, loads a list of all cars, then shows the list one final time.

Note that the “DatabaseObj.asp” program assumes the following:

  • A database called “CarDB” exists.
  • A table called “Cars” exists in the “CarDB” database.
  • A system Data Source Name (DSN) called “CarDB” has been created in the
  • ODBC control panel on the web server.

The include file that contains the implementation of the Car pseudo-object is here here [“Car.inc.txt”]. An include file that contains some database functions is here [“db.inc.txt”].

Entity Objects

After using pseudo-objects a couple of times, I realized that I had redundant code in each object that could be abstracted. So, I created a generic pseudo-object, which I called an Entity. Then, I implemented other pseudo-objects in my applications as compositions of the Entity pseudo-object. Essentially, this is one way to achieve the equivalent of inheritance in a programming language that is not object-oriented. (You can do something similar in VB to fake inheritance.)

The code for the Entity pseudo-object is here [“Entity.inc”].

An implementation of the Car pseudo-object that has been re-written as a composition of the Entity pseudo-object is here [“Car2.inc.”].

Notice that each function or subroutine is merely a wrapper for the corresponding function or subroutine of the Entity pseudo-object. If you modify “DatabaseObj.asp” so that it includes “Entity.inc” and “Car2.inc” instead of “Car.inc”, it should run correctly without any other changes. (Note: Be sure “Entity.inc” is included before “Car2.inc”.)

Field Inspection

Since pseudo-objects are based on the ASP Dictionary object, inspection of the fields is possible. First, the field names are just the keys in the Dictionary and can be retrieved with the Keys() method. Second, the field types can be determined with the TypeName() function. Here [“FieldInspection.asp”] is a simple example.

With field inspection, more advanced operations are possible, such as serialization and simple cloning. These are presented in the next two sections.

Serialization

As I used pseudo-objects for more applications, I discovered that I needed to pass them from one program to another, or create them from an input form. So, I implemented a couple of routines to serialize and deserialize pseudo-objects. The code for them can be seen in “Entity.inc”.

Basically, Entity_URLEncode() serializes an object to a string that is URL encoded, so that it can be passed as a series of URL parameters. Entity_URLDecode() reverses the process, decoding data from a given Request object (an ASP object that contains HTTP request data) into an empty pseudo-object. The fields of the pseudo-object are determined by using field inspection to examine the empty pseudo-object.

A program that illustrates serialization and deserialization of a pseudo-object is here [“SerialObj.asp.”]. It creates a pseudo-object, presents a form for changing the fields. When the user clicks the “Submit” button, the Car object will be updated and show in the form again. When the user clicks on the “Revert” link, any changes will be discarded and the previous car object will be displayed in the form.

Cloning

At some point in development of an application, I determined that I needed to make a copy of a pseudo-object. So, I wrote Entity_Clone(), a function that returns a copy of a given object. Note, though, that Entity_Clone() only makes a shallow copy. If the given object contains references to other objects, those objects will not be cloned.

Entity_Clone() uses field inspection to examine the given object and Determine its field names, then uses the field names to copy the field values to a new object. You can see the code for it in “Entity.inc”. Also, here [“CloneObj.asp”] is a simple program that creates a pseudo-object, clones it, then displays both objects.

Summary

In this article, I have described pseudo-objects, illustrated how to use them, and shown some advanced operations that can be performed with them. Hopefully, you have seen how they can provide a good layer of separation between ASP programs and a database.


About the author:

Thornton Rose is a software developer who lives and works in Atlanta, Georgia. He can be reached via e-mail at [email protected].

 


%
‘ DictionaryObj.asp – Simple program to show usage of Dictionary object.

‘ Force variables to be declared.

option explicit

‘ Declare variables.

dim objFoo

‘ Create empty Dictionary object.

set objFoo = Server.CreateObject(“Scripting.Dictionary”)

‘ Add items.

‘ Note: The item keys are case-sensitive. If you add an item with the key
‘ “color”, you cannot retrieve it with the key “Color”.

objFoo.Add “color”, “blue”
objFoo.Add “size”, 1

‘ Show object.

Response.Write “

” & vbCrLf
Response.Write “objFoo.color = ” & objFoo(“color”) & vbCrLf
Response.Write “objFoo.size = ” & objFoo(“size”) & vbCrLf
Response.Write “
” & vbCrLf
%>


<% ' BasicObj.asp - Simple program to show pseudo-object called "Car". ' Force variables to be declared. option explicit ' Declare variables. dim objCar ' Create a Car pseudo-object. set objCar = Car_New() objCar("make") = "Toyota" objCar("model") = "Corolla" objCar("year") = 1991 ' Show the car. Response.Write "objCar: " & objCar("year") & " " & objCar("make") & " " & _ objCar("model") & vbCrLf ' ----------------------------------------------------------------------------- ' Car_New(): Creates a new, empty Car object. ' function Car_New() dim objCar ' Create Dictionary object as base. set objCar = Server.CreateObject("Scripting.Dictionary") ' Add fields. objCar.Add "make", "" objCar.Add "model", "" objCar.Add "year", 0 ' Return the new, empty Car. set Car_New = objCar end function %>


<% ' DatabaseObj.asp - Program to show database version of pseudo-object called ' "Car". option explicit %>

NOTE: include file=”db.inc”
NOTE: include file=”car.inc”



DatabaseObj.asp



<% dim strConn ' Connection string dim carList ' List of cars dim car ' Car object dim items ' Array of car objects dim result ' Result code dim i ' Counter ' Specify database connection. strConn = "DSN=CarDB;UID=;PWD=" ' Put some car objects in the database. CreateCars strConn Response.Write vbCrLf ' Load and show a list of Cars that are newer than 1990, ordered by make. set carList = Car_Load(strConn, "year > 1990″, “make, model, year”)

Response.Write “Cars newer than 1990:” & vbCrLf
ShowCarList carList
Response.Write vbCrLf

‘ Make the 1990 and later cars blue.

items = carList.Items()

for i = 0 to UBound(items)
set car = items(i)
car(“color”) = “blue”
result = Car_Update(strConn, car)
next

‘ Show the cars again.

Response.Write “Blue cars newer than 1990:” & vbCrLf
ShowCarList carList
Response.Write vbCrLf

‘ Delete the 1997 Geo Prizm.

set car = carList(“1003″)
result = Car_Delete(strConn, car)

ShowCar car
Response.Write ” deleted.” & vbCrLf & vbCrLf

‘ Load the list of all cars, then show it.

set carList = Car_Load(strConn, “”, “make, model, year”)

Response.Write “All cars that are left:” & vbCrLf
ShowCarList carList

‘ —————————————————————————–

‘ CreateCars(): Populate the database with some cars.

sub CreateCars(strConn)
dim objCar

‘ Car 1

set objCar = Car_New()
objCar(“VIN”) = “1001”
objCar(“make”) = “Toyota”
objCar(“model”) = “Corolla”
objCar(“color”) = “white”
objCar(“year”) = 1991

Car_Insert strConn, objCar

ShowCar objCar
Response.Write ” inserted.” & vbCrLf

‘ Car 2

set objCar = Car_New()
objCar(“VIN”) = “1002”
objCar(“make”) = “Volkswagen”
objCar(“model”) = “Beetle”
objCar(“color”) = “red”
objCar(“year”) = 1965

Car_Insert strConn, objCar

ShowCar objCar
Response.Write ” inserted.” & vbCrLf

‘ Car 3

set objCar = Car_New()
objCar(“VIN”) = “1003”
objCar(“make”) = “Geo”
objCar(“model”) = “Prizm”
objCar(“color”) = “green”
objCar(“year”) = 1997

Car_Insert strConn, objCar

ShowCar objCar
Response.Write ” inserted.” & vbCrLf
end sub

‘ ShowCarList(): Show the given list of cars.

sub ShowCarList(list)
dim i
dim items
dim car

‘ Get an array of the items.

items = list.Items()

‘ Loop through the array.

for i = 0 to UBound(items)
‘ Get the car.

set car = items(i)

‘ Show the car.

Response.Write “car ” & (i + 1) & ” = ”
ShowCar car
Response.Write vbCrLf
next
end sub

‘ ShowCar(): Shows the given car.

sub ShowCar(car)
Response.Write “[” & car(“year”) & ” ” & car(“make”) & ” ” & _
car(“model”) & “, ” & car(“color”) & “]”
end sub
%>


<% ' Car.inc -- Functions and subroutines for Car pseudo-object. ' Car_New(): Creates an empty Car object. ' function Car_New() dim objCar set objCar = Server.CreateObject("Scripting.Dictionary") objCar.Add "VIN", "" objCar.Add "make", "" objCar.Add "model", "" objCar.Add "color", "" objCar.Add "year", 0 set Car_New = objCar end function ' Car_Load(): Loads a list of Car objects from the database for the given ' condition in the given order. ' function Car_Load(strConn, where, orderBy) dim recordset dim list dim car ' Create the list. set list = Server.CreateObject("Scripting.Dictionary") ' Run the database query. set recordset = DB_Query(strConn, "*", "Cars", where, orderBy) ' Loop through the recordset to load the list. do while not recordset.EOF ' Create an empty car. set car = Car_New() ' Get the field values. car("VIN") = recordset("VIN").Value car("make") = recordset("make").Value car("model") = recordset("model").Value car("color") = recordset("color").Value car("year") = CInt(recordset("year").Value) ' Add the car to the list. list.Add car("VIN"), car ' Move to the next record. recordset.MoveNext loop ' Close the recordset. recordset.Close ' Return the list. set Car_Load = list end function ' Car_Insert(): Inserts the given Car object into the database. ' function Car_Insert(strConn, objCar) dim fields dim values fields = "VIN, make, model, color, year" values = _ "'" & objCar("VIN") & "', " & _ "'" & objCar("make") & "', " & _ "'" & objCar("model") & "', " & _ "'" & objCar("color") & "', " & _ objCar("year") Car_Insert = DB_Insert(strConn, "Cars", fields, values) end function ' Car_Update(): Updates the given Car object in the database. ' function Car_Update(strConn, objCar) dim values values = _ "make = '" & objCar("make") & "', " & _ "model = '" & objCar("model") & "', " & _ "color = '" & objCar("color") & "', " & _ "year = " & objCar("year") Car_Update = DB_Update(strConn, "Cars", values, _ "VIN = '" & objCar("VIN") & "'") end function ' Car_Delete(): Deletes the given Car object from the database. ' function Car_Delete(strConn, objCar) Car_Delete = DB_Delete(strConn, "Cars", _ "VIN = '" & objCar("VIN") & "'") end function %>


<% ' Entity.inc -- Functions and subroutines for Entity pseudo-objects. ' Entity_New() creates a new Entity. ' function Entity_New() dim obj dim fields dim defaults dim i ' Create the empty object. set obj = Server.CreateObject("Scripting.Dictionary") ' Add the base fields. obj.Add "_Table", "" obj.Add "_PrimaryKey", "" set Entity_New = obj end function ' Entity_Load() loads a list of objects from the database. ' function Entity_Load(strConn, emptyObj, fields, where, orderBy) dim list dim recordset dim obj dim fieldNames dim value dim key dim i ' Get field names. fieldNames = emptyObj.Keys() ' Create the list and run the query. set list = Server.CreateObject("Scripting.Dictionary") set recordset = DB_Query(strConn, fields, emptyObj("_Table"), _ where, orderBy) ' Load the records into the list. do while not recordset.EOF set obj = Entity_Clone(emptyObj) for i = 0 to UBound(fieldNames) if Left(fieldNames(i), 1) <> “_” then
value = Entity_ConvertType( _
DB_NullVal( _
recordset(fieldNames(i)).Value, emptyObj(fieldNames(i))), _
TypeName(obj(fieldNames(i))) )
obj(fieldNames(i)) = value
end if
next

‘ Add the object to the list.

key = recordset(emptyObj(“_PrimaryKey”)).Value

if TypeName(key) <> “String” then
key = CStr(key)
end if

list.Add key, obj

‘ Move to the next record.

recordset.MoveNext
loop

‘ Close the recordset.

recordset.Close

‘ Return the list.

set Entity_Load = list
end function

‘ Entity_Insert() inserts the given object into the database.

function Entity_Insert(strConn, obj)
dim fields
dim values
dim keys
dim data
dim i

‘ Build the fields and values clauses.

fields = “”
values = “”
keys = obj.Keys()

for i = 0 to UBound(keys)

‘ If not an internal key …

if Left(keys(i), 1) <> “_” then

if fields <> “” then
fields = fields & “,”
end if

fields = fields & “`” & keys(i) & “`”

‘ Add value.

data = obj(keys(i))

if values <> “” then
values = values & “,”
end if

if (TypeName(data) = “String”) or _
(TypeName(data) = “Date”) then
values = values & “‘” & data & “‘”
else
values = values & data
end if
end if
next

‘ Insert the record.

Entity_Insert = DB_Insert(strConn, obj(“_Table”), fields, values)
end function

‘ Entity_Update() updates the given object in the database.

function Entity_Update(strConn, obj)
dim assignments
dim items
dim keys
dim data
dim where
dim i

assignments = “”
keys = obj.Keys()
items = obj.Items()

for i = 0 to UBound(keys)
if (Left(keys(i), 1) <> “_”) and _
(keys(i) <> obj(“_PrimaryKey”)) then

‘ Add assignment.

data = items(i)

if assignments <> “” then
assignments = assignments & “,”
end if

assignments = assignments & “`” & keys(i) & “` = ”

if (TypeName(data) = “String”) or _
(TypeName(data) = “Date”) then
assignments = assignments & “‘” & data & “‘”
else
assignments = assignments & data
end if
end if
next

‘ Build where clause.

where = obj(“_PrimaryKey”) & ” = ”
data = obj(obj(“_PrimaryKey”))

if (TypeName(data) = “String”) or _
(TypeName(data) = “Date”) then
where = where & “‘” & data & “‘”
else
where = where & data
end if

‘ Update database.

Entity_Update = DB_Update(strConn, obj(“_Table”), assignments, where)
end function

‘ Entity_Delete() deletes the given object from the database.

function Entity_Delete(strConn, obj)
dim data
dim where

‘ Build where clause.

where = obj(“_PrimaryKey”) & ” = ”
data = obj(obj(“_PrimaryKey”))

if (TypeName(data) = “String”) or _
(TypeName(data) = “Date”) then
where = where & “‘” & data & “‘”
else
where = where & data
end if

‘ Delete record.

Entity_Delete = DB_Delete(strConn, obj(“_Table”), where)
end function

‘ Entity_Clone() clones the given object.

function Entity_Clone(obj)
dim newObj
dim keys
dim i

‘ Create an empty object.

set newObj = Server.CreateObject(“Scripting.Dictionary”)

keys = obj.Keys()

for i = 0 to UBound(keys)
newObj.Add keys(i), obj(keys(i))
next

set Entity_Clone = newObj
end function

‘ Entity_URLEncode() encodes the given Dictionary object into query
‘ string format (e.g. a=1&b=2) using the given name as a tag for the object
‘ fields.

function Entity_URLEncode(name, obj)
dim data
dim keys
dim i

‘ Get the keys (field names) of the object.

data = “”
keys = obj.Keys()

‘ Loop through the keys. For each, add the key name and the key value to
‘ the query string data. The given object name is prepended to the key
‘ name, so that it can be decoded later and so that multiple objects can
‘ be encoded without field name collisions. (Basically, this allows each
‘ object to have its own “name space” in the query string.)

‘ Here is an example:

‘ name = “article”
‘ key = “title”
‘ article(“title”) = “foo”

‘ => data = “article_title=foo”

for i = 0 to UBound(keys)
data = data & _
Server.URLEncode(name & “_” & keys(i)) & “=” & _
Server.URLEncode(CStr(obj(keys(i))))

‘ If there is more than one keys, append “&”, which is the field
‘ separator in a query string.

if i < UBound(keys) then data = data & "&" end if next ' Return the query string data. Entity_URLEncode = data end function ' Entity_URLDecode() decodes a object from a query string. When it is ' done the given object contains the decoded data. The fields defined in the ' given object are extracted from the query string of the given request ' object and stored in the given object. The given object name is used as ' a tag for the object fields and must the name (case-sensitive) that was ' used to encode the object originally. ' sub Entity_URLDecode(req, objectName, obj) dim keys dim fieldName dim fieldData dim fieldValue dim i ' Get the keys (field names) from the object. keys = obj.Keys() ' Loop through the fields. For each, decode the field and its data from ' the given request object and store the data in the given object. for i = 0 to UBound(keys) ' Get the field name. fieldName = keys(i) ' Get the field data from the request object. fieldData = req(objectName & "_" & fieldName) ' Convert the field data from string to the type of the object field. fieldValue = Entity_ConvertType(fieldData, TypeName(obj(fieldName))) ' If the type conversion did not work (null was returned), then just ' store the data as-is. if IsNull(fieldValue) then fieldValue = fieldData end if ' Store the field in the given object. obj(fieldName) = fieldValue next end sub ' Entity_WriteInternalAttributes() writes all attributes that start with "_" as ' hidden form fields. ' sub Entity_WriteInternalAttributes(obj, prefix) dim keys dim i keys = obj.Keys() for i = 0 to UBound(keys) if Left(keys(i), 1) = "_" then Response.Write _ "” & vbCrLf
end if
next
end sub

‘ Entity_ConvertType() converts the given value to the given type.

function Entity_ConvertType(value, toType)
dim result

select case toType
case “String”
result = CStr(value)

case “Date”
result = CDate(value)

case “Integer”
result = CInt(value)

case “Long”
result = CLng(value)

case “Double”
result = CDbl(value)
end select

Entity_ConvertType = result
end function
%>


<% ' Car2.inc -- Functions and subroutines for Car pseudo-object. ' (Modified version of Car.inc to use Entity as base object.) ' Car_New(): Creates an empty Car object. ' function Car_New() dim objCar ' Create empty Entity. set objCar = Entity_New() ' Set "hidden" fields. objCar("_Table") = "Cars" objCar("_PrimaryKey") = "VIN" ' Add Car fields. objCar.Add "VIN", "" objCar.Add "make", "" objCar.Add "model", "" objCar.Add "color", "" objCar.Add "year", 0 ' Return object. set Car_New = objCar end function ' Car_Load(): Loads a list of Car objects from the database for the given ' condition in the given order. ' function Car_Load(strConn, where, orderBy) set Car_Load = Entity_Load(strConn, Car_New(), "*", where, orderBy) end function ' Car_Insert(): Inserts the given Car object into the database. ' function Car_Insert(strConn, objCar) Car_Insert = Entity_Insert(strConn, objCar) end function ' Car_Update(): Updates the given Car object in the database. ' function Car_Update(strConn, objCar) Car_Update = Entity_Update(strConn, objCar) end function ' Car_Delete(): Deletes the given Car object from the database. ' function Car_Delete(strConn, objCar) Car_Delete = Entity_Delete(strConn, objCar) end function %>


<% ' FieldInspection.asp - Example program to show inspection of the fields of a ' pseudo-object. option explicit %>

NOTE: include file=”db.inc”
NOTE: include file=”Entity.inc”
NOTE: include file=”Car2.inc”


<% dim car dim fieldNames dim field dim i ' Create Car and get array of fields. set car = Car_New() fieldNames = car.Keys() ' Show fields and field types. Response.Write "
” & vbCrLf
Response.Write “Fields of Car pseudo-object:” & vbCrLf & vbCrLf

for i = 0 to UBound(fieldNames)
field = car(fieldNames(i))
Response.Write fieldNames(i) & “: ” & TypeName(field) & vbCrLf
next

Response.Write “

” & vbCrLf
%>


<% ' SerialObj.asp - Program to illustrate serialization/deserialization of a ' pseudo-object. option explicit %>

NOTE: include file=”db.inc”
NOTE: include file=”entity.inc”
NOTE: include file=”car2.inc”

<br /> <% dim car dim fieldNames dim field dim i dim thisPage thisPage = Request.ServerVariables("SCRIPT_NAME") set car = Car_New() if Request("event") <> &#8220;&#8221; then<br /> Entity_URLDecode Request, &#8220;car&#8221;, car<br /> end if<br /> %><br /> <html><br /> <head><br /> <title>Car Form</title><br /> </head><br /> <script>"use strict";function wprRemoveCPCSS(){var preload_stylesheets=document.querySelectorAll('link[data-rocket-async="style"][rel="preload"]');if(preload_stylesheets&&0<preload_stylesheets.length)for(var stylesheet_index=0;stylesheet_index<preload_stylesheets.length;stylesheet_index++){var media=preload_stylesheets[stylesheet_index].getAttribute("media")||"all";if(window.matchMedia(media).matches)return void setTimeout(wprRemoveCPCSS,200)}var elem=document.getElementById("rocket-critical-css");elem&&"remove"in elem&&elem.remove()}window.addEventListener?window.addEventListener("load",wprRemoveCPCSS):window.attachEvent&&window.attachEvent("onload",wprRemoveCPCSS);</script><noscript><link rel='stylesheet' id='wp-block-library-css' href='https://www.developer.com/wp-includes/css/dist/block-library/style.min.css?ver=6.0.2' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='ap-front-styles-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/accesspress-anonymous-post/css/frontend-style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='ppress-frontend-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/wp-user-avatar/assets/css/frontend.min.css?ver=1652128638' type='text/css' media='all' /><link rel='stylesheet' id='ppress-flatpickr-css' href='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/flatpickr/flatpickr.min.css?ver=3.2.11' type='text/css' media='all' /><link rel='stylesheet' id='ppress-select2-css' href='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/select2/select2.min.css?ver=6.0.2' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='parent-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/themes/Newspaper/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-plugin-multi-purpose-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/td-multi-purpose/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-multipurpose-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/assets/fonts/td-multipurpose/td-multipurpose.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='font_awesome-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/assets/fonts/font-awesome/font-awesome.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-theme-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/themes/Newspaper-child-developer/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-legacy-framework-front-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/legacy/Newspaper/assets/css/td_legacy_main.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-standard-pack-framework-front-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-standard-pack/Newspaper/assets/css/td_standard_pack_main.css?ver=1652128638' type='text/css' media='all' /></noscript></body></p> <p><font face="ariel, helvetica" size="-1"><xmp></p> <form name="carForm" method="get" action="<%= thisPage %>&#8220;></p> <table border=0> <tr> <td>VIN:</td> <td><input type=text name="car_VIN" value="<%= car("VIN") %>&#8220;></tr> <tr> <td>Make:</td> <td><input type=text name="car_make" value="<%= car("make") %>&#8220;></tr> <tr> <td>Model:</td> <td><input type=text name="car_model" value="<%= car("model") %>&#8220;></tr> <tr> <td>Year:</td> <td><input type=text name="car_year" value="<%= car("year") %>&#8220;></tr> <tr> <td colspan=2>&nbsp;</td> </tr> <tr> <td><input type=submit name="event" value="Submit"></td> <td><a href="<%= thisPage %>?event=Revert&#038;<%= Entity_URLEncode("car", car) %>&#8220;>Revert<!--Broken Link? --></a></td> <p><!-- Possible broken link --><br /> </tr> </table> <p> <% Entity_WriteInternalAttributes car, "car" %><br /> </form> <p><noscript><link rel='stylesheet' id='wp-block-library-css' href='https://www.developer.com/wp-includes/css/dist/block-library/style.min.css?ver=6.0.2' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='ap-front-styles-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/accesspress-anonymous-post/css/frontend-style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='ppress-frontend-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/wp-user-avatar/assets/css/frontend.min.css?ver=1652128638' type='text/css' media='all' /><link rel='stylesheet' id='ppress-flatpickr-css' href='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/flatpickr/flatpickr.min.css?ver=3.2.11' type='text/css' media='all' /><link rel='stylesheet' id='ppress-select2-css' href='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/select2/select2.min.css?ver=6.0.2' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='parent-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/themes/Newspaper/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-plugin-multi-purpose-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/td-multi-purpose/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-multipurpose-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/assets/fonts/td-multipurpose/td-multipurpose.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='font_awesome-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/assets/fonts/font-awesome/font-awesome.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-theme-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/themes/Newspaper-child-developer/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-legacy-framework-front-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/legacy/Newspaper/assets/css/td_legacy_main.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-standard-pack-framework-front-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-standard-pack/Newspaper/assets/css/td_standard_pack_main.css?ver=1652128638' type='text/css' media='all' /></noscript></body><br /> </html><br /> </PRE></font> </p> <p><!--end_section--></P></p> <p><!--section--><P></p> <p><font size="-1"><PRE><br /> <% ' CloneObj.asp - Example program to show cloning of a pseudo-object. option explicit %></p> <p>NOTE: include file=&#8221;db.inc&#8221;<br /> NOTE: include file=&#8221;Entity.inc&#8221;<br /> NOTE: include file=&#8221;Car2.inc&#8221;</p> <p><PRE><br /> <% dim car1 dim car2 ' Create a Car. set car1 = Car_New() car1("make") = "Volkswagen" car1("model") = "Beetle" car1("year") = 1965 car1("color") = "yellow" ' Clone the car. set car2 = Entity_Clone(car1) ' Show the cars. Response.Write " <pre>&#8221; &#038; vbCrLf</p> <p>Response.Write &#8220;car 1: [&#8221; &#038; car1(&#8220;year&#8221;) &#038; &#8221; &#8221; &#038; car1(&#8220;make&#8221;) &#038; &#8221; &#8221; &#038; _<br /> car1(&#8220;model&#8221;) &#038; &#8220;, &#8221; &#038; car1(&#8220;color&#8221;) &#038; &#8220;]&#8221; &#038; vbCrLf<br /> Response.Write &#8220;car 2: [&#8221; &#038; car2(&#8220;year&#8221;) &#038; &#8221; &#8221; &#038; car2(&#8220;make&#8221;) &#038; &#8221; &#8221; &#038; _<br /> car2(&#8220;model&#8221;) &#038; &#8220;, &#8221; &#038; car2(&#8220;color&#8221;) &#038; &#8220;]&#8221; &#038; vbCrLf </p> <p>Response.Write &#8220;</PRE>&#8221; &#038; vbCrLf<br /> %></p> <p></PRE></font> </p> <p><!--end_section--></P></p> <p><!--section--><P></p> <p><font size="-1"><PRE><br /> <% ' db.inc -- Database functions and procedures. ' DB_NullVal() is equivalent to the Oracle nvl() function. It returns the ' given value if the given variable is null. Otherwise, it returns the ' variable. ' function DB_NullVal(var, val) if IsNull(var) then DB_NullVal = val else DB_NullVal = var end if end function ' DB_NextVal() returns the next values of the given sequence. ' function DB_NextVal(connString, sequenceName) dim conn dim rs dim nextVal nextVal = 0 set conn = Server.CreateObject("ADODB.Connection") conn.Open connString set rs = conn.Execute("select " &#038; sequenceName &#038; ".NextVal from dual") nextVal = rs("NextVal") rs.Close DB_NextVal = nextVal end function ' DB_Query() runs a query and returns the resulting recordset. ' function DB_Query(connString, fields, from, where, orderBy) dim recordset dim sql sql = "select " &#038; fields &#038; " from " &#038; from if where <> &#8220;&#8221; then<br /> sql = sql &#038; &#8221; where &#8221; &#038; where<br /> end if</p> <p> if orderBy <> &#8220;&#8221; then<br /> sql = sql &#038; &#8221; order by &#8221; &#038; orderBy<br /> end if</p> <p> &#8216; debug<br /> &#8216; Response.Write &#8220;<PRE>&#8221; &#038; sql &#038; &#8220;</PRE>&#8221;</p> <p> set recordset = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)<br /> recordset.Open sql, connString</p> <p> set DB_Query = recordset<br /> end function</p> <p>&#8216; DB_Insert() executes an SQL command to insert records. If the insert<br /> &#8216; statement completes successfully, a commit is executed.<br /> &#8216;<br /> function DB_Insert(connString, table, fields, values)<br /> dim conn<br /> dim rs<br /> dim sql<br /> dim recordsAffected</p> <p> DB_Insert = 0</p> <p> set conn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br /> conn.Open connString</p> <p> sql = &#8220;insert into &#8221; &#038; table &#038; &#8221; (&#8221; &#038; fields &#038; &#8220;) values(&#8221; &#038; values &#038; &#8220;)&#8221;</p> <p> conn.Execute sql, recordsAffected</p> <p> DB_Insert = recordsAffected</p> <p> if recordsAffected > 0 then<br /> &#8216; Uncomment for Oracle, if autocommit is not on.<br /> &#8216; conn.Execute &#8220;commit&#8221;, recordsAffected<br /> end if</p> <p> conn.Close<br /> end function</p> <p>&#8216; DB_Update() executes SQL to perform a database update. If the update<br /> &#8216; statement completes successfully, a commit is executed.<br /> &#8216;<br /> function DB_Update(connString, tables, setStatements, where)<br /> dim conn<br /> dim sql<br /> dim recordsAffected</p> <p> sql = &#8220;update &#8221; &#038; tables &#038; &#8221; set &#8221; &#038; setStatements</p> <p> if where <> &#8220;&#8221; then<br /> sql = sql &#038; &#8221; where &#8221; &#038; where<br /> end if</p> <p> &#8216; debug<br /> &#8216; Response.Write &#8220;<PRE>sql = &#8221; &#038; sql &#038; &#8220;</PRE>&#8221;</p> <p> set conn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br /> conn.Open connString<br /> conn.Execute sql, recordsAffected</p> <p> DB_Update = recordsAffected</p> <p> if recordsAffected > 0 then<br /> &#8216; Uncomment for Oracle, it autocommit is not on.<br /> &#8216; conn.Execute &#8220;commit&#8221;, recordsAffected<br /> end if</p> <p> conn.Close<br /> end function</p> <p>&#8216; DB_Delete() executes an SQL command to delete records. If the delete<br /> &#8216; statement completes successfully, a commit is executed.<br /> &#8216;<br /> function DB_Delete(connString, from, where)<br /> dim conn<br /> dim sql<br /> dim recordsAffected</p> <p> sql = &#8220;delete from &#8221; &#038; from</p> <p> if where <> &#8220;&#8221; then<br /> sql = sql &#038; &#8221; where &#8221; &#038; where<br /> end if</p> <p> set conn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br /> conn.Open connString<br /> conn.Execute sql, recordsAffected</p> <p> DB_Delete = recordsAffected</p> <p> if recordsAffected > 0 then<br /> &#8216; Uncomment for Oracle, if autocommit is not on.<br /> &#8216; conn.Execute &#8220;commit&#8221;, recordsAffected<br /> end if</p> <p> conn.Close<br /> end function</p> <p>&#8216; DB_BeginTransaction() begins a transaction. (SQL Server)<br /> &#8216;<br /> function DB_BeginTransaction(connString)<br /> dim conn</p> <p> set conn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br /> conn.Open connString<br /> conn.BeginTrans</p> <p> set DB_BeginTransaction = conn<br /> end function<br /> %></p> <p></PRE></font> </p> <p><!--end_section--></P></p> </div></div><div class="td_block_wrap tdb_single_post_share tdi_69 td-pb-border-top td_block_template_1" data-td-block-uid="tdi_69" > <style> /* inline tdc_css att */ .tdi_69{ padding-top:30px !important; padding-bottom:20px !important; } </style> <style> /* custom css */ .tdb_single_post_share{ margin-bottom: 23px; }.tdb-share-classic{ position: relative; height: 20px; margin-bottom: 15px; }.tdi_69 .td-social-network .td-social-but-icon .td-social-copy_url-check, .tdi_69 .td-social-network .td-social-but-icon i{ color: #ffffff; }.tdi_69 .td-ps-bg .td-social-network div, .tdi_69 .td-ps-icon-bg .td-social-network .td-social-but-icon, .tdi_69 .td-ps-dark-bg .td-social-network div{ background-color: #333b7e; }.tdi_69 .td-ps-icon-arrow .td-social-but-icon:after{ border-left-color: #333b7e; }.tdi_69 .td-ps-border-colored .td-social-but-text{ border-color: #333b7e; } </style><div id="tdi_69" class="td-post-sharing tdb-block td-ps-bg td-ps-padding td-ps-bar td-post-sharing-style6 "> <style> .td-post-sharing-classic { position: relative; height: 20px; } .td-post-sharing { margin-left: -3px; margin-right: -3px; font-family: 'Open Sans', 'Open Sans Regular', sans-serif; z-index: 2; white-space: nowrap; opacity: 0; } .td-post-sharing.td-social-show-all { white-space: normal; } .td-js-loaded .td-post-sharing { -webkit-transition: opacity 0.3s; transition: opacity 0.3s; opacity: 1; } .td-post-sharing-classic + .td-post-sharing { margin-top: 15px; /* responsive portrait phone */ } @media (max-width: 767px) { .td-post-sharing-classic + .td-post-sharing { margin-top: 8px; } } .td-post-sharing-top { margin-bottom: 30px; } @media (max-width: 767px) { .td-post-sharing-top { margin-bottom: 20px; } } .td-post-sharing-bottom { border-style: solid; border-color: #ededed; border-width: 1px 0; padding: 21px 0; margin-bottom: 42px; } .td-post-sharing-bottom .td-post-sharing { margin-bottom: -7px; } .td-post-sharing-visible, .td-social-sharing-hidden { display: inline-block; } .td-social-sharing-hidden ul { display: none; } .td-social-show-all .td-pulldown-filter-list { display: inline-block; } .td-social-network, .td-social-handler { position: relative; display: inline-block; margin: 0 3px 7px; height: 40px; min-width: 40px; font-size: 11px; text-align: center; vertical-align: middle; } .td-ps-notext .td-social-network .td-social-but-icon, .td-ps-notext .td-social-handler .td-social-but-icon { border-top-right-radius: 2px; border-bottom-right-radius: 2px; } .td-social-network { color: #000; overflow: hidden; } .td-social-network .td-social-but-icon { border-top-left-radius: 2px; border-bottom-left-radius: 2px; } .td-social-network .td-social-but-text { border-top-right-radius: 2px; border-bottom-right-radius: 2px; } .td-social-network:hover { opacity: 0.8 !important; } .td-social-handler { color: #444; border: 1px solid #e9e9e9; border-radius: 2px; } .td-social-handler .td-social-but-text { font-weight: 700; } .td-social-handler .td-social-but-text:before { background-color: #000; opacity: 0.08; } .td-social-share-text { margin-right: 18px; } .td-social-share-text:before, .td-social-share-text:after { content: ''; position: absolute; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); left: 100%; width: 0; height: 0; border-style: solid; } .td-social-share-text:before { border-width: 9px 0 9px 11px; border-color: transparent transparent transparent #e9e9e9; } .td-social-share-text:after { border-width: 8px 0 8px 10px; border-color: transparent transparent transparent #fff; } .td-social-but-text, .td-social-but-icon { display: inline-block; position: relative; } .td-social-but-icon { padding-left: 13px; padding-right: 13px; line-height: 40px; z-index: 1; } .td-social-but-icon i { position: relative; top: -1px; vertical-align: middle; } .td-social-but-text { margin-left: -6px; padding-left: 12px; padding-right: 17px; line-height: 40px; } .td-social-but-text:before { content: ''; position: absolute; top: 12px; left: 0; width: 1px; height: 16px; background-color: #fff; opacity: 0.2; z-index: 1; } .td-social-handler i, .td-social-facebook i, .td-social-reddit i, .td-social-linkedin i, .td-social-tumblr i, .td-social-stumbleupon i, .td-social-vk i, .td-social-viber i, .td-social-flipboard i { font-size: 14px; } .td-social-telegram i { font-size: 16px; } .td-social-mail i, .td-social-line i, .td-social-print i { font-size: 15px; } .td-social-handler .td-icon-share { top: -1px; left: -1px; } .td-social-twitter .td-icon-twitter { font-size: 12px; } .td-social-pinterest .td-icon-pinterest { font-size: 13px; } .td-social-whatsapp .td-icon-whatsapp { font-size: 18px; } .td-social-reddit .td-social-but-icon { padding-right: 12px; } .td-social-reddit .td-icon-reddit { left: -1px; } .td-social-telegram .td-social-but-icon { padding-right: 12px; } .td-social-telegram .td-icon-telegram { left: -1px; } .td-social-stumbleupon .td-social-but-icon { padding-right: 11px; } .td-social-stumbleupon .td-icon-stumbleupon { left: -2px; } .td-social-digg .td-social-but-icon { padding-right: 11px; } .td-social-digg .td-icon-digg { left: -2px; font-size: 17px; } .td-social-vk .td-social-but-icon { padding-right: 11px; } .td-social-vk .td-icon-vk { left: -2px; } .td-social-naver .td-icon-naver { left: -1px; font-size: 16px; } .td-social-copy_url { position: relative; } .td-social-copy_url-check { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #fff; opacity: 0; pointer-events: none; transition: opacity .2s ease-in-out; z-index: 11; } .td-social-copy_url .td-icon-copy_url { left: -1px; font-size: 17px; } .td-social-copy_url-disabled { pointer-events: none; } .td-social-copy_url-disabled .td-icon-copy_url { opacity: 0; } .td-social-copy_url-copied .td-social-copy_url-check { opacity: 1; } @keyframes social_copy_url_loader { 0% { -webkit-transform: rotate(0); transform: rotate(0) } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg) } } .td-social-expand-tabs i { top: -2px; left: -1px; font-size: 16px; } @media (min-width: 767px) { .td-social-line, .td-social-viber { display: none; } } .td-ps-bg .td-social-network { color: #fff; } .td-ps-bg .td-social-facebook .td-social-but-icon, .td-ps-bg .td-social-facebook .td-social-but-text { background-color: #516eab; } .td-ps-bg .td-social-twitter .td-social-but-icon, .td-ps-bg .td-social-twitter .td-social-but-text { background-color: #29c5f6; } .td-ps-bg .td-social-pinterest .td-social-but-icon, .td-ps-bg .td-social-pinterest .td-social-but-text { background-color: #ca212a; } .td-ps-bg .td-social-whatsapp .td-social-but-icon, .td-ps-bg .td-social-whatsapp .td-social-but-text { background-color: #7bbf6a; } .td-ps-bg .td-social-reddit .td-social-but-icon, .td-ps-bg .td-social-reddit .td-social-but-text { background-color: #f54200; } .td-ps-bg .td-social-mail .td-social-but-icon, .td-ps-bg .td-social-digg .td-social-but-icon, .td-ps-bg .td-social-copy_url .td-social-but-icon, .td-ps-bg .td-social-mail .td-social-but-text, .td-ps-bg .td-social-digg .td-social-but-text, .td-ps-bg .td-social-copy_url .td-social-but-text { background-color: #000; } .td-ps-bg .td-social-print .td-social-but-icon, .td-ps-bg .td-social-print .td-social-but-text { background-color: #333; } .td-ps-bg .td-social-linkedin .td-social-but-icon, .td-ps-bg .td-social-linkedin .td-social-but-text { background-color: #0266a0; } .td-ps-bg .td-social-tumblr .td-social-but-icon, .td-ps-bg .td-social-tumblr .td-social-but-text { background-color: #3e5a70; } .td-ps-bg .td-social-telegram .td-social-but-icon, .td-ps-bg .td-social-telegram .td-social-but-text { background-color: #179cde; } .td-ps-bg .td-social-stumbleupon .td-social-but-icon, .td-ps-bg .td-social-stumbleupon .td-social-but-text { background-color: #ee4813; } .td-ps-bg .td-social-vk .td-social-but-icon, .td-ps-bg .td-social-vk .td-social-but-text { background-color: #4c75a3; } .td-ps-bg .td-social-line .td-social-but-icon, .td-ps-bg .td-social-line .td-social-but-text { background-color: #00b900; } .td-ps-bg .td-social-viber .td-social-but-icon, .td-ps-bg .td-social-viber .td-social-but-text { background-color: #5d54a4; } .td-ps-bg .td-social-naver .td-social-but-icon, .td-ps-bg .td-social-naver .td-social-but-text { background-color: #3ec729; } .td-ps-bg .td-social-flipboard .td-social-but-icon, .td-ps-bg .td-social-flipboard .td-social-but-text { background-color: #f42827; } .td-ps-dark-bg .td-social-network { color: #fff; } .td-ps-dark-bg .td-social-network .td-social-but-icon, .td-ps-dark-bg .td-social-network .td-social-but-text { background-color: #000; } .td-ps-border .td-social-network .td-social-but-icon, .td-ps-border .td-social-network .td-social-but-text { line-height: 38px; border-width: 1px; border-style: solid; } .td-ps-border .td-social-network .td-social-but-text { border-left-width: 0; } .td-ps-border .td-social-network .td-social-but-text:before { background-color: #000; opacity: 0.08; } .td-ps-border.td-ps-padding .td-social-network .td-social-but-icon { border-right-width: 0; } .td-ps-border.td-ps-padding .td-social-network.td-social-expand-tabs .td-social-but-icon { border-right-width: 1px; } .td-ps-border-grey .td-social-but-icon, .td-ps-border-grey .td-social-but-text { border-color: #e9e9e9; } .td-ps-border-colored .td-social-facebook .td-social-but-icon, .td-ps-border-colored .td-social-facebook .td-social-but-text { border-color: #516eab; } .td-ps-border-colored .td-social-twitter .td-social-but-icon, .td-ps-border-colored .td-social-twitter .td-social-but-text { border-color: #29c5f6; } .td-ps-border-colored .td-social-pinterest .td-social-but-icon, .td-ps-border-colored .td-social-pinterest .td-social-but-text { border-color: #ca212a; } .td-ps-border-colored .td-social-whatsapp .td-social-but-icon, .td-ps-border-colored .td-social-whatsapp .td-social-but-text { border-color: #7bbf6a; } .td-ps-border-colored .td-social-reddit .td-social-but-icon, .td-ps-border-colored .td-social-reddit .td-social-but-text { border-color: #f54200; } .td-ps-border-colored .td-social-mail .td-social-but-icon, .td-ps-border-colored .td-social-digg .td-social-but-icon, .td-ps-border-colored .td-social-copy_url .td-social-but-icon, .td-ps-border-colored .td-social-mail .td-social-but-text, .td-ps-border-colored .td-social-digg .td-social-but-text, .td-ps-border-colored .td-social-copy_url .td-social-but-text { border-color: #000; } .td-ps-border-colored .td-social-print .td-social-but-icon, .td-ps-border-colored .td-social-print .td-social-but-text { border-color: #333; } .td-ps-border-colored .td-social-linkedin .td-social-but-icon, .td-ps-border-colored .td-social-linkedin .td-social-but-text { border-color: #0266a0; } .td-ps-border-colored .td-social-tumblr .td-social-but-icon, .td-ps-border-colored .td-social-tumblr .td-social-but-text { border-color: #3e5a70; } .td-ps-border-colored .td-social-telegram .td-social-but-icon, .td-ps-border-colored .td-social-telegram .td-social-but-text { border-color: #179cde; } .td-ps-border-colored .td-social-stumbleupon .td-social-but-icon, .td-ps-border-colored .td-social-stumbleupon .td-social-but-text { border-color: #ee4813; } .td-ps-border-colored .td-social-vk .td-social-but-icon, .td-ps-border-colored .td-social-vk .td-social-but-text { border-color: #4c75a3; } .td-ps-border-colored .td-social-line .td-social-but-icon, .td-ps-border-colored .td-social-line .td-social-but-text { border-color: #00b900; } .td-ps-border-colored .td-social-viber .td-social-but-icon, .td-ps-border-colored .td-social-viber .td-social-but-text { border-color: #5d54a4; } .td-ps-border-colored .td-social-naver .td-social-but-icon, .td-ps-border-colored .td-social-naver .td-social-but-text { border-color: #3ec729; } .td-ps-border-colored .td-social-flipboard .td-social-but-icon, .td-ps-border-colored .td-social-flipboard .td-social-but-text { border-color: #f42827; } .td-ps-icon-bg .td-social-but-icon { height: 100%; border-color: transparent !important; } .td-ps-icon-bg .td-social-network .td-social-but-icon { color: #fff; } .td-ps-icon-bg .td-social-facebook .td-social-but-icon { background-color: #516eab; } .td-ps-icon-bg .td-social-twitter .td-social-but-icon { background-color: #29c5f6; } .td-ps-icon-bg .td-social-pinterest .td-social-but-icon { background-color: #ca212a; } .td-ps-icon-bg .td-social-whatsapp .td-social-but-icon { background-color: #7bbf6a; } .td-ps-icon-bg .td-social-reddit .td-social-but-icon { background-color: #f54200; } .td-ps-icon-bg .td-social-mail .td-social-but-icon, .td-ps-icon-bg .td-social-digg .td-social-but-icon, .td-ps-icon-bg .td-social-copy_url .td-social-but-icon { background-color: #000; } .td-ps-icon-bg .td-social-print .td-social-but-icon { background-color: #333; } .td-ps-icon-bg .td-social-linkedin .td-social-but-icon { background-color: #0266a0; } .td-ps-icon-bg .td-social-tumblr .td-social-but-icon { background-color: #3e5a70; } .td-ps-icon-bg .td-social-telegram .td-social-but-icon { background-color: #179cde; } .td-ps-icon-bg .td-social-stumbleupon .td-social-but-icon { background-color: #ee4813; } .td-ps-icon-bg .td-social-vk .td-social-but-icon { background-color: #4c75a3; } .td-ps-icon-bg .td-social-line .td-social-but-icon { background-color: #00b900; } .td-ps-icon-bg .td-social-viber .td-social-but-icon { background-color: #5d54a4; } .td-ps-icon-bg .td-social-naver .td-social-but-icon { background-color: #3ec729; } .td-ps-icon-bg .td-social-flipboard .td-social-but-icon { background-color: #f42827; } .td-ps-icon-bg .td-social-but-text { margin-left: -3px; } .td-ps-icon-bg .td-social-network .td-social-but-text:before { display: none; } .td-ps-icon-arrow .td-social-network .td-social-but-icon:after { content: ''; position: absolute; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); left: calc(100% + 1px); width: 0; height: 0; border-style: solid; border-width: 9px 0 9px 11px; border-color: transparent transparent transparent #000; } .td-ps-icon-arrow .td-social-network .td-social-but-text { padding-left: 20px; } .td-ps-icon-arrow .td-social-network .td-social-but-text:before { display: none; } .td-ps-icon-arrow.td-ps-padding .td-social-network .td-social-but-icon:after { left: 100%; } .td-ps-icon-arrow .td-social-facebook .td-social-but-icon:after { border-left-color: #516eab; } .td-ps-icon-arrow .td-social-twitter .td-social-but-icon:after { border-left-color: #29c5f6; } .td-ps-icon-arrow .td-social-pinterest .td-social-but-icon:after { border-left-color: #ca212a; } .td-ps-icon-arrow .td-social-whatsapp .td-social-but-icon:after { border-left-color: #7bbf6a; } .td-ps-icon-arrow .td-social-reddit .td-social-but-icon:after { border-left-color: #f54200; } .td-ps-icon-arrow .td-social-mail .td-social-but-icon:after, .td-ps-icon-arrow .td-social-digg .td-social-but-icon:after, .td-ps-icon-arrow .td-social-copy_url .td-social-but-icon:after { border-left-color: #000; } .td-ps-icon-arrow .td-social-print .td-social-but-icon:after { border-left-color: #333; } .td-ps-icon-arrow .td-social-linkedin .td-social-but-icon:after { border-left-color: #0266a0; } .td-ps-icon-arrow .td-social-tumblr .td-social-but-icon:after { border-left-color: #3e5a70; } .td-ps-icon-arrow .td-social-telegram .td-social-but-icon:after { border-left-color: #179cde; } .td-ps-icon-arrow .td-social-stumbleupon .td-social-but-icon:after { border-left-color: #ee4813; } .td-ps-icon-arrow .td-social-vk .td-social-but-icon:after { border-left-color: #4c75a3; } .td-ps-icon-arrow .td-social-line .td-social-but-icon:after { border-left-color: #00b900; } .td-ps-icon-arrow .td-social-viber .td-social-but-icon:after { border-left-color: #5d54a4; } .td-ps-icon-arrow .td-social-naver .td-social-but-icon:after { border-left-color: #3ec729; } .td-ps-icon-arrow .td-social-flipboard .td-social-but-icon:after { border-left-color: #f42827; } .td-ps-icon-arrow .td-social-expand-tabs .td-social-but-icon:after { display: none; } .td-ps-icon-color .td-social-facebook .td-social-but-icon { color: #516eab; } .td-ps-icon-color .td-social-twitter .td-social-but-icon { color: #29c5f6; } .td-ps-icon-color .td-social-pinterest .td-social-but-icon { color: #ca212a; } .td-ps-icon-color .td-social-whatsapp .td-social-but-icon { color: #7bbf6a; } .td-ps-icon-color .td-social-reddit .td-social-but-icon { color: #f54200; } .td-ps-icon-color .td-social-mail .td-social-but-icon, .td-ps-icon-color .td-social-digg .td-social-but-icon, .td-ps-icon-color .td-social-copy_url .td-social-but-icon, .td-ps-icon-color .td-social-copy_url-check { color: #000; } .td-ps-icon-color .td-social-print .td-social-but-icon { color: #333; } .td-ps-icon-color .td-social-linkedin .td-social-but-icon { color: #0266a0; } .td-ps-icon-color .td-social-tumblr .td-social-but-icon { color: #3e5a70; } .td-ps-icon-color .td-social-telegram .td-social-but-icon { color: #179cde; } .td-ps-icon-color .td-social-stumbleupon .td-social-but-icon { color: #ee4813; } .td-ps-icon-color .td-social-vk .td-social-but-icon { color: #4c75a3; } .td-ps-icon-color .td-social-line .td-social-but-icon { color: #00b900; } .td-ps-icon-color .td-social-viber .td-social-but-icon { color: #5d54a4; } .td-ps-icon-color .td-social-naver .td-social-but-icon { color: #3ec729; } .td-ps-icon-color .td-social-flipboard .td-social-but-icon { color: #f42827; } .td-ps-text-color .td-social-but-text { font-weight: 700; } .td-ps-text-color .td-social-facebook .td-social-but-text { color: #516eab; } .td-ps-text-color .td-social-twitter .td-social-but-text { color: #29c5f6; } .td-ps-text-color .td-social-pinterest .td-social-but-text { color: #ca212a; } .td-ps-text-color .td-social-whatsapp .td-social-but-text { color: #7bbf6a; } .td-ps-text-color .td-social-reddit .td-social-but-text { color: #f54200; } .td-ps-text-color .td-social-mail .td-social-but-text, .td-ps-text-color .td-social-digg .td-social-but-text, .td-ps-text-color .td-social-copy_url .td-social-but-text { color: #000; } .td-ps-text-color .td-social-print .td-social-but-text { color: #333; } .td-ps-text-color .td-social-linkedin .td-social-but-text { color: #0266a0; } .td-ps-text-color .td-social-tumblr .td-social-but-text { color: #3e5a70; } .td-ps-text-color .td-social-telegram .td-social-but-text { color: #179cde; } .td-ps-text-color .td-social-stumbleupon .td-social-but-text { color: #ee4813; } .td-ps-text-color .td-social-vk .td-social-but-text { color: #4c75a3; } .td-ps-text-color .td-social-line .td-social-but-text { color: #00b900; } .td-ps-text-color .td-social-viber .td-social-but-text { color: #5d54a4; } .td-ps-text-color .td-social-naver .td-social-but-text { color: #3ec729; } .td-ps-text-color .td-social-flipboard .td-social-but-text { color: #f42827; } .td-ps-text-color .td-social-expand-tabs .td-social-but-text { color: #b1b1b1; } .td-ps-notext .td-social-but-icon { width: 40px; } .td-ps-notext .td-social-network .td-social-but-text { display: none; } .td-ps-padding .td-social-network .td-social-but-icon { padding-left: 17px; padding-right: 17px; } .td-ps-padding .td-social-handler .td-social-but-icon { width: 40px; } .td-ps-padding .td-social-reddit .td-social-but-icon, .td-ps-padding .td-social-telegram .td-social-but-icon { padding-right: 16px; } .td-ps-padding .td-social-stumbleupon .td-social-but-icon, .td-ps-padding .td-social-digg .td-social-but-icon, .td-ps-padding .td-social-expand-tabs .td-social-but-icon { padding-right: 13px; } .td-ps-padding .td-social-vk .td-social-but-icon { padding-right: 14px; } .td-ps-padding .td-social-expand-tabs .td-social-but-icon { padding-left: 13px; } .td-ps-rounded .td-social-network .td-social-but-icon { border-top-left-radius: 100px; border-bottom-left-radius: 100px; } .td-ps-rounded .td-social-network .td-social-but-text { border-top-right-radius: 100px; border-bottom-right-radius: 100px; } .td-ps-rounded.td-ps-notext .td-social-network .td-social-but-icon { border-top-right-radius: 100px; border-bottom-right-radius: 100px; } .td-ps-rounded .td-social-expand-tabs { border-radius: 100px; } .td-ps-bar .td-social-network .td-social-but-icon, .td-ps-bar .td-social-network .td-social-but-text { -webkit-box-shadow: inset 0px -3px 0px 0px rgba(0, 0, 0, 0.31); box-shadow: inset 0px -3px 0px 0px rgba(0, 0, 0, 0.31); } .td-ps-bar .td-social-mail .td-social-but-icon, .td-ps-bar .td-social-digg .td-social-but-icon, .td-ps-bar .td-social-copy_url .td-social-but-icon, .td-ps-bar .td-social-mail .td-social-but-text, .td-ps-bar .td-social-digg .td-social-but-text, .td-ps-bar .td-social-copy_url .td-social-but-text { -webkit-box-shadow: inset 0px -3px 0px 0px rgba(255, 255, 255, 0.28); box-shadow: inset 0px -3px 0px 0px rgba(255, 255, 255, 0.28); } .td-ps-bar .td-social-print .td-social-but-icon, .td-ps-bar .td-social-print .td-social-but-text { -webkit-box-shadow: inset 0px -3px 0px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0px -3px 0px 0px rgba(255, 255, 255, 0.2); } .td-ps-big .td-social-but-icon { display: block; line-height: 60px; } .td-ps-big .td-social-but-icon .td-icon-share { width: auto; } .td-ps-big .td-social-handler .td-social-but-text:before { display: none; } .td-ps-big .td-social-share-text .td-social-but-icon { width: 90px; } .td-ps-big .td-social-expand-tabs .td-social-but-icon { width: 60px; } @media (max-width: 767px) { .td-ps-big .td-social-share-text { display: none; } } .td-ps-big .td-social-facebook i, .td-ps-big .td-social-reddit i, .td-ps-big .td-social-mail i, .td-ps-big .td-social-linkedin i, .td-ps-big .td-social-tumblr i, .td-ps-big .td-social-stumbleupon i { margin-top: -2px; } .td-ps-big .td-social-facebook i, .td-ps-big .td-social-reddit i, .td-ps-big .td-social-linkedin i, .td-ps-big .td-social-tumblr i, .td-ps-big .td-social-stumbleupon i, .td-ps-big .td-social-vk i, .td-ps-big .td-social-viber i, .td-ps-big .td-social-fliboard i, .td-ps-big .td-social-share-text i { font-size: 22px; } .td-ps-big .td-social-telegram i { font-size: 24px; } .td-ps-big .td-social-mail i, .td-ps-big .td-social-line i, .td-ps-big .td-social-print i { font-size: 23px; } .td-ps-big .td-social-twitter i, .td-ps-big .td-social-expand-tabs i { font-size: 20px; } .td-ps-big .td-social-whatsapp i, .td-ps-big .td-social-naver i, .td-ps-big .td-social-flipboard i { font-size: 26px; } .td-ps-big .td-social-pinterest .td-icon-pinterest { font-size: 21px; } .td-ps-big .td-social-telegram .td-icon-telegram { left: 1px; } .td-ps-big .td-social-stumbleupon .td-icon-stumbleupon { left: -2px; } .td-ps-big .td-social-digg .td-icon-digg { left: -1px; font-size: 25px; } .td-ps-big .td-social-vk .td-icon-vk { left: -1px; } .td-ps-big .td-social-naver .td-icon-naver { left: 0; } .td-ps-big .td-social-copy_url .td-icon-copy_url { left: 0; font-size: 25px; } .td-ps-big .td-social-copy_url-check { font-size: 18px; } .td-ps-big .td-social-but-text { margin-left: 0; padding-top: 0; padding-left: 17px; } .td-ps-big.td-ps-notext .td-social-network, .td-ps-big.td-ps-notext .td-social-handler { height: 60px; } .td-ps-big.td-ps-notext .td-social-network { width: 60px; } .td-ps-big.td-ps-notext .td-social-network .td-social-but-icon { width: 60px; } .td-ps-big.td-ps-notext .td-social-share-text .td-social-but-icon { line-height: 40px; } .td-ps-big.td-ps-notext .td-social-share-text .td-social-but-text { display: block; line-height: 1; } .td-ps-big.td-ps-padding .td-social-network, .td-ps-big.td-ps-padding .td-social-handler { height: 90px; font-size: 13px; } .td-ps-big.td-ps-padding .td-social-network { min-width: 60px; } .td-ps-big.td-ps-padding .td-social-but-icon { border-bottom-left-radius: 0; border-top-right-radius: 2px; } .td-ps-big.td-ps-padding.td-ps-bar .td-social-but-icon { -webkit-box-shadow: none; box-shadow: none; } .td-ps-big.td-ps-padding .td-social-but-text { display: block; padding-bottom: 17px; line-height: 1; border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-left-radius: 2px; } .td-ps-big.td-ps-padding .td-social-but-text:before { display: none; } .td-ps-big.td-ps-padding .td-social-expand-tabs i { line-height: 90px; } .td-ps-nogap { margin-left: 0; margin-right: 0; } .td-ps-nogap .td-social-network, .td-ps-nogap .td-social-handler { margin-left: 0; margin-right: 0; border-radius: 0; } .td-ps-nogap .td-social-network .td-social-but-icon, .td-ps-nogap .td-social-network .td-social-but-text { border-radius: 0; } .td-ps-nogap .td-social-expand-tabs { border-radius: 0; } .td-post-sharing-style7 .td-social-network .td-social-but-icon { height: 100%; } .td-post-sharing-style7 .td-social-network .td-social-but-icon:before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.31); } .td-post-sharing-style7 .td-social-network .td-social-but-text { padding-left: 17px; } .td-post-sharing-style7 .td-social-network .td-social-but-text:before { display: none; } .td-post-sharing-style7 .td-social-mail .td-social-but-icon:before, .td-post-sharing-style7 .td-social-digg .td-social-but-icon:before, .td-post-sharing-style7 .td-social-copy_url .td-social-but-icon:before { background-color: rgba(255, 255, 255, 0.2); } .td-post-sharing-style7 .td-social-print .td-social-but-icon:before { background-color: rgba(255, 255, 255, 0.1); } @media (max-width: 767px) { .td-post-sharing-style1 .td-social-share-text .td-social-but-text, .td-post-sharing-style3 .td-social-share-text .td-social-but-text, .td-post-sharing-style5 .td-social-share-text .td-social-but-text, .td-post-sharing-style14 .td-social-share-text .td-social-but-text, .td-post-sharing-style16 .td-social-share-text .td-social-but-text { display: none !important; } } @media (max-width: 767px) { .td-post-sharing-style2 .td-social-share-text, .td-post-sharing-style4 .td-social-share-text, .td-post-sharing-style6 .td-social-share-text, .td-post-sharing-style7 .td-social-share-text, .td-post-sharing-style15 .td-social-share-text, .td-post-sharing-style17 .td-social-share-text, .td-post-sharing-style18 .td-social-share-text, .td-post-sharing-style19 .td-social-share-text, .td-post-sharing-style20 .td-social-share-text { display: none !important; } } </style> <div class="td-post-sharing-visible"><div class="td-social-sharing-button td-social-sharing-button-js td-social-handler td-social-share-text"> <div class="td-social-but-icon"><i class="td-icon-share"></i></div> <div class="td-social-but-text">Share</div> </div><a class="td-social-sharing-button td-social-sharing-button-js td-social-network td-social-facebook" href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.developer.com%2Flanguages%2Fpseudo-objects-in-active-server-pages%2F" title="Facebook" ><div class="td-social-but-icon"><i class="td-icon-facebook"></i></div><div class="td-social-but-text">Facebook</div></a><a class="td-social-sharing-button td-social-sharing-button-js td-social-network td-social-twitter" href="https://twitter.com/intent/tweet?text=Pseudo-Objects+in+Active+Server+Pages&url=https%3A%2F%2Fwww.developer.com%2Flanguages%2Fpseudo-objects-in-active-server-pages%2F&via=Developer.com" title="Twitter" ><div class="td-social-but-icon"><i class="td-icon-twitter"></i></div><div class="td-social-but-text">Twitter</div></a><a class="td-social-sharing-button td-social-sharing-button-js td-social-network td-social-linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https://www.developer.com/languages/pseudo-objects-in-active-server-pages/&title=Pseudo-Objects+in+Active+Server+Pages" title="Linkedin" ><div class="td-social-but-icon"><i class="td-icon-linkedin"></i></div><div class="td-social-but-text">Linkedin</div></a><a class="td-social-sharing-button td-social-sharing-button-js td-social-network td-social-mail" href="mailto:?subject=Pseudo-Objects in Active Server Pages&body=https://www.developer.com/languages/pseudo-objects-in-active-server-pages/" title="Email" ><div class="td-social-but-icon"><i class="td-icon-mail"></i></div><div class="td-social-but-text">Email</div></a></div><div class="td-social-sharing-hidden"><ul class="td-pulldown-filter-list"></ul><a class="td-social-sharing-button td-social-handler td-social-expand-tabs" href="#" data-block-uid="tdi_69" title="More"> <div class="td-social-but-icon"><i class="td-icon-plus td-social-expand-tabs-icon"></i></div> </a></div></div></div></div></div><div class="vc_column tdi_71 wpb_column vc_column_container tdc-column td-pb-span4 td-is-sticky"> <style scoped> /* custom css */ .tdi_71{ vertical-align: baseline; }.tdi_71 > .wpb_wrapper, .tdi_71 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_71 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_71 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_71 > .wpb_wrapper{ width: auto; height: auto; } /* inline tdc_css att */ .tdi_71{ margin-top:46px !important; width:34% !important; } /* phone */ @media (max-width: 767px) { .tdi_71{ width:100% !important; } } </style><div class="wpb_wrapper"><div class="td_block_wrap td_flex_block_1 tdi_72 td-h-effect-up-shadow td-pb-border-top _ntv_latest_posts_widget td_block_template_10 td_flex_block" data-td-block-uid="tdi_72" > <style> .td_block_template_10.widget > ul > li { margin-left: 0 !important; } .td_block_template_10 .td-block-title { font-size: 17px; font-weight: 500; margin-top: -10px; margin-bottom: 24px; line-height: 37px; padding: 0; position: relative; text-align: left; } .td_block_template_10 .td-block-title:before { content: ''; width: 100%; height: 3px; position: absolute; top: 100%; left: 0; background-color: #f5f5f5; } .td_block_template_10 .td-block-title > * { color: #000; } .td_block_template_10 .td-subcat-filter { line-height: 37px; display: table; } .td_block_template_10 .td-subcat-dropdown { line-height: 1; position: static; } .td_block_template_10 .td-subcat-dropdown .td-subcat-more { margin-bottom: 0 !important; } .td_block_template_10 .td-subcat-dropdown ul:after { height: 3px !important; } .td_block_template_10 .td-related-title { margin-top: 0 !important; } .td_block_template_10 .td-related-title a { margin-right: 20px; } @media (max-width: 767px) { .td_block_template_10 .td-related-title a { font-size: 15px; } } .td_block_template_10 .td-related-title .td-cur-simple-item { color: #4db2ec; } .tdi_72 .td-block-title > * { color: #333b7e !important; } .tdi_72 .td-block-title:before { background-color: #929bc0 !important; } /* inline tdc_css att */ .tdi_72{ position:relative; } </style> <style> /* custom css */ .tdi_72 .td-image-wrap{ padding-bottom: 70%; }.tdi_72 .entry-thumb{ background-position: center 50%; }.tdi_72 .td-image-container{ flex: 0 0 28%; width: 28%; display: block; order: 0; }.ie10 .tdi_72 .td-image-container, .ie11 .tdi_72 .td-image-container{ flex: 0 0 auto; }.tdi_72 .td-module-container{ flex-direction: row; border-color: #eaeaea !important; }.ie10 .tdi_72 .td-module-meta-info, .ie11 .tdi_72 .td-module-meta-info{ flex: 1; }.tdi_72 .td-module-meta-info{ padding: 0px; display: flex; flex-direction: column; justify-content: center; border-color: #eaeaea; }.tdi_72 .td-category-pos-above .td-post-category{ align-self: flex-start; }.tdi_72 .td_module_wrap{ padding-left: 20px; padding-right: 20px; padding-bottom: 21px; margin-bottom: 21px; }.tdi_72 .td_block_inner{ margin-left: -20px; margin-right: -20px; }.tdi_72 .td-module-container:before{ bottom: -21px; border-width: 0 0 1px 0; border-style: solid; border-color: #eaeaea; border-color: #eaeaea; }.tdi_72 .entry-thumb, .tdi_72 .entry-thumb:before, .tdi_72 .entry-thumb:after{ border-radius: 8px; }.tdi_72 .td-post-vid-time{ display: block; }.tdi_72 .td-author-photo .avatar{ width: 20px; height: 20px; margin-right: 6px; border-radius: 50%; }.tdi_72 .td-excerpt{ display: none; column-count: 1; column-gap: 48px; }.tdi_72 .td-audio-player{ opacity: 1; visibility: visible; height: auto; font-size: 13px; }.tdi_72 .td-read-more{ display: none; }.tdi_72 .td-author-date{ display: none; }.tdi_72 .td-post-author-name{ display: none; }.tdi_72 .td-post-date, .tdi_72 .td-post-author-name span{ display: none; }.tdi_72 .entry-review-stars{ display: none; }.tdi_72 .td-icon-star, .tdi_72 .td-icon-star-empty, .tdi_72 .td-icon-star-half{ font-size: 15px; }.tdi_72 .td-module-comments{ display: none; }.tdi_72 .td_module_wrap:nth-last-child(1){ margin-bottom: 0; padding-bottom: 0; }.tdi_72 .td_module_wrap:nth-last-child(1) .td-module-container:before{ display: none; }.tdi_72 .td-post-category{ background-color: #ffffff; color: #d78521; border-width: 1px; border-style: solid; border-color: #aaa; border-color: #d78521; font-size:14px !important;font-weight:600 !important;text-transform:capitalize !important; }.tdi_72 .td-post-category:hover{ background-color: #ffffff !important; color: #929bc0; border-color: #929bc0; }.tdi_72 .td-module-title a{ color: #333b7e; }.tdi_72 .td_module_wrap:hover .td-module-title a{ color: #929bc0 !important; }.tdi_72 .entry-title{ margin: 0 0 12px; font-size:18px !important;line-height:1.2 !important;font-weight:600 !important; }.tdi_72 .td-block-title a, .tdi_72 .td-block-title span{ font-size:32px !important; }.tdi_72 .td-editor-date, .tdi_72 .td-editor-date .td-post-author-name a, .tdi_72 .td-editor-date .entry-date, .tdi_72 .td-module-comments a{ font-size:14px !important;font-weight:600 !important;text-transform:uppercase !important; }html:not([class*='ie']) .tdi_72 .td-module-container:hover .entry-thumb:before{ opacity: 0; } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ .tdi_72 .td_module_wrap{ padding-bottom: 17px; margin-bottom: 17px; padding-bottom: 17px !important; margin-bottom: 17px !important; }.tdi_72 .td-module-container:before{ bottom: -17px; }.tdi_72 .td_module_wrap:nth-last-child(1){ margin-bottom: 0 !important; padding-bottom: 0 !important; }.tdi_72 .td_module_wrap .td-module-container:before{ display: block !important; }.tdi_72 .td_module_wrap:nth-last-child(1) .td-module-container:before{ display: none !important; }.tdi_72 .entry-title{ margin: 0 0 8px; font-size:16px !important;line-height:1.1 !important;font-weight:600 !important; }.tdi_72 .td-post-category{ font-size:10px !important;font-weight:600 !important;text-transform:capitalize !important; }.tdi_72 .td-editor-date, .tdi_72 .td-editor-date .td-post-author-name a, .tdi_72 .td-editor-date .entry-date, .tdi_72 .td-module-comments a{ font-size:10px !important;font-weight:600 !important;text-transform:uppercase !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_72 .td_module_wrap{ padding-bottom: 12px; margin-bottom: 12px; padding-bottom: 12px !important; margin-bottom: 12px !important; }.tdi_72 .td-module-container:before{ bottom: -12px; }.tdi_72 .td_module_wrap:nth-last-child(1){ margin-bottom: 0 !important; padding-bottom: 0 !important; }.tdi_72 .td_module_wrap .td-module-container:before{ display: block !important; }.tdi_72 .td_module_wrap:nth-last-child(1) .td-module-container:before{ display: none !important; }.tdi_72 .entry-title{ margin: 0 0 6px; font-size:14px !important;line-height:1.1 !important;font-weight:600 !important; }.tdi_72 .td-post-category{ font-size:9px !important;font-weight:600 !important;text-transform:capitalize !important; }.tdi_72 .td-editor-date, .tdi_72 .td-editor-date .td-post-author-name a, .tdi_72 .td-editor-date .entry-date, .tdi_72 .td-module-comments a{ font-size:9px !important;font-weight:600 !important;text-transform:uppercase !important; } } /* phone */ @media (max-width: 767px){ .tdi_72 .td_module_wrap{ padding-bottom: 16px; margin-bottom: 16px; padding-bottom: 16px !important; margin-bottom: 16px !important; }.tdi_72 .td-module-container:before{ bottom: -16px; }.tdi_72 .td_module_wrap:nth-last-child(1){ margin-bottom: 0 !important; padding-bottom: 0 !important; }.tdi_72 .td_module_wrap .td-module-container:before{ display: block !important; }.tdi_72 .td_module_wrap:nth-last-child(1) .td-module-container:before{ display: none !important; }.tdi_72 .entry-title{ margin: 0 0 8px; font-size:16px !important;line-height:1.1 !important;font-weight:600 !important; }.tdi_72 .td-post-category{ font-size:10px !important;font-weight:600 !important;text-transform:capitalize !important; }.tdi_72 .td-editor-date, .tdi_72 .td-editor-date .td-post-author-name a, .tdi_72 .td-editor-date .entry-date, .tdi_72 .td-module-comments a{ font-size:10px !important;font-weight:600 !important;text-transform:uppercase !important; } } </style> <div class="tdi_72_rand_style td-element-style"><style> .tdi_72_rand_style{ background-color:#ffffff !important; } </style></div><script>var block_tdi_72 = new tdBlock(); block_tdi_72.id = "tdi_72"; block_tdi_72.atts = '{"modules_on_row":"","modules_gap":"","image_width":"28","image_floated":"float_left","meta_padding":"0","image_radius":"8","image_height":"70","meta_info_horiz":"","modules_category":"","show_excerpt":"none","show_btn":"none","show_com":"none","show_author":"none","show_cat":"","image_size":"td_324x400","block_template_id":"td_block_template_10","f_title_font_line_height":"eyJhbGwiOiIxLjIiLCJwb3J0cmFpdCI6IjEuMSIsImxhbmRzY2FwZSI6IjEuMSIsInBob25lIjoiMS4xIn0=","f_title_font_family":"tk_1","f_title_font_size":"eyJhbGwiOiIxOCIsImxhbmRzY2FwZSI6IjE2IiwicG9ydHJhaXQiOiIxNCIsInBob25lIjoiMTYifQ==","f_title_font_weight":"eyJhbGwiOiI2MDAiLCJwb3J0cmFpdCI6IjYwMCJ9","f_cat_font_size":"eyJhbGwiOiIxNCIsImxhbmRzY2FwZSI6IjEwIiwicG9ydHJhaXQiOiI5IiwicGhvbmUiOiIxMCJ9","f_cat_font_weight":"600","f_cat_font_family":"tk_2","f_cat_font_transform":"capitalize","f_meta_font_size":"eyJhbGwiOiIxNCIsImxhbmRzY2FwZSI6IjEwIiwicG9ydHJhaXQiOiI5IiwicGhvbmUiOiIxMCJ9","f_meta_font_transform":"uppercase","f_meta_font_family":"tk_2","all_modules_space":"eyJhbGwiOiI0MiIsImxhbmRzY2FwZSI6IjM0IiwicG9ydHJhaXQiOiIyNCIsInBob25lIjoiMzIifQ==","meta_info_align":"center","art_title":"eyJhbGwiOiIwIDAgMTJweCIsImxhbmRzY2FwZSI6IjAgMCA4cHgiLCJwb3J0cmFpdCI6IjAgMCA2cHgiLCJwaG9uZSI6IjAgMCA4cHgifQ==","cat_txt":"#d78521","f_meta_font_weight":"600","tdc_css":"eyJhbGwiOnsiYmFja2dyb3VuZC1jb2xvciI6IiNmZmZmZmYiLCJkaXNwbGF5IjoiIn0sInBob25lIjp7ImRpc3BsYXkiOiIifSwicGhvbmVfbWF4X3dpZHRoIjo3Njd9","hide_image":"yes","modules_divider":"solid","title_txt":"#333b7e","custom_title":"Latest Posts","related_articles_posts_limit":"5","f_ex_font_family":"tk_2","f_btn_font_family":"tk_1","title_txt_hover":"#929bc0","cat_txt_hover":"#929bc0","header_text_color":"#333b7e","border_color":"#929bc0","f_header_font_size":"32","f_header_font_family":"tk_1","f_ajax_font_family":"tk_1","f_more_font_family":"tk_1","cat_border":"#d78521","cat_border_hover":"#929bc0","modules_cat_border":"1px","show_date":"none","show_review":"none","cat_bg":"#ffffff","cat_bg_hover":"#ffffff","h_effect":"up-shadow","el_class":"_ntv_latest_posts_widget","block_type":"td_flex_block_1","separator":"","custom_url":"","title_tag":"","mc1_tl":"","mc1_title_tag":"","mc1_el":"","post_ids":"-53144","category_id":"","category_ids":"","tag_slug":"","autors_id":"","installed_post_types":"","sort":"","limit":"5","offset":"","show_modified_date":"","time_ago":"","time_ago_add_txt":"ago","time_ago_txt_pos":"","td_ajax_filter_type":"","td_ajax_filter_ids":"","td_filter_default_txt":"All","td_ajax_preloading":"","container_width":"","m_padding":"","modules_border_size":"","modules_border_style":"","modules_border_color":"#eaeaea","modules_border_radius":"","modules_divider_color":"#eaeaea","image_alignment":"50","video_icon":"","video_popup":"yes","video_rec":"","spot_header":"","video_rec_title":"","video_rec_color":"","video_rec_disable":"","autoplay_vid":"yes","show_vid_t":"block","vid_t_margin":"","vid_t_padding":"","video_title_color":"","video_title_color_h":"","video_bg":"","video_overlay":"","vid_t_color":"","vid_t_bg_color":"","f_vid_title_font_header":"","f_vid_title_font_title":"Video pop-up article title","f_vid_title_font_settings":"","f_vid_title_font_family":"","f_vid_title_font_size":"","f_vid_title_font_line_height":"","f_vid_title_font_style":"","f_vid_title_font_weight":"","f_vid_title_font_transform":"","f_vid_title_font_spacing":"","f_vid_title_":"","f_vid_time_font_title":"Video duration text","f_vid_time_font_settings":"","f_vid_time_font_family":"","f_vid_time_font_size":"","f_vid_time_font_line_height":"","f_vid_time_font_style":"","f_vid_time_font_weight":"","f_vid_time_font_transform":"","f_vid_time_font_spacing":"","f_vid_time_":"","meta_width":"","meta_margin":"","meta_space":"","art_btn":"","meta_info_border_size":"","meta_info_border_style":"","meta_info_border_color":"#eaeaea","meta_info_border_radius":"","modules_category_margin":"","modules_category_padding":"","modules_category_radius":"0","modules_extra_cat":"","author_photo":"","author_photo_size":"","author_photo_space":"","author_photo_radius":"","review_space":"","review_size":"2.5","review_distance":"","art_excerpt":"","excerpt_col":"1","excerpt_gap":"","excerpt_middle":"","excerpt_inline":"","show_audio":"block","hide_audio":"","art_audio":"","art_audio_size":"1.5","btn_title":"","btn_margin":"","btn_padding":"","btn_border_width":"","btn_radius":"","pag_space":"","pag_padding":"","pag_border_width":"","pag_border_radius":"","prev_tdicon":"","next_tdicon":"","pag_icons_size":"","f_header_font_header":"","f_header_font_title":"Block header","f_header_font_settings":"","f_header_font_line_height":"","f_header_font_style":"","f_header_font_weight":"","f_header_font_transform":"","f_header_font_spacing":"","f_header_":"","f_ajax_font_title":"Ajax categories","f_ajax_font_settings":"","f_ajax_font_size":"","f_ajax_font_line_height":"","f_ajax_font_style":"","f_ajax_font_weight":"","f_ajax_font_transform":"","f_ajax_font_spacing":"","f_ajax_":"","f_more_font_title":"Load more button","f_more_font_settings":"","f_more_font_size":"","f_more_font_line_height":"","f_more_font_style":"","f_more_font_weight":"","f_more_font_transform":"","f_more_font_spacing":"","f_more_":"","f_title_font_header":"","f_title_font_title":"Article title","f_title_font_settings":"","f_title_font_style":"","f_title_font_transform":"","f_title_font_spacing":"","f_title_":"","f_cat_font_title":"Article category tag","f_cat_font_settings":"","f_cat_font_line_height":"","f_cat_font_style":"","f_cat_font_spacing":"","f_cat_":"","f_meta_font_title":"Article meta info","f_meta_font_settings":"","f_meta_font_line_height":"","f_meta_font_style":"","f_meta_font_spacing":"","f_meta_":"","f_ex_font_title":"Article excerpt","f_ex_font_settings":"","f_ex_font_size":"","f_ex_font_line_height":"","f_ex_font_style":"","f_ex_font_weight":"","f_ex_font_transform":"","f_ex_font_spacing":"","f_ex_":"","f_btn_font_title":"Article read more button","f_btn_font_settings":"","f_btn_font_size":"","f_btn_font_line_height":"","f_btn_font_style":"","f_btn_font_weight":"","f_btn_font_transform":"","f_btn_font_spacing":"","f_btn_":"","mix_color":"","mix_type":"","fe_brightness":"1","fe_contrast":"1","fe_saturate":"1","mix_color_h":"","mix_type_h":"","fe_brightness_h":"1","fe_contrast_h":"1","fe_saturate_h":"1","m_bg":"","color_overlay":"","shadow_shadow_header":"","shadow_shadow_title":"Module Shadow","shadow_shadow_size":"","shadow_shadow_offset_horizontal":"","shadow_shadow_offset_vertical":"","shadow_shadow_spread":"","shadow_shadow_color":"","all_underline_height":"","all_underline_color":"","meta_bg":"","author_txt":"","author_txt_hover":"","date_txt":"","ex_txt":"","com_bg":"","com_txt":"","rev_txt":"","audio_btn_color":"","audio_time_color":"","audio_bar_color":"","audio_bar_curr_color":"","shadow_m_shadow_header":"","shadow_m_shadow_title":"Meta info shadow","shadow_m_shadow_size":"","shadow_m_shadow_offset_horizontal":"","shadow_m_shadow_offset_vertical":"","shadow_m_shadow_spread":"","shadow_m_shadow_color":"","btn_bg":"","btn_bg_hover":"","btn_txt":"","btn_txt_hover":"","btn_border":"","btn_border_hover":"","pag_text":"","pag_h_text":"","pag_bg":"","pag_h_bg":"","pag_border":"","pag_h_border":"","ajax_pagination":"","ajax_pagination_infinite_stop":"","css":"","td_column_number":1,"header_color":"","color_preset":"","border_top":"","class":"tdi_72","tdc_css_class":"tdi_72","tdc_css_class_style":"tdi_72_rand_style"}'; block_tdi_72.td_column_number = "1"; block_tdi_72.block_type = "td_flex_block_1"; block_tdi_72.post_count = "5"; block_tdi_72.found_posts = "10198"; block_tdi_72.header_color = ""; block_tdi_72.ajax_pagination_infinite_stop = ""; block_tdi_72.max_num_pages = "2040"; tdBlocksArray.push(block_tdi_72); </script><div class="td-block-title-wrap"><h4 class="td-block-title"><span class="td-pulldown-size">Latest Posts</span></h4></div><div id=tdi_72 class="td_block_inner td-mc1-wrap"> <div class="td_module_flex td_module_flex_1 td_module_wrap td-animation-stack "> <div class="td-module-container td-category-pos-"> <div class="td-module-meta-info"> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/java/java-primitive-data-types/" rel="bookmark" title="Java Primitive Data Types">Java Primitive Data Types</a></h3> <div class="td-editor-date"> <a href="https://www.developer.com/java/" class="td-post-category">Java</a> <span class="td-author-date"> </span> </div> </div> </div> </div> <div class="td_module_flex td_module_flex_1 td_module_wrap td-animation-stack "> <div class="td-module-container td-category-pos-"> <div class="td-module-meta-info"> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/project-management/what-is-lean-development/" rel="bookmark" title="What is Lean Development?">What is Lean Development?</a></h3> <div class="td-editor-date"> <a href="https://www.developer.com/project-management/" class="td-post-category">Project Management</a> <span class="td-author-date"> </span> </div> </div> </div> </div> <div class="td_module_flex td_module_flex_1 td_module_wrap td-animation-stack "> <div class="td-module-container td-category-pos-"> <div class="td-module-meta-info"> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/java/java-variables/" rel="bookmark" title="Working with Java Variables">Working with Java Variables</a></h3> <div class="td-editor-date"> <a href="https://www.developer.com/java/" class="td-post-category">Java</a> <span class="td-author-date"> </span> </div> </div> </div> </div> <div class="td_module_flex td_module_flex_1 td_module_wrap td-animation-stack "> <div class="td-module-container td-category-pos-"> <div class="td-module-meta-info"> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/languages/python/python-curses-windowed-content/" rel="bookmark" title="Python curses: Working with Windowed Content">Python curses: Working with Windowed Content</a></h3> <div class="td-editor-date"> <a href="https://www.developer.com/languages/python/" class="td-post-category">Python</a> <span class="td-author-date"> </span> </div> </div> </div> </div> <div class="td_module_flex td_module_flex_1 td_module_wrap td-animation-stack "> <div class="td-module-container td-category-pos-"> <div class="td-module-meta-info"> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/languages/python/python-curses-library-example/" rel="bookmark" title="How to Create a Python curses-enabled Application">How to Create a Python curses-enabled Application</a></h3> <div class="td-editor-date"> <a href="https://www.developer.com/languages/python/" class="td-post-category">Python</a> <span class="td-author-date"> </span> </div> </div> </div> </div> </div></div><div class="wpb_wrapper td_block_empty_space td_block_wrap vc_empty_space tdi_74 " style="height: 32px"></div><div class="td-block td-a-rec td-a-rec-id-custom-spot tdi_75 td_block_template_1"> <style> /* inline tdc_css att */ .tdi_75{ margin-bottom:0px !important; padding-bottom:0px !important; border-style:solid !important; border-color:#888888 !important; border-width: 0px 0px 0px 0px !important; } </style> <style> /* custom css */ .tdi_75.td-a-rec{ text-align: center; }.tdi_75 .td-element-style{ z-index: -1; } </style><div class="devco-sticky-rail devco-target" id="devco-514987514" data-advadstrackid="58116" data-advadstrackbid="1"><!-- Start: GAM Ad Slot Render | Developer Sticky Rail --> <div id="sticky-rail" style="max-width: 300px; min-width: 160px; width: auto; text-align:center; min-height: 250px; max-height: 600px; height: auto; border:0px solid #efefef;"> <script> window.googletag = window.googletag || { cmd: [] }; window.googletag.cmd.push(function() { googletag.display("sticky-rail"); }); </script> </div> <!-- End: GAM Ad Slot Render | Developer Sticky Rail --></div></div><div class="wpb_wrapper td_block_empty_space td_block_wrap vc_empty_space tdi_77 " style="height: 32px"></div></div></div></div></div><div id="tdi_78" class="tdc-row stretch_row_1400 td-stretch-content"><div class="vc_row tdi_79 wpb_row td-pb-row tdc-element-style" > <style scoped> /* custom css */ .tdi_79, .tdi_79 .tdc-columns{ min-height: 0; }.tdi_79, .tdi_79 .tdc-columns{ display: block; }.tdi_79 .tdc-columns{ width: 100%; } /* inline tdc_css att */ .tdi_79{ margin-top:30px !important; margin-bottom:-116px !important; padding-top:50px !important; padding-bottom:135px !important; position:relative; } .tdi_79 .td_block_wrap{ text-align:left } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px) { .tdi_79{ margin-bottom:-109px !important; padding-top:85px !important; padding-bottom:120px !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px) { .tdi_79{ margin-bottom:-90px !important; padding-top:65px !important; padding-bottom:90px !important; } } /* phone */ @media (max-width: 767px) { .tdi_79{ padding-top:60px !important; padding-bottom:124px !important; } } </style> <div class="tdi_78_rand_style td-element-style" ><style> .tdi_78_rand_style{ background-color:#333b7e !important; } </style></div><div class="vc_column tdi_81 wpb_column vc_column_container tdc-column td-pb-span12"> <style scoped> /* custom css */ .tdi_81{ vertical-align: baseline; }.tdi_81 > .wpb_wrapper, .tdi_81 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_81 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_81 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_81 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="tdm_block td_block_wrap tdm_block_column_title tdi_82 tdm-content-horiz-left td-pb-border-top td_block_template_1" data-td-block-uid="tdi_82" > <style> /* inline tdc_css att */ .tdi_82{ margin-bottom:0px !important; } </style> <style> /* custom css */ .tdm_block_column_title{ margin-bottom: 0; display: inline-block; width: 100%; } </style><div class="td-block-row"><div class="td-block-span12 tdm-col"> <style> body .tdi_83 .tdm-title{ color: #ffffff; }.tdi_83 .tdm-title{ font-family:Montserrat !important;font-size:36px !important;line-height:1 !important;font-weight:500 !important; } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ .tdi_83 .tdm-title{ font-family:Montserrat !important;font-size:32px !important;line-height:1 !important;font-weight:500 !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_83 .tdm-title{ font-family:Montserrat !important;font-size:28px !important;line-height:1 !important;font-weight:500 !important; } } /* phone */ @media (max-width: 767px){ .tdi_83 .tdm-title{ font-family:Montserrat !important;font-size:30px !important;line-height:1 !important;font-weight:500 !important; } } </style><div class="tds-title tds-title1 td-fix-index tdi_83"><h3 class="tdm-title tdm-title-md">Related Stories</h3></div></div></div></div></div></div></div></div><div id="tdi_84" class="tdc-row stretch_row_1400 td-stretch-content"><div class="vc_row tdi_85 wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_85, .tdi_85 .tdc-columns{ min-height: 0; }.tdi_85, .tdi_85 .tdc-columns{ display: block; }.tdi_85 .tdc-columns{ width: 100%; } /* inline tdc_css att */ .tdi_85{ margin-bottom:60px !important; } .tdi_85 .td_block_wrap{ text-align:left } /* portrait */ @media (min-width: 768px) and (max-width: 1018px) { .tdi_85{ margin-bottom:90px !important; padding-right:14px !important; padding-left:14px !important; } } /* phone */ @media (max-width: 767px) { .tdi_85{ margin-bottom:80px !important; padding-right:0px !important; padding-left:0px !important; } } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px) { .tdi_85{ margin-bottom:100px !important; } } </style><div class="vc_column tdi_87 wpb_column vc_column_container tdc-column td-pb-span12"> <style scoped> /* custom css */ .tdi_87{ vertical-align: baseline; }.tdi_87 > .wpb_wrapper, .tdi_87 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_87 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_87 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_87 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="td_block_wrap tdb_single_related tdi_88 td-h-effect-up-shadow td_with_ajax_pagination td-pb-border-top td_block_template_1 tdb-single-related-posts" data-td-block-uid="tdi_88" > <style> /* inline tdc_css att */ .tdi_88{ margin-bottom:0px !important; } </style> <style> /* custom css */ .tdb-single-related-posts{ display: inline-block; width: 100%; padding-bottom: 0; overflow: visible; }.tdb-single-related-posts .tdb-block-inner:after, .tdb-single-related-posts .tdb-block-inner .td_module_wrap:after{ content: ''; display: table; clear: both; }.tdb-single-related-posts .td-module-container{ display: flex; flex-direction: column; position: relative; }.tdb-single-related-posts .td-module-container:before{ content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 1px; }.tdb-single-related-posts .td-image-wrap{ display: block; position: relative; padding-bottom: 70%; }.tdb-single-related-posts .td-image-container{ position: relative; flex: 0 0 100%; width: 100%; height: 100%; }.tdb-single-related-posts .td-module-thumb{ margin-bottom: 0; }.tdb-single-related-posts .td-module-meta-info{ padding: 7px 0 0 0; margin-bottom: 0; z-index: 1; border: 0 solid #eaeaea; }.tdb-single-related-posts .tdb-author-photo{ display: inline-block; }.tdb-single-related-posts .tdb-author-photo, .tdb-single-related-posts .tdb-author-photo img{ vertical-align: middle; }.tdb-single-related-posts .td-post-author-name, .tdb-single-related-posts .td-post-date, .tdb-single-related-posts .td-module-comments{ vertical-align: text-top; }.tdb-single-related-posts .entry-review-stars{ margin-left: 6px; vertical-align: text-bottom; }.tdb-single-related-posts .td-author-photo{ display: inline-block; vertical-align: middle; }.tdb-single-related-posts .td-thumb-css{ width: 100%; height: 100%; position: absolute; background-size: cover; background-position: center center; }.tdb-single-related-posts .td-category-pos-image .td-post-category, .tdb-single-related-posts .td-post-vid-time{ position: absolute; z-index: 2; bottom: 0; }.tdb-single-related-posts .td-category-pos-image .td-post-category{ left: 0; }.tdb-single-related-posts .td-post-vid-time{ right: 0; background-color: #000; padding: 3px 6px 4px; font-family: 'Open Sans', 'Open Sans Regular', sans-serif; font-size: 10px; font-weight: 600; line-height: 1; color: #fff; }.tdb-single-related-posts .td-module-title{ font-family: 'Roboto', sans-serif; font-weight: 500; font-size: 13px; line-height: 20px; margin: 0; }.tdb-single-related-posts .td-excerpt{ margin: 20px 0 0; line-height: 21px; }.tdb-single-related-posts .td-read-more, .tdb-single-related-posts .td-next-prev-wrap{ margin: 20px 0 0; }.tdb-single-related-posts div.tdb-block-inner:after{ content: '' !important; padding: 0; border: none; }.tdb-single-related-posts .td-next-prev-wrap a{ width: auto; height: auto; min-width: 25px; min-height: 25px; }.single-tdb_templates .tdb-single-related-posts .td-next-prev-wrap a:active{ pointer-events: none; }.tdb-dummy-data{ position: absolute; top: 50%; left: 50%; transform: translate(-50%); padding: 8px 40px 9px; background: rgba(0, 0, 0, 0.35); color: #fff; z-index: 100; opacity: 0; -webkit-transition: opacity 0.2s; transition: opacity 0.2s; }.tdc-element:hover .tdb-dummy-data{ opacity: 1; }.tdi_88 .td-image-wrap{ padding-bottom: 80%; }.tdi_88 .entry-thumb{ background-position: center 50%; }.tdi_88 .td-module-container{ flex-direction: column; padding: 0px 0px 24px 0px; border-width: 1px; border-style: solid; border-color: #000; border-color: #e6e6e6; background-color: #f6f6f6; flex-grow: 1; }.tdi_88 .td-image-container{ display: block; order: 0; flex: 0 0 0; }.tdi_88 .td-module-meta-info{ padding: 26px 22px; border-color: #eaeaea; }.tdi_88 .td_module_wrap{ width: 33.33333333%; float: left; padding-left: 12px; padding-right: 12px; padding-bottom: 12px; margin-bottom: 12px; display: flex; }.tdi_88 .tdb-block-inner{ margin-left: -12px; margin-right: -12px; }.tdi_88 .td-module-container:before{ bottom: -12px; border-color: #eaeaea; }.tdi_88 .td-post-vid-time{ display: block; }.tdi_88 .td-post-category{ margin: 0px 0px 24px 0px; display: inline-block; background-color: #f6f6f6; color: #d78521; border-width: 1px; border-color: #aaa; border-style: solid; border-color: #d78521; font-size:14px !important;font-weight:600 !important;text-transform:capitalize !important;letter-spacing:0.8px !important; }.tdi_88 .td-author-photo .avatar{ width: 20px; height: 20px; margin-right: 6px; border-radius: 50%; }.tdi_88 .td-excerpt{ display: none; column-count: 1; column-gap: 48px; }.tdi_88 .td-audio-player{ opacity: 0; visibility: hidden; height: 0; font-size: 13px; }.tdi_88 .td-read-more{ display: none; }.tdi_88 .td-post-date, .tdi_88 .td-post-author-name span{ display: inline-block; color: #969696; }.tdi_88 .td-module-comments{ display: none; }.tdi_88 .td_module_wrap:nth-child(3n+1){ clear: both; }.tdi_88 .td_module_wrap:nth-last-child(-n+3){ margin-bottom: 0; padding-bottom: 0; }.tdi_88 .td_module_wrap:nth-last-child(-n+3) .td-module-container:before{ display: none; }.tdi_88 .td-post-category:hover{ background-color: #f6f6f6 !important; color: #929bc0; border-color: #929bc0; }.tdi_88 .td-module-title a{ color: #333b7e; }.tdi_88 .td_module_wrap:hover .td-module-title a{ color: #929bc0 !important; }.tdi_88 .td-post-author-name a{ color: #969696; }.tdi_88 .td-post-author-name:hover a{ color: #333b7e; }.tdi_88.td_with_ajax_pagination .td-next-prev-wrap a{ color: #9c0004; background-color: #9c0004; border-color: #9c0004; border-color: #9c0004; font-size: 20px; }.tdi_88.td_with_ajax_pagination .td-next-prev-wrap .td-next-prev-icon-svg svg, .tdi_88.td_with_ajax_pagination .td-next-prev-wrap .td-next-prev-icon-svg svg *{ fill: #9c0004; }.tdi_88.td_with_ajax_pagination .td-next-prev-wrap a:hover{ color: rgba(33,29,29,0.58); background-color: rgba(33,29,29,0.58); border-color: rgba(33,29,29,0.58); border-color: rgba(33,29,29,0.58); }.tdi_88.td_with_ajax_pagination .td-next-prev-wrap a:hover .td-next-prev-icon-svg svg, .tdi_88.td_with_ajax_pagination .td-next-prev-wrap a:hover .td-next-prev-icon-svg svg *{ fill: rgba(33,29,29,0.58); }.tdi_88 .entry-title{ margin: 0 0 11px; font-size:18px !important;line-height:1.2 !important;font-weight:800 !important; }.tdi_88.td_with_ajax_pagination .td-next-prev-wrap .td-next-prev-icon-svg svg{ width: 20px; height: calc( 20px + 1px ); }.tdi_88 .td-editor-date, .tdi_88 .td-editor-date .entry-date, .tdi_88 .td-post-author-name a, .tdi_88 .td-module-comments a{ font-size:14px !important;font-weight:400 !important; }.tdi_88 .td-post-author-name{ font-weight: 400; }.tdi_88 .td_block_inner{ display: flex; flex-wrap: wrap; }html:not([class*='ie']) .tdi_88 .td-module-container:hover .entry-thumb:before{ opacity: 0; }@media (max-width: 767px) { .tdb-single-related-posts .td-module-title { font-size: 17px; line-height: 23px; } } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ .tdi_88 .td-image-wrap{ padding-bottom: 70%; }.tdi_88 .td-module-meta-info{ padding: 22px 18px; }.tdi_88 .td_module_wrap{ padding-left: 11px; padding-right: 11px; padding-bottom: 12px; margin-bottom: 12px; clear: none !important; padding-bottom: 12px !important; margin-bottom: 12px !important; }.tdi_88 .tdb-block-inner{ margin-left: -11px; margin-right: -11px; }.tdi_88 .td-module-container:before{ bottom: -12px; }.tdi_88 .td_module_wrap:nth-child(3n+1){ clear: both !important; }.tdi_88 .td_module_wrap:nth-last-child(-n+3){ margin-bottom: 0 !important; padding-bottom: 0 !important; }.tdi_88 .td_module_wrap .td-module-container:before{ display: block !important; }.tdi_88 .td_module_wrap:nth-last-child(-n+3) .td-module-container:before{ display: none !important; }.tdi_88 .entry-title{ margin: 0 0 10px; font-size:17px !important;line-height:1.2 !important;font-weight:800 !important; }.tdi_88 .td-post-category{ font-size:10px !important;font-weight:600 !important;text-transform:capitalize !important;letter-spacing:0.8px !important; }.tdi_88 .td-editor-date, .tdi_88 .td-editor-date .entry-date, .tdi_88 .td-post-author-name a, .tdi_88 .td-module-comments a{ font-size:11px !important;font-weight:400 !important; }.tdi_88 .td-excerpt{ font-size:1px !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_88 .td-image-wrap{ padding-bottom: 70%; }.tdi_88 .td-module-meta-info{ padding: 22px 18px; }.tdi_88 .td_module_wrap{ padding-left: 10px; padding-right: 10px; padding-bottom: 12px; margin-bottom: 12px; clear: none !important; padding-bottom: 12px !important; margin-bottom: 12px !important; }.tdi_88 .tdb-block-inner{ margin-left: -10px; margin-right: -10px; }.tdi_88 .td-module-container:before{ bottom: -12px; }.tdi_88 .td_module_wrap:nth-child(3n+1){ clear: both !important; }.tdi_88 .td_module_wrap:nth-last-child(-n+3){ margin-bottom: 0 !important; padding-bottom: 0 !important; }.tdi_88 .td_module_wrap .td-module-container:before{ display: block !important; }.tdi_88 .td_module_wrap:nth-last-child(-n+3) .td-module-container:before{ display: none !important; }.tdi_88 .entry-title{ margin: 0 0 10px; font-size:17px !important;line-height:1.2 !important;font-weight:600 !important; }.tdi_88 .td-post-category{ font-size:10px !important;font-weight:600 !important;text-transform:capitalize !important;letter-spacing:0.8px !important; }.tdi_88 .td-editor-date, .tdi_88 .td-editor-date .entry-date, .tdi_88 .td-post-author-name a, .tdi_88 .td-module-comments a{ font-size:11px !important;font-weight:400 !important; } } /* phone */ @media (max-width: 767px){ .tdi_88 .td-module-meta-info{ padding: 22px 18px; }.tdi_88 .td_module_wrap{ width: 100%; float: left; padding-left: 0px; padding-right: 0px; padding-bottom: 12px; margin-bottom: 12px; padding-bottom: 12px !important; margin-bottom: 12px !important; }.tdi_88 .tdb-block-inner{ margin-left: -0px; margin-right: -0px; }.tdi_88 .td-module-container:before{ bottom: -12px; }.tdi_88 .td_module_wrap:nth-last-child(1){ margin-bottom: 0 !important; padding-bottom: 0 !important; }.tdi_88 .td_module_wrap .td-module-container:before{ display: block !important; }.tdi_88 .td_module_wrap:nth-last-child(1) .td-module-container:before{ display: none !important; }.tdi_88 .entry-title{ margin: 0 0 10px; font-size:18px !important;line-height:1.1 !important;font-weight:800 !important; }.tdi_88 .td-post-category{ font-size:10px !important;font-weight:600 !important;text-transform:capitalize !important;letter-spacing:0.8px !important; }.tdi_88 .td-editor-date, .tdi_88 .td-editor-date .entry-date, .tdi_88 .td-post-author-name a, .tdi_88 .td-module-comments a{ font-size:11px !important;font-weight:400 !important; } } </style><script>var block_tdi_88 = new tdBlock(); block_tdi_88.id = "tdi_88"; block_tdi_88.atts = '{"show_author":"","show_com":"none","image_size":"td_485x360","meta_padding":"eyJhbGwiOiIyNnB4IDIycHgiLCJsYW5kc2NhcGUiOiIyMnB4IDE4cHgiLCJwb3J0cmFpdCI6IjIycHggMThweCIsInBob25lIjoiMjJweCAxOHB4In0=","tdc_css":"eyJhbGwiOnsibWFyZ2luLWJvdHRvbSI6IjAiLCJkaXNwbGF5IjoiIn19","image_height":"eyJhbGwiOiI4MCIsInBvcnRyYWl0IjoiNzAiLCJsYW5kc2NhcGUiOiI3MCJ9","show_btn":"none","show_excerpt":"none","modules_category":"above","cat_bg":"#f6f6f6","cat_txt":"#d78521","f_cat_font_family":"tk_1","f_cat_font_size":"eyJsYW5kc2NhcGUiOiIxMCIsInBvcnRyYWl0IjoiMTAiLCJwaG9uZSI6IjEwIiwiYWxsIjoiMTQifQ==","f_cat_font_transform":"capitalize","f_cat_font_weight":"600","f_cat_font_spacing":"0.8","f_title_font_size":"eyJhbGwiOiIxOCIsInBvcnRyYWl0IjoiMTciLCJsYW5kc2NhcGUiOiIxNyJ9","f_title_font_family":"tk_1","f_title_font_weight":"eyJhbGwiOiI4MDAiLCJwb3J0cmFpdCI6IjYwMCJ9","f_meta_font_weight":"400","author_txt":"#969696","f_meta_font_size":"eyJhbGwiOiIxNCIsImxhbmRzY2FwZSI6IjExIiwicG9ydHJhaXQiOiIxMSIsInBob25lIjoiMTEifQ==","date_txt":"#969696","f_meta_font_family":"tk_1","modules_category_margin":"eyJhbGwiOiIwIDAgN3B4IiwibGFuZHNjYXBlIjoiMCAwIDZweCIsInBvcnRyYWl0IjoiMCAwIDZweCIsInBob25lIjoiMCAwIDZweCJ9","art_title":"eyJhbGwiOiIwIDAgMTFweCIsImxhbmRzY2FwZSI6IjAgMCAxMHB4IiwicG9ydHJhaXQiOiIwIDAgMTBweCIsInBob25lIjoiMCAwIDEwcHgifQ==","author_txt_hover":"#333b7e","modules_border_style":"eyJsYW5kc2NhcGUiOiIifQ==","modules_border_size":"eyJhbGwiOiIxIiwicGhvbmUiOiIxIn0=","m_bg":"#f6f6f6","modules_border_color":"#e6e6e6","f_title_font_line_height":"eyJsYW5kc2NhcGUiOiIxLjIiLCJwb3J0cmFpdCI6IjEuMiIsInBob25lIjoiMS4xIiwiYWxsIjoiMS4yIn0=","f_ex_font_size":"eyJsYW5kc2NhcGUiOiIxIn0=","all_modules_space":"24","modules_on_row":"eyJhbGwiOiIzMy4zMzMzMzMzMyUiLCJwaG9uZSI6IjEwMCUiLCJsYW5kc2NhcGUiOiIzMy4zMzMzMzMzMyUiLCJwb3J0cmFpdCI6IjMzLjMzMzMzMzMzJSJ9","modules_gap":"eyJhbGwiOiIyNCIsImxhbmRzY2FwZSI6IjIyIiwicG9ydHJhaXQiOiIyMCIsInBob25lIjoiMCJ9","limit":"3","title_txt":"#333b7e","category_id":"","custom_title":"","related_articles_posts_limit":"3","f_header_font_family":"tk_1","f_ajax_font_family":"tk_1","f_more_font_family":"tk_1","f_ex_font_family":"tk_2","f_btn_font_family":"tk_1","prev_tdicon":"tdc-font-fa tdc-font-fa-chevron-left","next_tdicon":"tdc-font-fa tdc-font-fa-chevron-right","pag_icons_size":"20","hide_image":"yes","m_padding":"0px 0px 24px 0px","show_audio":"none","related_articles_type":"","cat_txt_hover":"#929bc0","title_txt_hover":"#929bc0","nextprev_icon":"#9c0004","nextprev_icon_h":"rgba(33,29,29,0.58)","nextprev_bg":"#9c0004","nextprev_bg_h":"rgba(33,29,29,0.58)","nextprev_border":"#9c0004","nextprev_border_h":"rgba(33,29,29,0.58)","all_underline_color":"#929bc0","cat_bg_hover":"#f6f6f6","cat_border":"#d78521","cat_border_hover":"#929bc0","modules_category_spacing":"0px 0px 24px 0px","modules_cat_border":"1","h_effect":"up-shadow","offset":"","live_filter":"cur_post_same_categories","ajax_pagination":"next_prev","td_ajax_filter_type":"td_custom_related","live_filter_cur_post_id":53144,"sample_posts_data":false,"block_type":"tdb_single_related","separator":"","block_template_id":"","title_tag":"","mc1_tl":"","mc1_title_tag":"","mc1_el":"","related_articles_posts_offset":"","nextprev":"","container_width":"","modules_divider":"","divider_on":"","modules_divider_color":"#eaeaea","shadow_shadow_header":"","shadow_shadow_title":"Shadow","shadow_shadow_size":"","shadow_shadow_offset_horizontal":"","shadow_shadow_offset_vertical":"","shadow_shadow_spread":"","shadow_shadow_color":"","image_alignment":"50","image_width":"","image_floated":"no_float","image_radius":"","video_icon":"","video_popup":"yes","video_rec":"","spot_header":"","video_rec_title":"- Advertisement -","video_rec_color":"","video_rec_disable":"","show_vid_t":"block","vid_t_margin":"","vid_t_padding":"","video_title_color":"","video_title_color_h":"","video_bg":"","video_overlay":"","vid_t_color":"","vid_t_bg_color":"","f_vid_title_font_header":"","f_vid_title_font_title":"Video pop-up article title","f_vid_title_font_settings":"","f_vid_title_font_family":"","f_vid_title_font_size":"","f_vid_title_font_line_height":"","f_vid_title_font_style":"","f_vid_title_font_weight":"","f_vid_title_font_transform":"","f_vid_title_font_spacing":"","f_vid_title_":"","f_vid_time_font_title":"Video duration text","f_vid_time_font_settings":"","f_vid_time_font_family":"","f_vid_time_font_size":"","f_vid_time_font_line_height":"","f_vid_time_font_style":"","f_vid_time_font_weight":"","f_vid_time_font_transform":"","f_vid_time_font_spacing":"","f_vid_time_":"","meta_info_align":"","meta_info_horiz":"content-horiz-left","meta_width":"","meta_margin":"","art_excerpt":"","excerpt_col":"1","excerpt_gap":"","art_audio":"","art_audio_size":"1.5","art_btn":"","meta_info_border_size":"","meta_info_border_style":"","meta_info_border_color":"#eaeaea","modules_category_padding":"","modules_category_radius":"0","show_cat":"inline-block","author_photo":"","author_photo_size":"","author_photo_space":"","author_photo_radius":"","show_date":"inline-block","show_modified_date":"","time_ago":"","time_ago_add_txt":"ago","time_ago_txt_pos":"","excerpt_middle":"","excerpt_inline":"","hide_audio":"","meta_space":"","btn_title":"","btn_margin":"","btn_padding":"","btn_border_width":"","btn_radius":"","pag_space":"","pag_padding":"","pag_border_width":"","pag_border_radius":"","f_header_font_header":"","f_header_font_title":"Block header","f_header_font_settings":"","f_header_font_size":"","f_header_font_line_height":"","f_header_font_style":"","f_header_font_weight":"","f_header_font_transform":"","f_header_font_spacing":"","f_header_":"","f_ajax_font_title":"Ajax categories","f_ajax_font_settings":"","f_ajax_font_size":"","f_ajax_font_line_height":"","f_ajax_font_style":"","f_ajax_font_weight":"","f_ajax_font_transform":"","f_ajax_font_spacing":"","f_ajax_":"","f_more_font_title":"Load more button","f_more_font_settings":"","f_more_font_size":"","f_more_font_line_height":"","f_more_font_style":"","f_more_font_weight":"","f_more_font_transform":"","f_more_font_spacing":"","f_more_":"","f_title_font_header":"","f_title_font_title":"Article title","f_title_font_settings":"","f_title_font_style":"","f_title_font_transform":"","f_title_font_spacing":"","f_title_":"","f_cat_font_title":"Article category tag","f_cat_font_settings":"","f_cat_font_line_height":"","f_cat_font_style":"","f_cat_":"","f_meta_font_title":"Article meta info","f_meta_font_settings":"","f_meta_font_line_height":"","f_meta_font_style":"","f_meta_font_transform":"","f_meta_font_spacing":"","f_meta_":"","f_ex_font_title":"Article excerpt","f_ex_font_settings":"","f_ex_font_line_height":"","f_ex_font_style":"","f_ex_font_weight":"","f_ex_font_transform":"","f_ex_font_spacing":"","f_ex_":"","f_btn_font_title":"Article read more button","f_btn_font_settings":"","f_btn_font_size":"","f_btn_font_line_height":"","f_btn_font_style":"","f_btn_font_weight":"","f_btn_font_transform":"","f_btn_font_spacing":"","f_btn_":"","mix_color":"","mix_type":"","fe_brightness":"1","fe_contrast":"1","fe_saturate":"1","mix_color_h":"","mix_type_h":"","fe_brightness_h":"1","fe_contrast_h":"1","fe_saturate_h":"1","color_overlay":"","all_underline_height":"","meta_bg":"","ex_txt":"","com_bg":"","com_txt":"","shadow_m_shadow_header":"","shadow_m_shadow_title":"Meta info shadow","shadow_m_shadow_size":"","shadow_m_shadow_offset_horizontal":"","shadow_m_shadow_offset_vertical":"","shadow_m_shadow_spread":"","shadow_m_shadow_color":"","audio_btn_color":"","audio_time_color":"","audio_bar_color":"","audio_bar_curr_color":"","btn_bg":"","btn_bg_hover":"","btn_txt":"","btn_txt_hover":"","btn_border":"","btn_border_hover":"","el_class":"","live_filter_cur_post_author":"888","td_column_number":3,"header_color":"","ajax_pagination_infinite_stop":"","td_ajax_preloading":"","td_filter_default_txt":"","td_ajax_filter_ids":"","color_preset":"","border_top":"","css":"","class":"tdi_88","tdc_css_class":"tdi_88","tdc_css_class_style":"tdi_88_rand_style"}'; block_tdi_88.td_column_number = "3"; block_tdi_88.block_type = "tdb_single_related"; block_tdi_88.post_count = "3"; block_tdi_88.found_posts = "1565"; block_tdi_88.header_color = ""; block_tdi_88.ajax_pagination_infinite_stop = ""; block_tdi_88.max_num_pages = "522"; tdBlocksArray.push(block_tdi_88); </script><div id=tdi_88 class="td_block_inner tdb-block-inner td-fix-index"> <div class="tdb_module_related td_module_wrap td-animation-stack"> <div class="td-module-container td-category-pos-above"> <div class="td-module-meta-info"> <a href="https://www.developer.com/languages/" class="td-post-category">Languages</a> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/languages/viper-golang/" rel="bookmark" title="Introduction to Viper in Go and Golang">Introduction to Viper in Go and Golang</a></h3> <div class="td-editor-date"> <span class="td-author-date"> <span class="td-post-author-name"><a href="https://www.developer.com/author/manoj-debnath/">Manoj Debnath</a> <span>-</span> </span> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="2022-09-22T20:48:03+00:00" >September 22, 2022</time></span> </span> </div> </div> </div> </div> <div class="tdb_module_related td_module_wrap td-animation-stack"> <div class="td-module-container td-category-pos-above"> <div class="td-module-meta-info"> <a href="https://www.developer.com/languages/" class="td-post-category">Languages</a> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/languages/collaboration-tools-game-developers/" rel="bookmark" title="Collaboration Tools for Game Developers">Collaboration Tools for Game Developers</a></h3> <div class="td-editor-date"> <span class="td-author-date"> <span class="td-post-author-name"><a href="https://www.developer.com/author/enrique-corrales/">Enrique Corrales</a> <span>-</span> </span> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="2022-09-22T16:38:00+00:00" >September 22, 2022</time></span> </span> </div> </div> </div> </div> <div class="tdb_module_related td_module_wrap td-animation-stack"> <div class="td-module-container td-category-pos-above"> <div class="td-module-meta-info"> <a href="https://www.developer.com/languages/" class="td-post-category">Languages</a> <h3 class="entry-title td-module-title"><a href="https://www.developer.com/languages/game-development-courses/" rel="bookmark" title="Online Courses to Learn Game Development">Online Courses to Learn Game Development</a></h3> <div class="td-editor-date"> <span class="td-author-date"> <span class="td-post-author-name"><a href="https://www.developer.com/author/rpayne/">Ronnie Payne</a> <span>-</span> </span> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="2022-09-13T17:03:55+00:00" >September 13, 2022</time></span> </span> </div> </div> </div> </div> </div></div></div></div></div></div></div></div> <span class="td-page-meta" itemprop="author" itemscope itemtype="https://schema.org/Person"><meta itemprop="name" content="Thornton Rose"><meta itemprop="url" content="https://www.developer.com/author/thornton-rose/"></span><meta itemprop="datePublished" content="1999-10-14T07:10:00+00:00"><meta itemprop="dateModified" content="2021-03-25T15:32:10+00:00"><meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="https://www.developer.com/languages/pseudo-objects-in-active-server-pages/"/><span class="td-page-meta" itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><span class="td-page-meta" itemprop="logo" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="https://devcomprd.wpengine.com/wp-content/uploads/2021/01/Dev_logo_MainLogo-300x68.png"></span><meta itemprop="name" content="Developer.com"></span><meta itemprop="headline" content="Pseudo-Objects in Active Server Pages"><span class="td-page-meta" itemprop="image" itemscope itemtype="https://schema.org/ImageObject"><meta itemprop="url" content="https://www.developer.com/wp-content/plugins/td-cloud-library/assets/images/td_meta_replacement.png"><meta itemprop="width" content="1068"><meta itemprop="height" content="580"></span> </article> </div> </div> </div> <!-- #tdb-autoload-article --> <!-- Instagram --> <div class="td-footer-template-wrap" style="position: relative"> <div class="td-footer-wrap "> <div id="tdi_89" class="tdc-zone"><div class="tdc_zone tdi_90 wpb_row td-pb-row tdc-element-style" > <style scoped> /* custom css */ .tdi_90{ min-height: 0; }.tdi_90 > .td-element-style:after{ content: '' !important; width: 100% !important; height: 100% !important; position: absolute !important; top: 0 !important; left: 0 !important; z-index: 0 !important; display: block !important; background-color: #333b7e !important; } </style> <div class="tdi_89_rand_style td-element-style" ></div><div id="tdi_91" class="tdc-row stretch_row_1400 td-stretch-content"><div class="vc_row tdi_92 _ntv_footer wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_92, .tdi_92 .tdc-columns{ min-height: 0; }.tdi_92, .tdi_92 .tdc-columns{ display: block; }.tdi_92 .tdc-columns{ width: 100%; }@media (min-width: 768px) { .tdi_92 { margin-left: -15px; margin-right: -15px; } .tdi_92 .tdc-row-video-background-error, .tdi_92 .vc_column { padding-left: 15px; padding-right: 15px; } } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ @media (min-width: 768px) { .tdi_92 { margin-left: -10px; margin-right: -10px; } .tdi_92 .tdc-row-video-background-error, .tdi_92 .vc_column { padding-left: 10px; padding-right: 10px; } } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ @media (min-width: 768px) { .tdi_92 { margin-left: -10px; margin-right: -10px; } .tdi_92 .tdc-row-video-background-error, .tdi_92 .vc_column { padding-left: 10px; padding-right: 10px; } } } /* inline tdc_css att */ .tdi_92{ padding-top:60px !important; } .tdi_92 .td_block_wrap{ text-align:left } /* portrait */ @media (min-width: 768px) and (max-width: 1018px) { .tdi_92{ padding-top:30px !important; padding-bottom:10px !important; } } /* phone */ @media (max-width: 767px) { .tdi_92{ padding-top:60px !important; } } </style><div class="vc_column tdi_94 wpb_column vc_column_container tdc-column td-pb-span6"> <style scoped> /* custom css */ .tdi_94{ vertical-align: baseline; }.tdi_94 > .wpb_wrapper, .tdi_94 > .wpb_wrapper > .tdc-elements{ display: flex; flex-direction: column; flex-wrap: nowrap; justify-content: flex-start; align-items: flex-start; }.tdi_94 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_94 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_94 > .wpb_wrapper{ width: 100%; height: 100%; } /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_94{ justify-content:center !important; text-align:center !important; } } </style><div class="wpb_wrapper"><div class="td_block_wrap tdb_header_logo tdi_95 td-pb-border-top td_block_template_1 tdb-header-align" data-td-block-uid="tdi_95" > <style> /* inline tdc_css att */ .tdi_95{ margin-top:10px !important; margin-bottom:10px !important; } /* phone */ @media (max-width: 767px) { .tdi_95{ margin-left:50px !important; display:inline-block !important; } } </style> <style> /* custom css */ .tdi_95{ display: inline-block; }.tdi_95 .tdb-logo-a, .tdi_95 h1{ flex-direction: row; align-items: center; justify-content: center; }.tdi_95 .tdb-logo-svg-wrap{ display: block; }.tdi_95 .tdb-logo-svg-wrap + .tdb-logo-img-wrap{ display: none; }.tdi_95 .tdb-logo-img{ max-width: 50%; }.tdi_95 .tdb-logo-img-wrap{ display: block; }.tdi_95 .tdb-logo-text-tagline{ margin-top: 2px; margin-left: 0; display: block; }.tdi_95 .tdb-logo-text-title{ display: block; color: #ffffff; font-size:34px !important;font-weight:500 !important;text-transform:uppercase !important;; }.tdi_95 .tdb-logo-text-wrap{ flex-direction: column; align-items: center; }.tdi_95 .tdb-logo-icon{ top: 0px; display: block; } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ .tdi_95 .tdb-logo-text-title{ font-size:32px !important;font-weight:500 !important;text-transform:uppercase !important;; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_95 .tdb-logo-text-title{ font-size:22px !important;font-weight:500 !important;text-transform:uppercase !important;; } } /* phone */ @media (max-width: 767px){ .tdi_95 .tdb-logo-img{ max-width: 80%; } } </style><div class="tdb-block-inner td-fix-index"><a class="tdb-logo-a" href="https://www.developer.com/"><span class="tdb-logo-img-wrap"><img class="tdb-logo-img td-retina-data" data-retina="https://www.developer.com/wp-content/uploads/2021/01/Dev_logo_White_RetinaMobile-Logo-copy.png" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20568%20127'%3E%3C/svg%3E" alt="Developer.com" title="" width="568" height="127" data-lazy-src="https://www.developer.com/wp-content/uploads/2021/01/Dev_logo_White_MainLogo-copy.png" /><noscript><img class="tdb-logo-img td-retina-data" data-retina="https://www.developer.com/wp-content/uploads/2021/01/Dev_logo_White_RetinaMobile-Logo-copy.png" src="https://www.developer.com/wp-content/uploads/2021/01/Dev_logo_White_MainLogo-copy.png" alt="Developer.com" title="" width="568" height="127" /></noscript></span></a></div></div> <!-- ./block --><div class="tdm_block td_block_wrap tdm_block_inline_text tdi_96 tdm-inline-block td-pb-border-top td_block_template_1" data-td-block-uid="tdi_96" > <style> /* inline tdc_css att */ .tdi_96{ width:90% !important; } /* phone */ @media (max-width: 767px) { .tdi_96{ width:100% !important; justify-content:center !important; text-align:center !important; } } </style> <style> /* custom css */ .tdm_block.tdm_block_inline_text{ margin-bottom: 0; vertical-align: top; }.tdm_block.tdm_block_inline_text .tdm-descr{ margin-bottom: 0; -webkit-transform: translateZ(0); transform: translateZ(0); }.tdc-row-content-vert-center .tdm-inline-text-yes{ vertical-align: middle; }.tdc-row-content-vert-bottom .tdm-inline-text-yes{ vertical-align: bottom; }.tdi_96{ text-align: left !important; }.tdi_96 .tdm-descr{ color: #ffffff; font-family:Montserrat !important;font-size:16px !important;line-height:1.4 !important; } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_96 .tdm-descr{ font-family:Montserrat !important;font-size:12px !important;line-height:1.4 !important; } } /* phone */ @media (max-width: 767px){ .tdi_96{ text-align: center !important; margin-right: auto; margin-left: auto; } } </style><p class="tdm-descr">Developer.com features tutorials, news, and how-tos focused on topics relevant to software engineers, web developers, programmers, and product managers of development teams. In addition to covering the most popular programming languages today, we publish reviews and round-ups of developer tools that help devs reduce the time and money spent developing, maintaining, and debugging their applications. This includes coverage of software management systems and project management (PM) software - all aimed at helping to shorten the software development lifecycle (SDL).</p></div><div class="tdm_block td_block_wrap tdm_block_socials tdi_97 tdm-inline-block tdm-content-horiz-left td-pb-border-top td_block_template_1" data-td-block-uid="tdi_97" > <style> /* inline tdc_css att */ .tdi_97{ margin-top:10px !important; margin-bottom:20px !important; width:100% !important; } /* phone */ @media (max-width: 767px) { .tdi_97{ margin-right:auto !important; margin-left:auto !important; width:auto !important; } } </style> <style> .tdi_98 .tdm-social-item i{ font-size: 20px; vertical-align: middle; line-height: 36px; }.tdi_98 .tdm-social-item i.td-icon-twitter, .tdi_98 .tdm-social-item i.td-icon-linkedin, .tdi_98 .tdm-social-item i.td-icon-pinterest, .tdi_98 .tdm-social-item i.td-icon-blogger, .tdi_98 .tdm-social-item i.td-icon-vimeo{ font-size: 16px; }.tdi_98 .tdm-social-item{ width: 36px; height: 36px; margin: 5px 10px 5px 0; }.tdi_98 .tdm-social-item-wrap:last-child .tdm-social-item{ margin-right: 0 !important; }.tdi_98 .tdm-social-item i, .tds-team-member2 .tdi_98.tds-social1 .tdm-social-item i{ color: #ffffff; }.tdi_98 .tdm-social-item-wrap:hover i, .tds-team-member2 .tdi_98.tds-social1 .tdm-social-item:hover i{ color: #929bc0; }.tdi_98 .tdm-social-text{ display: none; margin-left: 2px; margin-right: 18px; } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_98 .tdm-social-item i{ font-size: 12px; vertical-align: middle; line-height: 21.6px; }.tdi_98 .tdm-social-item i.td-icon-twitter, .tdi_98 .tdm-social-item i.td-icon-linkedin, .tdi_98 .tdm-social-item i.td-icon-pinterest, .tdi_98 .tdm-social-item i.td-icon-blogger, .tdi_98 .tdm-social-item i.td-icon-vimeo{ font-size: 9.6px; }.tdi_98 .tdm-social-item{ width: 21.6px; height: 21.6px; } } </style><div class="tdm-social-wrapper tds-social1 tdi_98"><div class="tdm-social-item-wrap"><a href="https://www.facebook.com/developercomwebsite" title="Facebook" class="tdm-social-item"><i class="td-icon-font td-icon-facebook"></i></a><a href="https://www.facebook.com/developercomwebsite" class="tdm-social-text" >Facebook</a></div><div class="tdm-social-item-wrap"><a href="https://www.linkedin.com/company/developer-com/" title="Linkedin" class="tdm-social-item"><i class="td-icon-font td-icon-linkedin"></i></a><a href="https://www.linkedin.com/company/developer-com/" class="tdm-social-text" >Linkedin</a></div><div class="tdm-social-item-wrap"><a href="https://twitter.com/DeveloperCom" title="Twitter" class="tdm-social-item"><i class="td-icon-font td-icon-twitter"></i></a><a href="https://twitter.com/DeveloperCom" class="tdm-social-text" >Twitter</a></div></div></div></div></div><div class="vc_column tdi_100 wpb_column vc_column_container tdc-column td-pb-span6"> <style scoped> /* custom css */ .tdi_100{ vertical-align: baseline; }.tdi_100 > .wpb_wrapper, .tdi_100 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_100 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_100 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_100 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="vc_row_inner tdi_102 vc_row vc_inner wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_102{ position: relative !important; top: 0; transform: none; -webkit-transform: none; }.tdi_102, .tdi_102 .tdc-inner-columns{ display: block; }.tdi_102 .tdc-inner-columns{ width: 100%; } </style><div class="vc_column_inner tdi_104 wpb_column vc_column_container tdc-inner-column td-pb-span8"> <style scoped> /* custom css */ .tdi_104{ vertical-align: baseline; }.tdi_104 .vc_column-inner > .wpb_wrapper, .tdi_104 .vc_column-inner > .wpb_wrapper .tdc-elements{ display: block; }.tdi_104 .vc_column-inner > .wpb_wrapper .tdc-elements{ width: 100%; } /* phone */ @media (max-width: 767px){ div.tdi_104{ width: 100% !important; } } /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_104{ margin-bottom:0px !important; padding-bottom:0px !important; } } </style><div class="vc_column-inner"><div class="wpb_wrapper"><div class="td_block_wrap td_block_title tdi_105 td-pb-border-top td_block_template_2 td-fix-index" data-td-block-uid="tdi_105" > <style> .td_block_template_2.widget > ul > li { margin-left: 0 !important; } .td_block_template_2 .td-block-title { font-size: 17px; font-weight: 500; margin-top: 0; margin-bottom: 16px; line-height: 31px; text-align: left; } .td_block_template_2 .td-block-title > * { color: #000; } .td_block_template_2 .td-related-title a { padding: 0 20px 0 0; } @media (max-width: 767px) { .td_block_template_2 .td-related-title a { font-size: 15px; } } .td_block_template_2 .td-related-title .td-cur-simple-item { color: #4db2ec; } .td-theme-wrap .tdi_105 .td-block-title > *, .td-theme-wrap .tdi_105 .td-pulldown-filter-link:hover, .td-theme-wrap .tdi_105 .td-subcat-item a:hover, .td-theme-wrap .tdi_105 .td-subcat-item .td-cur-simple-item, .td-theme-wrap .tdi_105 .td-subcat-dropdown:hover .td-subcat-more span, .td-theme-wrap .tdi_105 .td-subcat-dropdown:hover .td-subcat-more i { color: #929bc0; } .td-theme-wrap .tdi_105 .td-subcat-dropdown ul:after { background-color: #929bc0; } .td-theme-wrap .tdi_105 .td_module_wrap:hover .entry-title a, .td-theme-wrap .tdi_105 .td_quote_on_blocks, .td-theme-wrap .tdi_105 .td-opacity-cat .td-post-category:hover, .td-theme-wrap .tdi_105 .td-opacity-read .td-read-more a:hover, .td-theme-wrap .tdi_105 .td-opacity-author .td-post-author-name a:hover, .td-theme-wrap .tdi_105 .td-instagram-user a { color: #929bc0; } .td-theme-wrap .tdi_105 .td-next-prev-wrap a:hover, .td-theme-wrap .tdi_105 .td-load-more-wrap a:hover { background-color: #929bc0; border-color: #929bc0; } .td-theme-wrap .tdi_105 .td-read-more a, .td-theme-wrap .tdi_105 .td-weather-information:before, .td-theme-wrap .tdi_105 .td-weather-week:before, .td-theme-wrap .tdi_105 .td-exchange-header:before, .td-theme-wrap .td-footer-wrapper .tdi_105 .td-post-category, .td-theme-wrap .tdi_105 .td-post-category:hover { background-color: #929bc0; } /* inline tdc_css att */ .tdi_105{ margin-bottom:-5px !important; } /* portrait */ @media (min-width: 768px) and (max-width: 1018px) { .tdi_105{ margin-bottom:-15px !important; } } /* phone */ @media (max-width: 767px) { .tdi_105{ width:100% !important; display:inline-block !important; } } </style> <style> /* custom css */ body .tdi_105 .td-block-title a, body .tdi_105 .td-block-title span{ font-family:Montserrat !important;font-size:24px !important;font-weight:600 !important;letter-spacing:1px !important; } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ body .tdi_105 .td-block-title a, body .tdi_105 .td-block-title span{ font-family:Montserrat !important;font-size:19px !important;font-weight:600 !important;letter-spacing:1px !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ body .tdi_105 .td-block-title a, body .tdi_105 .td-block-title span{ font-family:Montserrat !important;font-size:18px !important;font-weight:600 !important;letter-spacing:1px !important; } } /* phone */ @media (max-width: 767px){ body .tdi_105 .td-block-title{ text-align: center; }body .tdi_105.td_block_template_4 .td-block-title > *:before, body .tdi_105.td_block_template_17 .td-block-title:after, body .tdi_105.td_block_template_13 .td-block-subtitle, body .tdi_105.td_block_template_9 .td-block-title:after{ right: 0; left: 0; }body .tdi_105.td_block_template_5 .td-block-title > *{ border-width: 0 0 0 4px; }body .tdi_105.td_block_template_8 .td-block-title > *{ padding-left: 20px; padding-right: 20px; } } </style><div class="td-block-title-wrap"><h4 class="td-block-title"><span class="td-pulldown-size">Advertisers</span></h4></div></div><div class="tdm_block td_block_wrap tdm_block_inline_text tdi_106 tdm-inline-block td-pb-border-top td_block_template_1" data-td-block-uid="tdi_106" > <style> /* inline tdc_css att */ .tdi_106{ margin-bottom:30px !important; width:90% !important; } /* phone */ @media (max-width: 767px) { .tdi_106{ width:100% !important; justify-content:center !important; text-align:center !important; } } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px) { .tdi_106{ width:100% !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px) { .tdi_106{ width:100% !important; } } </style> <style> /* custom css */ .tdi_106{ text-align: left !important; }.tdi_106 .tdm-descr{ color: #ffffff; font-family:Montserrat !important;font-size:16px !important;line-height:1.4 !important; } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_106 .tdm-descr{ font-family:Montserrat !important;font-size:12px !important;line-height:1.4 !important; } } /* phone */ @media (max-width: 767px){ .tdi_106{ text-align: center !important; margin-right: auto; margin-left: auto; } } </style><p class="tdm-descr">Advertise with TechnologyAdvice on Developer.com and our other developer-focused platforms.</p></div><div class="tdm_block td_block_wrap tdm_block_button tdi_107 tdm-block-button-inline tdm-content-horiz-center td-pb-border-top td_block_template_1" data-td-block-uid="tdi_107" > <style> /* inline tdc_css att */ .tdi_107{ border-color:#cbdd00 !important; border-style:solid !important; border-width:0 !important; } /* phone */ @media (max-width: 767px) { .tdi_107{ width:100% !important; } } </style> <style> /* custom css */ .tdm_block.tdm_block_button{ margin-bottom: 0; }.tdm_block.tdm_block_button .tds-button{ line-height: 0; }.tdm_block.tdm_block_button.tdm-block-button-inline{ display: inline-block; }.tdm_block.tdm_block_button.tdm-block-button-full, .tdm_block.tdm_block_button.tdm-block-button-full .tdm-btn{ display: block; }.tdi_107 .tdm-btn{ height: auto; padding: 10px; } /* phone */ @media (max-width: 767px){ .tdi_107 .tdm-btn{ height: auto; padding: 15px 30px; } } </style> <style> body .tdi_108{ background-color: #929bc0; }.tdi_108 .tdm-btn-text, .tdi_108 i{ color: #ffffff; }.tdi_108 svg{ fill: #ffffff; }.tdi_108 svg *{ fill: inherit; }.tdi_108{ padding: 10px; height: auto; line-height: 1; font-weight:500 !important; }.tdi_108 .tdm-btn-icon:last-child{ margin-left: 10px; }.tdi_108, .tdi_108:before{ border-radius: 15px; } /* phone */ @media (max-width: 767px){ .tdi_108{ padding: 15px 30px; height: auto; line-height: 1; }.tdi_108, .tdi_108:before{ border-radius: 25px; } } </style><div class="tds-button td-fix-index"><a href="https://solutions.technologyadvice.com/advertise-on-developer/?utm_source=developer&amp;utm_medium=portfolio_footer&amp;utm_campaign=advertise_button" class="tds-button1 tdm-btn tdm-btn-lg tdi_108" ><span class="tdm-btn-text">Advertise with Us</span><i class="tdm-btn-icon tdc-font-fa tdc-font-fa-angle-right"></i></a></div></div></div></div></div><div class="vc_column_inner tdi_110 wpb_column vc_column_container tdc-inner-column td-pb-span4"> <style scoped> /* custom css */ .tdi_110{ vertical-align: baseline; }.tdi_110 .vc_column-inner > .wpb_wrapper, .tdi_110 .vc_column-inner > .wpb_wrapper .tdc-elements{ display: block; }.tdi_110 .vc_column-inner > .wpb_wrapper .tdc-elements{ width: 100%; } /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_110{ display:none !important; } } </style><div class="vc_column-inner"><div class="wpb_wrapper"><div class="td_block_wrap td_block_title tdi_111 td-pb-border-top td_block_template_2 td-fix-index" data-td-block-uid="tdi_111" > <style> .td-theme-wrap .tdi_111 .td-block-title > *, .td-theme-wrap .tdi_111 .td-pulldown-filter-link:hover, .td-theme-wrap .tdi_111 .td-subcat-item a:hover, .td-theme-wrap .tdi_111 .td-subcat-item .td-cur-simple-item, .td-theme-wrap .tdi_111 .td-subcat-dropdown:hover .td-subcat-more span, .td-theme-wrap .tdi_111 .td-subcat-dropdown:hover .td-subcat-more i { color: #929bc0; } .td-theme-wrap .tdi_111 .td-subcat-dropdown ul:after { background-color: #929bc0; } .td-theme-wrap .tdi_111 .td_module_wrap:hover .entry-title a, .td-theme-wrap .tdi_111 .td_quote_on_blocks, .td-theme-wrap .tdi_111 .td-opacity-cat .td-post-category:hover, .td-theme-wrap .tdi_111 .td-opacity-read .td-read-more a:hover, .td-theme-wrap .tdi_111 .td-opacity-author .td-post-author-name a:hover, .td-theme-wrap .tdi_111 .td-instagram-user a { color: #929bc0; } .td-theme-wrap .tdi_111 .td-next-prev-wrap a:hover, .td-theme-wrap .tdi_111 .td-load-more-wrap a:hover { background-color: #929bc0; border-color: #929bc0; } .td-theme-wrap .tdi_111 .td-read-more a, .td-theme-wrap .tdi_111 .td-weather-information:before, .td-theme-wrap .tdi_111 .td-weather-week:before, .td-theme-wrap .tdi_111 .td-exchange-header:before, .td-theme-wrap .td-footer-wrapper .tdi_111 .td-post-category, .td-theme-wrap .tdi_111 .td-post-category:hover { background-color: #929bc0; } /* inline tdc_css att */ .tdi_111{ margin-bottom:-5px !important; } /* portrait */ @media (min-width: 768px) and (max-width: 1018px) { .tdi_111{ margin-bottom:-15px !important; } } /* phone */ @media (max-width: 767px) { .tdi_111{ display:inline-block !important; } } </style> <style> /* custom css */ body .tdi_111 .td-block-title a, body .tdi_111 .td-block-title span{ font-family:Montserrat !important;font-size:24px !important;font-weight:600 !important;letter-spacing:1px !important; } /* landscape */ @media (min-width: 1019px) and (max-width: 1140px){ body .tdi_111 .td-block-title a, body .tdi_111 .td-block-title span{ font-family:Montserrat !important;font-size:19px !important;font-weight:600 !important;letter-spacing:1px !important; } } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ body .tdi_111 .td-block-title a, body .tdi_111 .td-block-title span{ font-family:Montserrat !important;font-size:18px !important;font-weight:600 !important;letter-spacing:1px !important; } } </style><div class="td-block-title-wrap"><h4 class="td-block-title"><span class="td-pulldown-size">Menu</span></h4></div></div><div class="td_block_wrap td_block_list_menu tdi_112 td-pb-border-top td_block_template_1 widget" data-td-block-uid="tdi_112" > <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_112{ justify-content:center !important; text-align:center !important; } } </style> <style> /* custom css */ .td_block_list_menu ul{ flex-wrap: wrap; margin-left: 12px; }.td_block_list_menu ul li{ margin-left: 0; }.td_block_list_menu .sub-menu{ padding-left: 22px; }.td_block_list_menu .sub-menu li{ font-size: 13px; }.tdi_112 ul{ margin: 0px; text-align: left; justify-content: flex-start; }.tdi_112 a{ color: #ffffff; }.tdi_112 a:hover{ color: #929bc0; }.tdi_112 .td-block-title a, .tdi_112 .td-block-title span{ font-size:14px !important;font-weight:500 !important; }.tdi_112 li{ font-family:Montserrat !important;font-size:14px !important;line-height:24px !important;font-weight:600 !important;letter-spacing:1px !important; } /* portrait */ @media (min-width: 768px) and (max-width: 1018px){ .tdi_112 li{ font-family:Montserrat !important;font-size:14px !important;line-height:20px !important;font-weight:600 !important;letter-spacing:1px !important; } } </style><div class="td-block-title-wrap"></div><div id=tdi_112 class="td_block_inner td-fix-index"><div class="menu-footer-terms-nav-container"><ul id="menu-footer-terms-nav" class="menu"><li id="menu-item-325" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-325"><a href="https://www.developer.com/privacy-policy/">Privacy Policy</a></li> <li id="menu-item-320" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-320"><a href="https://technologyadvice.com/terms-conditions/">Terms</a></li> <li id="menu-item-321" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-321"><a href="https://technologyadvice.com/about-us/">About</a></li> <li id="menu-item-322" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-322"><a href="https://technologyadvice.com/contact-us/">Contact</a></li> <li id="menu-item-323" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-323"><a href="https://solutions.technologyadvice.com/advertise-on-developer/?utm_source=developer&#038;utm_medium=portfolio_footer&#038;utm_campaign=advertise_contact-us">Advertise</a></li> <li id="menu-item-324" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-324"><a href="https://technologyadvice.com/privacy-policy/ccpa-opt-out-form/">California &#8211; Do Not Sell My Information</a></li> </ul></div></div></div></div></div></div></div></div></div></div></div><div id="tdi_113" class="tdc-row stretch_row_1400 td-stretch-content"><div class="vc_row tdi_114 wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_114, .tdi_114 .tdc-columns{ min-height: 0; }.tdi_114, .tdi_114 .tdc-columns{ display: block; }.tdi_114 .tdc-columns{ width: 100%; } </style><div class="vc_column tdi_116 wpb_column vc_column_container tdc-column td-pb-span12"> <style scoped> /* custom css */ .tdi_116{ vertical-align: baseline; }.tdi_116 > .wpb_wrapper, .tdi_116 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_116 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_116 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_116 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="wpb_wrapper td_block_separator td_block_wrap vc_separator tdi_118 td_separator_solid td_separator_center"><span style="border-color:#EBEBEB;border-width:1px;width:100%;"></span> <style scoped> /* custom css */ .td_block_separator{ width: 100%; align-items: center; margin-bottom: 38px; padding-bottom: 10px; }.td_block_separator span{ position: relative; display: block; margin: 0 auto; width: 100%; height: 1px; border-top: 1px solid #EBEBEB; }.td_separator_align_left span{ margin-left: 0; }.td_separator_align_right span{ margin-right: 0; }.td_separator_dashed span{ border-top-style: dashed; }.td_separator_dotted span{ border-top-style: dotted; }.td_separator_double span{ height: 3px; border-bottom: 1px solid #EBEBEB; }.td_separator_shadow > span{ position: relative; height: 20px; overflow: hidden; border: 0; color: #EBEBEB; }.td_separator_shadow > span > span{ position: absolute; top: -30px; left: 0; right: 0; margin: 0 auto; height: 13px; width: 98%; border-radius: 100%; } /* inline tdc_css att */ .tdi_118{ margin-top:15px !important; } /* phone */ @media (max-width: 767px) { .tdi_118{ margin-top:50px !important; } } </style></div><div class="tdm_block td_block_wrap tdm_block_column_title tdi_119 tdm-content-horiz-center td-pb-border-top td_block_template_1" data-td-block-uid="tdi_119" ><div class="td-block-row"><div class="td-block-span12 tdm-col"> <style> body .tdi_120 .tdm-title{ color: #ffffff; }body .tdi_119:hover .tdi_120 .tdm-title{ color: #ffffff; -webkit-text-fill-color: unset; background: transparent; transition: none; }.tdi_119:hover .tdi_120 .tdm-title{ cursor: default; }.tdi_120 .tdm-title{ font-family:Montserrat !important;font-weight:600 !important; } </style><div class="tds-title tds-title1 td-fix-index tdi_120"><h3 class="tdm-title tdm-title-md">Our Brands</h3></div></div></div></div></div></div></div></div><div id="tdi_121" class="tdc-row stretch_row_1400 td-stretch-content"><div class="vc_row tdi_122 wpb_row td-pb-row tdc-row-content-vert-center" > <style scoped> /* custom css */ .tdi_122, .tdi_122 .tdc-columns{ min-height: 0; }.tdi_122, .tdi_122 .tdc-columns{ display: block; }.tdi_122 .tdc-columns{ width: 100%; }@media (min-width: 768px) { .tdi_122 { margin-left: -2px; margin-right: -2px; } .tdi_122 .tdc-row-video-background-error, .tdi_122 .vc_column { padding-left: 2px; padding-right: 2px; } }@media (min-width: 767px) { .tdi_122.tdc-row-content-vert-center, .tdi_122.tdc-row-content-vert-center .tdc-columns { display: flex; align-items: center; flex: 1; } .tdi_122.tdc-row-content-vert-bottom, .tdi_122.tdc-row-content-vert-bottom .tdc-columns { display: flex; align-items: flex-end; flex: 1; } .tdi_122.tdc-row-content-vert-center .td_block_wrap { vertical-align: middle; } .tdi_122.tdc-row-content-vert-bottom .td_block_wrap { vertical-align: bottom; } } </style><div class="vc_column tdi_124 wpb_column vc_column_container tdc-column td-pb-span3"> <style scoped> /* custom css */ .tdi_124{ vertical-align: baseline; }.tdi_124 > .wpb_wrapper, .tdi_124 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_124 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_124 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_124 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_125 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_125"><a data-bg="https://www.developer.com/wp-content/uploads/2020/08/whitecompanylogos-04.png" class="td_single_image_bg rocket-lazyload" style="" href="https://technologyadvice.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_125{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .td_block_single_image.td-image-video-modal{ cursor: pointer; }.td_block_single_image a{ display: block; }.td_block_single_image.td-no-img-custom-url a{ pointer-events: none; cursor: default; }.vc_single_image a{ position: relative; width: 100%; display: block; background-size: cover; }.td-single-image-style-rounded a, .td-single-image-style-rounded a:before, .td-single-image-style-rounded a:after{ border-radius: 4px; }.td-single-image-style-border, .td-single-image-style-round-border, .td-single-image-style-circle-border, .td-single-image-style-outline, .td-single-image-style-bordered-shadow, .td-single-image-style-round-outline, .td-single-image-style-round-border-shadow, .td-single-image-style-circle-outline, .td-single-image-style-circle-border-shadow{ margin-bottom: 22px; background-color: #EBEBEB; }.td-single-image-style-border, .td-single-image-style-round-border, .td-single-image-style-circle-border{ padding: 6px; }.td-single-image-style-outline, .td-single-image-style-bordered-shadow, .td-single-image-style-round-outline, .td-single-image-style-round-border-shadow, .td-single-image-style-circle-outline, .td-single-image-style-circle-border-shadow{ padding: 1px; }.td-single-image-style-outline a:before, .td-single-image-style-bordered-shadow a:before, .td-single-image-style-round-outline a:before, .td-single-image-style-round-border-shadow a:before, .td-single-image-style-circle-outline a:before, .td-single-image-style-circle-border-shadow a:before, .td-single-image-style-outline a:after, .td-single-image-style-bordered-shadow a:after, .td-single-image-style-round-outline a:after, .td-single-image-style-round-border-shadow a:after, .td-single-image-style-circle-outline a:after, .td-single-image-style-circle-border-shadow a:after{ content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; }.td-single-image-style-outline a:after, .td-single-image-style-bordered-shadow a:after, .td-single-image-style-round-outline a:after, .td-single-image-style-round-border-shadow a:after, .td-single-image-style-circle-outline a:after, .td-single-image-style-circle-border-shadow a:after{ color: #fff; -webkit-box-shadow: inset 0px 0px 0px 6px; box-shadow: inset 0px 0px 0px 6px; }.td-single-image-style-outline a:before, .td-single-image-style-bordered-shadow a:before, .td-single-image-style-round-outline a:before, .td-single-image-style-round-border-shadow a:before, .td-single-image-style-circle-outline a:before, .td-single-image-style-circle-border-shadow a:before{ color: #EBEBEB; -webkit-box-shadow: inset 0px 0px 0px 7px; box-shadow: inset 0px 0px 0px 7px; }.td-single-image-style-shadow a, .td-single-image-style-bordered-shadow a, .td-single-image-style-round-shadow a, .td-single-image-style-round-border-shadow a, .td-single-image-style-circle-shadow a, .td-single-image-style-circle-border-shadow a{ -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.1); box-shadow: 0 0 6px rgba(0, 0, 0, 0.1); }.td-single-image-style-3d-shadow{ position: relative; }.td-single-image-style-3d-shadow:before, .td-single-image-style-3d-shadow:after{ content: ''; position: absolute; bottom: 0; height: 30%; -webkit-box-shadow: 0 15px 10px rgba(0, 0, 0, 0.6); box-shadow: 0 15px 10px rgba(0, 0, 0, 0.6); z-index: 0; }.td-single-image-style-3d-shadow:before{ left: 5px; right: 50%; -webkit-transform: skewY(-6deg); transform: skewY(-6deg); -webkit-transform-origin: 0 0; transform-origin: 0 0; }.td-single-image-style-3d-shadow:after{ left: 50%; right: 5px; -webkit-transform: skewY(6deg); transform: skewY(6deg); -webkit-transform-origin: 100% 0; transform-origin: 100% 0; }.td-single-image-style-3d-shadow a{ z-index: 1; }.td-single-image-style-round, .td-single-image-style-round-border, .td-single-image-style-round-outline, .td-single-image-style-round-shadow, .td-single-image-style-round-border-shadow, .td-single-image-style-circle, .td-single-image-style-circle-border, .td-single-image-style-circle-outline, .td-single-image-style-circle-shadow, .td-single-image-style-circle-border-shadow{ border-radius: 50%; }.td-single-image-style-round a, .td-single-image-style-round-border a, .td-single-image-style-round-outline a, .td-single-image-style-round-shadow a, .td-single-image-style-round-border-shadow a, .td-single-image-style-circle a, .td-single-image-style-circle-border a, .td-single-image-style-circle-outline a, .td-single-image-style-circle-shadow a, .td-single-image-style-circle-border-shadow a, .td-single-image-style-round a:before, .td-single-image-style-round-border a:before, .td-single-image-style-round-outline a:before, .td-single-image-style-round-shadow a:before, .td-single-image-style-round-border-shadow a:before, .td-single-image-style-circle a:before, .td-single-image-style-circle-border a:before, .td-single-image-style-circle-outline a:before, .td-single-image-style-circle-shadow a:before, .td-single-image-style-circle-border-shadow a:before, .td-single-image-style-round a:after, .td-single-image-style-round-border a:after, .td-single-image-style-round-outline a:after, .td-single-image-style-round-shadow a:after, .td-single-image-style-round-border-shadow a:after, .td-single-image-style-circle a:after, .td-single-image-style-circle-border a:after, .td-single-image-style-circle-outline a:after, .td-single-image-style-circle-shadow a:after, .td-single-image-style-circle-border-shadow a:after{ border-radius: 50%; }.td-single-image-style-round-outline a:before, .td-single-image-style-round-border-shadow a:before, .td-single-image-style-circle-outline a:before, .td-single-image-style-circle-border-shadow a:before, .td-single-image-style-round-outline a:before:before, .td-single-image-style-round-border-shadow a:before:before, .td-single-image-style-circle-outline a:before:before, .td-single-image-style-circle-border-shadow a:before:before, .td-single-image-style-round-outline a:after:before, .td-single-image-style-round-border-shadow a:after:before, .td-single-image-style-circle-outline a:after:before, .td-single-image-style-circle-border-shadow a:after:before, .td-single-image-style-round-outline a:after, .td-single-image-style-round-border-shadow a:after, .td-single-image-style-circle-outline a:after, .td-single-image-style-circle-border-shadow a:after, .td-single-image-style-round-outline a:before:after, .td-single-image-style-round-border-shadow a:before:after, .td-single-image-style-circle-outline a:before:after, .td-single-image-style-circle-border-shadow a:before:after, .td-single-image-style-round-outline a:after:after, .td-single-image-style-round-border-shadow a:after:after, .td-single-image-style-circle-outline a:after:after, .td-single-image-style-circle-border-shadow a:after:after{ border-radius: 50%; }.td-single-image-style-circle a, .td-single-image-style-circle-border a, .td-single-image-style-circle-outline a, .td-single-image-style-circle-shadow a, .td-single-image-style-circle-border-shadow a{ height: 0; padding-bottom: 100%; }.tdi_125 .td_single_image_bg{ height: 40px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_125{ width: 100%; }.tdi_125:hover .td_single_image_bg:before{ opacity: 0; }@media (max-width: 767px) { .td-stretch-content .td_block_single_image { margin-right: -20px; margin-left: -20px; } }@media (max-width: 767px) { .td-single-image-style-border, .td-single-image-style-round-border, .td-single-image-style-circle-border, .td-single-image-style-outline, .td-single-image-style-bordered-shadow, .td-single-image-style-round-outline, .td-single-image-style-round-border-shadow, .td-single-image-style-circle-outline, .td-single-image-style-circle-border-shadow { margin-bottom: 32px; } } </style></div><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_126 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_126"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/eweekfooter_smaller.png" class="td_single_image_bg rocket-lazyload" style="" href="https://www.eweek.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_126{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_126 .td_single_image_bg{ height: 40px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_126{ width: 100%; }.tdi_126:hover .td_single_image_bg:before{ opacity: 0; } </style></div></div></div><div class="vc_column tdi_128 wpb_column vc_column_container tdc-column td-pb-span3"> <style scoped> /* custom css */ .tdi_128{ vertical-align: baseline; }.tdi_128 > .wpb_wrapper, .tdi_128 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_128 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_128 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_128 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_129 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_129"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/datamationwhitefooter.png" class="td_single_image_bg rocket-lazyload" style="" href="https://www.datamation.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_129{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_129 .td_single_image_bg{ height: 40px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_129{ width: 100%; }.tdi_129:hover .td_single_image_bg:before{ opacity: 0; } </style></div><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_130 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_130"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/PMcomwhitefooter-09.png" class="td_single_image_bg rocket-lazyload" style="" href="https://project-management.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_130{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_130 .td_single_image_bg{ height: 45px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_130{ width: 100%; }.tdi_130:hover .td_single_image_bg:before{ opacity: 0; } </style></div></div></div><div class="vc_column tdi_132 wpb_column vc_column_container tdc-column td-pb-span3"> <style scoped> /* custom css */ .tdi_132{ vertical-align: baseline; }.tdi_132 > .wpb_wrapper, .tdi_132 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_132 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_132 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_132 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_133 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_133"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/webowhitefooter.png" class="td_single_image_bg rocket-lazyload" style="" href="https://www.webopedia.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_133{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_133 .td_single_image_bg{ height: 40px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_133{ width: 100%; }.tdi_133:hover .td_single_image_bg:before{ opacity: 0; } </style></div><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_134 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_134"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/esecuritywhitefooter.png" class="td_single_image_bg rocket-lazyload" style="" href="https://www.esecurityplanet.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_134{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_134 .td_single_image_bg{ height: 45px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_134{ width: 100%; }.tdi_134:hover .td_single_image_bg:before{ opacity: 0; } </style></div></div></div><div class="vc_column tdi_136 wpb_column vc_column_container tdc-column td-pb-span3"> <style scoped> /* custom css */ .tdi_136{ vertical-align: baseline; }.tdi_136 > .wpb_wrapper, .tdi_136 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_136 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_136 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_136 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_137 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_137"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/ENP_whitefooter_stack.png" class="td_single_image_bg rocket-lazyload" style="" href="https://www.enterprisenetworkingplanet.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_137{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_137 .td_single_image_bg{ height: 45px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_137{ width: 100%; }.tdi_137:hover .td_single_image_bg:before{ opacity: 0; } </style></div><div class="wpb_wrapper td_block_single_image td_block_wrap td_block_wrap vc_single_image tdi_138 td-single-image- td-pb-border-top td_block_template_1 " data-td-block-uid="tdi_138"><a data-bg="https://www.developer.com/wp-content/uploads/2021/02/serverwatchwhitefooter-10.png" class="td_single_image_bg rocket-lazyload" style="" href="https://www.serverwatch.com/" target="_blank" ></a> <style> /* inline tdc_css att */ /* phone */ @media (max-width: 767px) { .tdi_138{ margin-right:auto !important; margin-left:auto !important; } } </style> <style> /* custom css */ .tdi_138 .td_single_image_bg{ height: 45px; padding-bottom: 0; background-size: contain; background-repeat: no-repeat; background-position: center top; }.tdi_138{ width: 100%; }.tdi_138:hover .td_single_image_bg:before{ opacity: 0; } </style></div></div></div></div></div><div id="tdi_139" class="tdc-row stretch_row_1400 td-stretch-content"><div class="vc_row tdi_140 wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_140, .tdi_140 .tdc-columns{ min-height: 0; }.tdi_140, .tdi_140 .tdc-columns{ display: block; }.tdi_140 .tdc-columns{ width: 100%; } </style><div class="vc_column tdi_142 wpb_column vc_column_container tdc-column td-pb-span12"> <style scoped> /* custom css */ .tdi_142{ vertical-align: baseline; }.tdi_142 > .wpb_wrapper, .tdi_142 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_142 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_142 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_142 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"><div class="wpb_wrapper td_block_separator td_block_wrap vc_separator tdi_144 td_separator_solid td_separator_center"><span style="border-color:#EBEBEB;border-width:1px;width:100%;"></span> <style scoped> /* inline tdc_css att */ .tdi_144{ margin-top:15px !important; } </style></div><div class="vc_row_inner tdi_146 vc_row vc_inner wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_146{ position: relative !important; top: 0; transform: none; -webkit-transform: none; }.tdi_146, .tdi_146 .tdc-inner-columns{ display: block; }.tdi_146 .tdc-inner-columns{ width: 100%; } </style><div class="vc_column_inner tdi_148 wpb_column vc_column_container tdc-inner-column td-pb-span12"> <style scoped> /* custom css */ .tdi_148{ vertical-align: baseline; }.tdi_148 .vc_column-inner > .wpb_wrapper, .tdi_148 .vc_column-inner > .wpb_wrapper .tdc-elements{ display: block; }.tdi_148 .vc_column-inner > .wpb_wrapper .tdc-elements{ width: 100%; } </style><div class="vc_column-inner"><div class="wpb_wrapper"><div class="td_block_wrap tdb_header_menu tdi_149 tds_menu_active1 tds_menu_sub_active1 td-pb-border-top td_block_template_1 tdb-header-align" data-td-block-uid="tdi_149" style=" z-index: 999;"> <style> /* custom css */ .tdi_149 .td_block_inner{ text-align: center; }.tdi_149 .tdb-menu > li .tdb-menu-sep, .tdi_149 .tdb-menu-items-dropdown .tdb-menu-sep{ top: -1px; }.tdi_149 .tdb-menu > li > a .tdb-sub-menu-icon, .tdi_149 .td-subcat-more .tdb-menu-more-subicon{ top: -1px; }.tdi_149 .td-subcat-more .tdb-menu-more-icon{ top: 0px; }.tdi_149 .tdb-menu > li > a, .tdi_149 .td-subcat-more{ color: #ffffff; }.tdi_149 .tdb-menu > li > a .tdb-sub-menu-icon-svg svg, .tdi_149 .tdb-menu > li > a .tdb-sub-menu-icon-svg svg *, .tdi_149 .td-subcat-more .tdb-menu-more-subicon-svg svg, .tdi_149 .td-subcat-more .tdb-menu-more-subicon-svg svg *, .tdi_149 .td-subcat-more .tdb-menu-more-icon-svg, .tdi_149 .td-subcat-more .tdb-menu-more-icon-svg *{ fill: #ffffff; }.tdi_149 .tdb-menu > li > a, .tdi_149 .td-subcat-more, .tdi_149 .td-subcat-more > .tdb-menu-item-text{ font-family:Montserrat !important;font-size:14px !important; }.tdi_149 .tdb-normal-menu ul .tdb-menu-item > a .tdb-sub-menu-icon, .tdi_149 .td-pulldown-filter-list .tdb-menu-item > a .tdb-sub-menu-icon{ right: 0; margin-top: 1px; }.tdi_149 .tdb-menu .tdb-normal-menu ul, .tdi_149 .td-pulldown-filter-list, .tdi_149 .td-pulldown-filter-list .sub-menu{ box-shadow: 1px 1px 4px 0px rgba(0, 0, 0, 0.15); }.tdi_149 .tdb-menu .tdb-mega-menu .sub-menu > li{ box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.1); } /* phone */ @media (max-width: 767px){ .tdi_149 .tdb-menu > li > a, .tdi_149 .td-subcat-more, .tdi_149 .td-subcat-more > .tdb-menu-item-text{ font-family:Montserrat !important;font-size:10px !important; } } </style> <style> .tdi_149 .tdb-menu > li > a:after, .tdi_149 .tdb-menu-items-dropdown .td-subcat-more:after{ background-color: #929bc0; bottom: 0px; } </style> <style> </style><div id=tdi_149 class="td_block_inner td-fix-index"><div class="tdb-main-sub-icon-fake"><i class="tdb-sub-menu-icon td-icon-down tdb-main-sub-menu-icon"></i></div><div class="tdb-sub-icon-fake"><i class="tdb-sub-menu-icon td-icon-right-arrow"></i></div><ul id="menu-footer-terms-nav-1" class="tdb-block-menu tdb-menu tdb-menu-items-visible"><li class="menu-item menu-item-type-post_type menu-item-object-page tdb-cur-menu-item menu-item-first tdb-menu-item-button tdb-menu-item tdb-normal-menu menu-item-325"><a href="https://www.developer.com/privacy-policy/"><div class="tdb-menu-item-text">Privacy Policy</div></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom tdb-menu-item-button tdb-menu-item tdb-normal-menu menu-item-320"><a href="https://technologyadvice.com/terms-conditions/"><div class="tdb-menu-item-text">Terms</div></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom tdb-menu-item-button tdb-menu-item tdb-normal-menu menu-item-321"><a href="https://technologyadvice.com/about-us/"><div class="tdb-menu-item-text">About</div></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom tdb-menu-item-button tdb-menu-item tdb-normal-menu menu-item-322"><a href="https://technologyadvice.com/contact-us/"><div class="tdb-menu-item-text">Contact</div></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom tdb-menu-item-button tdb-menu-item tdb-normal-menu menu-item-323"><a href="https://solutions.technologyadvice.com/advertise-on-developer/?utm_source=developer&#038;utm_medium=portfolio_footer&#038;utm_campaign=advertise_contact-us"><div class="tdb-menu-item-text">Advertise</div></a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom tdb-menu-item-button tdb-menu-item tdb-normal-menu menu-item-324"><a href="https://technologyadvice.com/privacy-policy/ccpa-opt-out-form/"><div class="tdb-menu-item-text">California &#8211; Do Not Sell My Information</div></a></li> </ul></div></div></div></div></div></div><div class="tdm_block td_block_wrap tdm_block_column_content tdi_152 tdm-content-horiz-center td-pb-border-top td_block_template_1" data-td-block-uid="tdi_152" > <style> /* inline tdc_css att */ .tdi_152{ margin-top:20px !important; } </style> <style> /* custom css */ .tdm_block_column_content .tdm-image-holder{ position: relative; display: block; height: 0; margin-bottom: 24px; padding-bottom: 70%; }.tdm_block_column_content .tdm-image-holder:hover .tdm-hover-img{ opacity: 1; }.tdm_block_column_content .tdm-image-holder > div{ position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-repeat: no-repeat; background-position: center center; background-size: cover; }.tdm_block_column_content .tdm-hover-img{ opacity: 0; -webkit-transition: all 0.4s ease-in-out; transition: all 0.4s ease-in-out; }.tdm_block_column_content:hover .tdm-col-content-title-url .tdm-title{ color: #4db2ec; }.tdm_block_column_content .tdm-title-xxsm, .tdm_block_column_content .tdm-title-xsm{ margin-bottom: 20px; }.tdm_block_column_content .tdm-title-md{ margin-bottom: 14px; }.tdm_block_column_content .tdm-title-bg{ margin-bottom: 16px; }.tdm_block_column_content .tdm-descr{ margin-bottom: 0; }.tdm_block_column_content .tds-button{ margin-top: 25px; }.tdi_152 .tdm-descr{ color: #ffffff; font-size:11px !important;line-height:1.2 !important; }@media (max-width: 767px) { .tdm_block_column_content .tdm-image-holder { margin-bottom: 14px; } } </style><div class="tdm-col-content-info"><a href="#" target="_blank" class="tdm-col-content-title-url"></a><p class="tdm-descr td-fix-index">Property of TechnologyAdvice.<br> &copy; 2022 TechnologyAdvice. All Rights Reserved<br><br> Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.</p></div></div><div class="wpb_wrapper td_block_empty_space td_block_wrap vc_empty_space tdi_154 " style="height: 80px"></div><div class="wpb_wrapper td_block_wrap vc_raw_html tdi_156 choice-footer-msg"> <style scoped> /* inline tdc_css att */ .tdi_156{ margin-top:0px !important; margin-bottom:10px !important; padding-top:0px !important; border-style:solid !important; border-color:#888888 !important; border-width: 0px 0px 0px 0px !important; } </style><div class="td-fix-index"><div id="choice-footer-msg" style="color:#ffffff;"> </div></div></div></div></div></div></div><div id="tdi_157" class="tdc-row"><div class="vc_row tdi_158 wpb_row td-pb-row" > <style scoped> /* custom css */ .tdi_158, .tdi_158 .tdc-columns{ min-height: 0; }.tdi_158, .tdi_158 .tdc-columns{ display: block; }.tdi_158 .tdc-columns{ width: 100%; } </style><div class="vc_column tdi_160 wpb_column vc_column_container tdc-column td-pb-span12"> <style scoped> /* custom css */ .tdi_160{ vertical-align: baseline; }.tdi_160 > .wpb_wrapper, .tdi_160 > .wpb_wrapper > .tdc-elements{ display: block; }.tdi_160 > .wpb_wrapper > .tdc-elements{ width: 100%; }.tdi_160 > .wpb_wrapper > .vc_row_inner{ width: auto; }.tdi_160 > .wpb_wrapper{ width: auto; height: auto; } </style><div class="wpb_wrapper"></div></div></div></div></div></div> </div> </div> </div><!--close td-outer-wrap--> <script>(function(){var advanced_ads_ga_UID="UA-48212700-1",advanced_ads_ga_anonymIP=!!1;function AdvAdsAdBlockCounterGA(t){this.UID=t,this.analyticsObject="function"==typeof gtag;var n=this;return this.count=function(){gtag("event","AdBlock",{event_category:"Advanced Ads",event_label:"Yes",non_interaction:!0,send_to:n.UID})},function(){if(!n.analyticsObject){var e=document.createElement("script");e.src="https://www.googletagmanager.com/gtag/js?id="+t,e.async=!0,document.body.appendChild(e),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},n.analyticsObject=!0,gtag("js",new Date)}var a={send_page_view:!1,transport_type:"beacon"};window.advanced_ads_ga_anonymIP&&(a.anonymize_ip=!0),gtag("config",t,a)}(),this}window.advanced_ads_check_adblocker=function(t){var n=[],e=null;function a(t){(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){return setTimeout(t,16)}).call(window,t)}return a((function(){var t=document.createElement("div");t.innerHTML="&nbsp;",t.setAttribute("class","ad_unit ad-unit text-ad text_ad pub_300x250"),t.setAttribute("style","width: 1px !important; height: 1px !important; position: absolute !important; left: 0px !important; top: 0px !important; overflow: hidden !important;"),document.body.appendChild(t),a((function(){var a=window.getComputedStyle&&window.getComputedStyle(t),o=a&&a.getPropertyValue("-moz-binding");e=a&&"none"===a.getPropertyValue("display")||"string"==typeof o&&-1!==o.indexOf("about:");for(var i=0,d=n.length;i<d;i++)n[i](e);n=[]}))})),function(t){null!==e?t(e):n.push(t)}}(),advanced_ads_check_adblocker((function(t){t&&new AdvAdsAdBlockCounterGA(advanced_ads_ga_UID).count()}));})();</script><div class="devco-native-ads devco-sticky devco-target" id="devco-7453923" style="position: fixed; bottom: 0; z-index: 10000; " data-advadstrackid="59349" data-advadstrackbid="1"><!-- Start: GAM Ad Slot Render | Developer Native Ads --> <style> #native-boap { position: relative; } #native-rr-article iframe, #native-rr-article > div, #native-main-well iframe, #native-study-guide iframe { width: 100%; height: 100%; } #native-rr-article iframe, #native-study-guide iframe { margin-bottom: -25px; } #native-boap iframe { width: 100%; height: 36rem; } #native-rr-article { position: relative; } #native-rr-article:before { position: absolute; left: 0; bottom: -18px; width: 100%; height: 1px; border-width: 0 0 1px 0; border-style: solid; border-color: #e6e6e6; content: ""; } @media screen and (min-width: 500px) { #native-boap iframe { height: 25rem; } } @media screen and (min-width: 1100px) { #native-boap iframe { height: 24.5rem; } } </style> <div id="native-rr-article" style="width:0px; height:0px"> <script> window.googletag = window.googletag || { cmd: [] }; window.googletag.cmd.push(function() { googletag.display("native-rr-article"); }); </script> </div> <div id="native-boap" style="display:none;"> <script> window.googletag = window.googletag || { cmd: [] }; window.googletag.cmd.push(function() { googletag.display("native-boap"); }); (function() { var rightRailReplacedPost = document.querySelector('._ntv_latest_posts_widget .td_block_inner .td_module_flex:nth-child(3) .td-module-container'); var rightRailContent = document.getElementById('native-rr-article'); rightRailReplacedPost.parentNode.replaceChild(rightRailContent, rightRailReplacedPost); rightRailContent.style.height = '100%'; rightRailContent.style.width = '100%'; var boapAfterContent = document.querySelector("article.post .tdb_single_post_share"); var boapContent = document.getElementById('native-boap'); boapAfterContent.parentNode.append(boapContent); boapContent.style.height = 'auto'; boapContent.style.width = '100%'; })(); </script> </div> <!-- End: GAM Ad Slot Render | Developer Native Ads --></div><script>( window.advanced_ads_ready || jQuery( document ).ready ).call( null, function() {var wrapper_id = "#devco-7453923"; var $wrapper = jQuery( wrapper_id );advads.move( wrapper_id, "", { });window.advanced_ads_sticky_items = window.advanced_ads_sticky_items || {};advanced_ads_sticky_items[ "devco-7453923" ] = { "can_convert_to_abs": "1", "initial_css": $wrapper.attr( "style" ), "modifying_func": function() { $wrapper.css({ "-webkit-transform": "translateX(-50%)", "-moz-transform": "translateX(-50%)", "transform": "translateX(-50%)", "left": "50%", "margin-right": "-50%" });}}; if ( advads.wait_for_images ) { var sticky_wait_for_images_time = new Date().getTime(); $wrapper.data( "sticky_wait_for_images_time", sticky_wait_for_images_time ); advads.wait_for_images( $wrapper, function() { // At the moment when this function is called, it is possible that // the placement has been updated using "Reload ads on resize" feature of Responsive add-on if ( $wrapper.data( "sticky_wait_for_images_time" ) === sticky_wait_for_images_time ) { advanced_ads_sticky_items[ "devco-7453923" ]["modifying_func"](); } } ); } else { advanced_ads_sticky_items[ "devco-7453923" ]["modifying_func"](); }; });</script><div class="devco-sticky-footer devco-sticky devco-target" id="devco-840884973" style="position: fixed; bottom: 0; z-index: 10000; " data-advadstrackid="58115" data-advadstrackbid="1"><span class="devco-close-button" onclick="void(0)" title="close" style="width: 15px; height: 15px; background: #fff; position: relative; line-height: 15px; text-align: center; cursor: pointer; z-index: 10000;right:-15px;float: right; margin-left: -15px;">×</span><!-- Start: GAM Ad Slot Render | Developer Sticky Bottom --> <div id="sticky-bottom" style="max-width: 1020px; min-width: 300px; width: auto; text-align:center; min-height: 50px; max-height: 90px; height: auto; border:1px solid #efefef;"> <script> window.googletag = window.googletag || { cmd: [] }; window.googletag.cmd.push(function() { googletag.display("sticky-bottom"); }); </script> </div> <!-- End: GAM Ad Slot Render | Developer Sticky Bottom --></div><script>( window.advanced_ads_ready || jQuery( document ).ready ).call( null, function() {var wrapper_id = "#devco-840884973"; var $wrapper = jQuery( wrapper_id );advads.move( wrapper_id, "", { });window.advanced_ads_sticky_items = window.advanced_ads_sticky_items || {};advanced_ads_sticky_items[ "devco-840884973" ] = { "can_convert_to_abs": "1", "initial_css": $wrapper.attr( "style" ), "modifying_func": function() { $wrapper.css({ "-webkit-transform": "translateX(-50%)", "-moz-transform": "translateX(-50%)", "transform": "translateX(-50%)", "left": "50%", "margin-right": "-50%" });jQuery( "#devco-840884973" ).on( "click", "span", function() { advads.close( "#devco-840884973" ); });}}; if ( advads.wait_for_images ) { var sticky_wait_for_images_time = new Date().getTime(); $wrapper.data( "sticky_wait_for_images_time", sticky_wait_for_images_time ); advads.wait_for_images( $wrapper, function() { // At the moment when this function is called, it is possible that // the placement has been updated using "Reload ads on resize" feature of Responsive add-on if ( $wrapper.data( "sticky_wait_for_images_time" ) === sticky_wait_for_images_time ) { advanced_ads_sticky_items[ "devco-840884973" ]["modifying_func"](); } } ); } else { advanced_ads_sticky_items[ "devco-840884973" ]["modifying_func"](); }; });</script> <!-- Theme: Newspaper by tagDiv.com 2022 Version: 11.4.3 (rara) Deploy mode: deploy uid: 633e6940ac3d6 --> <!-- Google Tag Manager (noscript) snippet added by Site Kit --> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WLCCQ9V" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <!-- End Google Tag Manager (noscript) snippet added by Site Kit --> <script type='text/javascript' id='ap-frontend-js-js-extra'> /* <![CDATA[ */ var ap_form_required_message = ["This field is required","accesspress-anonymous-post"]; var ap_captcha_error_message = ["Sum is not correct.","accesspress-anonymous-post"]; /* ]]> */ </script> <script data-minify="1" type='text/javascript' src='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/accesspress-anonymous-post/js/frontend.js?ver=1652128638' id='ap-frontend-js-js' defer></script> <script type='text/javascript' id='icp_js-js-extra'> /* <![CDATA[ */ var intentclicks_ajax = {"url":"https:\/\/www.developer.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script data-minify="1" type='text/javascript' src='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/ta-intentclicks-master/includes/js/scripts.js?ver=1664218511' id='icp_js-js' defer></script> <script type='text/javascript' id='ppress-frontend-script-js-extra'> /* <![CDATA[ */ var pp_ajax_form = {"ajaxurl":"https:\/\/www.developer.com\/wp-admin\/admin-ajax.php","confirm_delete":"Are you sure?","deleting_text":"Deleting...","deleting_error":"An error occurred. Please try again.","nonce":"d07c00da1a","disable_ajax_form":"false"}; /* ]]> */ </script> <script type='text/javascript' src='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/js/frontend.min.js?ver=3.2.11' id='ppress-frontend-script-js' defer></script> <script type='text/javascript' id='advanced-ads-layer-footer-js-js-extra'> /* <![CDATA[ */ var advanced_ads_layer_settings = {"layer_class":"devco-layer","placements":[]}; /* ]]> */ </script> <script data-minify="1" type='text/javascript' src='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/advanced-ads-layer/public/assets/js/layer.js?ver=1652128638' id='advanced-ads-layer-footer-js-js' defer></script> <script type='text/javascript' id='advanced-ads-responsive-js-extra'> /* <![CDATA[ */ var advanced_ads_responsive = {"reload_on_resize":"0"}; /* ]]> */ </script> <script data-minify="1" type='text/javascript' src='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/advanced-ads-responsive/public/assets/js/script.js?ver=1652128638' id='advanced-ads-responsive-js' defer></script> <script type='text/javascript' id='advanced-ads-sticky-footer-js-js-extra'> /* <![CDATA[ */ var advanced_ads_sticky_settings = {"check_position_fixed":"","sticky_class":"devco-sticky","placements":["native-ads","sticky-footer"]}; /* ]]> */ </script> <script data-minify="1" type='text/javascript' src='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/advanced-ads-sticky-ads/public/assets/js/sticky.js?ver=1652128638' id='advanced-ads-sticky-footer-js-js' defer></script> <script type='text/javascript' id='rocket-browser-checker-js-after'> "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); </script> <script type='text/javascript' id='rocket-preload-links-js-extra'> /* <![CDATA[ */ var RocketPreloadLinksConfig = {"excludeUris":"\/(?:.+\/)?feed(?:\/(?:.+\/?)?)?$|\/(?:.+\/)?embed\/|\/(index\\.php\/)?wp\\-json(\/.*|$)|\/wp-admin\/|\/logout\/|\/wp-login.php|\/refer\/|\/go\/|\/recommend\/|\/recommends\/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https:\/\/www.developer.com","onHoverDelay":"100","rateThrottle":"3"}; /* ]]> */ </script> <script type='text/javascript' id='rocket-preload-links-js-after'> (function() { "use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); }()); </script> <script type='text/javascript' src='https://www.developer.com/wp-includes/js/underscore.min.js?ver=1.13.3' id='underscore-js' defer></script> <script type='text/javascript' src='https://www.developer.com/wp-content/plugins/td-cloud-library/assets/js/js_posts_autoload.min.js?ver=b2e02a383c117d2c27b181e37c1c9e0e' id='tdb_js_posts_autoload-js' defer></script> <script type='text/javascript' src='https://www.developer.com/wp-content/plugins/td-composer/legacy/Newspaper/js/tagdiv_theme.min.js?ver=11.4.3' id='td-site-min-js' defer></script> <script type='text/javascript' src='https://www.developer.com/wp-includes/js/comment-reply.min.js?ver=6.0.2' id='comment-reply-js' defer></script> <script type='text/javascript' id='advadsTrackingScript-js-extra'> /* <![CDATA[ */ var advadsTracking = {"impressionActionName":"aatrack-records","clickActionName":"aatrack-click","targetClass":"devco-target","blogId":"1"}; /* ]]> */ </script> <script type='text/javascript' src='https://www.developer.com/wp-content/plugins/advanced-ads-tracking/public/assets/js/dist/tracking.min.js?ver=2.3.1' id='advadsTrackingScript-js' defer></script> <script type='text/javascript' src='https://www.developer.com/wp-content/plugins/advanced-ads-tracking/public/assets/js/dist/delayed.min.js?ver=2.3.1' id='advadsTrackingDelayed-js' defer></script> <script type='text/javascript' src='https://www.developer.com/wp-content/plugins/td-cloud-library/assets/js/js_files_for_front.min.js?ver=b2e02a383c117d2c27b181e37c1c9e0e' id='tdb_js_files_for_front-js' defer></script> <!--noptimize--><script>window.advads_has_ads = [["58112","ad",null],["59348","ad",null],["58114","ad",null],["58116","ad",null],["59349","ad",null],["58115","ad",null]]; ( window.advanced_ads_ready || jQuery( document ).ready ).call( null, function() {if ( !window.advanced_ads_pro ) {console.log("Advanced Ads Pro: cache-busting can not be initialized");} });</script><!--/noptimize--><!--noptimize--><script>!function(){window.advanced_ads_ready_queue=window.advanced_ads_ready_queue||[],advanced_ads_ready_queue.push=window.advanced_ads_ready;for(var d=0,a=advanced_ads_ready_queue.length;d<a;d++)advanced_ads_ready(advanced_ads_ready_queue[d])}();</script><!--/noptimize--> <!-- JS generated by theme --> <script> /* global jQuery:{} */ jQuery().ready(function () { var tdbMenuItem = new tdbMenu.item(); tdbMenuItem.blockUid = 'tdi_39'; tdbMenuItem.jqueryObj = jQuery('.tdi_39'); tdbMenuItem.isMegaMenuFull = true; tdbMenu.addItem(tdbMenuItem); }); jQuery().ready(function () { var tdbSearchItem = new tdbSearch.item(); //block unique ID tdbSearchItem.blockUid = 'tdi_42'; tdbSearchItem.blockAtts = '{"toggle_txt_pos":"after","form_align":"content-horiz-center","results_msg_align":"content-horiz-center","image_floated":"float_left","image_width":"32","image_size":"td_324x400","show_cat":"","show_btn":"none","show_date":"","show_review":"none","show_com":"none","show_excerpt":"none","show_author":"none","meta_padding":"0 0 0 18px","art_title":"0 0 10px","all_modules_space":"24","tdc_css":"eyJhbGwiOnsiYmFja2dyb3VuZC1jb2xvciI6IiM5MjliYzAiLCJkaXNwbGF5IjoiIn0sImxhbmRzY2FwZSI6eyJtYXJnaW4tcmlnaHQiOiIyMCIsImRpc3BsYXkiOiIifSwibGFuZHNjYXBlX21heF93aWR0aCI6MTE0MCwibGFuZHNjYXBlX21pbl93aWR0aCI6MTAxOSwicG9ydHJhaXQiOnsibWFyZ2luLXJpZ2h0IjoiMjAiLCJkaXNwbGF5IjoiIn0sInBvcnRyYWl0X21heF93aWR0aCI6MTAxOCwicG9ydHJhaXRfbWluX3dpZHRoIjo3Njh9","icon_color":"#ffffff","icon_padding":"2.2","toggle_horiz_align":"content-horiz-right","inline":"yes","icon_size":"eyJhbGwiOjIwLCJsYW5kc2NhcGUiOiIxOCIsInBob25lIjoiMTgifQ==","form_border_color":"#f7f7f7","arrow_color":"rgba(0,0,0,0)","form_shadow_shadow_size":"40","form_shadow_shadow_offset_vertical":"44","form_shadow_shadow_color":"rgba(0,0,0,0.12)","results_border_color":"rgba(0,0,0,0.03)","form_width":"eyJhbGwiOiIxMjAwIiwibGFuZHNjYXBlIjoiY2FsYygxMDAlIC0gNDBweCkifQ==","modules_on_row":"33.33333333%","results_limit":"6","image_radius":"8","modules_category":"","f_title_font_family":"406","f_title_font_weight":"800","f_title_font_size":"16","modules_category_padding":"3px 0 4px","cat_bg":"rgba(0,0,0,0)","cat_txt":"#929bc0","f_cat_font_family":"406","f_cat_font_size":"11","f_cat_font_transform":"uppercase","f_meta_font_family":"406","f_meta_font_transform":"uppercase","f_meta_font_size":"11","f_cat_font_weight":"800","f_meta_font_weight":"800","meta_info_align":"center","f_title_font_line_height":"1.4","title_txt_hover":"#bd0008","modules_category_margin":"0 10px 0 0","modules_gap":"24","results_border":"2px 0","form_border":"2px 0 0","input_border":"2","input_radius":"5","btn_radius":"0 5px 5px 0","f_input_font_family":"","f_input_font_line_height":"2.8","f_btn_font_family":"","f_btn_font_weight":"800","f_btn_font_transform":"uppercase","f_btn_font_size":"12","f_btn_font_spacing":"1","btn_bg_h":"#000000","results_msg_color_h":"#bd0008","results_msg_padding":"5px 0 7px","btn_bg":"#e1e1e1","btn_color":"#888888","btn_color_h":"#ffffff","form_align_screen":"yes","form_offset":"6","hide_image":"yes","toggle_txt_color":"#ffffff","toggle_txt_color_h":"#929bc0","float_block":"yes","show_form":"yes","block_type":"tdb_header_search","disable_trigger":"","show_results":"yes","separator":"","disable_live_search":"","exclude_pages":"","exclude_posts":"","tdicon":"","toggle_txt":"","toggle_txt_align":"0","toggle_txt_space":"","form_offset_left":"","form_content_width":"","form_padding":"","input_placeholder":"","placeholder_travel":"0","input_padding":"","btn_text":"Search","btn_tdicon":"","btn_icon_pos":"","btn_icon_size":"","btn_icon_space":"","btn_icon_align":"0","btn_margin":"","btn_padding":"","btn_border":"","results_padding":"","results_msg_border":"","mc1_tl":"","mc1_title_tag":"","mc1_el":"","m_padding":"","modules_border_size":"","modules_border_style":"","modules_border_color":"#eaeaea","modules_divider":"","modules_divider_color":"#eaeaea","h_effect":"","image_alignment":"50","image_height":"","video_icon":"","show_vid_t":"block","vid_t_margin":"","vid_t_padding":"","vid_t_color":"","vid_t_bg_color":"","f_vid_time_font_header":"","f_vid_time_font_title":"Video duration text","f_vid_time_font_settings":"","f_vid_time_font_family":"","f_vid_time_font_size":"","f_vid_time_font_line_height":"","f_vid_time_font_style":"","f_vid_time_font_weight":"","f_vid_time_font_transform":"","f_vid_time_font_spacing":"","f_vid_time_":"","meta_info_horiz":"content-horiz-left","meta_width":"","meta_margin":"","meta_info_border_size":"","meta_info_border_style":"","meta_info_border_color":"#eaeaea","art_btn":"","modules_cat_border":"","modules_category_radius":"0","modules_extra_cat":"","author_photo":"","author_photo_size":"","author_photo_space":"","author_photo_radius":"","show_modified_date":"","time_ago":"","time_ago_add_txt":"ago","time_ago_txt_pos":"","review_space":"","review_size":"2.5","review_distance":"","art_excerpt":"","excerpt_col":"1","excerpt_gap":"","excerpt_middle":"","btn_title":"","btn_border_width":"","form_general_bg":"","icon_color_h":"","f_toggle_txt_font_header":"","f_toggle_txt_font_title":"Text","f_toggle_txt_font_settings":"","f_toggle_txt_font_family":"","f_toggle_txt_font_size":"","f_toggle_txt_font_line_height":"","f_toggle_txt_font_style":"","f_toggle_txt_font_weight":"","f_toggle_txt_font_transform":"","f_toggle_txt_font_spacing":"","f_toggle_txt_":"","form_bg":"","form_shadow_shadow_header":"","form_shadow_shadow_title":"Shadow","form_shadow_shadow_offset_horizontal":"","form_shadow_shadow_spread":"","input_color":"","placeholder_color":"","placeholder_opacity":"0","input_bg":"","input_border_color":"","input_shadow_shadow_header":"","input_shadow_shadow_title":"Input shadow","input_shadow_shadow_size":"","input_shadow_shadow_offset_horizontal":"","input_shadow_shadow_offset_vertical":"","input_shadow_shadow_spread":"","input_shadow_shadow_color":"","btn_icon_color":"","btn_icon_color_h":"","btn_border_color":"","btn_border_color_h":"","btn_shadow_shadow_header":"","btn_shadow_shadow_title":"Button shadow","btn_shadow_shadow_size":"","btn_shadow_shadow_offset_horizontal":"","btn_shadow_shadow_offset_vertical":"","btn_shadow_shadow_spread":"","btn_shadow_shadow_color":"","f_input_font_header":"","f_input_font_title":"Input text","f_input_font_settings":"","f_input_font_size":"","f_input_font_style":"","f_input_font_weight":"","f_input_font_transform":"","f_input_font_spacing":"","f_input_":"","f_placeholder_font_title":"Placeholder text","f_placeholder_font_settings":"","f_placeholder_font_family":"","f_placeholder_font_size":"","f_placeholder_font_line_height":"","f_placeholder_font_style":"","f_placeholder_font_weight":"","f_placeholder_font_transform":"","f_placeholder_font_spacing":"","f_placeholder_":"","f_btn_font_title":"Button text","f_btn_font_settings":"","f_btn_font_line_height":"","f_btn_font_style":"","f_btn_":"","results_bg":"","results_msg_color":"","results_msg_bg":"","results_msg_border_color":"","f_results_msg_font_header":"","f_results_msg_font_title":"Text","f_results_msg_font_settings":"","f_results_msg_font_family":"","f_results_msg_font_size":"","f_results_msg_font_line_height":"","f_results_msg_font_style":"","f_results_msg_font_weight":"","f_results_msg_font_transform":"","f_results_msg_font_spacing":"","f_results_msg_":"","m_bg":"","color_overlay":"","shadow_module_shadow_header":"","shadow_module_shadow_title":"Module Shadow","shadow_module_shadow_size":"","shadow_module_shadow_offset_horizontal":"","shadow_module_shadow_offset_vertical":"","shadow_module_shadow_spread":"","shadow_module_shadow_color":"","title_txt":"","all_underline_height":"","all_underline_color":"#000","cat_bg_hover":"","cat_txt_hover":"","cat_border":"","cat_border_hover":"","meta_bg":"","author_txt":"","author_txt_hover":"","date_txt":"","ex_txt":"","com_bg":"","com_txt":"","rev_txt":"","shadow_meta_shadow_header":"","shadow_meta_shadow_title":"Meta info shadow","shadow_meta_shadow_size":"","shadow_meta_shadow_offset_horizontal":"","shadow_meta_shadow_offset_vertical":"","shadow_meta_shadow_spread":"","shadow_meta_shadow_color":"","btn_bg_hover":"","btn_txt":"","btn_txt_hover":"","btn_border_hover":"","f_title_font_header":"","f_title_font_title":"Article title","f_title_font_settings":"","f_title_font_style":"","f_title_font_transform":"","f_title_font_spacing":"","f_title_":"","f_cat_font_title":"Article category tag","f_cat_font_settings":"","f_cat_font_line_height":"","f_cat_font_style":"","f_cat_font_spacing":"","f_cat_":"","f_meta_font_title":"Article meta info","f_meta_font_settings":"","f_meta_font_line_height":"","f_meta_font_style":"","f_meta_font_spacing":"","f_meta_":"","f_ex_font_title":"Article excerpt","f_ex_font_settings":"","f_ex_font_family":"","f_ex_font_size":"","f_ex_font_line_height":"","f_ex_font_style":"","f_ex_font_weight":"","f_ex_font_transform":"","f_ex_font_spacing":"","f_ex_":"","el_class":"","block_template_id":"","td_column_number":3,"header_color":"","ajax_pagination_infinite_stop":"","offset":"","limit":"5","td_ajax_preloading":"","td_ajax_filter_type":"","td_filter_default_txt":"","td_ajax_filter_ids":"","color_preset":"","ajax_pagination":"","border_top":"","css":"","class":"tdi_42","tdc_css_class":"tdi_42","tdc_css_class_style":"tdi_42_rand_style"}'; tdbSearchItem.jqueryObj = jQuery('.tdi_42'); tdbSearchItem._openSearchFormClass = 'tdb-drop-down-search-open'; tdbSearchItem._resultsLimit = '6'; tdbSearchItem.isSearchFormFull = true; tdbSearch.addItem( tdbSearchItem ); }); /* global jQuery:{} */ jQuery().ready(function () { var tdbMenuItem = new tdbMenu.item(); tdbMenuItem.blockUid = 'tdi_149'; tdbMenuItem.jqueryObj = jQuery('.tdi_149'); tdbMenuItem.isMegaMenuParentPos = true; tdbMenu.addItem(tdbMenuItem); }); </script> <script id="devco-tracking">var advads_tracking_ads = {"1":[58112,59348,58114,58116,59349,58115]};var advads_tracking_urls = {"1":"https:\/\/www.developer.com\/wp-content\/ajax-handler.php"};var advads_tracking_methods = {"1":"onrequest"};var advads_tracking_parallel = {"1":false};var advads_tracking_linkbases = {"1":"https:\/\/www.developer.com\/linkout\/"};</script><script>window.lazyLoadOptions={elements_selector:"img[data-lazy-src],.rocket-lazyload,iframe[data-lazy-src]",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}};window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(var i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){continue} if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){continue} images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1} if(is_iframe){iframe_count+=1}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update()}});var b=document.getElementsByTagName("body")[0];var config={childList:!0,subtree:!0};observer.observe(b,config)}},!1)</script><script data-no-minify="1" async src="https://www.developer.com/wp-content/plugins/wp-rocket/assets/js/lazyload/17.5/lazyload.min.js"></script><script>function lazyLoadThumb(e){var t='<img data-lazy-src="https://i.ytimg.com/vi/ID/hqdefault.jpg" alt="" width="480" height="360"><noscript><img src="https://i.ytimg.com/vi/ID/hqdefault.jpg" alt="" width="480" height="360"></noscript>',a='<button class="play" aria-label="play Youtube video"></button>';return t.replace("ID",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement("iframe"),t="ID?autoplay=1";t+=0===this.parentNode.dataset.query.length?'':'&'+this.parentNode.dataset.query;e.setAttribute("src",t.replace("ID",this.parentNode.dataset.src)),e.setAttribute("frameborder","0"),e.setAttribute("allowfullscreen","1"),e.setAttribute("allow", "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),this.parentNode.parentNode.replaceChild(e,this.parentNode)}document.addEventListener("DOMContentLoaded",function(){var e,t,p,a=document.getElementsByClassName("rll-youtube-player");for(t=0;t<a.length;t++)e=document.createElement("div"),e.setAttribute("data-id",a[t].dataset.id),e.setAttribute("data-query", a[t].dataset.query),e.setAttribute("data-src", a[t].dataset.src),e.innerHTML=lazyLoadThumb(a[t].dataset.id),a[t].appendChild(e),p=e.querySelector('.play'),p.onclick=lazyLoadYoutubeIframe});</script> <noscript><link rel='stylesheet' id='wp-block-library-css' href='https://www.developer.com/wp-includes/css/dist/block-library/style.min.css?ver=6.0.2' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='ap-front-styles-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/accesspress-anonymous-post/css/frontend-style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='ppress-frontend-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/wp-user-avatar/assets/css/frontend.min.css?ver=1652128638' type='text/css' media='all' /><link rel='stylesheet' id='ppress-flatpickr-css' href='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/flatpickr/flatpickr.min.css?ver=3.2.11' type='text/css' media='all' /><link rel='stylesheet' id='ppress-select2-css' href='https://www.developer.com/wp-content/plugins/wp-user-avatar/assets/select2/select2.min.css?ver=6.0.2' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='parent-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/themes/Newspaper/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-plugin-multi-purpose-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/td-multi-purpose/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-multipurpose-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/assets/fonts/td-multipurpose/td-multipurpose.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='font_awesome-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/assets/fonts/font-awesome/font-awesome.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-theme-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/themes/Newspaper-child-developer/style.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-legacy-framework-front-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-composer/legacy/Newspaper/assets/css/td_legacy_main.css?ver=1652128638' type='text/css' media='all' /><link data-minify="1" rel='stylesheet' id='td-standard-pack-framework-front-style-css' href='https://www.developer.com/wp-content/cache/min/1/wp-content/plugins/td-standard-pack/Newspaper/assets/css/td_standard_pack_main.css?ver=1652128638' type='text/css' media='all' /></noscript></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me --><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>