Twitter Users Cast Doubt on UK Labour Party Leader's Manifesto About 'Better Britain'
Opposition leader Jeremy Corbyn's plans for a brighter future are being criticised by many British voters, for they do not find them realistic and fear his progressive ideas may lead to enormous taxes on average UK citizens.
Leader of the opposition Labour Party Jeremy Corbyn has announced on late Saturday that his party's manifesto is ready to be published next week, to the joy of his supporters and scepticism of others.
Despite the positive comments from his supporters, most Twitter users have been not so excited about his ideas.
Netizens questioned the actual possibility of the opposition's ideas, while also expressing fears of what these could cost Britain in taxes.
Recently, Corbyn promised to provide free full-fibre broadband for all by 2030, which the British PM Boris Johnson has slammed as a ''crazed, crazed Communist scheme''.
Corbyn's manifesto comes weeks before the looming 12 December snap general election in Britain, with the Labour Party predicted to come in second, according to the latest national polls.


Sherlock star Louise Brealey's fury as dad's 'most precious possession' stolen
Louise Brealey, who plays morgue registrar Molly Hooper in the BBC series, revealed her 71-year-old dad Keith’s garage was broken into last week.
by James Rodger, https://www.facebook.com/jamesrodgerjournalistOne of the stars of TV's Sherlock is trying to solve her own real-life crime mystery – the theft of her father’s rare antique pedal car.
Louise Brealey, who plays morgue registrar Molly Hooper in the BBC series, revealed her 71-year-old dad Keith’s garage was broken into last week.
Thieves took a 1949 Austin Pathfinder, which Louise says is the “Penny Black” of the pedal car world along with power tools.
Northamptonshire Police are now appealing for information about the theft which happened in Raunds, Northants., overnight on November 12.
Louise, 40, said: "It's worse than losing something yourself. He's heartbroken.
"His mum, who died when dad was a teen, had saved up for months to buy him an Austin Pathfinder pedal car. He has owned it for 70 years.
“It is basically the Penny Black of the pedal car world.”
She said that her father's toy was a "very rusty, trusty, old friend" and was also "loved hard and showed it".
She added: "Police are trying their best, but he's desolate.”
Since the actress put out the appeal on Twitter it has been shared over 9,500 times.
She has received support from the likes of poet Pam Ayres, writer Caitlin Moran and actor Prasanna Puwanarajah.
A police spokeswoman said: “The incident happened between 7pm on Tuesday, November 12, and 8.10am on Wednesday, November 13, when the unknown offender/s broken into a garage in the area and stole an Austin Pathfinder and a number of power tools.
“It is thought that the offenders made off in a Peugeot SUV.”


Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages
PGSTD::char_traits< CHAR > Struct Template Reference
Work around missing std::char_traits.
More...
#include <compiler.h>
Detailed Description
template<typename CHAR>
struct PGSTD::char_traits< CHAR >
Work around missing std::char_traits.
The documentation for this struct was generated from the following file:
Generated on Sat Jun 7 02:58:05 2003 for libpqxx by
1.3-rc3


Premium Services
The best we can offer
The best we can offer
Scroll Down
Care about Childrens, Passionate about kids, Dedicated to better.
We can provide amazing facilities to Oldage poeople, Care about Oldage people.
The health care needs of the physically disabled patient in a home-based care environment: Implications for the training of ancillary health care workers.
Meditation can be an effective form of stress reduction and has the potential to improve quality of life and decrease healthcare costs.


PT. Jaya Kelana Abadi Indonesia offers variety of medical simulators and anatomy replica training products that are commonly used in the medical education field and the users also range from students to professiaonals. In addition to those training products, we have VCD, CD-ROMs, posters, and books that accompany the main products.
To continue as the leading company in the field of healthcare education by providing excellent service and quality products that satisfy our customers, stockholders, partners, and employees.
Is our concern for the goods we have been selling by maintenance regularly
We also providing repairs the components that have been damaged and can be repaired
Availability of stock spare parts for all the manikins we distribute
T : (+62-21) 7265209 / 7265210
F : (+62-21) 7207972
E<EMAIL_ADDRESS>Jl. Ciputat Raya No 7-8, Tanah Kusir, Kebayoran Lama Selatan, Jakarta Selatan.


Preparation time
30 mins to 1 hour
Cooking time
30 mins to 1 hour
Serves
Makes 6
The batter mixture for the toad in the hole is chef Brian Turner's mother's recipe. The recipe uses cups rather than standard measurements - the key principle here is that there are equal quantities of flour, eggs and liquid constituents. If you don't hau
Sift the flour and salt into a bowl.
Combine the water and milk in a jug.
Add the eggs and half of the milk and water mixture to the flour and whisk until smooth.
Add the rest of the milk and water mixture and the vinegar and whisk to combine. Leave to stand for 30 minutes.
Preheat the oven to 200C/440F/Gas 6.
Place a tablespoonful of dripping (or vegetable oil) into each of six holes of a muffin tin. Place the tin into the oven to heat the dripping to smoking hot.
Carefully pour a sixth of the batter into each hole with dripping or oil, then add a sausage to each.
Return to the oven to cook for 25 minutes. Do not open the oven door during this time!
For the gravy, heat the oil in a frying pan and fry the onions until soft.
Add the sugar and tomato purée and cook for five minutes.
Add the gravy browning or soy sauce, Worcestershire sauce, ale and stock. Bring to the boil, then reduce the heat to simmer for 25 minutes.
Remove from the heat and add the butter a little at a time, whisking to combine to make a glossy sauce.
Remove the toad in the holes from the oven and place each onto a plate. Pour over a generous amount of gravy and serve.


Name:
Age:
Birth Date:
Male Female
Street: Nº: City: UF: RS SC SP RJ
Enter a reference point:
Attach proof of residence:
Username: Password:


Data Maps Cancer rates in the US by county, 2012-2016 All types of cancer, males; age adjusted death rate by county, 2012-2016. All types of cancer, females; age adjusted death rate by county, 2012-2016. Sources Health data courtesy of Centers for Disease Control and Prevention. Map data courtesy of Eric Celeste.


| Name | State | Requested | Address | Date | Suggested Price/Gallon | Total |
|---|---|---|---|---|---|---|
| Johnny Appleseed | In-state | 47.3 GAL | 4922 Creekwood Lane | 2/4/2021 | xx.xx | $1,421 |
| Bob Swan | In-State | 78.2 GAL | 92 Sweeatwater Dr | 2/1/2021 | xx.xx | $4,153 |
| Jackson Mills | Out-of-State | 98 GAL | 543 Saddle Pine Rd | 1/20/2021 | xx.xx | $6,123 |
| Shawn Richards | In-State | 219 GAL | 938 True Lake Ln | 1/17/2021 | xx.xx | $12,123 |
| Carlos Suarez | Out-of-State | 19 GAL | 18423 Narrow Lake View | 1/09/2021 | xx.xx | $329 |
| Tom Flanders | Out-of-State | 324 GAL | 907 Pine Rock Ln | 12/21/2020 | xx.xx | $43,293 |


Bale Insults Real, Nears Exit Door
by SL InternationalGareth Bale's relationship with Real Madrid has soured even further after the Wales star seemingly insulted the LaLiga club in public while on international duty.
Read: World's Richest Club Revealed, Real Dethroned
In recent times, Bale's future with Los Blancos has been called into question after the 30-year-old fell out of favour with manager Zinedine Zidane and the club's fans.
Despite playing a starring role during his time in Madrid, the former Tottenham Hotspur forward has been widely criticized for his frequent golf days and his reluctance to learn Spanish, as well as the amount of time he spends in the injury room.
Choose the right winger for SA’s Real Madrid Dream Team & win a replica shirt!
Bale was linked with a transfer to an unnamed Chinese club during the previous transfer window but the deal collapsed following Real's injury crisis, and the Wales international now appears to be doing all in his power to force a move away.
Following his nation's 2-0 win over Hungary on Tuesday night, Bale was photographed smiling while holding a Welsh flag with the words "Wales. Golf. Madrid. In that order.".
According to the Mirror, the act has not gone down well with Real officials and fans and it is believed that the latest controversy will be the final nail in Welshman's Real coffin.
Read: 'Hazard Was A Lazy Trainer'
Bale joined the record 33-time LaLiga champions in 2013 and has gone on to score 104 goals in 238 appearances for the club, including three goals across his side's four most recent UEFA Champions League final triumphs.


My first medium sized Ruby on Rails project. It's kinda like AirBNB!
Launch
A simple Weather app I made after completing the course over at freecodecamp.com.
A challenge project. 30 minutes to create a basic Instagram-like app. It was fun!


Digital Design, Development and Marketing Agency From UK
Xenol is a creative studio that is specialized in brand strategy and digital creation. We will work with you to design your brand identity and make it evolve in a consistent on each and every connected device.
We believe that individual talent can only take you so far in our industry. While personal excellence is highly valued at Xenol.


|
NASA World Wind | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface MemoryCache
| Nested Class Summary | |
|---|---|
static interface |
MemoryCache.CacheListener
Provides the interface for cache clients to be notified of key events. |
| Method Summary | |
|---|---|
boolean |
add(Object key,
Cacheable clientObject)
Attempts to add the Cacheable object referenced by the key. |
boolean |
add(Object key,
Object clientObject,
long objectSize)
Attempts to add the object clientObject , with size objectSize and referred to by
key to the cache. |
void |
addCacheListener(MemoryCache.CacheListener listener)
Adds a new cacheListener , which will be sent notification whenever an entry is removed from the
cache. |
void |
clear()
Empties the cache. |
boolean |
contains(Object key)
Discovers whether or not this cache contains the object referenced by key. |
long |
getCapacity()
Retrieves the maximum size of the cache in bytes. |
long |
getFreeCapacity()
Retrieves the available space for storing new items. |
Set<Object> |
getKeySet()
retrieve an unordered Set of the keys of the objects in this MemoryCache . |
long |
getLowWater()
Retrieves the low water value of the MemoryCache . |
String |
getName()
|
int |
getNumObjects()
Retrieve the number of items stored in the MemoryCache . |
Object |
getObject(Object key)
Retrieves the requested item from the cache. |
long |
getUsedCapacity()
Retrieves the amount of used MemoryCache space. |
void |
remove(Object key)
Remove an object from the MemoryCache referenced by key . |
void |
removeCacheListener(MemoryCache.CacheListener listener)
Removes a CacheListener , notifications of events will no longer be sent to this listener. |
void |
setCapacity(long capacity)
Sets the maximum capacity for this cache in bytes. |
void |
setLowWater(long loWater)
Sets the new low water capacity value for this MemoryCache . |
void |
setName(String name)
|
| Method Detail |
|---|
boolean add(Object key, Cacheable clientObject)
Cacheable
object referenced by the key. No explicit size value is required as
this method queries the Cacheable to discover the size.
This method should be declared synchronized
when it is implemented.
key
- clientObject
-
Cacheable
boolean add(Object key, Object clientObject, long objectSize)
clientObject
, with size objectSize
and referred to by
key
to the cache. objectSize
is the size in bytes, but is not checked for accuracy.
Returns whether or not the add was successful.
Note that the size passed in may be used, rather than the real size of the object. In some implementations, the
accuracy of the space used calls will depend on the collection of these sizes, rather than actual size.
This method should be declared synchronized
when it is implemented.
key
- an object used to reference the cached itemclientObject
- the item to be cachedobjectSize
- the size of the item in bytes.
void addCacheListener(MemoryCache.CacheListener listener)
cacheListener
, which will be sent notification whenever an entry is removed from the
cache.
listener
- the new MemoryCache.CacheListener
void clear()
clear()
on a MemoryCache
, calls relating to used
capacity and number of items should return zero and the free capacity should be the maximum capacity.
This method should be declared synchronized
when it is implemented and should notify all
CacheListener
s of entries removed.
boolean contains(Object key)
key. Currently no interface exists
to discover if an object resides in the cache by referencing itself.
- Parameters:
key
- the key which the object is referenced by.
- Returns:
- true if the key is found in the cache, false otherwise.
long getCapacity()
MemoryCache
in bytes.long getFreeCapacity()
Set<Object> getKeySet()
Set
of the keys of the objects in this MemoryCache
.
Set
containing all the keys in the cache.long getLowWater()
MemoryCache
. When a MemoryCache
runs out of free
space, it must remove some items if it wishes to add any more. It continues removing items until the low water
level is reached. Not every MemoryCache
necessarily uses the low water system, so this may not
return a useful value.
MemoryCache
.String getName()
int getNumObjects()
MemoryCache
.
Object getObject(Object key)
key
is null or the item is not found, this method
returns null.
key
- an Object
used to represent the item to retrieve
Object
if found, null otherwiselong getUsedCapacity()
MemoryCache
space. The value returned is in bytes.
void remove(Object key)
key
. If the object is already absent, this
method simply returns without indicating the absence.
key
- an Object
used to represent the item to remove.void removeCacheListener(MemoryCache.CacheListener listener)
CacheListener
, notifications of events will no longer be sent to this listener.
listener
- void setCapacity(long capacity)
cache
in bytes. This capacity has no impact on the number of
items stored in the MemoryCache
, except that every item must have a positive size. Generally the
used capacity is the total of the sizes of all stored items.
capacity
- the new capacity in bytesvoid setLowWater(long loWater)
MemoryCache
. When a MemoryCache
runs out
of free space, it must remove some items if it wishes to add any more. It continues removing items until the low
water level is reached. Not every MemoryCache
necessarily uses the low water system, so this method
may not have any actual effect in some implementations.
loWater
- the new low water value in bytesvoid setName(String name)
|
NASA World Wind | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Language and file character code is decided by "charset" of "Content-Type" header. Association between character codes and charsets is prescribed in "FileEncodeList.txt" in OME_BrowserXCoS. You can find "FileEncodeList.txt" by Control-clicking OME_BrowserXCoS and choose "Show Package Contents" from pop-up menu, then follow folder path of Contents>Resources. The format of "FileEncodeList.txt" is as follows:. Each word is seaprated by a tab character
default "Character code that is used without information like Content-Type header" multipart "Character code for mails with attached files" send "Character code for out-going mails" encode "Charactercode for the following charsets in Content-Type header" "charset" "charset" ...
States implies U: unread, A: attached, R: replied, H: HTML mail, S: Outbound mail. Outbound mails displays To field in From column.
http://mac-ome.jp/However, the newest version is released at
http://www.vector.co.jp/authors/VA019709/OME_BrowserXCoS.htmlat first.
Please mail to
<EMAIL_ADDRESS>your impression or bug reports of OME_BrowserXCoS.


38+ Maulik Name Logo PNG. Catch a glimpse before it evaporates into the ether. Newnownext is logo's home for the latest in pop culture, music, movies, tv, news & more for the lgbt.
Notable people with the name include: The name malik is a boy's name of arabic origin meaning king; This elegant malik name logo imparts the feeling of a fleeting yet treasured memory.
Just select one of our logo designs, and get started now!
I am mechanical engineer and i work with autocad 2d and solidwork 3d. The style is loving and tender. Just select one of our logo designs, and get started now! I will make any realistic game ready prop or object.


Namespace ZptSharp
Classes
AngleSharpHostingBuilderExtensions
Extension methods for IBuildsHostingEnvironment instances.
CSharpHostingBuilderExtensions
Extension methods related to the use of ZPT Python expressions.
HapHostingBuilderExtensions
Extension methods for IBuildsHostingEnvironment instances.
NoMatchingReaderWriterException
Raised when no suitable implementation of IReadsAndWritesDocument can be found, but an implementation is required in order to proceed.
PythonHostingBuilderExtensions
Extension methods related to the use of ZPT Python expressions.
StreamToTextWriterCopier
Implementation of IWritesStreamToTextWriter which uses either a stream-copy (if the text writer is in fact a System.IO.StreamWriter), or otherwise a buffered read & write if the text writer is any other implementation.
TemplateDirectory
A model which represents a filesystem directory containing ZPT documents.
XmlHostingBuilderExtensions
Extension methods for IBuildsHostingEnvironment instances.
ZptFileRenderer
Implementation of IRendersZptFile which uses an IRendersZptDocument from a factory. It also uses an IGetsDocumentReaderWriterForFile to attempt to get the appropriate document reader/writer for the file.
ZptRenderingException
Base class for an exception raised by the ZPT Sharp rendering process.
ZptSharpHost
A utility to get an instance of IHostsZptSharp, enabling usage of ZptSharp without configuring it within your own application's dependency injection.
ZptSharpHostingBuilderExtensions
Extension methods for IBuildsHostingEnvironment instances.
ZptSharpServiceCollectionExtensions
Extension methods for Microsoft.Extensions.DependencyInjection.IServiceCollection instances.
Interfaces
IConfiguresRootContext
An object which may be used to add additional named values to the root TALES context.
IGetsStructuredMarkup
An object which can get a markup string, which may be inserted directly into a template document without any escaping or encoding.
IRendersZptDocument
An entry-point object for use by consuming logic. Renders ZPT documents from a stream and returns the rendered document as a stream.
IRendersZptFile
An entry-point object for use by consuming logic. Renders ZPT documents from a filesystem file and returns the rendered document as a stream.
IWritesStreamToTextWriter
An object which writes the contents of a System.IO.Stream to a System.IO.TextWriter.


More user information packet. If success byte doesn't equal 0x0A -
it is last SNAC byte. This snac contain some data not setable/viewable in
current ICQ clients (except ICQLite and ICQ2003b),
but you can change it thru your whitepage on wwp.icq.com. ICQLite
(up to build 1150) doesn't use "marital status" field too.
| 00 15 |
|
word |
|
SNAC family |
| 00 03 |
|
word |
|
SNAC subtype |
| 00 01 |
|
word |
|
SNAC flags |
| xx xx xx xx |
|
dword |
|
SNAC request-id |
|
|
| |
| 00 01 |
|
word |
|
TLV.Type(1) - encapsulated META_DATA |
| xx xx |
|
word |
|
TLV.Length |
|
|
| |
| xx xx |
|
word (LE) |
|
data chunk size (TLV.Length-2) |
| xx xx xx xx |
|
dword (LE) |
|
request owner uin |
| DA 07 |
|
word (LE) |
|
data type: META_DATA |
| 02 00 |
|
word (LE) |
|
request sequence number |
| DC 00 |
|
word (LE) |
|
data subtype: META_MORE_USERINFO |
|
| 0A |
|
char |
|
success byte |
| |
| xx xx |
|
word (LE) |
|
age |
| xx |
|
char |
|
gender |
| xx xx |
|
word (LE) |
|
homepage address length |
| xx .. xx 00 |
|
asciiz str |
|
homepage address string |
| xx xx |
|
word (LE) |
|
birth year |
| xx |
|
char |
|
birth month |
| xx |
|
char |
|
birth day |
| xx |
|
char |
|
speaking language 1 |
| xx |
|
char |
|
speaking language 2 |
| xx |
|
char |
|
speaking language 3 |
| 00 00 |
|
word (LE) |
|
unknown |
| xx xx |
|
word (LE) |
|
original from: city strlen |
| xx .. xx 00 |
|
asciiz str |
|
original from: city string |
| xx xx |
|
word (LE) |
|
original from: state strlen |
| xx .. xx 00 |
|
asciiz str |
|
original from: state string |
| xx xx |
|
word (LE) |
|
original from: country code |
| xx |
|
byte |
|
user TimeZone |
|
|
| |
| |
|
|
| |
| |
|
|
|


WITNESS LIST Revenue & Public Education Funding, Select Committee April 8, 1997-11:00A Commercial Lease Tax Against: Alexander, Andrew (Int. Council Shop. Ctrs) Durkin, Rush (Houston Real Est.Counc.) McMurtry, Allan (himself;wholesaler) Parrish, Ronald (Tandy Corp.) Peairson, Mitchell (TX Bld.Owners&Mgr.ASSN) Wright, Randy (Inst.Real Estate Mgt.TX) Franchise Tax- General Against: Wright, Randy (Inst. Real Estate Mgt.) Interior Design Services Tax Against: Lauck, Alan R. (The Lauck Group Inc.) Schwartz, Irving (TX ASSN Interior Design) Steaffelbach, Andre (himself;interior design) On: Bommarito-Crouch, Marla (Graeber&SimmonsAIA Arc) Bommarito-Crouch, Marla (The Bommarito Group) Bommarito-Crouch, Marla (UT Advisory Committee) Gasper, Pete (Laurie Smith Desgn.Assn) Harris, Olaf (himself;interior design) Stelter, Mary (Amer. Soc. Int.Designer) Offshore Drilling Equip. Tax Against: Plaisance, Moe (Int'l.Assn.Drill.Contr.) Property Tax- General Against: Wright, Randy (Inst. Real Estate Mgt.) Proposed Draft on HB 4 For: Anderson, Charles (himself;Veterinarian) Fairfield, Stephan (TX ASSN Comm.Dev.Corp.) Grusendorf, Bill (TX ASSN Rural Schools) Pierce, Wayne (KISD) Pierce, Wayne (TX ASSN Mid-size School) Scarcella, Leonard (Mayor of Stafford) Scarcella, Leonard (SMSD) Summers, Don (himself; business owner) Against: Allaway, Bill (TX Taxpyr&Research ASSN) Beckendorf, Charles (himself;dairy farmer) Bielamowicz,Mark (himself) Bratton, Pamela (Career Consultants) Bratton, Pamela (TX ASSN of Staffing) Burton, Lois (himself;sm.bus.owner) Bynum, Diana Lee (Houst.Custom.Brok.Assn.) Cowling, David (Amer. Elect. ASSN) Crawford, Phil (Dupont/Conoco) Crowley-Martinez,Cyndi (TX ASSN of Staffing) Cummings, Dale (AMOCO) George, Pat (TX Grain Sorghum Prod.)  Matthiessen, Susan (TX ASSN Personnel Consu) Murphree, Roger (ASSN Elec.Co. of TX) Pinkus, David (Small Bus United TX) Presnal, James K. (TX Assoc.Nurserymen) Seidlits, Curt (ASSN Elec.Co.of TX) Space, Chuck (SW Car Wash Assn.) Stephens, John (Southwestern Bell) Taylor, Travis (TX Grain Sorghum Prod.) Tulloch, William (Burlington Res.Oil&Gas) Vines, Les (Chaparral Steel) Vines, Les (TX Industries) Vollmer, Richard (Copper Smelting&Refinin) Woolsey, Roger (Amer.Jet Int'l Corp.) On: Bower, Bruce (himself;lawyer) Burnett, Quentin (GISD & TASA) Carpenter, Bill (Cypress-Fairbanks ISD) Carpenter, Bill (Fast Growth School Coal) Collyer, David (himself;North West ISD.) Daugherty, Craig (Comptroller's Office) Dieter, Alison (Gray Panthers) Dipprey, Ron (TX Chemical Council) Eckels, Robert (Conf. of Urban Counties) Eckels, Robert (Harris County Judge) Erwin, John (West Teleservices) Grundman, Rick (Southern Union Gas) Hahn, Norman (himself;Farmer&Rancher) Hayers, Jannis (TX ASSN School Boards) Hollingsworth, Lonnie (TCTA) Howden, Robert (Nat'l Fed Ind. Bus. TX) Kouri, Richard (TX State Teachers ASSN) Lavine, Richard (Ctr. Pub. Pol. Priority) McLamore, Mike (ASSN TX Prof. Educators) Middleton, Richard (NEISD) Middleton, Richard (TX School Alliance) Moak, Lynn (TX School Alliance) O'Gorman, John M. (Southern Union Gas) Olson, Jerry (TX ASSN Bus&ChamberComm) Reid, Ray (Entex) Reissig, Mike (Comptroller's Office) Veselka, Johnny (TX ASSN School Admin.) Wehrwein, Gerald (Energas) Wolf, Thomas (himself;65 and over) Wood, Bruce (Equity Center) Tax Reform- Water Issues On: Lewis, Ron (Representative) Tobacco Tax Against: Davis, Michael (Tobacco Institute) Elliott, Marvin (Cheyenne Trading Co) On: Ratcliff, Joe (TX ASSN Wholesale Dist.)


CompressMe
View Files
Submit URL to get light version
Invalid URL!
Compress Me!
Download
Latest websites compressed:


Huami Released The Third Quarter Earnings Report
by Argam ArtashyanRate this post
This evening, Huami Technology released its third-quarter earnings report for 2019 as of September 30. It turns out the company’s revenue was RMB 1,862.5 million ($260.6 million), a year-on-year increase. 73.3%.
Also Read: Huami’s Key To Success Is The Amazfit Series: Numbers Tell The Story
The financial report showed that the net profit attributable to the company was RMB 203.3 million ($28.4 million). In the same period last year, it was RMB 113.8 million ($16.24 million). Not according to US GAAP, the adjusted net profit attributable to Huami was RMB 209.8 million (US$29.4 million), an increase of 56.3% year-on-year.
Huami’s Q3 2019 financial and operating highlights
- Revenue of RMB1,862.5 million ($260.6 million), an increase of 73.3% from the third quarter of 2018.
- Gross margin of 25.2%, compared with 26.7% for the third quarter of 2018.
- Net income attributable to Huami Corporation of RMB203.3 million (US$28.4 million). In the third quarter of 2018, it was RMB113.8 million.
- Basic and diluted net income per American depositary share (“ADS”) attributable to ordinary shareholders of Huami Corporation of RMB3.31 (US$0.46) and RMB3.15 (US$0.44), respectively.
- Adjusted net income attributable to Huami Corporation of RMB209.8 million (US$29.4 million).
- Adjusted basic and diluted net income per ADS attributable to ordinary shareholders of RMB3.41 (US$0.48) and RMB3.25 (US$0.45), respectively.
In total, the company shipped 13.7 million units in the third quarter. Say, in the same period last year, it shipped 8.2 million units.
‘Our persistent execution of strategic initiatives focused on product diversification, brand elevation, and international expansion, continues to pay off, driving outstanding top-line and bottom-line growth in the third quarter,’ said Wang Huang, Chairman and CEO. ‘Our revenue performance was primarily the result of the strong sales of both the Mi-Band 4 and our newly released Amazfit products. The international shipments keep on climbing, underpinned by our first international product launch event in Berlin, Germany and numerous global product design awards we received.’


Flashlight Icon (Placeholder)
Key Icon (Placeholder)
Slingshot Icon (Placeholder)
Logo (Placeholder)


This
sample demonstrates how to use the User-Mode Driver Framework to write a Near
Field Proximity driver and demonstrates best practices. Typically, a Near Field
Proximity driver would use Near Field technologies like “NFC”, “TransferJet”, or “Bump”. However, this sample uses a
TCP/IPv6 network connection and a static configuration between two machines to
allow simulation of Near Field interaction.
Load the NetNfpProvider Visual Studio project file in to Visual
Studio. Use Visual Studio to build the sample. If the build succeeds, you will
find the driver, NetNfpProvider.dll in the binary output directory specified
for the build environment.
To install the NetNfpProvider driver:
- First copy the driver binary and the NetNfpProvider.inf file to a directory on your test machine (for example c:\NetNfpProvider.)
- Change to the directory containing the inf and binaries (for example cd /d c:\NetNfpProvider.)
- Next run devcon.exe as follows:
devcon.exe install NetNfpProvider.inf WUDF\NetNfpProvider
DevCon can be found in the tools directory of your WDK enlistment (for example: c:\winddk\<bld>\tools\devcon\i386\devcon.exe.)
- Create a Windows Firewall rule to allow the NetNfpProvider to receive proximity simulation requests over the network:
Run WF.msc
Create a new inbound rule that opens port 9299
To update the NetNfpProvider driver after making any changes:
- Increment the version number found in the INF. While this is not strictly necessary, it will help ensure PnP selects your new driver as a better match for the device.
- Copy the updated driver binary and the NetNfpProvider.inf file to a directory on your test machine (for example c:\ NetNfpProvider.)
- Change to the directory containing the inf and binaries (for example cd /d c:\ NetNfpProvider.)
- Next run devcon.exe as follows:
devcon.exe update NetNfpProvider.inf WUDF\NetNfpProvider
To test
the NetNfpProvider driver, you can run
NetNfpControl.exe which is built from the src\nfp\net\exe.
First
install the device as described above. Then run NetNfpControl.exe from one
command window.
NetNfpControl console app allows
control of the NetNfpProvider test driver. Both the
local and remote machine must have the NetNfpProvider
driver installed.
USAGE:
Windows Near-field
Proximity Test tool. Designed for simulating proximity hardware.
NetNfpControl.exe
[<remoteMachine>] [/k]
Example: NetNfpControl.exe John-PC1
The first operating mode allows the user to specify a remote machine name (or
IPv6 address) that the local machine should connect to and simulate proximity
with. After it's connected, a simple key-press ends the simulated proximity
link. The console app then exits.
Example: NetNfpControl.exe John-PC1
/k
A second operating mode keeps the console app running with a Ctrl-F1 hotkey
registered (even when running in the background). When the hot key is
intercepted, a near-field proximity event is simulated directly with the
specified remote machine.
Note: The console app needs to be running (only on one machine) to intercept
the system hot key.
Example: NetNfpControl.exe /k
A third operating mode also keeps the console app running with a Ctrl-F1 hotkey
registered. However, you'll have to run this on two or more machines at the
same time. Pressing Ctrl-F1 on any two machines at the same time causes the
machines to exchange their network name via a file on a private share with a
special file name.
·
The
server share used is hard coded to: \\scratch2\scratch\travm\proxrendezvous\
o
Either
create a file server with these folders shared, or change this to match yours.
·
The
file has an effective lifetime of 2 seconds.
·
In
the event of a collision (two clients posting an event during the same
interval), only one client 'wins'.
|
File |
Description |
|
NetNfpProvider.htm |
Documentation for this sample
(this file). |
|
dllsup.cpp |
DLL
Support code - provides the DLL's entry point as well as the single required
export (DllGetClassObject). |
|
Exports.def |
This file lists the functions that
the driver DLL exports. |
|
Internal.h |
This is the main header file for
this driver. |
|
Driver.cpp & Driver.h |
DriverEntry and events on the Driver Object. |
|
Device.cpp & Device.h |
Events on the Device Object. |
|
Queue.cpp & Queue.h |
Contains events on the I/O Queue
Objects. IOCTL handlers and filename parsing. |
|
connection.cpp & connection.h |
Contains events on the connection
object created per simulated proximity link. This contains the code for
socket client. |
|
Socketlistener.cpp & Socketlistener.h |
Contains
a socket listener for accepting inbound proximity simulation requests. |
|
FileContext.cpp and FileContext.h |
Defines the context associated with the file object. Per file context
stores per connection information, publications, and subscriptions. |
|
NetNfpProvider.rc |
Resource file for the driver. |
|
NetNfpProvider.inx |
File that describes the
installation of this driver. The build process converts this into an INF
file. |
|
WppDefs.h |
A header used to generate WPP
Macros for this project. Note, with WPP, some comments are actually compiled
by the pre-processor. Thread Local Storage is used to properly indent logs. |
© 2012 Microsoft Corporation


Cynix Pizza-Inn
Home
|About
|Contact
select Pizza Size
regular
medium
large
mega
select Your Favourite Toppings
Pepperoni
Mushrooms
Onions
Sausage
Bacon
Extra cheese
Black olives
Green peppers
Pineapple
Spinach
select Your Favourite crust
Crispy
Stuffed
Gluten-free
Place Order
Total pizza Amount:


03 Nov 2014
Hooray Paris!
Well, maybe. Having only seen the inside of the conference center and hotel lobby of the hotel nextdoor, I didn't get to do much summiting today. Rather, the day was spent prepping for tomorrows workshop.
I do hear that the #vBrownBags are doing extremely well with 19 individual sessions recorded (and streamed?) today, and a full schedule of 100-ish more this week.
03 Nov 2014
Method 3 you ask? Wel, sure, I wrote on this around the time of OSCON earlier this year. However, for the OpenStack in Paris, we needed a larger axe. Thanks to Lars & Mr. Cloud Null, we managed to apply the appropriate amount of strategic violence:
cat ~/fuckshitup.sh
#!/bin/bash
set -e -o -v
for i in `jot 19 3`;
do sudo diskutil erasedisk FAT32 PARIS /dev/disk${i}
done
for i in `jot 19 3`;
do sudo diskutil partitionDisk /dev/disk${i} MBR MS-DOS PARIS 0b
done
for i in `jot 19 3`;
do rsync --progress -az /Volumes/PARIS "/Volumes/PARIS $i/" &
done
First it formats all the disks, then it rsyncs all the things.
31 Oct 2014
Starting now and running the week of the summit, the two best selling OpenStack books will be on super sale:
OpenStack Cookbook
Book : nieX72Mn7U
eBook: k1QxrwyMvD
Learning OpenStack Networking (Neutron)
Book : luyLRpSQ
eBook: IXQ1swn2
29 Oct 2014
As you might have guessed from the large number of ZeroVM posts recently, that something was up. If you are going to be at the OpenStack Summit in Paris, there will be a ZeroVM workshop given by my coworkers Egle, Lars, and I.
This session will be a 90-minute, into the deep end, building applications to work with ZeroVM.
The materials, if you want to play along at home, can be found here:
Still missing are the slides and video which I will update the post with after the show. See you in Paris.
28 Oct 2014
Part of working on the 3rd edition of the OpenStack Cookbook required, among other things, a new release of Ubuntu that came pre-loaded with the Juno OpenStack packages. Not a problem! Excepting that there were no ready made images on Vagrant Cloud. Enter Packer.
Packer?
What the deuce is packer? From the packer.io site:
Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
Said another way, it takes the 'configuration is code' and pushes it back to the golden images, to a degree. The idea is one can shrink the time to deploy if instead of starting with the most generic box and adding, you start somewhere in the middle, adding common things to a 'golden' image, and then deploying on top of that.
In the use-case for the OpenStack Cookbook? Well, we just needed a manila Ubuntu 14.10 box for Fusion and Virtualbox. As there are three of us on the project now, having a common starting ground is ideal.
Our Packer Setup
I'll leave installing Packer as an exercise for the reader. The docs are pretty good in the regard.
For our build, we use the following packer.json:
{
"builders": [
{"type": "virtualbox-iso",
"guest_os_type": "Ubuntu_64",
"iso_url": "http://mirror.anl.gov/pub/ubuntu-iso/CDs/utopic/ubuntu-14.10-server-amd64.iso",
"iso_checksum": "91bd1cfba65417bfa04567e4f64b5c55",
"iso_checksum_type":"md5",
"http_directory": "preseed",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"boot_wait":"5s",
"output_directory": "ubuntu64_basebox_virtualbox",
"shutdown_command": "echo 'shutdown -P now' > shutdown.sh; echo 'vagrant'|sudo -S sh 'shutdown.sh'",
"boot_command": [
"<esc><esc><enter><wait>",
"/install/vmlinuz noapic ",
"ks=http://:/preseed.cfg ",
"debian-installer=en_US auto locale=en_US kbd-chooser/method=us ",
"hostname= ",
"fb=false debconf/frontend=noninteractive ",
"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ",
"keyboard-configuration/variant=USA console-setup/ask_detect=false ",
"initrd=/install/initrd.gz -- ",
"<enter>"]
},
{"type": "vmware-iso",
"guest_os_type": "ubuntu-64",
"iso_url": "http://mirror.anl.gov/pub/ubuntu-iso/CDs/utopic/ubuntu-14.10-server-amd64.iso",
"iso_checksum": "91bd1cfba65417bfa04567e4f64b5c55",
"iso_checksum_type":"md5",
"http_directory": "preseed",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"boot_wait":"5s",
"output_directory": "ubuntu64_basebox_vmware",
"shutdown_command": "echo 'shutdown -P now' > shutdown.sh; echo 'vagrant'|sudo -S sh 'shutdown.sh'",
"boot_command": [
"<esc><esc><enter><wait>",
"/install/vmlinuz noapic ",
"ks=http://:/preseed.cfg ",
"debian-installer=en_US auto locale=en_US kbd-chooser/method=us ",
"hostname= ",
"fb=false debconf/frontend=noninteractive ",
"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ",
"keyboard-configuration/variant=USA console-setup/ask_detect=false ",
"initrd=/install/initrd.gz -- ",
"<enter>"]
}],
"provisioners": [{
"type": "shell",
"execute_command": "echo 'vagrant' | sudo -S sh ''",
"inline": [
"apt-get update -y",
"apt-get install -y linux-headers-$(uname -r) build-essential dkms",
"apt-get clean",
"mount -o loop VBoxGuestAdditions.iso /media/cdrom",
"sh /media/cdrom/VBoxLinuxAdditions.run",
"umount /media/cdrom",
"mkdir /home/vagrant/.ssh",
"mkdir /root/.ssh",
"wget -qO- https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub >> ~/.ssh/authorized_keys",
"echo 'vagrant ALL=NOPASSWD:ALL' > /tmp/vagrant",
"chmod 0440 /tmp/vagrant",
"mv /tmp/vagrant /etc/sudoers.d/"
]}],
"post-processors": [
{
"type": "vagrant",
"override": {
"virtualbox": {
"output": "utopic-x64-virtualbox.box"
},
"vmware": {
"output": "utopic-x64-vmware.box"
}
}
}
]
}
This in turn calls a kickstart (yes kickstart on Ubuntu) file stored in the preseed folder. This looks like:
install
text
cdrom
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
timezone --utc America/Chicago
zerombr
clearpart --all --initlabel
bootloader --location=mbr
part /boot --fstype=ext3 --size=256 --asprimary
part pv.01 --size=1024 --grow --asprimary
volgroup vg_root pv.01
logvol swap --fstype swap --name=lv_swap --vgname=vg_root --size=1024
logvol / --fstype=ext4 --name=lv_root --vgname=vg_root --size=1024 --grow
auth --enableshadow --enablemd5
# rootpw is vagrant
rootpw --iscrypted $1$dUDXSoA9$/bEOTiK9rmsVgccsYir8W0
user --disabled
firewall --disabled
skipx
reboot
%packages
ubuntu-minimal
openssh-server
openssh-client
wget
curl
git
man
vim
ntp
%post
apt-get update
apt-get upgrade -y linux-generic
update-grub
useradd -m -s /bin/bash vagrant
echo vagrant:vagrant | chpasswd
mkdir -m 0700 -p /home/vagrant/.ssh
curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys
chmod 600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh
echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
sed -i 's/^PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
apt-get clean
rm -rf /tmp/*
rm -f /var/log/wtmp /var/log/btmp
history -c
Once both files are in place and packer is installed, building the images is as simple as:
packer build packer.json
This will take a long time, but it does eventually get there, and will produce two .box files in the output folders you specified in the packer.json. From there, you can upload them somewhere and have vagrantcloud make them available, as we have under bunchc/utopic-x64
.
Summary
In this post we looked at how to use packer.io to build Vagrant boxes for both VMware Workstation / Fusion and Virtualbox.


China urges United States to stop provocative acts in South China Sea
BEIJING (Reuters) - China on Friday urged the United States to stop provocative acts in the South China Sea after two U.S. Navy ships sailed near islands claimed by Beijing there.
In a statement, the Chinese military’s southern theater command said its forces tracked the U.S. warships sailing near the disputed islands.


This... this hallowed hall of might and of valor has come to its end.  And to remember what they have given us, their grand and some not so grand warriors. All of those warriors will be remembered for eternity as long the tome of warrior's names exist!
*bellows* Long Live ECB and its brother ECB:PD! *strikes the grand hall's stone with greataxe honed from lifetime of use.*
Anuis _________________ - Epic Character Builders Guild
- Life is but a dream...
- I know more than I am letting on...
-I think, Therefore I am.
Hail!
but it's not dead yet.
Anyhow; HAIL!
Nice work buddy! And to all, you are missed! Thanks for letting me hang around here with you
It's been a pleasure, gentlemen.
HAIL!
Hail, indeed.
Will miss this place. A great many people have worked a great many hours to make this guild so great. I have enjoyed reading and commenting on the various builds so many imaginative and knowledgeable people have posted here. It's truly a labor of love.
Thanks to everyone who made this guild so fantastic! Will definitely miss it. Hope it will reappear in the other forums.


I'm a highschooler who started learning to code in 2016. I'm also a percussionist at my highschool. I know javascript, html, css, nodejs, and C#. I mostly like making games on Unity and P5 with my sweet epic dank coding skills.
My past games were made with, scratch, khan academy, and p5. I'm mostly using Unity to make my games right now, but I will occasionally use p5. Don't attempt to play these games on mobile, it probably won't go well.
This site was made using a domain from freenom, and was put on the internet using netlify. I used libraries bootstrap, jquery, and popper to make this site.


All about each zodiac sign
Numerology
HISTORY
In Western astrology, astrological signs are the twelve 30° sectors of the ecliptic, starting at the vernal equinox (one of the intersections of the ecliptic with the celestial equator), also known as the First Point of Aries. The order of the astrological signs is Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn, Aquarius and Pisces.
The concept of the zodiac originated in Babylonian astrology, and was later influenced by Hellenistic culture. According to astrology, celestial phenomena relate to human activity on the principle of "as above, so below", so that the signs are held to represent characteristic modes of expression.
The twelve sector division of the ecliptic constitutes astrology's primary frame of reference when considering the positions of celestial bodies, from a geocentric point of view, so that we may find, for instance, the Sun in 23° Aries (23° longitude), the Moon in 7° Scorpio (217° longitude), or Jupiter in 29° Pisces (359° longitude). Beyond the celestial bodies, other astrological points that are dependent on geographical location and time (namely, the Ascendant, the Midheaven, the Vertex and the houses' cusps) are also referenced within this ecliptic coordinate system.
Various approaches to measuring and dividing the sky are currently used by differing systems of astrology, although the tradition of the Zodiac's names and symbols remain consistent. Western astrology measures from Equinox and Solstice points (points relating to equal, longest and shortest days of the tropical year), while Jyotiṣa or Vedic astrology measures along the equatorial plane (sidereal year). Precession results in Western astrology's zodiacal divisions not corresponding in the current era to the constellations that carry similar names, while Jyotiṣa measurements still correspond with the background constellations.
In Western and Asian astrology, the emphasis is on space, and the movement of the Sun, Moon and planets in the sky through each of the zodiac signs. In Chinese astrology, by contrast, the emphasis is on time, with the zodiac operating on cycles of years, months, and hours of the day. A common feature of all three traditions however, is the significance of the Ascendant — the zodiac sign that is rising (due to the rotation of the earth) on the eastern horizon at the moment of a person's birth.
ZODIAC SIGNS
While Western astrology is essentially a product of Greco-Roman culture, some of its more basic concepts originated in Babylonia. Isolated references to celestial "signs" in
By the 4th century BC, Babylonians' astronomy and their system of celestial omens were influencing the Greek culture and, by the late 2nd century BC, Egyptian astrology was also mixing in. This resulted, unlike the Mesopotamian tradition, in a strong focus on the birth chart of the individual and in the creation of horoscopic astrology, employing the use of the Ascendant (the rising degree of the ecliptic, at the time of birth), and of the twelve houses. Association of the astrological signs with Empedocles' four classical elements was another important development in the characterization of the twelve signs.
The body of astrological knowledge by the 2nd century AD is described in Ptolemy's Tetrabiblos, a work that was responsible for astrology's successful spread across Europe and the Middle East, and remained a reference for almost seventeen centuries as later traditions made few substantial changes to its core teachings.
The following table enumerates the twelve divisions of celestial longitude, with the Latin names (still widely used) and the English translation (gloss). The longitude intervals, being a mathematical division, are closed for the first endpoint (a) and open for the second (b) — for instance, 30° of longitude is the first point of Taurus, not part of Aries. Association of calendar dates with astrological signs only makes sense when referring to Sun sign astrology.


ICDAR 2021 Competition on Robust Reading Competition - ICText
DAVAR LAB
Official Website
Introduction
The challenge on a large scale industry standard Integrated Circuit OCR dataset that include annotations of aesthetic classes on character level.
We have won the 1st place on all of the challenge tasks: End-to-end Text Spotting on Integrated Circuit; End-to-end Text Spotting and Aesthetic Assessment; Inference Speed, Model Size and Score Assessment.


Before Change
image_id, data, _ = self.reader(idx=None, shuffle=True)
if not data:
break
image_shapes = {
name: data[name].shape for name in self.window.names}
static_window_shapes = self.window.match_image_shapes(image_shapes)
// find random coordinates based on window and image shapes
coordinates = self.spatial_coordinates_generator(
After Change
image_id, data, _ = self.reader(idx=None, shuffle=True)
if not data:
break
image_shapes = dict((name, data[name].shape)
for name in self.window.names)
static_window_shapes = self.window.match_image_shapes(image_shapes)
// find random coordinates based on window and image shapes
coordinates = self.spatial_coordinates_generator(


--- ---
| Error code - hex (decimal) | Error description |
|---|---|
$0000 (0) |
Successful completion |
$0021 (33) |
System Error |
$0022 (34) |
Object of Interest Not Found |
$0023 (35) |
Physical Data Corruption |
$0024 (36) |
I/O Related Error |
$0025 (37) |
Resource or Limit Error |
$0026 (38) |
Data Integrity Violation |
$0027 (39) |
Invalid Request |
$0028 (40) |
Lock Violation |
$0029 (41) |
Access/Security Violation |
$002A (42) |
Invalid Context |
$002B (43) |
OS Error |
$002C (44) |
Network Error |
$002D (45) |
Optional Parameter |
$002E (46) |
Query Processor |
$002F (47) |
Version Mismatch |
$0030 (48) |
Capability Not Supported |
$0031 (49) |
System Configuration Error |
$0032 (50) |
Warning |
$0033 (51) |
Miscellaneous |
$0034 (52) |
Compatibility Error |
$003E (62) |
Driver Specific Error |
$003F (63) |
Internal Symbol |
$2101 (8449) |
Cannot open a system file |
$2102 (8450) |
I/O error on a system file |
$2103 (8451) |
Data structure corruption |
$2104 (8452) |
Cannot find Engine configuration file |
$2105 (8453) |
Cannot write to Engine configuration file |
$2106 (8454) |
Cannot initialize with different configuration file |
$2107 (8455) |
System has been illegally re-entered |
$2108 (8456) |
Cannot locate IDAPI32 .DLL |
$2109 (8457) |
Cannot load IDAPI32 .DLL |
$210A (8458) |
Cannot load an IDAPI service library |
$210B (8459) |
Cannot create or open temporary file |
$2201 (8705) |
At beginning of table |
$2202 (8706) |
At end of table |
$2203 (8707) |
Record moved because key value changed |
$2204 (8708) |
Record/Key deleted |
$2205 (8709) |
No current record |
$2206 (8710) |
Could not find record |
$2207 (8711) |
End of BLOB |
$2208 (8712) |
Could not find object |
$2209 (8713) |
Could not find family member |
$220A (8714) |
BLOB file is missing |
$220B (8715) |
Could not find language driver |
$2301 (8961) |
Corrupt table/index header |
$2302 (8962) |
Corrupt file - other than header |
$2303 (8963) |
Corrupt Memo/BLOB file |
$2305 (8965) |
Corrupt index |
$2306 (8966) |
Corrupt lock file |
$2307 (8967) |
Corrupt family file |
$2308 (8968) |
Corrupt or missing .VAL file |
$2309 (8969) |
Foreign index file format |
$2401 (9217) |
Read failure |
$2402 (9218) |
Write failure |
$2403 (9219) |
Cannot access directory |
$2404 (9220) |
File Delete operation failed |
$2405 (9221) |
Cannot access file |
$2406 (9222) |
Access to table disabled because of previous error |
$2501 (9473) |
Insufficient memory for this operation |
$2502 (9474) |
Not enough file handles |
$2503 (9475) |
Insufficient disk space |
$2504 (9476) |
Temporary table resource limit |
$2505 (9477) |
Record size is too big for table |
$2506 (9478) |
Too many open cursors |
$2507 (9479) |
Table is full |
$2508 (9480) |
Too many sessions from this workstation |
$2509 (9481) |
Serial number limit (Paradox) |
$250A (9482) |
Some internal limit (see context) |
$250B (9483) |
Too many open tables |
$250C (9484) |
Too many cursors per table |
$250D (9485) |
Too many record locks on table |
$250E (9486) |
Too many clients |
$250F (9487) |
Too many indexes on table |
$2510 (9488) |
Too many sessions |
$2511 (9489) |
Too many open databases |
$2512 (9490) |
Too many passwords |
$2513 (9491) |
Too many active drivers |
$2514 (9492) |
Too many fields in Table Create |
$2515 (9493) |
Too many table locks |
$2516 (9494) |
Too many open BLOBs |
$2517 (9495) |
Lock file has grown too large |
$2518 (9496) |
Too many open queries |
$251A (9498) |
Too many BLOBs |
$251B (9499) |
File name is too long for a Paradox version 5.0 table |
$251C (9500) |
Row fetch limit exceeded |
$251D (9501) |
Long name not allowed for this tablelevel |
$2601 (9729) |
Key violation |
$2602 (9730) |
Minimum validity check failed |
$2603 (9731) |
Maximum validity check failed |
$2604 (9732) |
Field value required |
$2605 (9733) |
Master record missing |
$2606 (9734) |
Master has detail records. Cannot delete or modify |
$2607 (9735) |
Master table level is incorrect |
$2608 (9736) |
Field value out of lookup table range |
$2609 (9737) |
Lookup Table Open operation failed |
$260A (9738) |
Detail Table Open operation failed |
$260B (9739) |
Master Table Open operation failed |
$260C (9740) |
Field is blank |
$260D (9741) |
Link to master table already defined |
$260E (9742) |
Master table is open |
$260F (9743) |
Detail table(s) exist |
$2610 (9744) |
Master has detail records. Cannot empty it |
$2611 (9745) |
Self referencing referential integrity must be entered one at a time with no other changes to the table |
$2612 (9746) |
Detail table is open |
$2613 (9747) |
Cannot make this master a detail of another table if its details are not empty |
$2614 (9748) |
Referential integrity fields must be indexed |
$2615 (9749) |
A table linked by referential integrity requires password to open |
$2616 (9750) |
Field(s) linked to more than one master |
$2617 (9751) |
Expression validity check failed |
$2701 (9985) |
Number is out of range |
$2702 (9986) |
Invalid parameter |
$2703 (9987) |
Invalid file name |
$2704 (9988) |
File does not exist |
$2705 (9989) |
Invalid option |
$2706 (9990) |
Invalid handle to the function |
$2707 (9991) |
Unknown table type |
$2708 (9992) |
Cannot open file |
$2709 (9993) |
Cannot redefine primary key |
$270A (9994) |
Cannot change this RINTDesc |
$270B (9995) |
Foreign and primary key do not match |
$270C (9996) |
Invalid modify request |
$270D (9997) |
Index does not exist |
$270E (9998) |
Invalid offset into the BLOB |
$270F (9999) |
Invalid descriptor number |
$2710 (10000) |
Invalid field type |
$2711 (10001) |
Invalid field descriptor |
$2712 (10002) |
Invalid field transformation |
$2713 (10003) |
Invalid record structure |
$2714 (10004) |
Invalid descriptor |
$2715 (10005) |
Invalid array of index descriptors |
$2716 (10006) |
Invalid array of validity check descriptors |
$2717 (10007) |
Invalid array of referential integrity descriptors |
$2718 (10008) |
Invalid ordering of tables during restructure |
$2719 (10009) |
Name not unique in this context |
$271A (10010) |
Index name required |
$271B (10011) |
Invalid session handle |
$271C (10012) |
invalid restructure operation |
$271D (10013) |
Driver not known to system |
$271E (10014) |
Unknown database |
$271F (10015) |
Invalid password given |
$2720 (10016) |
No callback function |
$2721 (10017) |
Invalid callback buffer length |
$2722 (10018) |
Invalid directory |
$2723 (10019) |
Translate Error. Value out of bounds |
$2724 (10020) |
Cannot set cursor of one table to another |
$2725 (10021) |
Bookmarks do not match table |
$2726 (10022) |
Invalid index/tag name |
$2727 (10023) |
Invalid index descriptor |
$2728 (10024) |
Table does not exist |
$2729 (10025) |
Table has too many users |
$272A (10026) |
Cannot evaluate Key or Key does not pass filter condition |
$272B (10027) |
Index already exists |
$272C (10028) |
Index is open |
$272D (10029) |
Invalid BLOB length |
$272E (10030) |
Invalid BLOB handle in record buffer |
$272F (10031) |
Table is open |
$2730 (10032) |
Need to do (hard) restructure |
$2731 (10033) |
Invalid mode |
$2732 (10034) |
Cannot close index |
$2733 (10035) |
Index is being used to order table |
$2734 (10036) |
Unknown user name or password |
$2735 (10037) |
Multi-level cascade is not supported |
$2736 (10038) |
Invalid field name |
$2737 (10039) |
Invalid table name |
$2738 (10040) |
Invalid linked cursor expression |
$2739 (10041) |
Name is reserved |
$273A (10042) |
Invalid file extension |
$273B (10043) |
Invalid language Driver |
$273C (10044) |
Alias is not currently opened |
$273D (10045) |
Incompatible record structures |
$273E (10046) |
Name is reserved by DOS |
$273F (10047) |
Destination must be indexed |
$2740 (10048) |
Invalid index type |
$2741 (10049) |
Language Drivers of Table and Index do not match |
$2742 (10050) |
Filter handle is invalid |
$2743 (10051) |
Invalid Filter |
$2744 (10052) |
Invalid table create request |
$2745 (10053) |
Invalid table delete request |
$2746 (10054) |
Invalid index create request |
$2747 (10055) |
Invalid index delete request |
$2748 (10056) |
Invalid table specified |
$274A (10058) |
Invalid Time |
$274B (10059) |
Invalid Date |
$274C (10060) |
Invalid Datetime |
$274D (10061) |
Tables in different directories |
$274E (10062) |
Mismatch in the number of arguments |
$274F (10063) |
Function not found in service library |
$2750 (10064) |
Must use baseorder for this operation |
$2751 (10065) |
Invalid procedure name |
$2752 (10066) |
The field map is invalid |
$2801 (10241) |
Record locked by another user |
$2802 (10242) |
Unlock failed |
$2803 (10243) |
Table is busy |
$2804 (10244) |
Directory is busy |
$2805 (10245) |
File is locked |
$2806 (10246) |
Directory is locked |
$2807 (10247) |
Record already locked by this session |
$2808 (10248) |
Object not locked |
$2809 (10249) |
Lock time out |
$280A (10250) |
Key group is locked |
$280B (10251) |
Table lock was lost |
$280C (10252) |
Exclusive access was lost |
$280D (10253) |
Table cannot be opened for exclusive use |
$280E (10254) |
Conflicting record lock in this session |
$280F (10255) |
A deadlock was detected |
$2810 (10256) |
A user transaction is already in progress |
$2811 (10257) |
No user transaction is currently in progress |
$2812 (10258) |
Record lock failed |
$2813 (10259) |
Couldn't perform the edit because another user changed the record |
$2814 (10260) |
Couldn't perform the edit because another user deleted or moved the record |
$2901 (10497) |
Insufficient field rights for operation |
$2902 (10498) |
Insufficient table rights for operation. Password required |
$2903 (10499) |
Insufficient family rights for operation |
$2904 (10500) |
This directory is read only |
$2905 (10501) |
Database is read only |
$2906 (10502) |
Trying to modify read-only field |
$2907 (10503) |
Encrypted dBASE tables not supported |
$2908 (10504) |
Insufficient SQL rights for operation |
$2A01 (10753) |
Field is not a BLOB |
$2A02 (10754) |
BLOB already opened |
$2A03 (10755) |
BLOB not opened |
$2A04 (10756) |
Operation not applicable |
$2A05 (10757) |
Table is not indexed |
$2A06 (10758) |
Engine not initialized |
$2A07 (10759) |
Attempt to re-initialize Engine |
$2A08 (10760) |
Attempt to mix objects from different sessions |
$2A09 (10761) |
Paradox driver not active |
$2A0A (10762) |
Driver not loaded |
$2A0B (10763) |
Table is read only |
$2A0C (10764) |
No associated index |
$2A0D (10765) |
Table(s) open. Cannot perform this operation |
$2A0E (10766) |
Table does not support this operation |
$2A0F (10767) |
Index is read only |
$2A10 (10768) |
Table does not support this operation because it is not uniquely indexed |
$2A11 (10769) |
Operation must be performed on the current session |
$2A12 (10770) |
Invalid use of keyword |
$2A13 (10771) |
Connection is in use by another statement |
$2A14 (10772) |
Passthrough SQL connection must be shared |
$2B01 (11009) |
Invalid function number |
$2B02 (11010) |
File or directory does not exist |
$2B03 (11011) |
Path not found |
$2B04 (11012) |
Too many open files. You may need to increase MAXFILEHANDLE limit in IDAPI configuration |
$2B05 (11013) |
Permission denied |
$2B06 (11014) |
Bad file number |
$2B07 (11015) |
Memory blocks destroyed |
$2B08 (11016) |
Not enough memory |
$2B09 (11017) |
Invalid memory block address |
$2B0A (11018) |
Invalid environment |
$2B0B (11019) |
Invalid format |
$2B0C (11020) |
Invalid access code |
$2B0D (11021) |
Invalid data |
$2B0F (11023) |
Device does not exist |
$2B10 (11024) |
Attempt to remove current directory |
$2B11 (11025) |
Not same device |
$2B12 (11026) |
No more files |
$2B13 (11027) |
Invalid argument |
$2B14 (11028) |
Argument list is too long |
$2B15 (11029) |
Execution format error |
$2B16 (11030) |
Cross-device link |
$2B21 (11041) |
Math argument |
$2B22 (11042) |
Result is too large |
$2B23 (11043) |
File already exists |
$2B27 (11047) |
Unknown internal operating system error |
$2B32 (11058) |
Share violation |
$2B33 (11059) |
Lock violation |
$2B34 (11060) |
Critical DOS Error |
$2B35 (11061) |
Drive not ready |
$2B64 (11108) |
Not exact read/write |
$2B65 (11109) |
Operating system network error |
$2B66 (11110) |
Error from NOVELL file server |
$2B67 (11111) |
NOVELL server out of memory |
$2B68 (11112) |
Record already locked by this workstation |
$2B69 (11113) |
Record not locked |
$2C01 (11265) |
Network initialization failed |
$2C02 (11266) |
Network user limit exceeded |
$2C03 (11267) |
Wrong .NET file version |
$2C04 (11268) |
Cannot lock network file |
$2C05 (11269) |
Directory is not private |
$2C06 (11270) |
Directory is controlled by other .NET file |
$2C07 (11271) |
Unknown network error |
$2C08 (11272) |
Not initialized for accessing network files |
$2C09 (11273) |
SHARE not loaded. It is required to share local files |
$2C0A (11274) |
Not on a network. Not logged in or wrong network driver |
$2C0B (11275) |
Lost communication with SQL server |
$2C0D (11277) |
Cannot locate or connect to SQL server |
$2C0E (11278) |
Cannot locate or connect to network server |
$2D01 (11521) |
Optional parameter is required |
$2D02 (11522) |
Invalid optional parameter |
$2E01 (11777) |
obsolete |
$2E02 (11778) |
obsolete |
$2E03 (11779) |
Ambiguous use of ! (inclusion operator) |
$2E04 (11780) |
obsolete |
$2E05 (11781) |
obsolete |
$2E06 (11782) |
A SET operation cannot be included in its own grouping |
$2E07 (11783) |
Only numeric and date/time fields can be averaged |
$2E08 (11784) |
Invalid expression |
$2E09 (11785) |
Invalid OR expression |
$2E0A (11786) |
obsolete |
$2E0B (11787) |
bitmap |
$2E0C (11788) |
CALC expression cannot be used in INSERT, DELETE, CHANGETO and SET rows |
$2E0D (11789) |
Type error in CALC expression |
$2E0E (11790) |
CHANGETO can be used in only one query form at a time |
$2E0F (11791) |
Cannot modify CHANGED table |
$2E10 (11792) |
A field can contain only one CHANGETO expression |
$2E11 (11793) |
A field cannot contain more than one expression to be inserted |
$2E12 (11794) |
obsolete |
$2E13 (11795) |
CHANGETO must be followed by the new value for the field |
$2E14 (11796) |
Checkmark or CALC expressions cannot be used in FIND queries |
$2E15 (11797) |
Cannot perform operation on CHANGED table together with a CHANGETO query |
$2E16 (11798) |
chunk |
$2E17 (11799) |
More than 255 fields in ANSWER table |
$2E18 (11800) |
AS must be followed by the name for the field in the ANSWER table |
$2E19 (11801) |
DELETE can be used in only one query form at a time |
$2E1A (11802) |
Cannot perform operation on DELETED table together with a DELETE query |
$2E1B (11803) |
Cannot delete from the DELETED table |
$2E1C (11804) |
Example element is used in two fields with incompatible types or with a BLOB |
$2E1D (11805) |
Cannot use example elements in an OR expression |
$2E1E (11806) |
Expression in this field has the wrong type |
$2E1F (11807) |
Extra comma found |
$2E20 (11808) |
Extra OR found |
$2E21 (11809) |
One or more query rows do not contribute to the ANSWER |
$2E22 (11810) |
FIND can be used in only one query form at a time |
$2E23 (11811) |
FIND cannot be used with the ANSWER table |
$2E24 (11812) |
A row with GROUPBY must contain SET operations |
$2E25 (11813) |
GROUPBY can be used only in SET rows |
$2E26 (11814) |
Use only INSERT, DELETE, SET or FIND in leftmost column |
$2E27 (11815) |
Use only one INSERT, DELETE, SET or FIND per line |
$2E28 (11816) |
Syntax error in expression |
$2E29 (11817) |
INSERT can be used in only one query form at a time |
$2E2A (11818) |
Cannot perform operation on INSERTED table together with an INSERT query |
$2E2B (11819) |
INSERT, DELETE, CHANGETO and SET rows may not be checked |
$2E2C (11820) |
Field must contain an expression to insert (or be blank) |
$2E2D (11821) |
Cannot insert into the INSERTED table |
$2E2E (11822) |
Variable is an array and cannot be accessed |
$2E2F (11823) |
Label |
$2E30 (11824) |
Rows of example elements in CALC expression must be linked |
$2E31 (11825) |
Variable name is too long |
$2E32 (11826) |
Query may take a long time to process |
$2E33 (11827) |
Reserved word or one that can't be used as a variable name |
$2E34 (11828) |
Missing comma |
$2E35 (11829) |
Missing ) |
$2E36 (11830) |
Missing right quote |
$2E37 (11831) |
Cannot specify duplicate column names |
$2E38 (11832) |
Query has no checked fields |
$2E39 (11833) |
Example element has no defining occurrence |
$2E3A (11834) |
No grouping is defined for SET operation |
$2E3B (11835) |
Query makes no sense |
$2E3C (11836) |
Cannot use patterns in this context |
$2E3D (11837) |
Date does not exist |
$2E3E (11838) |
Variable has not been assigned a value |
$2E3F (11839) |
Invalid use of example element in summary expression |
$2E40 (11840) |
Incomplete query statement. Query only contains a SET definition |
$2E41 (11841) |
Example element with ! makes no sense in expression |
$2E42 (11842) |
Example element cannot be used more than twice with a ! query |
$2E43 (11843) |
Row cannot contain expression |
$2E44 (11844) |
obsolete |
$2E45 (11845) |
obsolete |
$2E46 (11846) |
No permission to insert or delete records |
$2E47 (11847) |
No permission to modify field |
$2E48 (11848) |
Field not found in table |
$2E49 (11849) |
Expecting a column separator in table header |
$2E4A (11850) |
Expecting a column separator in table |
$2E4B (11851) |
Expecting column name in table |
$2E4C (11852) |
Expecting table name |
$2E4D (11853) |
Expecting consistent number of columns in all rows of table |
$2E4E (11854) |
Cannot open table |
$2E4F (11855) |
Field appears more than once in table |
$2E50 (11856) |
This DELETE, CHANGE or INSERT query has no ANSWER |
$2E51 (11857) |
Query is not prepared. Properties unknown |
$2E52 (11858) |
DELETE rows cannot contain quantifier expression |
$2E53 (11859) |
Invalid expression in INSERT row |
$2E54 (11860) |
Invalid expression in INSERT row |
$2E55 (11861) |
Invalid expression in SET definition |
$2E56 (11862) |
row use |
$2E57 (11863) |
SET keyword expected |
$2E58 (11864) |
Ambiguous use of example element |
$2E59 (11865) |
obsolete |
$2E5A (11866) |
obsolete |
$2E5B (11867) |
Only numeric fields can be summed |
$2E5C (11868) |
Table is write protected |
$2E5D (11869) |
Token not found |
$2E5E (11870) |
Cannot use example element with ! more than once in a single row |
$2E5F (11871) |
Type mismatch in expression |
$2E60 (11872) |
Query appears to ask two unrelated questions |
$2E61 (11873) |
Unused SET row |
$2E62 (11874) |
INSERT, DELETE, FIND, and SET can be used only in the leftmost column |
$2E63 (11875) |
CHANGETO cannot be used with INSERT, DELETE, SET or FIND |
$2E64 (11876) |
Expression must be followed by an example element defined in a SET |
$2E65 (11877) |
Lock failure |
$2E66 (11878) |
Expression is too long |
$2E67 (11879) |
Refresh exception during query |
$2E68 (11880) |
Query canceled |
$2E69 (11881) |
Unexpected Database Engine error |
$2E6A (11882) |
Not enough memory to finish operation |
$2E6B (11883) |
Unexpected exception |
$2E6C (11884) |
Feature not implemented yet in query |
$2E6D (11885) |
Query format is not supported |
$2E6E (11886) |
Query string is empty |
$2E6F (11887) |
Attempted to prepare an empty query |
$2E70 (11888) |
Buffer too small to contain query string |
$2E71 (11889) |
Query was not previously parsed or prepared |
$2E72 (11890) |
Function called with bad query handle |
$2E73 (11891) |
QBE syntax error |
$2E74 (11892) |
Query extended syntax field count error |
$2E75 (11893) |
Field name in sort or field clause not found |
$2E76 (11894) |
Table name in sort or field clause not found |
$2E77 (11895) |
Operation is not supported on BLOB fields |
$2E78 (11896) |
General BLOB error |
$2E79 (11897) |
Query must be restarted |
$2E7A (11898) |
Unknown answer table type |
$2E96 (11926) |
Blob cannot be used as grouping field |
$2E97 (11927) |
Query properties have not been fetched |
$2E98 (11928) |
Answer table is of unsuitable type |
$2E99 (11929) |
Answer table is not yet supported under server alias |
$2E9A (11930) |
Non-null blob field required. Can't insert records |
$2E9B (11931) |
Unique index required to perform changeto |
$2E9C (11932) |
Unique index required to delete records |
$2E9D (11933) |
Update of table on the server failed |
$2E9E (11934) |
Can't process this query remotely |
$2E9F (11935) |
Unexpected end of command |
$2EA0 (11936) |
Parameter not set in query string |
$2EA1 (11937) |
Query string is too long |
$2EAA (11946) |
No such table or correlation name |
$2EAB (11947) |
Expression has ambiguous data type |
$2EAC (11948) |
Field in order by must be in result set |
$2EAD (11949) |
General parsing error |
$2EAE (11950) |
Record or field constraint failed |
$2EAF (11951) |
When GROUP BY exists, every simple field in projectors must be in GROUP BY |
$2EB0 (11952) |
User defined function is not defined |
$2EB1 (11953) |
Unknown error from User defined function |
$2EB2 (11954) |
Single row subquery produced more than one row |
$2EB3 (11955) |
Expressions in group by are not supported |
$2EB4 (11956) |
Queries on text or ascii tables is not supported |
$2EB5 (11957) |
ANSI join keywords USING and NATURAL are not supported in this release |
$2EB6 (11958) |
SELECT DISTINCT may not be used with UNION unless UNION ALL is used |
$2EB7 (11959) |
GROUP BY is required when both aggregate and non-aggregate fields are used in result set |
$2EB8 (11960) |
INSERT and UPDATE operations are not supported on autoincrement field type |
$2EB9 (11961) |
UPDATE on Primary Key of a Master Table may modify more than one record |
$2EBA (11962) |
Queries on MS ACCESS tables are not supported by local query engines |
$2EBB (11963) |
Preparation of field-level constraint failed |
$2EBC (11964) |
Preparation of field default failed |
$2EBD (11965) |
Preparation of record-level constraint failed |
$2EC4 (11972) |
Constraint Failed. Expression: |
$2F01 (12033) |
Interface mismatch. Engine version different |
$2F02 (12034) |
Index is out of date |
$2F03 (12035) |
Older version (see context) |
$2F04 (12036) |
.VAL file is out of date |
$2F05 (12037) |
BLOB file version is too old |
$2F06 (12038) |
Query and Engine DLLs are mismatched |
$2F07 (12039) |
Server is incompatible version |
$2F08 (12040) |
Higher table level required |
$3001 (12289) |
Capability not supported |
$3002 (12290) |
Not implemented yet |
$3003 (12291) |
SQL replicas not supported |
$3004 (12292) |
Non-blob column in table required to perform operation |
$3005 (12293) |
Multiple connections not supported |
$3006 (12294) |
Full dBASE expressions not supported |
$3101 (12545) |
Invalid database alias specification |
$3102 (12546) |
Unknown database type |
$3103 (12547) |
Corrupt system configuration file |
$3104 (12548) |
Network type unknown |
$3105 (12549) |
Not on the network |
$3106 (12550) |
Invalid configuration parameter |
$3201 (12801) |
Object implicitly dropped |
$3202 (12802) |
Object may be truncated |
$3203 (12803) |
Object implicitly modified |
$3204 (12804) |
Should field constraints be checked? |
$3205 (12805) |
Validity check field modified |
$3206 (12806) |
Table level changed |
$3207 (12807) |
Copy linked tables? |
$3209 (12809) |
Object implicitly truncated |
$320A (12810) |
Validity check will not be enforced |
$320B (12811) |
Multiple records found, but only one was expected |
$320C (12812) |
Field will be trimmed, cannot put master records into PROBLEM table |
$3301 (13057) |
File already exists |
$3302 (13058) |
BLOB has been modified |
$3303 (13059) |
General SQL error |
$3304 (13060) |
Table already exists |
$3305 (13061) |
Paradox 1.0 tables are not supported |
$3306 (13062) |
Update aborted |
$3401 (13313) |
Different sort order |
$3402 (13314) |
Directory in use by earlier version of Paradox |
$3403 (13315) |
Needs Paradox 3.5-compatible language driver |
$3501 (13569) |
Data Dictionary is corrupt |
$3502 (13570) |
Data Dictionary Info Blob corrupted |
$3503 (13571) |
Data Dictionary Schema is corrupt |
$3504 (13572) |
Attribute Type exists |
$3505 (13573) |
Invalid Object Type |
$3506 (13574) |
Invalid Relation Type |
$3507 (13575) |
View already exists |
$3508 (13576) |
No such View exists |
$3509 (13577) |
Invalid Record Constraint |
$350A (13578) |
Object is in a Logical DB |
$350B (13579) |
Dictionary already exists |
$350C (13580) |
Dictionary does not exist |
$350D (13581) |
Dictionary database does not exist |
$350E (13582) |
Dictionary info is out of date - needs Refresh |
$3510 (13584) |
Invalid Dictionary Name |
$3511 (13585) |
Dependent Objects exist |
$3512 (13586) |
Too many Relationships for this Object Type |
$3513 (13587) |
Relationships to the Object exist |
$3514 (13588) |
Dictionary Exchange File is corrupt |
$3515 (13589) |
Dictionary Exchange File Version mismatch |
$3516 (13590) |
Dictionary Object Type Mismatch |
$3517 (13591) |
Object exists in Target Dictionary |
$3518 (13592) |
Cannot access Data Dictionary |
$3519 (13593) |
Cannot create Data Dictionary |
$351A (13594) |
Cannot open Database |
$3E01 (15873) |
Wrong driver name |
$3E02 (15874) |
Wrong system version |
$3E03 (15875) |
Wrong driver version |
$3E04 (15876) |
Wrong driver type |
$3E05 (15877) |
Cannot load driver |
$3E06 (15878) |
Cannot load language driver |
$3E07 (15879) |
Vendor initialization failed |
$3E08 (15880) |
Your application is not enabled for use with this driver |
$3F01 (16129) |
Query By Example |
$3F02 (16130) |
SQL Generator |
$3F03 (16131) |
IDAPI |
$3F04 (16132) |
Lock Manager |
$3F05 (16133) |
SQL Driver |
$3F06 (16134) |
IDAPI Services |
$3F07 (16135) |
dBASE Driver |
$3F08 (16136) |
Dictionary Manager |
$3F0B (16139) |
Token |
$3F0D (16141) |
Table |
$3F0E (16142) |
Field |
$3F0F (16143) |
Image |
$3F10 (16144) |
User |
$3F11 (16145) |
File |
$3F12 (16146) |
Index |
$3F13 (16147) |
Directory |
$3F14 (16148) |
Key |
$3F15 (16149) |
Alias |
$3F16 (16150) |
Drive |
$3F17 (16151) |
Server error |
$3F18 (16152) |
Server message |
$3F19 (16153) |
Line Number |
$3F1A (16154) |
Capability |
$3F1B (16155) |
Dictionary |
$3F1D (16157) |
Object |
$3F1E (16158) |
Limit |
$3F1F (16159) |
Expression |
$3F70 (16240) |
WORK |
$3F71 (16241) |
PRIV |
$3F72 (16242) |
Records copied |
$3F73 (16243) |
Records appended |
$3F74 (16244) |
LineNo |
$3F75 (16245) |
Line |
$3F76 (16246) |
Reason |


protoMongo - MongoDB¶
The protobson package contains codecs for marshaling and unmarshalling common protobuf data structures to more user-friendly BSON documents and values.
Basic Usage¶
Lets start with a protobuf file. At Hogwarts School of Witchcraft and Wizardry, after
the SortingHat
service finishes sorting a new wizard, it seends a record to the
archives to be added to the school’s roster. The archives stores the student roster in
MongoDB, so they need to serialize the incoming protobuf message to BSON.
syntax = "proto3";
package proto_cereal_doc;
option go_package = "github.com/illuscio-dev/protoCereal-go/docs";
import "cereal_proto/decimal.proto";
import "cereal_proto/uuid.proto";
import "cereal_proto/raw_data.proto";
import "google/protobuf/wrappers.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
// The hogwarts houses.
enum Houses {
GRYFFINDOR = 0;
RAVENCLAW = 1;
HUFFLEPUFF = 2;
SLYTHERIN = 3;
}
// Information about a Wizard's wand.
message Wand {
string core = 1;
}
// Information about a Wizard's sword.
message Sword {
string metal = 2;
}
// Information about a Hogwarts wizard.
message Wizard {
// The name of the Wizard.
// @inject_tag: bson:"name"
string name = 1;
// A unique Identifier for the Wizard.
// @inject_tag: bson:"id"
cereal.UUID id = 2;
// The exact moment the Wizard was sorted.
// @inject_tag: bson:"sorted_at"
google.protobuf.Timestamp sorted_at = 3;
// The house this wizard belongs to.
// @inject_tag: bson:"hogwarts_house"
Houses hogwarts_house = 4;
// The current balance of the wizard's Gringott's account in Galleons.
// @inject_tag: bson:"gingotts_balance"
cereal.Decimal gingotts_balance = 5;
// Name of the Wizard's familiar. Nil if Wizard does not have a familiar.
// @inject_tag: bson:"familiar_name"
google.protobuf.StringValue familiar_name = 6;
// Image of the Wizard.
// @inject_tag: bson:"portrait"
cereal.RawData portrait = 7;
// The preferred weapon of this wizard.
// @inject_tag: bson:"weapon"
oneof weapon {
Wand wand = 8;
Sword sword = 9;
}
// An object the wizard is destined to obtain.
// @inject_tag: bson:"destined_object"
google.protobuf.Any destined_object = 10;
}
Note
We are injecting custom struct tags through protoc-go-inject-tag for more human-friendly bson keys.
Note
Hogwarts is a great place to work for code magicians! I highly recommend this overview of magical tech interviews to brush up on your skills prior to applying.
Back the problem at hand. Instantiating a new record in our Go code might look something like this:
// Parse account balance as galleon decimal.
gringottsBalance, err := primitive.ParseDecimal128("50625.56713")
if err != nil {
panic(fmt.Errorf("error parsing gringott's balance: %w", err))
}
// This student is destined to wield a sword, so pack that into an Any payload.
destinedSword := &docs.Sword{Metal: "Silver"}
destinedObject, err := anypb.New(destinedSword)
if err != nil {
panic(fmt.Errorf("error packing sword: %w", err))
}
// Create our wizard record.
wizard := &docs.Wizard{
Name: "Harry Potter",
Id: cereal.MustUUIDRandom(),
SortedAt: timestamppb.New(time.Now().UTC()),
HogwartsHouse: docs.Houses_GRYFFINDOR,
GingottsBalance: cereal.DecimalFromBson(gringottsBalance),
FamiliarName: &wrapperspb.StringValue{Value: "Hedwig"},
Portrait: &cereal.RawData{Data: []byte("some image bytes")},
Weapon: &docs.Wizard_Wand{
Wand: &docs.Wand{
Core: "Phoenix Feather",
},
},
DestinedObject: destinedObject,
}
To naively marshall this to BSON, we make the following incantation:
// Marshall to BSON binary.
encoded, err := bson.Marshal(wizard)
if err != nil {
panic(fmt.Errorf("error marshalling wizard: %w", err))
}
// Extract into a bson map so we can peer into the document's structure.
rawDocument := bson.M{}
err = bson.Unmarshal(encoded, rawDocument)
if err != nil {
panic(fmt.Errorf("error unmarshalling to bson.M: %w", err))
}
// Pretty print the document
_, _ = pretty.Println(rawDocument)
Note
I am using pretty here to do the printing.
Which gives us the following output:
primitive.M{
"id": primitive.M{
"value": primitive.Binary{
Subtype: 0x0,
Data: {0x46, 0xf3, 0x74, 0xc5, 0x14, 0x9f, 0x4c, 0x6a, 0x97, 0xad, 0xa7, 0xcd, 0xf3, 0x54, 0xb8, 0xa0},
},
},
"sorted_at": primitive.M{
"seconds": int64(1600743664),
"nanos": int32(229350000),
},
"hogwarts_house": int32(0),
"gingotts_balance": primitive.M{
"high": int64(3473964162562916352),
"low": int64(5062556713),
},
"weapon": primitive.M{
"wand": primitive.M{
"core": "Phoenix Feather",
},
},
"destined_object": primitive.M{
"typeurl": "type.googleapis.com/proto_cereal_doc.Sword",
"value": primitive.Binary{
Subtype: 0x0,
Data: {0x12, 0x6, 0x53, 0x69, 0x6c, 0x76, 0x65, 0x72},
},
},
"name": "Harry Potter",
"portrait": primitive.M{
"data": primitive.Binary{
Subtype: 0x0,
Data: {0x73, 0x6f, 0x6d, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73},
},
},
"familiar_name": primitive.M{
"value": "Hedwig",
},
}
There are a lot of issues with this document, most of which involve unnecessary nesting:
Since optional values are put into wrappers,
"familiar_name"
is an object with a"value"
sub-field, rather than a direct, nullable string value (what the protobuf data model actually represents).This also happens with
"portrait"
and"id"
fields, as both are just wrapper messages around abytes
field used to denote the kind of value these bytes represent. We don’t need this extra level of nesting in our db.BSON has native
bsontype.BinaryUUID
subtype for binary data, which is not being used on the"id"
field.The
"gingotts_balance"
field is encoded to a sub-document rather than a nativeprimitive.Decimal128
value.Likewise, the
"sorted_at"
field is not being encoded into aprimitive.DateTime
value, even though that is the datatypetimestamppb.Timestamp
represents.Because of the way oneof fields are implemented in Go, the
"weapon"
field has a nested"wand"
document. If we instead had adoc.Sword
message, we would have a nested"sword"
field.
"hogwarts_house"
is an inscrutable int value, making the document less friendly to human eyes when paging through the database directly.
"destined_object"
is serialized as a binary blob, rather than a sub-document with fields we can query and inspect.
The nesting makes reasoning about and querying our data structure more complicated than it needs to be.
Additionally, encoding this way has some unintuitive gotchas. The familiar’s name is
found at "familiar_name.value"
if it has one, but "familiar_name"
is the field
that is nulled if no familiar exists.
We COULD define some custom structs to transfer the data to before marshalling, but in addition to having to do a full copy of our data, this also adds an additional layer of data modeling we need to keep in sync for our project. That MAY be good for some larger projects, but it’s a headache for prototyping and rapid development.
BSON uses a registry to lookup type-based encoders and decoders when marshalling and unmarshalling structs. Let’s create a custom registry with ValueCodecs registered to handle these proto message types:
// Create a new BSON registry builder
registryBuilder := bson.NewRegistryBuilder()
// Hand it off to protobson to register our new codecs. We don't need to pass an
// options object if we just want the default options.
err = protobson.RegisterCerealCodecs(registryBuilder, nil)
if err != nil {
panic(fmt.Errorf("error building registry: %w", err))
}
// Build our registry
registry := registryBuilder.Build()
// marshall to bson bytes with our new registry.
encoded, err := bson.MarshalWithRegistry(registry, wizard)
if err != nil {
panic(fmt.Errorf("error marshalling with registry: %w", err))
}
// Extract into a bson map to see how this changed the document.
rawDocument := bson.M{}
err = bson.Unmarshal(encoded, rawDocument)
if err != nil {
panic(fmt.Errorf("error unmarshalling to bson.M: %w", err))
}
_, _ = pretty.Println(rawDocument)
Output:
primitive.M{
"name": "Harry Potter",
"id": primitive.Binary{
Subtype: 0x4,
Data: {0xf4, 0x10, 0x3, 0x6b, 0xa9, 0x67, 0x47, 0xeb, 0x95, 0xd2, 0x68, 0xa5, 0x61, 0x94, 0x53, 0x8a},
},
"sorted_at": primitive.DateTime(1600748732738),
"hogwarts_house": int32(0),
"gingotts_balance": primitive.Decimal128{h:0x3036000000000000, l:0x12dc07c29},
"familiar_name": "Hedwig",
"portrait": primitive.Binary{
Subtype: 0x80,
Data: {0x73, 0x6f, 0x6d, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73},
},
"weapon": primitive.M{
"wand": primitive.M{
"core": "Phoenix Feather",
},
},
"destined_object": primitive.M{
"pb_type": "type.googleapis.com/proto_cereal_doc.Sword",
"metal": "Silver",
},
}
This looks much better! "familiar_name"
has been extracted from it sub-document into
a plain string field (which it represents), the "id"
and "portrait"
fields are
no longer nested, and are of the correct binary subtype, the "sorted_at"
field
now contains a BSON primitive.DateTime
, and "gingotts_balance"
contains a native
primitive.Decimal128
. "destined_object"
is now a scrutable sub-document rather
than an opaque binary blob.
If we unmarshall the document, our data should re-populate into it’s protobuf message structure:
decoded := new(docs.Wizard)
err = bson.UnmarshalWithRegistry(registry, encoded, decoded)
if err != nil {
panic(fmt.Errorf("error unmarshalling to struct: %w", err))
}
BUT, we get an error! 🐞
panic: error unmarshalling to struct: error decoding key weapon: no decoder found for docs.isWizard_Weapon
Uh oh! The oneof Weapon weapon
field is not being decoded properly. There is a way
to fix that! We’ll come back to it in a moment.
Default Codecs¶
Registering the default options adds codecs that convert between the following protobuf and BSON types:
Proto Type |
BSON Type |
Binary Subtype |
|---|---|---|
*wrapperspb.BoolValue |
boolean |
|
*wrapperspb.BytesValue |
primitive.Binary |
bsontype.BinaryGeneric |
*wrapperspb.FloatValue |
double |
|
*wrapperspb.DoubleValue |
double |
|
*wrapperspb.Int32Value |
int32 |
|
*wrapperspb.Int64Value |
int32 / int64 |
|
*wrapperspb.StringValue |
string |
|
*wrapperspb.UInt32Value |
int32 / int64 |
|
*wrapperspb.UInt64Value |
int32 / int64 |
|
*anypb.Any |
bsontype.EmbeddedDocument |
|
*timestamppb.Timestamp |
primitive.DateTime |
|
*cereal.Decimal |
primitive.Decimal128 |
|
*cereal.RawData |
primitive.Binary, |
bsontype.BinaryUserDefined |
*cereal.UUID |
primitive.Binary, |
bsontype.UUID |
Note
The above packages wrappers
, timestamppb
, and anypb
are all from the
Go implementation of google’s
well known types
protobuf definitions.
Note
All above codecs also support null values which encode from nil pointers to
bsontype.Null
and vice-versa.
Warning
BSON only has int32 and int64 values. uint values which overflow an int64 will result in a marshalling error.
Likewise, bson only allows for double-precision floats, so errors may occur from constant round-tripping of single precision floating-point values.
Any Fields¶
*anypb.Any
fields are encoded by adding the type url as a field to an embedded
document created from the payload.
Because of implementation details, the internal payload must be serialized,
de-serialized, then serialized again to add the type url. There may be performance
implications for large messages stored in an *anypb.Any
field.
Oneof Fields¶
We still have to resolve the error caused by our oneof field. Under the hood, oneof values are represented by a shared interface that a wrapper struct for each possible value implements.
In our case, the interface is docs.isWizard_Weapon
. BSON has no idea what to do when
asked to decode into a literal interface, so we need to register a codec for it.
Auto-Generation¶
Luckily, with protoCereal creating a codec for oneof fields is easy as:
// Create a new registry builder
registryBuilder := bson.NewRegistryBuilder()
// Create new options object
cerealOpts := protobson.NewMongoOpts().
// passing one or more message types to this option automatically finds and
// creates codecs for all oneof fields they contain.
WithOneOfFields(new(docs.Wizard))
// Hand it off to protobson to register our new codecs.
err = protobson.RegisterCerealCodecs(registryBuilder, cerealOpts)
if err != nil {
panic(fmt.Errorf("error building registry: %w", err))
}
// Build our registry
registry := registryBuilder.Build()
Now when we marshal the document, we get:
primitive.M{
...
"weapon": primitive.M{
"pb_type": "proto_cereal_doc.Wand",
"core": "Phoenix Feather",
},
...
}
Unmarshalling the document to a struct now works correctly as well.
Note
Oneof codecs must be able to generate a 1-1 relationship between the encoded BSON
type and it’s decoded protobuf counterpart. Codec creation will fail if a oneof field
contains two types that both map to the same BSON type. For instance if a oneof
contains more than one of either float
, double
, wrappers.FloatValue
,
or wrappers.DoubleValue
, the codec builder will panic while calling the
protobson.MongoOpts.WithOneOfFields
setting.
We panic because it is ambiguous as to what sort of value we should decode the raw
bsontype.Double
to when encountering it in a document.
The exception is messages values which encode to bsontype.EmbeddedDocument
, for
which we can inject the protobuf type name to aid in correct type-resolution on the
way out, much like we do for anypb.Any
.
Oneof interfaces that have multiple entries which encode to the same BSON type are currently outside the scope of this library, and will need to have hand-written codecs created for them.
Warning
In the above example, the message type is encoded in the added "pb_type"
field.
This occurs when a oneof field has two possible types that both encode to embedded
documents. If there is only one type the encodes to an embedded document, the type
information is omitted.
Because of certain implementation constraints, adding this type information requires encoding the object, decoding it, and encoding it again with the added field, which may have performance implications for large data structures.
Custom BSON Mapping¶
It may be the case that protoCereal cannot deduce correctly what a oneof wrapper type will encode to / decode from when round-tripping through BSON. We can supply our own inner value type mapping in these cases.
Lets say we have the following protobuf file:
import "cereal_proto/decimal.proto";
message DecimalList {
// @inject_tag: bson:"value"
repeated cereal.Decimal value = 1;
}
message HasCustomOneOf {
// @inject_tag: bson:"many"
oneof many {
cereal.Decimal decimal_value = 1;
string string_value = 2;
DecimalList decimal_list = 3;
}
}
We have registered DecimalList
as a custom wrapper type (see
Custom Wrapper Types):
cerealOpts := protobson.
NewMongoOpts().
WithCustomWrappers(
new(messagesCereal_test.DecimalList),
).
WithOneOfFields(new(messagesCereal_test.HasCustomOneOf))
When protoCereal attempts to encode the decimal_list
subfield of the many
oneof, it will not realize that messagesCereal_test.DecimalList
will encode
to an array of decimal values, rather than an embedded document.
We can signal that this will be the case like so:
cerealOpts := protobson.
NewMongoOpts().
WithCustomWrappers(
new(messagesCereal_test.DecimalList),
).
WithOneOfElementMapping(
new(messagesCereal_test.DecimalList),
bsontype.Array,
0x0,
).
WithOneOfFields(new(messagesCereal_test.HasCustomOneOf))
Now protoCereal knows that to interpret arrays as *messagesCereal_test.DecimalList
so whenever a oneof wrapper is wrapping this type, the correct mapping will be used.
Enums¶
We may want to store enums as their string representation in our database for more
human-friendly documents. By default, proto enums are encoded to BSON as
bsontype.Int32
. However, we can change that with the following option:
// Create a new options object
cerealOpts := protobson.NewMongoOpts().
// Enable conversion of enums into strings for all enum types
WithEnumStrings(true)
Now when we encode our document, we get:
primitive.M{
...
"hogwarts_house": "GRYFFINDOR",
...
}
Important
This option turns on string conversion for ALL proto enum types. protoCereal currently does not support the selective conversion of enum types, but such a feature could be added if there is interest!
Custom Wrapper Types¶
Google uses wrapper types from it’s wrappers from it’s Well Known Types package package to represent nillable values. Using the default options, protoCereal will register all of the wrapper types from google’s Well Known Types into the codec registry.
You can register custom wrapper types as well. For instance, google does not have a defined wrapper for a fixed64 value, we can define one like so:
// Wrapper for fixed int64.
message Fixed64Value {
fixed64 value= 1;
}
Register the message as a wrapper type like so:
// Create a registry builder
registryBuilder := bsoncodec.NewRegistryBuilder()
// Pass an empty proto message to the WithCustomWrappers option to add it's type
// as a wrapper type.
opts := protobson.NewMongoOpts().
WithCustomWrappers(new(docsProto.Fixed64Value))
// Register protoCereal BSON codecs with the registry.
err := protobson.RegisterCerealCodecs(registryBuilder, opts)
if err != nil {
panic(fmt.Errorf("error adding to registry: %w", err))
}
// Build the registry
registry := registryBuilder.Build()
Now we can use it while serializing a struct to extract the inner value directly into the key holding our wrapper:
type hasWrapper struct {
Info *docsProto.Fixed64Value
}
message := &hasWrapper{
Info: &docsProto.Fixed64Value{Value: 123456789},
}
serialized, err := bson.MarshalWithRegistry(registry, message)
if err != nil {
panic(fmt.Errorf("error serializing message: %w", err))
}
document := bson.M{}
err = bson.UnmarshalWithRegistry(registry, serialized, document)
if err != nil {
panic(fmt.Errorf("error umarshalling to BSON document: %w", err))
}
fmt.Println("BSON DOCUMENT:", document)
unmarshalled := new(hasWrapper)
err = bson.UnmarshalWithRegistry(registry, serialized, unmarshalled)
if err != nil {
panic(fmt.Errorf("error unmarhalling to struct: %w", err))
}
fmt.Printf("\nUNMARSHALLED: %+v\n", unmarshalled)
Output:
BSON DOCUMENT: map[info:123456789]
UNMARSHALLED: &{Info:value:123456789}
A wrapper type must:
Be a pointer to a struct.
Implement the
proto.Message
interface.Contain only one public field.
This field must not be an embedded field.
The codec will serialize a bsontype.Null
value if the wrapper message is a nil
pointer.